Вы находитесь на странице: 1из 19

CUPRINS Introducere 1. Conceptul lingvistic al limbajului C++ 1.1. Nume de variabile 1.2. Tipuri i marimi de date 1.

3 constante 1.4. Declaraii 1.5. Operatori 1.5.1. Operatori aritmetici 1.5.2. Operatori relaionali si logici 1.5.3. Operatori de incrementare i decrementare 1.5.4 prioritile operaiilor 1.6. Masive 1.6.1 descrierea masivelor 1.6.2. Accesul la elementele masivului 1.6.3. Iniializarea masivelor 1.6.4. Exemple de prelucrare a masivelor 1.7 iruri de caractere 1.7.1. Masive de iruri 1.7.2. Funcii folosite la prelucrarea irurilor de caractere 2. Formularea problemei 3. Metoda matematic 4.textul programului in limbajul c++. 5. Descrierea instruciunilor utilizate n program 6. Schema bloc a programului: 7. Concluzie 8. Bibliografie INTRODUCERE. C++ este un limbaj de programare cu scop general. Dei a fost numit "limbaj de programare sistem", deoarece este util n scrierea sistemelor de operare, el a fost folosit la fel de bine n scrierea de programe importante ce trateaz probleme numerice, prelucrri de texte sau baze de date. C++ este un limbaj relativ "de nivel inferior". Aceast caracterizare nseamna pur i simplu c C++ opereaz cu aceeai clas de obiecte cu care lucreaz majoritatea calculatoarelor, i anume caractere, numere i adrese. Acestea pot fi combinate i prelucrate cu operatori aritmetici i logici implementai pe actualele calculatoare. C++ nu posed operaii pentru a prelucra direct obiecte compuse, cum ar fi iruri de caractere, mulimi, liste sau tablouri considerate ca un ntreg. Limbajul nu definete nici o alt facilitate de alocare de memorie n afar de definiiile statice i de lucrul cu stiva folosite de variabilele locale ale funciilor. n sfrit, limbajul C++ n sine nu are faciliti de intrare-ieire: nu exist instruciuni READ sau WRITE i nici metode de acces la fiiere, "cablate" n limbaj. Toate aceste mecanisme de nivel nalt trebuiesc fcute prin apeluri explicite de funcii. n mod similar, C++ ofer numai construcii directe, liniare de control al fluxului: teste, bucle, grupri, i subprograme, ns nu multiprogramare, operaii paralele, sincronizri. Cu toate ca absena acestor caracteristici ar prea o grav deficien, pstrarea limbajului la o dimensiune modest a adus beneficii reale. Deoarece C++ este relativ mic, el poate fi descris ntrun spaiu redus i nvat repede. Un compilator pentru C++ poate fi simplu i compact. Compilatoarele snt deasemenea uor de scris; folosind tehnologia curent, ne putem atepta la un timp de cteva luni pentru scrierea unui compilator nou i s avem surpriza ca 80% din codul noului compilator este comun cu cele existente. Aceasta determin marele grad de mobilitate a limbajului. Deoarece tipurile de date i structurile de control posedate de C++ snt suportate de
-1-

majoritatea calculatoarelor existente, biblioteca necesar execuiei [run - time] necesar pentru a implementa programele independente este minuscul. Desigur, fiecare implementare posed o bibliotec cuprinztoare i compatibil de funcii pentru a ndeplini funciile de I/O, a trata irurile i operaiile de alocare de memorie dar, deoarece se apeleaz numai explicit, poate fi evitat dac e nevoie, ea poate fi scris portabil chiar n C++. 1. CONCEPTUL LINGVISTIC AL LIMBAJULUI C++. 1.1. Nume de variabile. Exist unele restricii asupra numelor de constante i variabile. Numele snt alcatuite din litere i cifre; primul caracter trebuie s fie o liter. Liniua de subliniere "_" este considerat liter; ea este util n uurarea citirii numelor lungi de variabile. Literele mari i mici snt caractere distincte; practica tradiional n C++ folosete literele mici pentru nume de variabile i literele mari pentru constantele simbolice. Numai primele opt caractere ale unui nume intern snt semnificative, cu toate c se pot folosi mai multe. Pentru numele externe, de exemplu nume de funcii i de variabile externe, numrul de caractere poate s fie mai mic ca 8, deoarece numele externe snt folosite de diferite asambloare i ncrctoare. Mai mult, cuvinte cheie ca: if, else, int, etc snt rezervate: nu pot fi folosite ca nume de variabile. Natural, e nelept s alegem numele de variabile astfel nct s nsemne ceva, legat de scopul variabilei, i e neplcut s amestecm litere mari cu mici. 1.2. Tipuri i marimi de date. Exist numai cteva tipuri de date de baz n limbajul C++: "char" un singur octet, capabil s pstreze un caracter din setul local de caractere; "int" un ntreg, reflectnd tipic mrimea efectiv a ntregilor pe calculatorul gazd; "float" numr flotant n simpla precizie; "double" numr flotant n dubla precizie. n plus, exist un numr de calificatori care pot fi aplicai tipului "int": short, long i unsigned. short i long se refer la diferite mrimi de ntregi. Numerele unsigned se supun legilor aritmeticii modulo 2^n unde n este numrul de bii dintr-un int; ele snt ntotdeauna pozitive. Declaraiile pentru calificatori arat astfel: short int x; long int y; unsigned int z; Cuvntul int poate fi omis n astfel de situaii, ceea ce se i ntmpl de obicei. Precizia acestor obiecte depinde de calculatorul care le mnuiete. Tabelul urmtor d cteva valori reprezentative: Tipuri de date Char Int Short Long Float Double DEC PDP11 ASCII 8 bii 16 16 32 32 64 Honeywell 6000 ASCII 9 bii 36 36 36 36 72 IBM/370 EBCDIC 8 bii 32 16 32 32 64 Interdata 8/32 ASCII 8 bii 32 16 32 32 64

Intenia e c short i long s aib lungimi diferite de ntregi unde e practic; int reflect normal, cea mai "natural" lungime pentru un calculator. Aa cum putei vedea, fiecare compilator
-2-

