Biologie | Chimie | Didactica | Fizica | Geografie | Informatica | |
Istorie | Literatura | Matematica | Psihologie |
INTRODUCERE IN C++
C++ este un limbaj de program are dezvoltat de dr. Bjarne Stroustrup in laboratoareAT&TBell care are la baza limbajul de programare C la care a adaugat orientarea pe obiecte si alte facilitati. Se poate considera limbajul C++ ca pe un supraset al lui C, deoarece C++ accepta caracteristicile limbajului de programare C. C++ este mai mult decat 'un C orientat pe obiecte' - C++ adauga, de fapt, multe noi caracteristici care sporesc capacitatile programelor . Daca se utilizeaza un compilator de C++ (cum este Turbo C++ Lite), majoritatea programelor vor fi compilate si executate cu succes, fara a fi necesare modificari.
Cum difera fisierele sursa din C++
In general, nu exista diferente intre fisierele sursa din C si C++. Ambele limbaje accepta pe deplin
directivele de compilator , cum ar fi #include si #define. In ceea ce priveste denumirea, multi programatori utilizeaza extensia CPP pentru a diferentia fisierele sursa C++ de fisierele sursa in C. Tot ceea ce se aplica la crearea programelor in C seaplica si la crearea programelor in C++, cu exceptia unor structuri si constante unice. Adica, se poate include in C++ fisierele antet, bibliotecile de legaturi ale codului obiect si asa mai departe.
Rolul lui C++ sau al oricarui alt limbaj de programare este de a permite unui programator sa scrie instructiuni pentru un calculator. Deseori , o sarcina este prea complexa pentru o singura instructiune. In schimb, sunt necesare mai multe instructiuni conexe.
O functie este un grup de instructiuni conexe, care impreuna realizeaza o anumita sarcina.
Numele functiei este modul in care se face referire la aceste instructiuni conexe. In cadrul programului 'Hello, World!', main este numele unei functii. Un program poate avea mai multe functii .Totusi , un program trebuie sa aiba o functie principala (main) si numai una. Motivul este ca functia principala este punctul de p ornire pentru fiecare program C++. Daca nu ar exista o functie principala , calculatorul nu ar sti de unde incepe programul. Daca ar fi fost mai multe functii principale, programul nu ar sti cu care dintre ele sa inceapa.
NOTA: Functia principala este precedata de int ,si urmata de cuvintul void, scris intre
paranteze.
Corpul functiei
Fiecare dintre instructiunile conexe care apartin functiei principale este inclusa in corpul functiei
respective. Un corp de functie incepe cu o paranteza acolada de deschidere .
De obicei , fiecare instructiune se incheie cu un punct si virgula. Functia principala are doua instructiuni:
cout « "Salut Lume!";
return 0;
Instructiunile se executa in ordine, de sus in jos.
cout se pronunta 'ce-aut'. Cuvantul 'aut' (sau 'out' in limba engleza) se refera la directia in care cout trimite un flux de date.
Un flux de date poate fi orientat intr-o directie din doua .O directie este intrarea - in program dintr-o sursa exterioara, precum un fisier sau o intrare realizata de utilizator de la tastatura. Cealalta directie este iesirea - de la program spre o sursa exterioara , precum un monitor , o imprimanta sau un fisier. Cout se refera la fluxul de iesire. Acesta trimite informatii dispozitivului de iesire standard. De regula, dispozitivul de iesire standard este monitorul desi poate fi si altceva, precum o imprimanta sau un fisier de pe hard-disc .
Simbolul« care urmeaza dupa cout este un operator. S-au mai folosit operatori si inainte, precum operatorii aritmetici +, -,* si / pentru adunare, scadere, inmultire si impartire .
Operatorul « este cunoscut sub numele de operator de introducere in flux. Acesta introduce informatiile situate imediat in dreapta sa - in acest exemplu, textul 'Hello, WorId!' in fluxul de date. Apoi , obiectul cout trimite informatiile respective direct la dispozitivul standard de iesire in acest caz, monitorul.
Instructiunea return 0
Instructiunea a doua si ultima returneaza o valoare zero catre sistemul de operare al calculatorului, indiferent daca este Windows, UNIX sau altul. Aceasta indica sistemului de operare ca programul s-a incheiat normal. Uneori , programe1e nu se incheie normal, ci se blocheaza , cum ar fi, de exemplu, epuizarea memoriei in timpul executiei programului.
Sistemul de operare poate fi obligat sa trateze aceasta terminare anormaIa a programului in mod diferit fata de o terminare normala. De aceea programul indica sistemului de operare ca, de data aceasta, s-a incheiat normal.
Programul C++ ,,stie' sa inceapa cu functia principala deoarece aceasta face parte din esenta limbajului C++. Sigur n-am scris nici o linie de program care sa indice programului C++ sa inceapa cu functia principala.
Similar, programul C++ pare sa stie ca obiectul cout, in conjunctie cu operatorul de insertie a fluxului «, scrie informatiile la monitor. N-am scris nici un cod pentru ca obiectul cout si operatorul « sa obtina acest rezultat.
Totusi, obiectul cout nu face parte din esenta limbajului C++, ci este definit altundeva, intr-un fisier biblioteca standard. C++ are un numar de fisiere de biblioteca standard, fiecare definind obiecte folosite in mod frecvent.
Desi C++ a implementat deja obiectul cout intr-o biblioteca standard, tot trebuie cerut programului sa includa acel fisier biblioteca standard in aplicatie . Pentru aceasta se foloseste directiva #include, urmata de numele fisierului biblioteca. Daca fisierul de biblioteca este un fisier de biblioteca standard, nu unul scris de utilizator , atunci numele fisierului este inclus intre paranteze unghiulare, < si >.
Obiectul cout este definit in fisierul biblioteca standard iostream. 'io' din iostream se refera la intrare (input) si iesire (output), iar 'stream' (flux) se refera la un flux de date.
Conversia codului pentru calculator
Desi utilizatorul intelege codul 'Hello World', calculatorul nu-l intelege. Calculatoarele nu inteleg C++ sau alte limbaje de programare. Ele inteleg numai limbajul masina.
Pentru conversia codului sursa intr-un fisier executabil pe care un calculator il poate
rula se folosesc trei programe. Acestea sunt, in ordinea aparitiei:
1. Preprocesor
2. Compilator
3. Program de legare
Preprocesor
Preprocesorul este un program care scaneaza programul sursa in cautarea directivelor preprocesor, precum directivele de tip inc1ude. Preprocesorul introduce in codul sursa toate fisierele specificate de directivele include.
Compilator
Compilatorul este un alt program care converteste codul sursa preprocesat (codul sursa dupa insertiile efectuate de preprocesor) in instructiuni corespunzatoare in limbaj masina, care sunt stocate intr-un fisier separat, denumit fisier obiect, cu extensia .obj. Compilatoarele difera de la un limbaj de programare la celalalt, dar in esenta rolul unui compilator este acelasi, de a converti un limbaj de
programare in limbaj masina, indiferent de limbajul de programare folosit.
Program de legare
Desi fisierul obiect contine instructiuni in limbaj masina, calculatorul nu poate rula fisierul obiect ca pe un program. Motivul este ca C++ trebuie sa foloseasca o alta biblioteca de cod, denumita biblioteca run-time (bibliotedi de rulare), pentru operatii comune, precum conversia datelor introduse de la
tastatura sau capacitatea de a interaetiona cu echipamente externe, precum monitorul, pentru afisarea unui mesaj.
Declararea de variabile .
Declararea unei variabile nu doar ca rezerva memorie, dar ofera o modalitate convenabila de a face referire la memoria rezervata respectiva .
Prin declararea unei variabile,se poate facereferire la memoria rezervata in functie de numele variabilei , care este mult mai usor de retinut si de identificat cu informatia stocata decat cu adresa hexazecimala . Trebuie sa se declare o variabila inainte de a o putea folosi. Declararea unei variabile implica sintaxa urmatoare:
[tip de date] [nume variabila] ;
Tipul de date poate fi oricare, adica int, float, bool, char sau string. Tipul de date spune calculatorului cata memorie trebuie sa rezerve. Diferitele tipuri de date au dimensiuni (exprimate in octeti) diferite.
In final, declaratia variabilei se incheie cu punct si virgula (;). Acest caracter arata compilatorului ca instructiunea s-a incheiat. Se poate declara o variabila fie in interiorul unei functii, precum main, fie inaintea tuturor functiilor, adica imediat dupa directivele include.
Operatorul de atribuire
Operatorul de atribuire se foloseste pentru a asocia o valoare unei variabile. Sintaxa este
[nume variabila] = [valoare];
Operatorul de atribuire arata ca semnul egal. Totusi, in C++ semnul = nu este folosit pentru testarea egalitatii, ci pentru atribuire.In C++ semnul egal este = =, denumit si operatorul de egalitate.
Variabila trebuie declarata fie inainte de a-i asocia o valoare, fie atunci cand ii asociati
valoarea, nu dupa.
Exemplu :
int punctajTest;
punctajTest = 95;
Valoarea asociata nu trebuie sa fie o valoare literala, ca 95. Codul urmator atribuie unei variabile intregi valoarea unei alte variabile intregi.
int a, b;
a = 44;
b = a;
Asocierea se produce in doi pasi:
. Mai intai, valoarea 44 este atribuita variabilei a.
. Apoi, valoarea lui a, care este acum 44, este atribuita variabilei b.
Operatori aritmetici
Un operator este un simbol care reprezinta 0 anumita actiune . C++ mai accepta si operatori pentru operatii aritmetice, inclusiv adunare, scadere, inmultire si impartire. Operatorii folositi pentru operatii aritmetice se numesc, destul de evident, operatori aritmetici.
Operatorul %, cunoscut si sub numele de operator modulo, ar putea parea necunoscut.
Acesta retumeaza restul impartirii .Operatorii aritmetici sunt operatori binari deoarece lucreaza cu doi operanzi, cuvantul binar fiind 0 referire la 2, iar prin operand intelegandu-se fiecare dintre cele doua valori care se afla intr-o expresie aritmetica.
Un program poate avea nevoie sa determine daca o valoare este egaIa, mai mare sau mai mica decat o alta valoare.
Programele compara valori folosind un operator relational. Tabelul urmator enumera operatorii relationali acceptati de C++.
> Mai mare
< Mai mic
>= Mai mare san egal
<= Mai mic san egal
-- Egal
!= Diferit
Instructiunea if
Instructiunea if se foloseste pentru a executa cod numai cand valoarea unei expresii relationale este adevarata. Sintaxa unei instructiuni if este :
if (valoare booleeana)
instructiune;
Ansamblul celor doua linii se numeste instructiunea if. Prima linie consta din cuvantul-cheie si nu trebuie sa se incheie cu un caracter punct si virgula. Linia urmatoare se numeste instructiune conditionala. O instructiune este o comanda data calculatorului de a executa o anumita operatie.
Instructiunea este conditionala fiindca se executa numai daca valoarea expresiei relationale este adevarata. Daca valoarea expresiei relation ale este falsa, atunci instructiunea conditionala nu este executata - ceea ce inseamna ca este omisa.
Programul urmator, care testeaza daca un numar intreg introdus de utilizator este par, ilustreaza utilizarea unei instructiuni if·
#include <iostream>
using namespace std;
int main(void)
Acelasi program, dar care foloseste bucla while, ar putea fi
#include <iastream>
using namespace std;
int main(vaid)
return 0;
Bucle while .
La bucla while, variabila intreaga num trebuia declarata si initializata inainte de bucla, deoarece aceasta operatie nu se poate face in interiorul parantezelor care urmeaza dupa cuvantul-cheie while. Mai mult, num a fost actualizata in interiorul codului buclei, folosind operatorul de incrementare. Aceasta actualizare se mai poate face si in interiorul parantezelor care urmeaza dupa cuvantul-cheie while.
Daca mai mult de o instructiune apartine buclei while, atunci instructiunile trebuie delimitate intre paranteze acolade. Acesta este motivul pentru care, in programul·care scrie numerele cuprinse intre 1 si 10 folosind bucla while, cele doua instruetiuni din corpul buc1ei while sunt inc1use intre paranteze acolade.
while (num <= 10)
Bucle do while.
do while (conditie);
Bucla incepe de la cuvantul-cheie do. Instructiunea sau instructiunile care apartin buclei sunt incluse intre paranteze acolade. Dupa paranteza acolada de inchidere, apare cuvantul cheie while, urmat de conditia intre paranteze, urmate de un caracter punct si virgula.
Functii
O functie este un grup de instructiuni care, impreuna, executa o operatie. Pana acum, programele noastre au avut o singura funqie, si anume main. De asemenea, uneori am folosit functii definite intr-o anumita biblioteca, precum functia pow din biblioteca cmath, folosita pentm a ridica un numar la o anumita putere.
Nici un program nu are nevoie de mai multe functii main. Totusi, cand se scriu programe complexe si sofisticate, s-ar putea sa descoperiti ca functia main devine extrem de lunga. Nici la compilare si nici la rulare nu conteaza daca functia main este scurta sau lunga. Totusi, acest amanunt ar trebui sa fie
important. 0 functie main care se intinde pe pagini intregi este dificil de inteles sau de reparat, daca apar probleme.
Definirea si apelarea unei functii
Implementarea oricarei functii in afara functiei main implica doua etape:
1. Definirea functiei.
2. Apelarea functiei.
Terminologia unei functii .
Antetul functiei consta dintr-un tip de date returnat, un nume al functiei si o lista cu argumente. Tipul de date int care precede cuvantul main este tipul de date returnat, main este numele functiei, iar parantezele, care in acest exemplu nu contin nimic (dar acest lucru nu se intampla intotdeauna) contin lista cu argumente.
Un antet de functie este intotdeauna urmat de 0 paranteza acolada de deschidere, care incepe corpul functiei. Corpul functiei se incheie cu o paranteza acolada de inchidere. Intre paranteza de deschidere care incepe corpul funqiei si paranteza de inchidere care il incheie mai pot exista si alte paranteze acolade, de exemplu pentru a delimita instructiuni multiple care apartin unei instructiuni sau bucle if.
Corpul functiei consta din una sau mai multe instructiuni. Ultima instructiune, return 0, este o instructiune de revenire. Corpul functiei trebuie sa contina o instructiune de revenire, in afara situatiei cand tipul de date returnat este void, in care caz instruqiunea de revenire este optionala.
Impreuna, antetul si corpul unei functii poarta numele de definitia functiei. 0 functie nu se poate executa decat daca este definita in prealabil. Odata definita, ofunctie se executa atunci cand este apelata.
In mod normal, 0 functie se apeleaza prin cod. Functia main este exceptia. Functia main este apelata automat cand programul dumneavoastra incepe sa ruleze.
Variabile globale
O variabila poate fi globala, in loc de locala. Termenul global inseamna ca variabila are vizibilitate pe intreg parcursul programului. Deoarece variabila are vizibilitate pe intreg parcursul programului, durata sa de viata nu se incheie decat la incheierea programului.
Pentru a face o variabila globala, aceasta trebuie declarata inaintea tuturor declaratiilor de functii, in general alaturi de prototipurile functiilor. Programul urmator face o singura modificare fata de precedentul. Declaratia variabilei ori este mutata din interiorul functiei main deasupra acesteia, transformand-o intr-o variabila globala.
#include <iostream>
using namespace std;
void afiseazaMesaj(void);
int ori;
int main ()
return 0;
Aceasta tehnica este o optiune logica atunci cand fiecare element al tabloului este distinct de celalalt, precum o nota separata la fiecare test. Totusi, uneori exista o relatie intre elementele unui tablou, precum un tablou de caractere reprezentand numele unei persoane.
Exista diferente importante intre tablourile de caractere si tablourile cu tipuri de date numerice. O alta diferenta este capacitatea de a folosi obiectul cin si operatorul de extractie din flux » pentru a atribui o valoare tuturor elementelor unui tablou de caractere, respectiv obiectul cout si operatorul de introducere in flux « pentru a afisa valorile tuturor elementelor unui tablou de caractere. Acest lucru este demonstrat de urmatorul program:
#include <iostream>
using names pace std;
int main ()
cout « "lntroduceti numele dumneavoastra: ";
cin » nume_singular;
cout « "Numele dumneavoastra este " « nume_singular;
return 0;
Nu folositi obiectul cin cu tablourile de caractere!
Daca obieetul cout si operatorul de insertie in flux « se pot folosi cu tablourile nume si cu cele de caractere (desi cu rezultate diferite), operatorul cin si operatorul de extractie din flux » se pot folosi numai cu un tablou de caractere. Nu puteti folosi obieetul cin si operatorul de extractie din flux » cu tablouri numerice.
Functia getline a obiectului cin
Programul urmator foloseste functia getline pentru a citi datele introduse de utilizator si pentru a asocia datele de intrare respective tabloului de caractere:
#include <iostream>
using namespace std;
int main ()
cout « "lntroduceti numele dumneavoastra: ";
cin.getline(nume_singular, 80);
cout « "Numele dumneavoastra este " « nume_singular;
return 0;
Nu puteti folosi functiile get sau getline ale obiectului cin cu siruri. In schimb, puteti folosi functia autonoma getline. Prin autonom se Intelege faptul ca functia getline nu este apelata fiind precedata de cin si de un punct (cin.getline) ca in cazul tablourilor de caractere.
Urmatorul fragment de cod indica modul de utilizare a funetiei getline cu un sir:
string nume_singular;
getline(cin, nume_singular);
Functii utile pentru siruri de tip C si C++
Biblioteca standard cstring pune la dispozitie un numar de functii care sunt utile atunci cand se lucreaza cu tablouri de caractere care se incheie cu caracterul nul, respectiv cu siruri C. Biblioteca standard string furnizeaza un numar de functii care sunt utile atunci cand se lucreaza cu clasa sir din C++.
Determinarea lungimii unui sir
Pentru determinarea lungimii unui sir C se foloseste functia strlen. Aceasta functie preia un singur argument, care poate fi un tablou de caractere, un pointer spre un tablou de caractere sau un sir literal. Functia returneaza un intreg reprezentand numarul de caractere, dar fara a include caracterul nul. Urmatorul fragment de cod ilustreaza utilizarea functiei
void main ( )
Functia strlen este utila mai ales la determinarea lungimii unui tablou de caractere.
Atribuirea unei valori unui sir
Nu puteti atribui unui sir C valoarea unui alt sir de acelasi tip fara un operator de atribuire. In schimb, puteti folosi functia strcpy pentru a atribui valoarea unui sir C (sirul sursa) unui alt sir C (sirul tinta). Functia strcpy preia doua argumente. Primul argument, sirul tinta, este un pointer spre un tablou de caractere. Acest argument nu poate fi un literal de tip ir deoarece i se atribuie o valoare. Al doilea argument, sirul sursa, poate fi un tablou de caractere, un pointer spre un tablou de caractere sau un literal de tip sir.Urmatorul fragment de cod ilustreaza utilizarea funqiei strcpy:
char* tinta= 'Jeff Kent';
char sursa[80] = 'Micaela';
strcpy(tinta, sursa)
Cand folositi functa strcpy, trebuie sa fiti atent ca sirul C sursa sa nu fie mai mare decat siul C tinta.
Atasarea la sfarsitul unui sir
Functia strcpy suprascrie continutul sirului C tinta peste continutul sirului C sursa. Uneori nu doriti sa suprascrieti continutul sirului C tinta, ci sa adaugati (sau sa atasati) la continutul sau continutul sirului C sursa. In aceste conditii, folositi functia strcat, unde 'cat' este prescurtarea de la 'concatenare', care este un mod mai lung de a spune atasare.
Functia strcat, ca si funqia strcpy, preia doua argumente, si anume sirul C tinta, un pointer de tip variabila spre un tablou de caractere, si un sir C sursa, care poate fi un tablou de caractere, un pointer la un tablou de caractere sau un literal de tip sir.Urmatorul fragment de cod ilustreaza utilizarea functiei strcat:
char tinta[80] = 'Jeff';
char* sursa= ' Kent';
strcat(tinta, sursa);
cout « tinta; // scrie 'Jeff Kent'
Ca si la functia strcpy, cand se foloseste functia strcat trebuie sa va asigurati ca sirul sursa este suficient de mare pentru a permite adaugarea sirului C destinatie.
Compararea a doua siruri
Nu se poate folosi operatori relationali pentru a compara valoarea unui sir C cu a altuia In schimb, se poate folosi functia strcmp pentru a compara valorile a doua siruri C++.
Functia strcmp are doua argumente, cele doua siruri C de comparat. Aceasta functie retumeaza 0 daca cele doua siruri C sunt de valori egale. Functia strcmp returneaza o valoare negativa daca primul sir C este 'mai mic' decat al doilea, respectiv pozitiva daca primul sir este 'mai mare' decat al doilea. In acest context al comparatiei intre doua siruri C, a stabili daca un sir este mai mic sau mai mare decat
altul implica o comparatie a valorii ASCII a celor doua siruri, incepand de la primul caracter si continuand cu fiecare dintre caracterele care urmeaza pana la disparitia echilibruIui.
Concluzii
Limbajul C
Este un limbaj de programare popular, utilizat de multe ori pentru a scrie compilatoare si sisteme de operare. Aproape toate aplicatiile proiectate pentru a usura comunicatiile pe Internet sunt scrise in C. Intr-adevar, atit sistemul de operare UNIX (care este structura de baza a Internetului), cit si TCP/IP (suita de protocoale folosita pentru transportul datelor pe Internet) au fost dezvoltate in C. Nu este nici o exagerare sa spunem ca, daca limbajul C nu ar fi aparut, nu ar fi aparut nici Internetul, asa cum il stim acum.
C a fost de-a lungul anilor folosit pentru a crea toate tipurile de programe pentru o gama larga de platforme. Multe aplicatii Microsoft Windows au fost scrise in C. In mod asemanator, aproape toate utilitarele UNIX de baza sunt scrise in C.
Se poata adapta usor pe toate platformele.
Limbajul C are o legatura directa cu dezvoltarea Internetului. Majoritatea implementarilor moderne de TCP/IP sunt scrise in C, iar acest set de protocoale sta la baza transportului de date pe Internet. Mai mult, limbajul C a fost folosit la scrierea sistemului de operare UNIX, care a reprezentat, de multi ani, cel mai folosit sistem de operare in Internet.
Programele C pot fi portate pe numeroase platforme. Astfel, programele C disponibile pe Internet sunt aproape intotdeauna distribuite sub forma de sursa (cu alte cuvinte, ele sunt distribuite sub forma de text clar, intr-o forma inca necompilata). Aceasta permite utilizatorului sa-si compileze programul pentru propriul sistem de operare.
Limbajul C++
In ciuda acestor minunate caracteristici, C are anumite limitari. De exemplu, C nu este un limbaj orientat spre obiecte. Administrarea unor programe foarte mari in C (in care codul depaseste 100.000 de linii) poate fi foarte dificila. Din acest motiv, a fost creat C++. C++ isi are radacinile in C, insa functioneaza diferit.
C++ este o versiune orientata spre obiecte a limbajului de programare C, elaborata de Bjarne Stroustrup la inceputul anilor 1980 la Bell Laboratories si adoptata de mai multi producatori, printre care si Apple Computer si Sun Microsystems, Inc.
C++ este un limbaj de programare extrem de puternic, care a condus la schimbari radicale in ceea ce priveste modul de programare. C++ permite incapsularea functiilor complexe in entitati denumite obiecte. Aceste obiecte permit un control si o organizare mai usoara in cazul unor programe mari si complexe.
Bibliografie :
Totul despre C si C ++ - Manualul fundamental de programare in C si C ++
Dr . Kris Jamsa & Lars Klander ,Traducere : Eugen Dumitrescu , Editura Teora , 1999 - 2007
C++ fara mistere - Ghid pentru autodidacti
Jeff Kent , Traducere : Cora Radulian , Editura Rosetti Educational , 2007
Copyright © 2024 - Toate drepturile rezervate