este liber s interpreteze short i long n funcie de hardul pe care se execut. Ceea ce trebuie s notai este c short nu este niciodat mai lung dect long. 1.3 Constante. Constantele int i float au fost deja expuse; notm n plus c notaia uzual 123.456e-7 sau notaia tiinific 0.12E3 pentru numerele flotante sunt ambele legale. Orice constant flotant este considerat ca fiind de tipul double, aa c notaia "e" servete att pentru float ct i pentru double. Constantele lungi sunt scrise n stilul 123L. O constant ntreag normal care este prea lung pentru un int, este luat deasemenea ca fiind o constant long. Exist o notaie special pentru constantele octale i hexazecimale: un 0 (zero) la nceputul unei constante int nseamn octal; un 0x sau 0X la nceputul unei constante int nseamna hexazecimal. De exemplu, numrul zecimal 31 poate fi scris 037 n octal i 0x1f sau 0X1F n hexazecimal. Constantele octale i hexazecimale pot fi urmate de un L pentru a le face "long". O constant caracter este un caracter singur scris ntre ghilimele simple ca, de exemplu, 'x'. Valoarea unei constante caracter este valoarea numerica a caracterului n setul de caractere al calculatorului. De exemplu, n setul de caractere ASCII, caracterul zero, sau '0', are valoarea 48, iar n EBCDIC, 240, amndou valori fiind diferite de valoarea numeric 0. Scriind '0' n loc de o valoare numerica de tipul 48 sau 240, facem programul independent de o valoare particular. Constantele caracter particip n operaiile numerice la fel ca oricare alte numere, cu toate c cel mai adesea ele sunt folosite n comparri cu alte caractere. O seciune viitoare va trata toate regulile de conversie. Anumite caractere negrafice pot fi reprezentate constante caracter cu ajutorul secvenelor escape, de exemplu \n (linie nou), \t (tab), \0 (nul), \\ (backspace), \'(ghilimea simpla) etc, care arat ca dou caractere, dar de fapt sunt unul singur. n plus, se poate genera orice model de lungime un octet, scriind: '\ddd' unde 'ddd' reprezint 1 - 3 cifre octale, ca n #define FORMFEED '\014' /* ASCII formfeed */ Constanta caracacter '\0' reprezint caracterul ce are valoarea '\0' se scrie adesea n locul lui 0 pentru a accentua natura caracter a anumitor expresii. O expresie constant este o expresie care implic numai constante. Astfel de expresii sunt evaluate la compilare i nu la execuie i ele pot fi folosite n orice loc n care poate apare o constant, ca n: #define MAXLINE 1000 char line[MAXLINE+1]; sau seconds = 60 * 60 * hours; O constant ir este o secven compus din zero sau mai multe caractere ntre ghilimele duble, ca "I am a string" sau "" /* un sir nul */ Ghilimelele duble nu sunt parte a irului, ci servesc doar ca delimitatori. Aceleai secvene escape folosite pentru constantele caracter se aplic i la iruri; \" reprezint caracterul dubl ghilimea". Tehnic, un ir este un tablou ale crui elemente sunt caractere. Compilatorul plaseaz automat un caracter nul \0 la sfritul oricrui astfel de ir, astfel c programele pot determina lesne sfritul irului. Aceast reprezentare spune c nu exist o limit real pentru lungimea unui ir, dar programele trebuie s parcurg tot irul pentru a-i determina lungimea. Memoria fizic cerut este cu o locaie mai mult dect numrul de caractere scrise ntre ghilimele duble. Funcia urmtoare, strlen(s) returneaz lungimea unui ir de carctere s, exclusiv terminatorul \0. strlen(s) /* returneaza lungimea lui s */ char s[];
-3-

{ int i; i = 0; while (s[i] != '\0') ++i; return(i); } Trebuie distins ntre o constant caracter i un ir care conine un singur caracter: 'x' i "x" nu sunt acelai lucru. Primul este un caracter, folosit pentru a produce valoarea numeric a caracterului x din setul de caractere al calculatorului; al doilea este un ir de caractere care conine un singur caracter (litera x) i un \0. 1.4. Declaraii. Toate variabilele trebuie declarate nainte de a fi folosite, cu toate c anumite declaraii pot fi fcute implicit de context. O declaraie specific un tip i este urmat de o list de una sau mai multe variabile de acel tip, ca n exemplul de mai jos: int lower, upper, step; char c, line[1000]; Variabilele pot apare oricum printre declaraii. Lista de mai sus poate fi scris, n mod egal, i astfel: int lower; int upper; int step; char c; char line[1000]; Aceast ultim form ocup mai mult spaiu, dar este mai comod pentru a aduga cte un comentariu la fiecare declaraie sau pentru modificri ulterioare. Variabilele pot fi, deasemenea, iniializate n declaraia lor, cu toate c exist anumite restricii. Dac numele este urmat de un semn egal i de o constant, aceasta servete la iniializare, ca n: char backslash = '\\'; int i = 0; float eps = 1.0e-5; Dac variabila n chestiune este extern sau static, iniializarea este fcut o singur dat, conceptual nainte ca programul s-i nceap execuia. Variabilele automate iniializate explicit sunt iniializate la fiecare apel al funciei n care sunt continuie. Variabilele automate pentru care nu exist o iniializare explicit au valoare nedefinit (adic gunoi). Variabilele externe i statice se iniializeaz implicit cu zero, dar este un bun stil de programare acela de a declara iniializarea lor n orice caz. Vom discuta iniializrile mai departe pe masur ce se introduc noi tipuri de date. 1.5. Operatori. 1.5.1. Operatori aritmetici. Operatorii aritmetici binari sunt "+", "-", "*", "/" i operatorul modulo "%". Exist operatorul "-" unar, dar nu exist operatorul unar "+". mparirea ntregilor trunchiaz orice parte fracionara. Expresia x % y produce restul cnd x se mparte la y i deci este zero cnd mprirea este exact. De exemplu, un an este bisect dac este divizibil cu 4 i dac nu este divizibil cu 100, ns anii divizibili cu 400 sunt biseci. Deci: if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) it's a leap year
-4-

else it's not Operatorul % nu poate fi aplicat la float sau double. Operatorii + i - au aceeai pondere, care este mai mic dect ponderea (identic) a lui *, / i % care la rndul ei este mai mic dect ponderea operatorului unar -. Operatorii aritmetici se grupeaz de la stnga la dreapta (Tabela de la sfritul capitolului rezum ponderea i asociativitatea pentru toi operatorii). Ordinea de evaluare nu este specificat pentru operatorii asociativi i comutativi de tipul lui * i +. Compilatorul poate rearanja un calcul cu paranteze implicind unul din acetia. Astfel, a+(b+c) poate fi evaluat ca (a+b)+c. Acest lucru produce rar diferene, dar dac se cere o ordine particular, trebuie folosite explicit variabilele temporare. Aciunile care produc depairi superioare sau inferioare depind n ultima instan de calculator. 1.5.2. Operatori relaionali si logici. Operatorii relaionali sunt > >= < <=. Ei toi au aceai pondere. Sub ei n tabelul de ponderi se afl operatorii de egalitate == !=, care au o aceeai pondere. Operatorii relaionali au ponderea mai mic dect cei aritmetici, aa c expresii de tipul i < lim-1 se evalueaz ca i < (lim-1), aa cum ar fi de ateptat. Mai interesani sunt conectorii logici && i ||. Expresiile care-i conin sunt evaluate de la stnga la dreapta i evaluarea se oprete n clipa n care se cunoate adevrul sau falsul rezultatului. Aceste proprietai se dovedesc critice n scrierea programelor. De exemplu iat o bucl luat din funcia de intrare getline, pe care am scris-o n Capitolul 1: for (i=0; i< lim-1 && (c = getchar()) != '\n' && c != EOF; ++i) s[i] = c; n mod clar, nainte de a citi un nou caracter trebuie vzut dac mai exist loc pentru a-l depune n tabloul s, aa c testul i < lim-1 trebuie fcut n primul rnd. Nu numai att, dar dac testul eueaz, nu trebuie s mai citim un nou caracter. Similar, ar fi nepotrivit s testm dac c este EOF nainte de apelul lui getchar; apelul trebuie s aib loc nainte ca s testm caracterul c. Ponderea lui && este mai mare dect cea a lui || i amndoua sunt mai mici dect cele ale operatorilor relaionali i de egalitate, asa ca expresii de tipul: i < lim-1 && (c = getchar()) != '\n' && c != EOF nu mai au nevoie de paranteze suplimentare. Dar, deoarece ponderea lui != este mai mare dect cea a asignrii, este nevoie de paranteze n: (c = getchar()) != '\n' pentru a obine rezultatul dorit. Operatorul unar de negatie ! convertete un operand nonzero sau adevrat n zero i un operand zero sau fals n 1. O utilizare obinuit a lui ! este n construcii de tipul if (!inword) mai degrab dect if (inword == 0). 1.5.3. Operatori de incrementare i decrementare. Limbajul C++ ofer doi operatori neuzuali pentru incrementarea i decrementarea variabilelor. Operatorul de incrementare ++ adun 1 la operandul su; operatorul de decrementare -- scade 1. Am folosit frecvent ++ pentru a incrementa variabilele, de exemplu: if (c == '\n') ++nl; Aspectul neobinuit al lui ++ i al lui -- este acela c ei pot fi folosii att ca operatori prefix (naintea variabilei, ca n ++n) ct i ca operatori sufix (dup variabil, ca n n++). n ambele cazuri, efectul este incrementarea lui n. Dar expresia ++n l incrementeaz pe n nainte de a-i folosi valoarea, n timp ce expresia n++, l incrementeaz pe n dup ce a fost folosit valoarea lui.
-5-

Aceasta nseamn c ntr-un context n care valoarea este folosit, i nu numai efectul, ++n i n++ snt diferii. Dac n este 5, atunci: x = n++; l face pe x egal cu 5, dar: x = ++n; l face pe x egal cu 6. n ambele cazuri, n devine 6. Operatorii de incrementare i decrementare se pot aplica numai variabilelor. O expresie de tipul x = (i+j)++ este ilegala. ntr-un context n care valoarea nu este folosit, ci numai efectul de incrementare, ca n: if (c == '\n') nl++; alegei modul prefix sau sufix dup gustul dumneavoastr. Dar exist totui situaii n care unul sau altul este apelat dinadins. De exemplu, s considerm funcia squeeze(s,c) care elimin toate apariiile lui c din irul s: squeeze (s,c) /* terge toate apariiile lui c din s */ char s[]; int c; { int i, j; for (i = j = 0; s[i] != '\0'; i++) if (s[i] != c) s[j++] = s[i]; s[j] = '\0';} De fiecare dat cnd apare un caracter non-c el este copiat n poziia j curent i numai dup aceea j este incrementat pentru a fi gata pentru urmatorul caracter. Aceast construcie este echivalent cu urmatoarea: if (s[i] != c) {s[j] = s[i]; j++;} Un alt exemplu de construcie similar este luat din funcia getline n care putem nlocui: if (c == '\n' {s[i]=c; ++i;} cu mult mai compact construcie este: if (c == '\n') s[i++] = c; Ca un al treilea exemplu funcia strcat(s,t) care concateneaz irul t la sfritul irului s. strcat presupune c exist suficient spaiu n s pentru a pastra combinaia. strcat (s,t) /* concateneaz pe t la sfritul lui s */ char s[], t[]; /* s trebuie s fie suficient de mare */ {int i, j; i = j = 0; while (s[i] != '\0') /* gasete sfritul lui s */ i++; while ((s[i++] = t[j++]) != '\0'); /* copiaza pe t */} Cum fiecare caracter este copiat din t n s, se aplic postfixul ++ att lui i ct i lui j pentru a fi siguri c snt pe poziie pentru urmtorul pas din bucl. 1.5.4 Prioritile operaiilor. Prioritiile operaiilor se cercetau n procesul expunerii lor. n paragraful de fa sunt reprezentate operaiile descrise mai sus i e indicat ordinea ndeplinirii lor. Pentru compararea prioritilor operaiilor le prezentm n tabel n ordinea descreterii prioritii. Coloana tabelului Ordinea execuiei determin consecutivitatea ndeplinirii pentru operaiile cu aceiai prioritate. De exemplu n expresia k=d+=b-=4 onsecutivitatea ndeplinirii operaiilor se va determina n c ordinea de la dreapta la snga i n rezultat b se va micora cu 4, d se va mri cu b-4, k=d+b-4. Ordinea de evaluare, descris de o simpl operaie de atribuire, va fi urmtoarea: b=b-4; d=d+(b4); k=d;

-6-

1.6. Masive. 1.6.1 Descrierea masivelor. Masivul reprezint un ir ordonat de elemente de acelai tip. Faptul, c masivul este un tot ntreg, compus din cteva elemente ne permite s numim variabila de tip masiv variabil de tip compus. Masivul se poate caracteriza prin nume, tip, dimensiune. Formatul comun de descriere a masivelor este: tip nume[d1][d1][dn]; unde : tip este tipul comun pentru toate elementele masivului, adic tipul masivului. Tip al unui masiv poate fi orice tip de date deja definit: ntreg, real, caracterial .a. nume este numele masivului. n calitate de nume al masivului este folosit orice identificator. Mai mult ca att, deoarece numele masivului este identificator, asupra lui se rspndete totul ce-i indicat n compartimentul Nume de variabile (identificatori), d1,d2,dn- dimensiunile masivului. Dimensiunea masivului indic numrul de elemente prezente n masiv. Dimensiunea masivului poate fi o expresie constant cu rezultat ntreg. n dependen de cantitatea de dimensiuni, masivele se clasifica n: 1. masive unidimensionale(cu 1 dimensiune); masivul unidimensional reprezint un ir de elemente aranjate uniform ntr-un rnd. Fiecare element al unui masiv unidimensional are 1 coordonat: numrul de ordine a elementului n ir. 2. masive bidimensionale (cu 2 dimensiuni);
-7-

masivul bidimensional reprezint o structur format din rnduri i coloane. Fiecare element al unui masiv bidimensional are 2 coordonate: numrul rndului i numrul coloanei. 3. masive tridimensionale (cu 3 dimensiuni); masivul tridimensional reprezint o structur echivalent cu un cub n volum cu 3 dimensiuni: lungimea, limea, nlimea. Fiecare element al unui masiv tridimensional are 3 coordonate: numrul rndului (n lungime), numrul coloanei (n lime) i numrul nlimei (n adncime). 4. masive multidimensionale. Exemple de descriere a masivelor: int vector[20]; vector - masiv unidimensional din 20 de numere ntregi; float x[10]; x masiv cu 10 elemente de tip ntreg; float matrix[7][9]; matrix - masiv bidimensional din 63 (7*9) de numere flotante; char fraza[25]; fraza - masiv(propozitie) din 25 de caractere ; int spase[15][30][18]; space - masiv tridimensional de numere ntregi (masiv unidimensional de masive bidimensionale). 1.6.2. Accesul la elementele masivului. Cu toate c masivul este un tot ntreg, nu se poate vorbi despre valoarea masivului ntreg. Masivele conin elemente cu valorile crora se opereaz n program. Fiecare element n masiv i are indicele i valoarea sa. n calitate de indice a unui element se folosete un numr ntreg ce indic numrul de ordine al elementului n masiv. Enumerarea elementelor n masiv conform numrului de ordine se ncepe de la zero. Deci, indicele unui element poate avea valori de la 0 pna la d-1, unde d este dimensiunea masivului. n calitate de valoare a unui element din masiv poate servi orice numr de tipul indicat la descrierea masivului, adic tipul valorii atribuit oricrui element din masiv trebuie s fie compatibil cu tipul masivului. Sintaxa de acces la orice element a unui masiv este urmtoarea: nume[i1][i2]..[in]. Unde nume este numele masivului, i1indicele elementului n dimensiunea 1, i2-indicele elementului n dimensiunea 2, in - indicele elementului n dimensiunea n. n cele mai dese cazuri se opereaz cu masive unidimensionale i bidimensionale. Accesul la un element al unui masiv unidimensional se face n felul urmtor: nume[i]; unde nume - numele masivului, i numarul de ordine a elementului n masiv. Exemplu: vector[5]; se acceseaz elementul cu numrul de ordine 5 din masivul vector. fraza[20]; se acceseaz elementul cu indicele 20 din masivul fraza. Accesul la un element al unui masiv bidimensional se face prin nume[i][j]; unde i este numarul rndului pe care se afl elementul; j este numrul coloanei pe care se afl elementul. Exemplu: matrix[4][7]; se acceseaz elementul de pe rndul 4 i coloana 7 a masivului matrix. y[0][0]; se acceseaz primul element al masivului, adic rndul 0, coloana 0. n cazul cnd masivul este de tip simplu, atribuirea valorii unui element al masivului se face ca i n cazul atribuirii valorii unei variabile simple. Exemple: x[0]=7.125; vector[19]+=1; matrix[1][1]=5.5; fraza[3]=b; space [3][5][2]=8; n cazurile cnd masivul este de tip structurat, atribuirea valorii i accesul la un element al masivului se face conform regulilor de atribuire i accesare pentru variabile structurate. Un element al masivului poate aprea n orice expresie, unde e admisibil prezena unei variabile de tip compatibil cu tipul valorii elementului. 1.6.3. Iniializarea masivelor. Deseori e necesar ca elementele masivului s posede valori chiar la momentul descrierii masivului.
-8-

Procesul de atribuire a valorilor elementelor masivului n timpul descrierii lui se numete iniializarea masivului. Sintaxa de iniializare a unui masiv unidimensional este: tip nume[d]={v0,v1,v2,,vn-1}; unde tip este tipul masivului, nume este numele masivului, v0,v1,v2,vn-1 valorile respective ale elementelor nume[0],nume[1] etc. Exemplu: int x[8]={1,3,15,7,19,11,13,5}; n acest caz elementele masivului vor avea urmtoarele valori: x[0]=1; x[1]=3; x[2]=15; x[3]=7; x[4]=19; x[5]=11; x[6]=13; x[7]=5. E de menionat faptul, c indicii masivului se schimb ncepnd de la zero. Adic la descrierea masivului valoarea maxim a indicelui masivului coincide cu numrul de elemente n masiv minus unu. La iniializarea masivului nu e numaidect de indicat dimensiunile masivului. Compilatorul va determina numrul elementelor dup descrierea masivului i va forma un masiv cu mrimea respectiv. De exemplu: int x[]={1,3,15,7,19,11,13,5}; Elementele masivului vor primi valori ca i n cazul precedent. Vom examena nc cteva exemple de iniializare a masivelor: float vector[4]={1.2,34.57,81.9,100.77}; // vector masiv din 4 elemente de tip float; int digit[5]={1,2,3}; // digit masiv de tip ntreg din 5 numere,ultimelor dou elemente li se atribuie valoarea zero. char m[5]={A,B,C,D}; // m masiv din 5 caractere, ultimul element are valoarea nulcaracter; float const y[4]={25,26,17,18}; // iniializarea masivului y[4], elementele cruia sunt constante de tip float i nu pot fi schimbate n decursul ndeplinirii programului. S examenm iniializarea masivului bidimensional: Int a[3][3]={ {1,4,2}, {7,5,3}, {8,6,9} }; Iniializarea masivului bidimensional se efectueaz pe rnduri. Elementele acestui masiv au urmtoarele valori: a[0][0]=1; a[0][1]=4; a[0][2]=2; a[1][0]=7; a[1][1]=5; a[1][2]=3; a[2] [0]=8; a[2][1]=6; a[2][2]=9; La iniializarea masivului dat fiecare rnd se include n acolade . Dac n rndurile indicate de noi nu vor ajunge elemente pentru completarea rndurilor, n acest caz n locul elementelor pentru care n-au ajuns valori vor aprea zerouri. Dac n acest exemplu vom omite acoladele interioare, rezultatul va fi acelai. Dac lipsesc acoladele interioare ,elementelor masivului se vor atribui valorile n mod succesiv extrase din list .Completarea masivului se efectuiaz pe rnduri. Elementele masivului pentru care n list n-au ajuns valori, primesc valorile zero. Dac n list snt mai multe valori dect elemente, atunci o astfel de list se socoate greit. Cele menionate mai sus se refer la toate tipurile de masive. Exemple: Iniializarea masivului bidimensional: int a[3][3]={ 1,4,2,7,5,3,8,6,9}; Trei metode echivalente de iniializare a masivului tridimensional: int p[3][2][2]={ { {1,2},{3,4} }, { {5,6},{7,8} }, { {9,10},{11,12} } }; int p[3][2][2]={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12} }; int p[3][2][2]={1,2,3,4,5,6,7,8,9,10,11,12}; 1.6.4. Exemple de prelucrare a masivelor. Prezentm 2 exemple de prelucrare a masivelor unidimensional i bidimensional: Exemplu 1. Prelucrarea unui masiv unidimensional: Este dat un masiv unidimensional x cu n elemente. Comparai suma primei jumti a masivului cu media aritmetic jumatii a doua a masivului. #include<stdio.h> #include<conio.h>
-9-

#include<math.h> #include<stdlib.h> void main(void) { int x[20],n,k,i,s=0; float m,s1=0,r=0; printf("\nCulege marimea masivului n<=20\n"); scanf("%d",&n); for(i=0;i<n;i++){ printf("Culege elementul %d\n",i); scanf("%d",&x[i]);} printf("Masivul initial este:\n"); for(i=0;i<n;i++){ printf("%d ",x[i]);} if (fmod(n,2)==0) k=floor(n/2); else k=floor(n/2)+1; for (i=0;i<n;i++){ if (i<k) s+=x[i]; else {s1+=x[i]; r++;} } m=s1/r; printf("\nSuma primei jumatati este %d\n",s); printf("Media la a doua jumatate este %f",m); getch();} Exemplu 2. Prelucrarea unui masiv bidimensional: Este dat un masiv bidimensional. X[n,n]. Calculai produsul elementelor pozitive pare din aria haurat. #include<stdio.h> #include<conio.h> #include<math.h> #include<stdlib.h> void main(void) { int x[20][20],n,i,j,p,k; printf("\nCulege marimea masivului n<=20\n"); scanf("%d",&n); printf("\nCulege elementele masivului\n"); for(i=0;i<n;i++){ for(j=0;j<n;j++){ printf("\nCulege elementul x[%d][%d]\n",i,j); scanf("%d",&x[i][j]);}} printf("\nMasivul iniial este:\n"); for(i=0;i<n;i++){ for(j=0;j<n;j++){ printf("%d ",x[i][j]);} printf("\n");} p=1; k=floor((float)n/float(2)); for(i=0;i<n;i++){ for(j=k;j<n;j++){ if ( (x[i][j]>0)&&(fmod(x[i][j],2)==0) ) p=p*x[i][j]; }} printf("\nProdusul elementelor din aria haurata este=%d k=%d\n",p,k); getch(); }

- 10 -

1.7 iruri de caractere. Numim ir o succesiune de caractere ale alfabetului, adic o propoziie. Spre deosebire de alte limbaje de programare, limbajul C++ nu conine un tip de date special ce desemneaz iruri de caractere. Limbajul C++ opereaz cu irurile cum ar lucra cu o succesiune de date de tip caracter amplasate ntr-un masiv. Aici fiecare simbol din ir este o component aparte a masivului. Deci, pentru a defini o variabil, valoarea careia va fi un ir de caractere, n limbajul C++ trebuie de declarat un masiv de tip char cu o lungime egal cu cantitatea maximal posibil de caractere n ir. Urmtorul exemplu arat cum s-ar putea declara un asemenea masiv cu scopul de a culege un nume de la tastatur i apoi de-l afiat la monitor: void main(void) { char a[20]; int i; printf ("Culege numele"); for(i=0; i<20; i++) scanf ("%c",a[i]); printf("Numele dumneavoastra este:"); for(i=0; i<20; i++) printf("%c",a[i]); } n acest program se observ multe neajunsuri i incomoditi. Pentru a culege numele aici este folosit un ciclu cu 20 repetri care citete cte un caracter de la tastatur i-l nscrie n celula corespunztoare a masivului a[20]. Rezult c cu ajutorul acestui program se poate culege numai nume alctuite din 20 de caractere, sau nume din k caractere cu 20-k spaii dup ele. Iar afiarea numelui este fcut cu ajutorul funciei printf( ) inclus n ciclu, care afiaz la monitor cte un caracter din numele cules. Not: La declararea masivului de tip char pentru descrierea unui ir se indic mrimea masivului cu o celul mai mult de ct lungimea maxim presupus a irului din cauz c ultima celul din masiv este rezervat pentru simbolul nul "/0". Evident c imposibil de programat ntr-un limbaj de nivel nalt folosind astfel de mecanisme. Din cauza c programele pentru prelucrarea informaiei textuale au o popularitate foarte mare, limbajul C++ conine mecanisme care uureaz lucru cu irurile de caractere. Aici irurile snt precutate ca un tip special de masive, fapt ce permite introducerea i afiarea irurilor ca un tot ntreg. Pentru ntroducerea irului n memoria calculatorului este folosit funcia gets( ). Aceast funcie are urmtoarea sintax: gets (nume); unde nume este parametrul funciei i reprezint numele variabilei tip ir, adic a masivului de tip char. Exemplu: void main(void) { int i; char name [15]; printf ("Culege numele:"); gets(name); printf ("Numele dumnevoastra este:"); for (i=0; i<15; i++) printf ("%C", name[i]); } Aici funcia gets( ) va precuta primele 14 caractere culese de la tastatur ca valoare a irului cu nume name, iar ultima celul din masiv va conine simbolul nul \0. n timpul lucrului funciei gets( ) executarea programului se stopeaz. Funcia gets( ) ateapt pn utilizatorul va culege un ir de la tastatur. Pentru ca textul cules s fie atribuit ca valoare unei variabile de tip ir, utilizatorul trebuie s culeag tasta ENTER. Dup aceasta propoziia culeas va deveni valoare a variabilei de tip ir, iar cursorul va trece n rnd nou pe monitor. Anume in timpul culegerii tastei ENTER compilatorul C++ adaog la sfritul irului simbolul nul. n exemplu de mai sus culegerea irului se precaut ca culegerea unei variabile de tip ir aparte i nu ca culegerea a mai multor variabile de tip caracter. ns afiarea numelui rmne incomod. Aici, dac vor fi culese mai puin
- 11 -

de 15 simboluri de la tastatur, atunci elementele masivului name[15] ce urmeaz dup simbolul nul vor conine mrimi aleatoare. n afar de funcia gets() limbajul C++ mai conine o modalitate de a ntroduce o propoziie n memorie ca valoare a unei variabile de tip ir. Folosind funcia de ntroducere cu format scanf(), se poate aplica urmtoarea sintax: scanf("%s",name); care atept culegerea de la tastatur a unui ir de caractere, pe care apoi (dupa culegerea tastei ENTER l atribuie ca valoare variabilei name. Aici %s este formatul tipului ir de caractere. Pentru afiarea la monitor a unui ir de caractere este folosit funcia puts(). Funcia puts( ) poate avea n calitate de parametru numai un ir de caractere. Sintaxa funciei este urmatoarea: puts(parametru); unde n calitate de valoare poate fi folosit un ir de caractere sau numele unei variabile de tip ir de caractere. Exemplu: puts("Elena"); puts(name); Majoritatea compilatoarelor C++ trec cursorul din rnd nou dup executarea funciei puts(). ns exist i aa versiuni de compilatoare, care nu ndeplinesc aceast trecere din rnd nou. n acest caz e binevoit folosirea simbolului de trecere n rind nou \n. Exemplu: puts("Elena\n"); Folosind funciile gets( ) i puts( ) exemplul de mai sus se poate scrie n felul urmtor: void main (void) { char name[15]; puts (" Culege numele"); gets (name); puts ("Numele dvs este:"); puts (name); } 1.7.1. Masive de iruri. Declarnd un masiv char S[20] putem pstra n el valoarea unui ir de caractere. n cazul, cnd este nevoie de prelucrat o totalitate din cteva iruri, e comod de folosit masive de iruri. Un masiv de iruri este un masiv bidimensional tip char compus din linii i coloane. Pe fiecare linie din aa masiv va fi nscris cte un ir de caractere. Numrul maximal de iruri astfel nscrise n masiv va fi egal cu cantitatea liniilor din masiv. De exemplu: char propozitie[10][35] este un masiv, n care pot fi scrise 10 variabile de tip ir de caractere, fiecare avnd lungimea maximal de 34 de caractere. Pentru a accesa un ir din aa masiv se va folosi sintaxa: propozitie[i], unde i este numrul rndului din masiv unde se va afla irul. Pentru a accesa un caracter al irului i din masiv se va folosi sintaxa: propozitie[i][j] unde j este poziia caracterului n irul i. 1.7.2. Funcii folosite la prelucrarea irurilor de caractere. Majoritatea compilatoarelor C/C++ au incorporate funcii speciale pentru lucrul cu irurile. Evident, c pentru aa scopuri se poate crea funcii proprii, dar este mai efectiv de folosit funciile din bibliotecile standarde. Prototipurile acestor funcii snt descrise n biblioteca string.h i deci pentru folosirea lor, n program trebuie inclus aceast bibliotec folosind sintaxa: #include<string.h>. Unele din aceste funcii snt: 1. Funcia strcat(); Prototip: char *strcat (char *dest, const char *sursa); Efect: Adaog irul surs la sfritul irului destinaie 2. Funcia strcmp(); Prototip: int strcmp (const char * S1, const char* S2); Efect: Compar dou iruri. Limbajul C nu permite compararea a dou iruri n forma: if (S1==S2). Aici compararea este fcut cu ajutorul funciei strcmp() care ntoarce valoare nul, n caz c irurile snt identice, sau o valoare diferit de zero, n caz c irurile nu coincid. Dup executarea funciei strcmp(), va fi
- 12 -

ntoars o valoare ntreag care va fi: mai mic ca 0 dac S1<S2; mai mare ca 0 dac S1>S2; egal cu 0 daca S1==S2; 3. Funcia strcmpi(); Prototip: int strcmpi (const char *S1, const char *S2); Efect: compar 2 iruri fr a lua n consideraie registrele simbolurilor. 4. Funcia strncmp(); Prototip: int strncmp( const char *S1, const char *S2, size_t k); Efect: funcia strncmp() compar un numr dat de cartere n 2 variabile de tip ir de caractere. 5. Funcia strncmpi(); Prototip: int strncmpi( const char *S1, const char *S2, size_t k); Efect: Compar un numr dat de caractere, ncepnd cu primul, din 2 iruri de caractere fr a face diferen ntre caractere minuscule i cele majuscule. 6. Funcia strlen(); Prototip: size_t strlen(const char *S); Efect: Determin lungimea irului de caractere S. 7. Funcia strcpy(); Prototip: char *strcpy(char *S1, const char *S2); Efect: Copie irul S2 n irul S1. Dup ndeplinirea funciei strcpy (S1,S2); irul S1 i va pierde valoarea iniial i va avea valoarea nou din S2. Iar S2 va rmne neschimbat. 8. Funcia strcspn(); Prototip: size_t strcspn (const char *S1, const char *S2); Efect: Determin poziia caracterului din irul S1, care primul a fost ntlnit n irul S2. ntoarce o valoare de tip ntreg egal cu numrul de ordine a acestui caracter. 9. Funcia strspn(); Prototip: size_t strspn(const char *S1, const char *S2); Efect: Determin poziia caracterului din irul S1 ncepnd cu care S1 difer de S2. ntoarce o valoare tip ntreg egal cu poziia acestui caracter. 10. Funcia strdup(); Prototip: char *strdup (const char *S); Efect: Dubleaz irul de caractere S. n caz de succes funcia strdup() ntoarce ca valoare indicatorul adresei de memorie, ce conine irul dublat. i ntoarce valoare nul n caz de eroare. Funcia strdup(S) face o copie a irului S, obinnd spaiu prin apelul funciei malloc(). Dup folosirea irului dublat programatorul trebuie s elibereze memoria alocat pentru el. 11. Funcia strlwr(); Prototip: char *strlwr (char *S); Efect: Trece toate caracterele din irul S n echivalentul lor minuscul. n calitate de parametru funcia folosete o variabil de tip ir de caractere. n rezultatul executrii acestei funcii, dac n ir se vor conine caractere majuscule, ele vor fi transformate n echivalentul lor minuscul, iar dac n ir caractere majuscule nu se vor conine - irul va rmne neschimbat. 12. Funcia strupr(); Prototip: char *strupr(char *S); Efect: transform toate caracterele din ir n echivalentul lui majuscul. 13. Funcia strncat() Prototip: char *strncat (char *dest, const char *sursa, size_t k); Efect: funcia strncat() adaog un numr egal cu k caratere de la nceputul irului sursa la sfritul irului dest. 14. Funcia strncpy(); Prototip: char *strncpy (char *dest, const char *sursa, size_t n); Efect: Copie un numar dat de caractere dintr-un ir n altul; 15. Funcia strnset(); Prototip: char *strnset (char* s, int ch, size_t n) ;
- 13 -

Efect: Funcia strnset() copie caracterul ch pe primele n locuri din irul *S. n caz c n>strlen (s), atunci n va deveni egal cu strlen(s) 16. Funcia strrev(); Prototip char *strrev( char *s); Efect: Funcia strrev() inverseaz irul de caractere S. Dup execuia funciei strrev() primul caracter din ir va fi schimbat cu locul cu ultimul caracter, caracterul 2 cu penultimul, etc. fr a lua n consideraie caracterul nul. 17. Funcia strstr (); Prototip: char *strstr(const char *s1, const char *s2); Efect: Funcia strstr() determin dac irul S2 se conine n irul S1. Funcia ntoarce un indicator la caracterul din S1 ncepnd cu care a fost depistat irul S2. 18. Funcia strchr(); Prototip: char *strchr(const char *S, int c); Efect: Scaneaz irul S n cutarea caracterului c. n caz de succes funcia ntoarce un indicator la caracterul din S care primul a fost gsit identic cu caracterul c. n caz de eroare (dac aa caracter nu exist n irul S) funcia ntoarce valoare nul. 19. Funcia strerror(); Prototip: char *strerror(int errnum); Efect: Determin eroarea dup numrul erorii i returneaz un indicator la irul de caractere ce conine descrierea erorii. 20. Funcia strpbrk(); Prototip: char *strpbrk(const char *s1, const char *s2); Efect: Funcia caut n irul S1 primul caracter ce exist i n irul S2; n caz de succes funcia ntoarce un indicator la primul caracter din S1 aprut n S2. 2. FORMULAREA PROBLEMEI. Avem date 2 polinoame cu coeficieni ntregi P(x) i Q(x). Se cere: a) S se determine toate rdcinile ntrgi comune; b) S se evalueze expresia E=P(a+Q(a)); c) S se evidenieze metoda matematic utilizat. P(x)=pnxn +pn-1xn-1+...+p2x2+p1x+p0 Q(x)=qnxn+qn-1xn-1+...+q2x2+q1x+q0 Unde pn, pn-1, ..., p2, p1, p0, qn , qn-1 ,..., q2, q1, q0 sunt numere ntregi, iar n este numr natural . Pentru a rezolva problema calculm rdcinele polinoamelor separat i apoi le comparm. Calculm rdcina primului polinom i inlocuim n cel de-al doilea polinom pentru a observa dac rdcina polinomului nti este comun celui de-al doilea. ntr-un cuvnt, pentru rezolvarea acestei probleme avem posibilitatea de a folosi mai multe metode, unele fiind mai raionale, iar altele nu . 3. METODA MATEMATIC Aceast problem const n calcularea a rdcinelor comune ntregi a dou polinoame de gradul n i calcularea expresiei E=P(a+Q(a). Pentru a calcula aceast problem se poate de calculat rdcinele fiecrui polinom aparte i apoi de comparat. Rdcinele pot fi calculate prin descompunere a polinomului sau prin studiere termenului liber. A doua sarcin a problemei const n verificarea ezpresiei: E=P(a+Q(a)). Adic n polinomul Q(x) nlocuim parametrul a i obinem : Q(a +qn-1an-1+...+q2a2+q1a+q0)=qnan a+Q(a)=qnan+qn-1an-1+...+q2a2+q1a+q0+a Deci n final primim : E=P(qnan+qn-1an-1+...+q2a2+q1a+q0+a) Deci n polinomul P(x) n loc de valoarea necunoscutei x nlocuim valoarea (a+Q(a)). Astfel obinem i verificm expresia propus n sarcina problemei. Mai sus sunt descrise numai unele din metode care ne pot folosi n rezolvarea problemei. Aceast problem poate fi rezolvat mai simplu sau mai compus, mai raional sau mai iraional. Totul depinde de metoda aleas.
- 14 -

4.TEXTUL PROGRAMULUI IN LIMBAJUL C++. #include<conio.h> #include<iostream.h> #include<math.h> void main(){ int p[30],q[30],n,i,j,y; float sp,sq,E,e,a; clrscr(); cout<<"\na)\n"; cout<<"n=";cin>>n; cout<<"\nIntrod. coef. polinomului P(x):\n"; for(i=n;i>=0;i--){cout<<"p["<<i<<"]=";cin>>p[i];} cout<<"\nIntrod. coef. polinomului Q(x):\n";y=0; for(i=n;i>=0;i--){cout<<"q["<<i<<"]=";cin>>q[i];} for(i=-100;i<=100;i++){sp=p[0];sq=q[0]; for(j=1;j<=n;j++){sp+=p[j]*pow(i,j); sq+=q[j]*pow(i,j);} if(sp==0&&sq==0) {cout<<"x="<<i<<" ";y=1;}} if(y==0) cout<<"Polinoamele nu au radacini comune."; cout<<"\n\nb)\n"; cout<<"a=";cin>>a; E=0;e=0; for(i=0;i<=n;i++) e+=q[i]*pow(a,i); for(i=0;i<=n;i++) E+=p[i]*pow(a+e,i); cout<<"\nE="<<E; getch();}

5. DESCRIEREA INSTRUCIUNILOR UTILIZATE N PROGRAM. n textul programului de mai sus am utilizat urmtoarele instruciuni : Instruciunea ciclic FOR. Ciclul FOR posed urmtoarele caracteristici: numrul de repetri ale ciclului este cunoscut de la nceputul executrii lui; conducerea ciclului este efectuat cu ajutorul unei variabile de tip int, numit parametrul ciclului, care, n acest proces ciclic primete valori consecutive de la valoarea iniial dat pn la valoarea final dat. Sintaxa instruciunii este urmtoarea: for(expresie1;expresie2;expresie3) instruciune; unde expresie1-expresie de iniializare a parametrului ciclului, expresie2-expresie de control, expresie3expresie de incrementare/decrementare(corecie) a parametrului ciclului. Instruciunea ciclic for lucreaz n felul urmtor: la nceput se calculeaz expresia de iniializare. Apoi, dac expresia de control este adevrat, atunci se ndeplinete instruciunea. Dup ndeplinirea instruciunei se execut expresia de corecie i din nou se controleaz expresia de control, justeea creia duce la ndepliniea repetat a instruciunii. Dac expresia de control are valoarea fals atunci ndeplinirea ciclului for se termin, adic controlul se transmite instruciunii programului ce urmeaz dup instruciunea for. De exemplu: de calculat y=i/(i+1); unde i=1..50; y=0; for(i=1;i<=50;i++) {y+=i/(i+1) };
- 15 -

aici i=1 este expresie de iniializare, i<=50 expresie de control, i++ - expresie de corecie. Acoladele mrginesc corpul ciclului (instruciunea). n caz cnd corpul ciclului e compus numai dintr-o instruciune, acoladele nu sunt necesare. Schema algoritmic ndeplinrii instruciuni for este prezentat pe desen. Din schema algoritmic se vede, c instruciunea for este un ciclu cu precondiie : decizia de a ndeplini din nou ciclul sau nu se ia naintea nceperii ndeplinirii lui i evident, se poate ntmpla ca corpul ciclului s nu fie ndeplinit nici o dat. Cteodat apare necesitatea ieirii din ciclu nainte de termen. Pentru aceasta n corpul ciclului, n locul unde se dorete ieirea din ciclu se folosete instruciunea BREAK, dup ndeplinirea creia are loc transmiterea controlului la instruciunea urmtoare dup ciclu. Limbajul C++ nu pune restrucii la tipul instruciunilor din cadrul corpului ciclului. n aa mod, corpul ciclului poate fi alctuit din instruciuni i simple i compuse, n particular-corpul unui ciclu poate fi alt ciclu. n unele algoritme apar situaii, cnd e necesar imbricarea unui ciclu n altul. Instruciunea de ramificare IF i IF-ELSE. n structurile ramificate de calcul, unele etape nu ntotdeauna se ndeplinesc n una i aceiai ordine. n dependen de careva condiii, care sunt controlate (verificate) pe parcursul calculelor, se aleg pentru executare diferite consecutiviti de instruciuni. Pentru descrierea astfel de procese n limbajul C++ se folosesc instruciunile ramificate (condiionale). O instruciune condiional selecteaz o singur instruciune dintre alternativele sale, pe care apoi o execut. Astfel de instruciuni sunt if i if else. Instruciunea if e compus i sintaxa ei admite unul din urmtoarele formate: if_(expresie)_instruciune sau if_(expresie)_instruciune1_else_instruciune2; n instruciunile de ramificare lipsete (;), deoarece construcia instruciune_ care a fost descris deja include n sine acest semn (;). Dac instruciunea_ este simpl, atunci ea se va sfri cu (;), iar dac instruciunea_ reprezint un bloc, atunci acest bloc va fi definit de acolade, unde acolada dreapta va juca rolul sfritului. Instruciunea if lucreaz n felul urmtor: 1. Formatul if(expresie)_instruciune. Mai nti se calculeaz valoarea expresiei. Dac rezultatul ei este ADEVR (adic expresia !=0), atunci se ndeplinete _instruciunea, iar n caz contrar se sare peste instruciune i nu avem nici o aciune. Schema algoritmic a formatului if(expresie)_instruciune este prezentat pe desen. Fie c d este egal cu c. Atunci vom mri d cu o unitate, iar c cu trei uniti. n celelalte cazuri d i c rmn neschimbate. Instruciunea de ramificare a acestui caz: if(d==c) ++d,c+=3; n calitate de instruciune_ aici se folosete instruciunea expresie cu virgul. Vom descrie aceast instruciune astfel: if(d= =c)++d;c+=3; Diferena const n aceea c n exemplu al doilea avem 2 instruciuni: if i instruciuneaexpresie c+=3;. n acest caz dac (d==c) va avea valoare ADEVR, atunci totul va rmne ca mai nainte: d se va mri cu o unitate, iar c se va mri cu trei uniti. n caz contrar, d nu se schimb, i numai c se mrete cu 3. Vom considera acest exemplu din nou: if(d= =c){++d c+=3 } n cazul c (d == c) va avea valoarea FALS, d i c vor rmne neschimbate, deoarece aceste instruciuni snt incluse n acolade, adic formeaz un bloc, i din punct de vedere logic sunt privite ca o singur instruciune bloc. 2. Formatul if(expresie)_instuciune1_else_instruciune2. Ca i n cazul precedent, n primul rnd se calculeaz valoarea expresiei. Dac ea difer de zero, adic este ADEVR, atunci se ndeplinete instruciunea1, n caz contrar se ndeplinete instruciunea2. Schematic aceast instruciune e preszentat pe desen.
- 16 -

De exemplu : fie c e necesar de a calcula z, care este egal cu maximum dintre dou numere a i b. Atunci putem scrie: if(a>b)z=a;else z=b;.Prezena (;) dup z=a este necesar, deoarece aceasta este o instruciune ce intr n coponena instruciunii if. Prima form prescurtat a instruciunii if ne d posibilitatea ndeplinirii sau nendeplinirii oricrei operaii, pe cnd a doua form ofer posibilitatea alegerii i ndeplinirii unei operaii din dou posibile. Totui, cte odat apare necesitatea alegerii unei operaii din mai multe.Vom examina un lan de instruciuni: if(expresie1)_instruciune1_else_if(expresie2)_instruciune2_else_if(expresie3) _instruciune3_else _instruciune4 Aa un lan de instruciuni e admis, deoarece n locul instruciunii n instruciunea if poate fi orice instruciune, inclusiv i if. ns o aa nscriere e complicat. Pentru aa procese n C exist o instruciune special care va fi studiat ceva mai trziu. S precutm 2 exemple: a) if(n>0) if(a>b) z=a;else z=b; b) if(n>0){if(a>b) z=a;}else z=b; Deosebirea const n faptul c n cazul a) avem instruciunea if de form scurt, care are ca instruciune forma if_else. n cazul b) avem instruciunea if_else n form plin, avnd n calitate de instruciune1 forma if prescurtat. Secvena b difer de a numai prin prezena acoladelor, ce definesc un bloc, ns, evident, joac un rol important la interpretarea acestor intruciuni. n textul programului de mai sus am utilizat urmtoarele funcii: cout<<() - funia de afiare a datelor fr indicarea formatului; cin>>() - funcia de citire a datelor de orice format; pow(x, y) - ntoarce valoarea xy.

6. SCHEMA BLOC A PROGRAMULUI:

- 17 -

7. CONCLUZIE.
- 18 -

Un factor determinant n rspndirea limbajului de programare C++n rndul programatorilor const n posibilitatea utilizrii lui cu succes n locul limbajelor de asamblare, care sunt greu de folosite n aplicaii (conine un numr mare de instruciuni elementare i nu este structurat). n plus, programele elaborate n limbajul de asamblare nu sunt portabile. Limbajul C++ este singurul limbaj de programare structurat care permite un control riguros al hardware-ului i al perifericilor (facilitate oferit de limbajele de asamblare). Limbajul C++ a fost folosit iniial pentru scrierea programelor de sistem ( sisteme de operare, editoare, compilatoare, etc.), dar odat cu creterea popularitii lui, programatorii au nceput s-l foloseasc i la scrierea programelor de aplicaii datorit n special eficienei i portabilitii crescute a unor astfel de programe. Limbajul C++ este un limbaj agreat de programatori, permindu-le acestora s alctuiasc cu uurin n mod sistematic programe complexe. Fiecare programator i poate crea o bibliotec de funcii pe msura personalitii fiecruia, care pot fi folosite n diferite situaii. Limbajul C++ este un limbaj de nivel mediu. Asta nu nseamn c el este mai slab dect limbajele de nivel nalt, sau c el este similar cu limbajele de asamblare care ridic probleme de programare utilizatorilor, C++ se numete de nivel mediu deoarece el combin avantajele limbajelor de nivel nalt cu funcionalitatea limbajelor de asamblare. Datorit acestor caliti incontestabile limbajul C++ a devenit limbajul de baz i pentru programarea aplicaiilor de timp real.

8. BIBLIOGRAFIE. 1. Florin Munteanu Programarea Calculatoarelor (Bucureti 1994) 2. Yourdon E. Turbo C++ Manual de utilizare (Bucureti 1984) 3. Cojocaru O. Turbo C++ (Chiinu 1994) 4. Iorga V. Programarea n limbajul C (Litografia I.P.B 1987) 5. C++ . - ( 2002) 6. erbnai L. Limbaje de programare i compilatoare (Editura Academiei, Bucureti 1987) 7. Yourdon E. Borland C++ Manual de utilizare (Bucureti 1984)

Un nou portal informaional! Dac deii informaie interesant si doreti s te impari cu noi atunci scrie la adresa de e-mail : support@sursa.md
- 19 -

Вам также может понравиться