Sunteți pe pagina 1din 20

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. Declara ii 1.!. "peratori 1.!.1. "peratori aritmetici 1.!.2. "peratori rela ionali si logici 1.!.3. "peratori de incrementare i decrementare 1.!.4 priorit# ile opera iilor 1.$. %asive 1.$.1 descrierea masivelor 1.$.2. &ccesul la elementele masivului 1.$.3. Ini iali'area masivelor 1.$.4. ()emple de prelucrare a masivelor 1.* iruri de caractere 1.*.1. %asive de iruri 1.*.2. +unc ii ,olosite la prelucrarea irurilor de caractere 2. +ormularea problemei 3. %etoda matematic# 4.te)tul programului in limbajul c++. !. Descrierea instruc iunilor utili'ate -n program $. .c/ema 0 bloc a programului1 *. Conclu'ie 2. 3ibliogra,ie INTRODUCERE. C++ este un limbaj de programare cu scop general. Dei a ,ost numit 4limbaj de programare sistem45 deoarece este util -n scrierea sistemelor de operare5 el a ,ost ,olosit la ,el de bine -n scrierea de programe importante ce tratea'# probleme numerice5 prelucr#ri de te)te sau ba'e de date. C++ este un limbaj relativ 4de nivel in,erior4. &ceast# caracteri'are -nseamna pur i simplu c# C++ operea'# cu aceeai clas# de obiecte cu care lucrea'# majoritatea calculatoarelor5 i anume caractere5 numere i adrese. &cestea pot ,i combinate i prelucrate cu operatori aritmetici i logici implementa i pe actualele calculatoare. C++ nu posed# opera ii pentru a prelucra direct obiecte compuse5 cum ar ,i iruri de caractere5 mul imi5 liste sau tablouri considerate ca un -ntreg. 6imbajul nu de,inete nici o alt# ,acilitate de alocare de memorie -n a,ar# de de,ini iile statice i de lucrul cu stiva ,olosite de variabilele locale ale ,unc iilor. 7n s,-rit5 limbajul C++ -n sine nu are ,acilit# i de intrare8ieire1 nu e)ist# instruc iuni 9(&D sau :9IT( i nici metode de acces la ,iiere5 4cablate4 -n limbaj. Toate aceste mecanisme de nivel -nalt trebuiesc ,#cute prin apeluri e)plicite de ,unc ii. 7n mod similar5 C++ o,er# numai construc ii directe5 liniare de control al ,lu)ului1 teste5 bucle5 grup#ri5 i subprograme5 -ns# nu multiprogramare5 opera ii paralele5 sincroni'#ri. Cu toate ca absen a acestor caracteristici ar p#rea o grav# de,icien #5 p#strarea limbajului la o dimensiune modest# a adus bene,icii reale. Deoarece C++ este relativ mic5 el poate ,i descris -ntr8un spa iu redus i -nv# at repede. ;n compilator pentru C++ poate ,i simplu i compact. Compilatoarele s-nt deasemenea uor de scris< ,olosind te/nologia curent#5 ne putem atepta la un timp de c-teva luni pentru scrierea unui compilator nou i s# avem surpri'a ca 2=> din codul noului compilator este comun cu cele e)istente. &ceasta determin# marele grad de mobilitate a limbajului. Deoarece tipurile de date i structurile de control posedate de C++ s-nt suportate de
-1-

majoritatea calculatoarelor e)istente5 biblioteca necesar# e)ecu iei ?run 8 time@ necesar# pentru a implementa programele independente este minuscul#. Desigur5 ,iecare implementare posed# o bibliotec# cuprin'#toare i compatibil# de ,unc ii pentru a -ndeplini ,unc iile de IA"5 a trata irurile i opera iile de alocare de memorie dar5 deoarece se apelea'# numai e)plicit5 poate ,i evitat# dac# e nevoie5 ea poate ,i scris# portabil c/iar -n C++. 1. CONCEPTUL LINGVISTIC AL LIMBAJULUI C++. 1.1. Nume de variabi e. ()ist# unele restric ii asupra numelor de constante i variabile. Numele s-nt alcatuite din litere i ci,re< primul caracter trebuie s# ,ie o liter#. 6iniu a de subliniere 4B4 este considerat# liter#< ea este util# -n uurarea citirii numelor lungi de variabile. 6iterele mari i mici s-nt caractere distincte< practica tradi ional# -n C++ ,olosete literele mici pentru nume de variabile i literele mari pentru constantele simbolice. Numai primele opt caractere ale unui nume intern s-nt semni,icative5 cu toate c# se pot ,olosi mai multe. Centru numele e)terne5 de e)emplu nume de ,unc ii i de variabile e)terne5 num#rul de caractere poate s# ,ie mai mic ca 25 deoarece numele e)terne s-nt ,olosite de di,erite asambloare i -nc#rc#toare. %ai mult5 cuvinte c/eie ca1 i,5 else5 int5 etc s-nt re'ervate1 nu pot ,i ,olosite ca nume de variabile. Natural5 e -n elept s# alegem numele de variabile ast,el -nc-t s# -nsemne ceva5 legat de scopul variabilei5 i e nepl#cut s# amestec#m litere mari cu mici. 1.!. Ti"uri #i marimi de da$e. ()ist# numai c-teva tipuri de date de ba'# -n limbajul C++1 4c/ar4 un singur octet5 capabil s# p#stre'e un caracter din setul local de caractere< 4int4 un -ntreg5 re,lect-nd tipic m#rimea e,ectiv# a -ntregilor pe calculatorul ga'd#< 4,loat4 num#r ,lotant -n simpla preci'ie< 4double4 num#r ,lotant -n dubla preci'ie. 7n plus5 e)ist# un num#r de cali,icatori care pot ,i aplica i tipului 4int41 %&'r$5 '() i u(%i)(ed. %&'r$ i '() se re,er# la di,erite m#rimi de -ntregi. Numerele u(%i)(ed se supun legilor aritmeticii modulo 2Dn unde n este num#rul de bi i dintr8un int< ele s-nt -ntotdeauna po'itive. Declara iile pentru cali,icatori arat# ast,el1 %&'r$ i($ *+ '() i($ ,+ u(%i)(ed i($ -+ Cuv-ntul i($ poate ,i omis -n ast,el de situa ii5 ceea ce se i -nt-mpl# de obicei. Creci'ia acestor obiecte depinde de calculatorul care le m#nuiete. Tabelul urm#tor d# c-teva valori repre'entative1 Tipuri de date C/ar Int ./ort 6ong +loat Double D(C CDC11 &.CII 2 bi i 1$ 1$ 32 32 $4 EoneFGell $=== &.CII H bi i 3$ 3$ 3$ 3$ *2 I3%A3*= (3CDIC 2 bi i 32 1$ 32 32 $4 Interdata 2A32 &.CII 2 bi i 32 1$ 32 32 $4

Inten ia e c# %&'r$ i '() s# aib# lungimi di,erite de -ntregi unde e practic< i($ re,lect# normal5 cea mai 4natural#4 lungime pentru un calculator. &a cum pute i vedea5 ,iecare
-2-

compilator este liber s# interprete'e s/ort i long -n ,unc ie de /ardul pe care se e)ecut#. Ceea ce trebuie s# nota i este c# s/ort nu este niciodat# mai lung dec-t long. 1.. C'(%$a($e. Constantele int i ,loat au ,ost deja e)puse< not#m -n plus c# nota ia u'ual# 123.4!$e8* sau nota ia tiin i,ic# =.12(3 pentru numerele ,lotante sunt ambele legale. "rice constant# ,lotant# este considerat# ca ,iind de tipul double5 aa c# nota ia 4e4 servete at-t pentru ,loat c-t i pentru double. Constantele lungi sunt scrise -n stilul 1236. " constant# -ntreag# normal# care este prea lung# pentru un int5 este luat# deasemenea ca ,iind o constant# long. ()ist# o nota ie special# pentru constantele octale i /e)a'ecimale1 un = I'eroJ la -nceputul unei constante int -nseamn# octal< un =) sau =K la -nceputul unei constante int -nseamna /e)a'ecimal. De e)emplu5 num#rul 'ecimal 31 poate ,i scris =3* -n octal i =)1, sau =K1+ -n /e)a'ecimal. Constantele octale i /e)a'ecimale pot ,i urmate de un 6 pentru a le ,ace 4long4. " constant# caracter este un caracter singur scris -ntre g/ilimele simple ca5 de e)emplu5 L)L. Maloarea unei constante caracter este valoarea numerica a caracterului -n setul de caractere al calculatorului. De e)emplu5 -n setul de caractere &.CII5 caracterul 'ero5 sau L=L5 are valoarea 425 iar -n (3CDIC5 24=5 am-ndou# valori ,iind di,erite de valoarea numeric# =. .criind L=L -n loc de o valoare numerica de tipul 42 sau 24=5 ,acem programul independent de o valoare particular#. Constantele caracter particip# -n opera iile numerice la ,el ca oricare alte numere5 cu toate c# cel mai adesea ele sunt ,olosite -n compar#ri cu alte caractere. " sec iune viitoare va trata toate regulile de conversie. &numite caractere negra,ice pot ,i repre'entate constante caracter cu ajutorul secven elor escape5 de e)emplu Nn Ilinie nou#J5 Nt ItabJ5 N= InulJ5 NN IbacOspaceJ5 NLIg/ilimea simplaJ etc5 care arat# ca dou# caractere5 dar de ,apt sunt unul singur. 7n plus5 se poate genera orice model de lungime un octet5 scriind1 LNdddL unde LdddL repre'int# 1 8 3 ci,re octale5 ca -n Pde,ine +"9%+((D LN=14L AQ &.CII ,orm,eed QA Constanta caracacter LN=L repre'int# caracterul ce are valoarea LN=L se scrie adesea -n locul lui = pentru a accentua natura caracter a anumitor e)presii. " e)presie constant# este o e)presie care implic# numai constante. &st,el de e)presii sunt evaluate la compilare i nu la e)ecu ie i ele pot ,i ,olosite -n orice loc -n care poate apare o constant#5 ca -n1 Pde,ine %&K6IN( 1=== c/ar line?%&K6IN(+1@< sau seconds R $= Q $= Q /ours< " constant# ir este o secven # compus# din 'ero sau mai multe caractere -ntre g/ilimele duble5 ca 4I am a string4 sau 44 AQ un sir nul QA S/ilimelele duble nu sunt parte a irului5 ci servesc doar ca delimitatori. &celeai secven e escape ,olosite pentru constantele caracter se aplic# i la iruri< N4 repre'int# caracterul dubl# g/ilimea4. Te/nic5 un ir este un tablou ale c#rui elemente sunt caractere. Compilatorul plasea'# automat un caracter nul N= la s,-ritul oric#rui ast,el de ir5 ast,el c# programele pot determina lesne s,-ritul irului. &ceast# repre'entare spune c# nu e)ist# o limit# real# pentru lungimea unui ir5 dar programele trebuie s# parcurg# tot irul pentru a8i determina lungimea. %emoria ,i'ic# cerut# este cu o loca ie mai mult dec-t num#rul de caractere scrise -ntre g/ilimele duble. +unc ia urm#toare5 strlenIsJ returnea'# lungimea unui ir de carctere s5 e)clusiv terminatorul N=. strlenIsJ AQ returnea'a lungimea lui s QA c/ar s?@<
-3-

T int i< i R =< G/ile Is?i@ UR LN=LJ ++i< returnIiJ< V Trebuie distins -ntre o constant# caracter i un ir care con ine un singur caracter1 L)L i 4)4 nu sunt acelai lucru. Crimul este un caracter5 ,olosit pentru a produce valoarea numeric# a caracterului ) din setul de caractere al calculatorului< al doilea este un ir de caractere care con ine un singur caracter Ilitera )J i un N=. 1./. De0 ara1ii. Toate variabilele trebuie declarate -nainte de a ,i ,olosite5 cu toate c# anumite declara ii pot ,i ,#cute implicit de conte)t. " declara ie speci,ic# un tip i este urmat# de o list# de una sau mai multe variabile de acel tip5 ca -n e)emplul de mai jos1 int loGer5 upper5 step< c/ar c5 line?1===@< Mariabilele pot apare oricum printre declara ii. 6ista de mai sus poate ,i scris#5 -n mod egal5 i ast,el1 int loGer< int upper< int step< c/ar c< c/ar line?1===@< &ceast# ultim# ,orm# ocup# mai mult spa iu5 dar este mai comod# pentru a ad#uga c-te un comentariu la ,iecare declara ie sau pentru modi,ic#ri ulterioare. Mariabilele pot ,i5 deasemenea5 ini iali'ate -n declara ia lor5 cu toate c# e)ist# anumite restric ii. Dac# numele este urmat de un semn egal i de o constant#5 aceasta servete la ini iali'are5 ca -n1 c/ar bacOslas/ R LNNL< int i R =< ,loat eps R 1.=e8!< Dac# variabila -n c/estiune este e)tern# sau static#5 ini iali'area este ,#cut# o singur# dat#5 conceptual -nainte ca programul s#8i -nceap# e)ecu ia. Mariabilele automate ini iali'ate e)plicit sunt ini iali'ate la ,iecare apel al ,unc iei -n care sunt continuie. Mariabilele automate pentru care nu e)ist# o ini iali'are e)plicit# au valoare nede,init# Iadic# gunoiJ. Mariabilele e)terne i statice se ini iali'ea'# implicit cu 'ero5 dar este un bun stil de programare acela de a declara ini iali'area lor -n orice ca'. Mom discuta ini iali'#rile mai departe pe masur# ce se introduc noi tipuri de date. 1.2. O"era$'ri. 1.2.1. O"era$'ri ari$me$i0i. "peratorii aritmetici binari sunt 4+45 4845 4Q45 4A4 i operatorul modulo 4>4. ()ist# operatorul 484 unar5 dar nu e)ist# operatorul unar 4+4. 7mpar irea -ntregilor trunc/ia'# orice parte ,rac ionara. ()presia ) > F produce restul c-nd ) se -mparte la F i deci este 'ero c-nd -mp#r irea este e)act#. De e)emplu5 un an este bisect dac# este divi'ibil cu 4 i dac# nu este divi'ibil cu 1==5 -ns# anii divi'ibili cu 4== sunt bisec i. Deci1 i, IFear > 4 RR = WW Fear > 1== UR = XX Fear > 4== RR =J
-4-

itLs a leap Fear else itLs not "peratorul > nu poate ,i aplicat la ,loat sau double. "peratorii + i 8 au aceeai pondere5 care este mai mic# dec-t ponderea Iidentic#J a lui Q5 A i > care la r-ndul ei este mai mic# dec-t ponderea operatorului unar 8. "peratorii aritmetici se grupea'# de la st-nga la dreapta ITabela de la s,-ritul capitolului re'um# ponderea i asociativitatea pentru to i operatoriiJ. "rdinea de evaluare nu este speci,icat# pentru operatorii asociativi i comutativi de tipul lui Q i +. Compilatorul poate rearanja un calcul cu parante'e implicind unul din acetia. &st,el5 a+Ib+cJ poate ,i evaluat ca Ia+bJ+c. &cest lucru produce rar di,eren e5 dar dac# se cere o ordine particular#5 trebuie ,olosite e)plicit variabilele temporare. &c iunile care produc depairi superioare sau in,erioare depind -n ultima instan # de calculator. 1.2.!. O"era$'ri re a1i'(a i %i ')i0i. "peratorii rela ionali sunt Y YR Z ZR. (i to i au aceai pondere. .ub ei -n tabelul de ponderi se a,l# operatorii de egalitate RR UR5 care au o aceeai pondere. "peratorii rela ionali au ponderea mai mic# dec-t cei aritmetici5 aa c# e)presii de tipul i Z lim81 se evaluea'# ca i Z Ilim81J5 aa cum ar ,i de ateptat. %ai interesan i sunt conectorii logici WW i XX. ()presiile care8i con in sunt evaluate de la st-nga la dreapta i evaluarea se oprete -n clipa -n care se cunoate adev#rul sau ,alsul re'ultatului. &ceste proprieta i se dovedesc critice -n scrierea programelor. De e)emplu iat# o bucl# luat# din ,unc ia de intrare getline5 pe care am scris8o -n Capitolul 11 ,or IiR=< iZ lim81 WW Ic R getc/arIJJ UR LNnL WW c UR ("+< ++iJ s?i@ R c< 7n mod clar5 -nainte de a citi un nou caracter trebuie v#'ut dac# mai e)ist# loc pentru a8l depune -n tabloul s5 aa c# testul i Z lim81 trebuie ,#cut -n primul r-nd. Nu numai at-t5 dar dac# testul euea'#5 nu trebuie s# mai citim un nou caracter. .imilar5 ar ,i nepotrivit s# test#m dac# c este ("+ -nainte de apelul lui getc/ar< apelul trebuie s# aib# loc -nainte ca s# test#m caracterul c. Conderea lui WW este mai mare dec-t cea a lui XX i am-ndoua sunt mai mici dec-t cele ale operatorilor rela ionali i de egalitate5 asa ca e)presii de tipul1 i Z lim81 WW Ic R getc/arIJJ UR LNnL WW c UR ("+ nu mai au nevoie de parante'e suplimentare. Dar5 deoarece ponderea lui UR este mai mare dec-t cea a asign#rii5 este nevoie de parante'e -n1 Ic R getc/arIJJ UR LNnL pentru a ob ine re'ultatul dorit. "peratorul unar de negatie U convertete un operand non'ero sau adev#rat -n 'ero i un operand 'ero sau ,als -n 1. " utili'are obinuit# a lui U este -n construc ii de tipul i, IUinGordJ mai degrab# dec-t i, IinGord RR =J. 1.2... O"era$'ri de i(0reme($are #i de0reme($are. 6imbajul C++ o,er# doi operatori neu'uali pentru incrementarea i decrementarea variabilelor. "peratorul de incrementare ++ adun# 1 la operandul s#u< operatorul de decrementare 88 scade 1. &m ,olosit ,recvent ++ pentru a incrementa variabilele5 de e)emplu1 i, Ic RR LNnLJ ++nl< &spectul neobinuit al lui ++ i al lui 88 este acela c# ei pot ,i ,olosi i at-t ca operatori pre,i) I-naintea variabilei5 ca -n ++nJ c-t i ca operatori su,i) Idup# variabil#5 ca -n n++J. 7n ambele ca'uri5 e,ectul este incrementarea lui n. Dar e)presia ++n -l incrementea'# pe n -nainte de a8i ,olosi valoarea5 -n timp ce e)presia n++5 -l incrementea'# pe n dup# ce a ,ost ,olosit# valoarea
-5-

lui. &ceasta -nseamn# c# -ntr8un conte)t -n care valoarea este ,olosit#5 i nu numai e,ectul5 ++n i n++ s-nt di,eri i. Dac# n este !5 atunci1 ) R n++< -l ,ace pe ) egal cu !5 dar1 ) R ++n< -l ,ace pe ) egal cu $. 7n ambele ca'uri5 n devine $. "peratorii de incrementare i decrementare se pot aplica numai variabilelor. " e)presie de tipul ) R Ii+jJ++ este ilegala. 7ntr8un conte)t -n care valoarea nu este ,olosit#5 ci numai e,ectul de incrementare5 ca -n1 i, Ic RR LNnLJ nl++< alege i modul pre,i) sau su,i) dup# gustul dumneavoastr#. Dar e)ist# totui situa ii -n care unul sau altul este apelat dinadins. De e)emplu5 s# consider#m ,unc ia s[uee'eIs5cJ care elimin# toate apari iile lui c din irul s1 s[uee'e Is5cJ AQ terge toate apari iile lui c din s QA c/ar s?@< int c< T int i5 j< ,or Ii R j R =< s?i@ UR LN=L< i++J i, Is?i@ UR cJ s?j++@ R s?i@< s?j@ R LN=L<V De ,iecare dat# c-nd apare un caracter non8c el este copiat -n po'i ia j curent# i numai dup# aceea j este incrementat pentru a ,i gata pentru urmatorul caracter. &ceast# construc ie este ec/ivalent# cu urmatoarea1 i, Is?i@ UR cJ Ts?j@ R s?i@< j++<V ;n alt e)emplu de construc ie similar# este luat# din ,unc ia getline -n care putem -nlocui1 i, Ic RR LNnL Ts?i@Rc< ++i<V cu mult mai compact# construc ie este1 i, Ic RR LNnLJ s?i++@ R c< Ca un al treilea e)emplu ,unc ia strcatIs5tJ care concatenea'# irul t la s,-ritul irului s. strcat presupune c# e)ist# su,icient spa iu -n s pentru a pastra combina ia. strcat Is5tJ AQ concatenea'# pe t la s,-ritul lui s QA c/ar s?@5 t?@< AQ s trebuie s# ,ie su,icient de mare QA Tint i5 j< i R j R =< G/ile Is?i@ UR LN=LJ AQ gasete s,-ritul lui s QA i++< G/ile IIs?i++@ R t?j++@J UR LN=LJ< AQ copia'a pe t QAV Cum ,iecare caracter este copiat din t -n s5 se aplic# post,i)ul ++ at-t lui i c-t i lui j pentru a ,i siguri c# s-nt pe po'i ie pentru urm#torul pas din bucl#. 1.2./ Pri'ri$31i e '"era1ii 'r. Criorit# iile opera iilor se cercetau -n procesul e)punerii lor. 7n paragra,ul de ,a # sunt repre'entate opera iile descrise mai sus i e indicat# ordinea -ndeplinirii lor. Centru compararea priorit# ilor opera iilor le pre'ent#m -n tabel -n ordinea descreterii priorit# ii. Coloana tabelului \"rdinea e)ecu iei] determin# consecutivitatea -ndeplinirii pentru opera iile cu aceiai prioritate. De e)emplu -n e)presia ORd+Rb8R4 ^consecutivitatea -ndeplinirii opera iilor se va determina -n ordinea de la dreapta la s-nga i -n re'ultat b se va micora cu 45 d se va m#ri cu b845 ORd+b84. "rdinea de evaluare5 descris# de o simpl# opera ie de atribuire5 va ,i urm#toarea1 bRb84< dRd+Ib8 4J< ORd<

-6-

1.4. Ma%ive. 1.4.1 De%0rierea ma%ive 'r. %asivul repre'int# un ir ordonat de elemente de acelai tip. +aptul5 c# masivul este un tot -ntreg5 compus din c-teva elemente ne permite s# numim variabila de tip masiv variabil# de tip compus. %asivul se poate caracteri'a prin nume5 tip5 dimensiune. +ormatul comun de descriere a masivelor este1 tip nume[d1][d1][dn]; unde 1 tip este tipul comun pentru toate elementele masivului5 adic# tipul masivului. Tip al unui masiv poate ,i orice tip de date deja de,init1 -ntreg5 real5 caracterial .a. nume este numele masivului. 7n calitate de nume al masivului este ,olosit orice identi,icator. %ai mult ca at-t5 deoarece numele masivului este identi,icator5 asupra lui se r#sp-ndete totul ce8i indicat -n compartimentul ]Nume de variabile Iidenti,icatoriJ]5 d1,d2,dn8 dimensiunile masivului. Dimensiunea masivului indic# num#rul de elemente pre'ente -n masiv. Dimensiunea masivului poate ,i o e)presie constant# cu re'ultat -ntreg. 7n dependen # de cantitatea de dimensiuni5 masivele se clasi,ica -n1 1. masive unidimensionaleIcu 1 dimensiuneJ< masivul unidimensional repre'int# un ir de elemente aranjate uni,orm -ntr8un r-nd. +iecare element al unui masiv unidimensional are 1 coordonat#1 num#rul de ordine a elementului -n ir. 2. masive bidimensionale Icu 2 dimensiuniJ<
-7-

masivul bidimensional repre'int# o structur# ,ormat# din r-nduri i coloane. +iecare element al unui masiv bidimensional are 2 coordonate1 num#rul r-ndului i num#rul coloanei. 3. masive tridimensionale Icu 3 dimensiuniJ< masivul tridimensional repre'int# o structur# ec/ivalent# cu un cub -n volum cu 3 dimensiuni1 lungimea5 l# imea5 -n#l imea. +iecare element al unui masiv tridimensional are 3 coordonate1 num#rul r-ndului I-n lungimeJ5 num#rul coloanei I-n l# imeJ i num#rul -n#l imei I-n ad-ncimeJ. 4. masive multidimensionale. ()emple de descriere a masivelor1 int vector[20]; vector 8 masiv unidimensional din 2= de numere -ntregi< float x[10]; ) 0 masiv cu 1= elemente de tip -ntreg< float matrix[7][ ]; matri) 8 masiv bidimensional din $3 I*QHJ de numere ,lotante< c!ar fra"a[25]; ,ra'a 8 masivIpropo'itieJ din 2! de caractere < int #pa#e[15][30][1$]; space 8 masiv tridimensional de numere -ntregi Imasiv unidimensional de masive bidimensionaleJ. 1.4.!. A00e%u a e eme($e e ma%ivu ui. Cu toate c# masivul este un tot -ntreg5 nu se poate vorbi despre valoarea masivului -ntreg. %asivele con in elemente cu valorile c#rora se operea'# -n program. +iecare element -n masiv -i are indicele i valoarea sa. 7n calitate de indice a unui element se ,olosete un num#r -ntreg ce indic# num#rul de ordine al elementului -n masiv. (numerarea elementelor -n masiv con,orm num#rului de ordine se -ncepe de la 'ero. Deci5 indicele unui element poate avea valori de la = p-na la d815 unde d este dimensiunea masivului. 7n calitate de valoare a unui element din masiv poate servi orice num#r de tipul indicat la descrierea masivului5 adic# tipul valorii atribuit# oric#rui element din masiv trebuie s# ,ie compatibil cu tipul masivului. .inta)a de acces la orice element a unui masiv este urm#toarea1 nume[i1][i2]%%[in] . ;nde nume este numele masivului5 i10indicele elementului -n dimensiunea 15 i28indicele elementului -n dimensiunea 25 in 8 indicele elementului -n dimensiunea n. 7n cele mai dese ca'uri se operea'# cu masive unidimensionale i bidimensionale. &ccesul la un element al unui masiv unidimensional se ,ace -n ,elul urm#tor1 nume?i@< unde nume 8 numele masivului5 i numarul de ordine a elementului -n masiv. ()emplu1 vector[5]; se accesea'# elementul cu num#rul de ordine ! din masivul vector. fra"a[20]; se accesea'# elementul cu indicele 2= din masivul ,ra'a. &ccesul la un element al unui masiv bidimensional se ,ace prin nume[i][&]; unde i este numarul r-ndului pe care se a,l# elementul< j este num#rul coloanei pe care se a,l# elementul. ()emplu1 matrix[4][7]; se accesea'# elementul de pe r-ndul 4 i coloana * a masivului matri). '[0][0]; se accesea'# primul element al masivului5 adic# r-ndul =5 coloana =. 7n ca'ul c-nd masivul este de tip simplu5 atribuirea valorii unui element al masivului se ,ace ca i -n ca'ul atribuirii valorii unei variabile simple. ()emple1 x[0](7%125; vector[1 ])(1; matrix[1][1](5%5; fra"a[3](*+*; #pace [3][5][2]($; 7n ca'urile c-nd masivul este de tip structurat5 atribuirea valorii i accesul la un element al masivului se ,ace con,orm regulilor de atribuire i accesare pentru variabile structurate. ;n element al masivului poate ap#rea -n orice e)presie5 unde e admisibil# pre'en a unei variabile de tip compatibil cu tipul valorii elementului. 1.4... I(i1ia i-area ma%ive 'r. Deseori e necesar ca elementele masivului s# posede valori c/iar la momentul descrierii masivului.
-$-

Crocesul de atribuire a valorilor elementelor masivului -n timpul descrierii lui se numete ini iali'area masivului. .inta)a de ini iali'are a unui masiv unidimensional este1 tip nume[d](,v0,v1,v2,,vn-1-; unde tip este tipul masivului5 nume este numele masivului5 v=5v15v25vn81 valorile respective ale elementelor nume?=@5nume?1@ etc. ()emplu1 int x[$](,1,3,15,7,1 ,11,13,5-; 7n acest ca' elementele masivului vor avea urm#toarele valori1 x[0](1; x[1](3; x[2](15; x[3](7; x[4](1 ; x[5](11; x[6](13; x[7](5% ( de men ionat ,aptul5 c# indicii masivului se sc/imb# -ncep-nd de la 'ero. &dic# la descrierea masivului valoarea ma)im# a indicelui masivului coincide cu num#rul de elemente -n masiv minus unu. 6a ini iali'area masivului nu e numaidec-t de indicat dimensiunile masivului. Compilatorul va determina num#rul elementelor dup# descrierea masivului i va ,orma un masiv cu m#rimea respectiv#. De e)emplu1 int x[](,1,3,15,7,1 ,11,13,5-; (lementele masivului vor primi valori ca i -n ca'ul precedent. Mom e)amena -nc# c-teva e)emple de ini iali'are a masivelor1 float vector[4](,1%2,34%57,$1% ,100%77-; AA vector 0 masiv din 4 elemente de tip ,loat< int di.it[5](,1,2,3-; AA digit 0 masiv de tip -ntreg din ! numere5ultimelor dou# elemente li se atribuie valoarea 'ero. c!ar m[5](,/0*,*1*,*2*,*3*-; AA m 0 masiv din ! caractere5 ultimul element are valoarea nul8 caracter< float con#t '[4](,25,26,17,1$-; AA ini iali'area masivului F?4@5 elementele c#ruia sunt constante de tip ,loat i nu pot ,i sc/imbate -n decursul -ndeplinirii programului. .# e)amen#m ini iali'area masivului bidimensional1 4nt a[3][3](, ,1,4,2-, ,7,5,3-, ,$,6, - -; Ini iali'area masivului bidimensional se e,ectuea'# pe r-nduri. (lementele acestui masiv au urm#toarele valori1 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]($; a[2][1](6; a[2][2]( ; 6a ini iali'area masivului dat ,iecare r-nd se include -n acolade . Dac# -n r-ndurile indicate de noi nu vor ajunge elemente pentru completarea r-ndurilor5 -n acest ca' -n locul elementelor pentru care n8au ajuns valori vor ap#rea 'erouri. Dac# -n acest e)emplu vom omite acoladele interioare5 re'ultatul va ,i acelai. Dac# lipsesc acoladele interioare 5elementelor masivului se vor atribui valorile -n mod succesiv e)trase din list# .Completarea masivului se e,ectuia'# pe r-nduri. (lementele masivului pentru care -n list# n8au ajuns valori5 primesc valorile 'ero. Dac# -n list# s-nt mai multe valori dec-t elemente5 atunci o ast,el de list# se socoate greit#. Cele men ionate mai sus se re,er# la toate tipurile de masive. ()emple1 Ini iali'area masivului bidimensional1 int a[3][3](, 1,4,2,7,5,3,$,6, -; Trei metode ec/ivalente de ini iali'are a masivului tridimensional1 int p[3][2][2](, , ,1,2-,,3,4- -, , ,5,6-,,7,$- -, , , ,10-,,11,12- - -; int p[3][2][2](, ,1,2,3,4-, ,5,6,7,$-, , ,10,11,12- -; int p[3][2][2](,1,2,3,4,5,6,7,$, ,10,11,12-; 1.4./. E*em" e de "re u0rare a ma%ive 'r. Cre'ent#m 2 e)emple de prelucrare a masivelor unidimensional i bidimensional1 E*em" u 1. Crelucrarea unui masiv unidimensional1 (ste dat un masiv unidimensional ) cu n elemente. Compara i suma primei jum#t# i a masivului cu media aritmetic# jumat# ii a doua a masivului. 5include6#tdio%!7 5include6conio%!7
-

5include6mat!%!7 5include6#tdli+%!7 void main8void9 , int x[20],n,:,i,#(0; float m,#1(0,r(0; printf8;<n2ule.e marimea ma#ivului n6(20<n;9; #canf8;=d;,>n9; for8i(0;i6n;i))9, printf8;2ule.e elementul =d<n;,i9; #canf8;=d;,>x[i]9;printf8;?a#ivul initial e#te@<n;9; for8i(0;i6n;i))9, printf8;=d ;,x[i]9;if 8fmod8n,29((09 :(floor8nA29; el#e :(floor8nA29)1; for 8i(0;i6n;i))9, if 8i6:9 #)(x[i]; el#e ,#1)(x[i]; r));- m(#1Ar; printf8;<nBuma primei &umatati e#te =d<n;,#9; printf8;?edia la a doua &umatate e#te =f;,m9; .etc!89;E*em" u !. Crelucrarea unui masiv bidimensional1 (ste dat un masiv bidimensional. K?n5n@. Calcula i produsul elementelor po'itive pare din aria /aurat#. 5include6#tdio%!7 5include6conio%!7 5include6mat!%!7 5include6#tdli+%!7 void main8void9 , int x[20][20],n,i,&,p,:; printf8;<n2ule.e marimea ma#ivului n6(20<n;9; #canf8;=d;,>n9; printf8;<n2ule.e elementele ma#ivului<n;9; for8i(0;i6n;i))9, for8&(0;&6n;&))9, printf8;<n2ule.e elementul x[=d][=d]<n;,i,&9; #canf8;=d;,>x[i][&]9;-printf8;<n?a#ivul iniCial e#te@<n;9; for8i(0;i6n;i))9, for8&(0;&6n;&))9, printf8;=d ;,x[i][&]9;printf8;<n;9;p(1; :(floor88float9nAfloat8299; for8i(0;i6n;i))9, for8&(:;&6n;&))9, if 8 8x[i][&]709>>8fmod8x[i][&],29((09 9 p(pDx[i][&]; -- printf8;<nErodu#ul elementelor din aria !aFurata e#te(=d :(=d<n;,p,:9; .etc!89; -

- 10 -

1.5 6iruri de 0ara0$ere. Numim ir o succesiune de caractere ale al,abetului5 adic# o propo'i ie. .pre deosebire de alte limbaje de programare5 limbajul C++ nu con ine un tip de date special ce desemnea'# iruri de caractere. 6imbajul C++ operea'# cu irurile cum ar lucra cu o succesiune de date de tip caracter amplasate -ntr8un masiv. &ici ,iecare simbol din ir este o component# aparte a masivului. Deci5 pentru a de,ini o variabil#5 valoarea careia va ,i un ir de caractere5 -n limbajul C++ trebuie de declarat un masiv de tip c/ar cu o lungime egal# cu cantitatea ma)imal posibil# de caractere -n ir. ;rm#torul e)emplu arat# cum s8ar putea declara un asemenea masiv cu scopul de a culege un nume de la tastatur# i apoi de8l a,iat la monitor1 void main8void9 , c!ar a[20]; int i; printf 8;2ule.e numele;9; for8i(0; i620; i))9 #canf 8;=c;,a[i]9; printf8;Gumele dumneavoa#tra e#te@;9; for8i(0; i620; i))9 printf8;=c;,a[i]9; 7n acest program se observ# multe neajunsuri i incomodit# i. Centru a culege numele aici este ,olosit un ciclu cu 2= repet#ri care citete c-te un caracter de la tastatur# i8l -nscrie -n celula corespun'#toare a masivului a?2=@. 9e'ult# c# cu ajutorul acestui program se poate culege numai nume alc#tuite din 2= de caractere5 sau nume din O caractere cu 2=8O spa ii dup# ele. Iar a,iarea numelui este ,#cut# cu ajutorul ,unc iei print,I J inclus# -n ciclu5 care a,ia'# la monitor c-te un caracter din numele cules. Not#1 6a declararea masivului de tip c/ar pentru descrierea unui ir se indic# m#rimea masivului cu o celul# mai mult de c-t lungimea ma)im# presupus# a irului din cau'# c# ultima celul# din masiv este re'ervat# pentru simbolul nul 4A=4. (vident c# imposibil de programat -ntr8un limbaj de nivel -nalt ,olosind ast,el de mecanisme. Din cau'a c# programele pentru prelucrarea in,orma iei te)tuale au o popularitate ,oarte mare5 limbajul C++ con ine mecanisme care uurea'# lucru cu irurile de caractere. &ici irurile s-nt prec#utate ca un tip special de masive5 ,apt ce permite introducerea i a,iarea irurilor ca un tot -ntreg. Centru -ntroducerea irului -n memoria calculatorului este ,olosit# ,unc ia .et#8 9. &ceast# ,unc ie are urm#toarea sinta)#1 .et# 8nume9; unde nume este parametrul ,unc iei i repre'int# numele variabilei tip ir5 adic# a masivului de tip c!ar. ()emplu1 void main8void9 , int i; c!ar name [15]; printf 8;2ule.e numele@;9; .et#8name9; printf 8;Gumele dumnevoa#tra e#te@;9; for 8i(0; i615; i))9 printf 8;=2;, name[i]9; &ici ,unc ia .et#8 9 va prec#uta primele 14 caractere culese de la tastatur# ca valoare a irului cu nume name5 iar ultima celul# din masiv va con ine simbolul nul \N=]. 7n timpul lucrului ,unc iei .et#8 9 e)ecutarea programului se stopea'#. +unc ia .et#8 9 ateapt# p-n# utili'atorul va culege un ir de la tastatur#. Centru ca te)tul cules s# ,ie atribuit ca valoare unei variabile de tip ir5 utili'atorul trebuie s# culeag# tasta (NT(9. Dup# aceasta propo'i ia culeas# va deveni valoare a variabilei de tip ir5 iar cursorul va trece -n r-nd nou pe monitor. &nume in timpul culegerii tastei (NT(9 compilatorul C++ adaog# la s,-ritul irului simbolul nul. 7n e)emplu 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. 7ns# a,iarea numelui r#m-ne incomod#. &ici5
- 11 -

dac# vor ,i culese mai pu in de 1! simboluri de la tastatur#5 atunci elementele masivului name?1!@ ce urmea'# dup# simbolul nul vor con ine m#rimi aleatoare. 7n a,ar# de ,unc ia getsIJ limbajul C++ mai con ine o modalitate de a -ntroduce o propo'i ie -n memorie ca valoare a unei variabile de tip ir. +olosind ,unc ia de -ntroducere cu ,ormat scan,IJ5 se poate aplica urm#toarea sinta)#1 scan,I4>s45nameJ< care atept# culegerea de la tastatur# a unui ir de caractere5 pe care apoi Idupa culegerea tastei (NT(9 -l atribuie ca valoare variabilei name. &ici >s este ,ormatul tipului ir de caractere. Centru a,iarea la monitor a unui ir de caractere este ,olosit# ,unc ia put#89. +unc ia put#8 9 poate avea -n calitate de parametru numai un ir de caractere. .inta)a ,unc iei este urmatoarea1 putsIparametruJ< unde -n calitate de valoare poate ,i ,olosit un ir de caractere sau numele unei variabile de tip ir de caractere. ()emplu1 put#8;Hlena;9; put#8name9; %ajoritatea compilatoarelor C++ trec cursorul din r-nd nou dup# e)ecutarea ,unc iei put#89. 7ns# e)ist# i aa versiuni de compilatoare5 care nu -ndeplinesc aceast# trecere din r-nd nou. 7n acest ca' e binevoit# ,olosirea simbolului de trecere -n rind nou \Nn]. ()emplu1 put#8;Hlena<n;9; +olosind ,unc iile getsI J i putsI J e)emplul de mai sus se poate scrie -n ,elul urm#tor1 void main 8void9 , c!ar name[15]; put# 8; 2ule.e numele;9; .et# 8name9; put# 8;Gumele dv# e#te@;9; put# 8name9; 1.5.1. Ma%ive de #iruri. Declar-nd un masiv c/ar .?2=@ putem p#stra -n el valoarea unui ir de caractere. 7n ca'ul5 c-nd este nevoie de prelucrat o totalitate din c-teva iruri5 e comod de ,olosit masive de iruri. ;n masiv de iruri este un masiv bidimensional tip c/ar compus din linii i coloane. Ce ,iecare linie din aa masiv va ,i -nscris c-te un ir de caractere. Num#rul ma)imal de iruri ast,el -nscrise -n masiv va ,i egal cu cantitatea liniilor din masiv. De e)emplu1 c!ar propo"itie[10][35] este un masiv5 -n care pot ,i scrise 1= variabile de tip ir de caractere5 ,iecare av-nd lungimea ma)imal# de 34 de caractere. Centru a accesa un ir din aa masiv se va ,olosi sinta)a1 propo"itie[i]5 unde i este num#rul r-ndului din masiv unde se va a,la irul. Centru a accesa un caracter al irului i din masiv se va ,olosi sinta)a1 propo"itie[i][&] unde j este po'i ia caracterului -n irul i. 1.5.!. 7u(01ii 8' '%i$e a "re u0rarea #iruri 'r de 0ara0$ere. %ajoritatea compilatoarelor CAC++ au incorporate ,unc ii speciale pentru lucrul cu irurile. (vident5 c# pentru aa scopuri se poate crea ,unc ii proprii5 dar este mai e,ectiv de ,olosit ,unc iile din bibliotecile standarde. Crototipurile acestor ,unc ii s-nt descrise -n biblioteca string./ i deci pentru ,olosirea lor5 -n program trebuie inclus# aceast# bibliotec# ,olosind sinta)a1 PincludeZstring./Y. ;nele din aceste ,unc ii s-nt1 1. 7u(01ia %$r0a$9:+ Crototip1 c/ar Qstrcat Ic/ar Qdest5 const c/ar QsursaJ< (,ect1 &daog# irul surs# la s,-ritul irului destina ie !. 7u(01ia %$r0m"9:+ Crototip1 int strcmp Iconst c/ar Q .15 const c/arQ .2J< (,ect1 Compar# dou# iruri. 6imbajul C nu permite compararea a dou# iruri -n ,orma1 i, I.1RR.2J. &ici compararea este ,#cut# cu ajutorul ,unc iei strcmpIJ care -ntoarce valoare nul#5 -n ca' c# irurile s-nt identice5 sau o valoare di,erit# de 'ero5 -n ca' c# irurile nu coincid. Dup# e)ecutarea ,unc iei strcmpIJ5 va
- 12 -

,i -ntoars# o valoare -ntreag# care va ,i1 mai mic# ca = dac# .1Z.2< mai mare ca = dac# .1Y.2< egal# cu = daca .1RR.2< .. 7u(01ia %$r0m"i9:+ Crototip1 int strcmpi Iconst c/ar Q.15 const c/ar Q.2J< (,ect1 compar# 2 iruri ,#r# a lua -n considera ie registrele simbolurilor. /. 7u(01ia %$r(0m"9:+ Crototip1 int strncmpI const c/ar Q.15 const c/ar Q.25 si'eBt OJ< (,ect1 ,unc ia strncmpIJ compar# un num#r dat de cartere -n 2 variabile de tip ir de caractere. 2. 7u(01ia %$r(0m"i9:+ Crototip1 int strncmpiI const c/ar Q.15 const c/ar Q.25 si'eBt OJ< (,ect1 Compar# un num#r dat de caractere5 -ncep-nd cu primul5 din 2 iruri de caractere ,#r# a ,ace di,eren # -ntre caractere minuscule i cele majuscule. 4. 7u(01ia %$r e(9:+ Crototip1 si'eBt strlenIconst c/ar Q.J< (,ect1 Determin# lungimea irului de caractere .. 5. 7u(01ia %$r0",9:+ Crototip1 c/ar QstrcpFIc/ar Q.15 const c/ar Q.2J< (,ect1 Copie irul .2 -n irul .1. Dup# -ndeplinirea ,unc iei strcpF I.15.2J< irul .1 -i va pierde valoarea ini ial# i va avea valoarea nou# din .2. Iar .2 va r#m-ne nesc/imbat. ;. 7u(01ia %$r0%"(9:+ Crototip1 si'eBt strcspn Iconst c/ar Q.15 const c/ar Q.2J< (,ect1 Determin# po'i ia caracterului din irul .15 care primul a ,ost -nt-lnit -n irul .2. 7ntoarce o valoare de tip -ntreg egal# cu num#rul de ordine a acestui caracter. <. 7u(01ia %$r%"(9:+ Crototip1 si'eBt strspnIconst c/ar Q.15 const c/ar Q.2J< (,ect1 Determin# po'i ia caracterului din irul .1 -ncep-nd cu care .1 di,er# de .2. 7ntoarce o valoare tip -ntreg egal# cu po'i ia acestui caracter. 1=. 7u(01ia %$rdu"9:+ Crototip1 c/ar Qstrdup Iconst c/ar Q.J< (,ect1 Dublea'# irul de caractere .. 7n ca' de succes ,unc ia strdupIJ -ntoarce ca valoare indicatorul adresei de memorie5 ce con ine irul dublat. _i -ntoarce valoare nul# -n ca' de eroare. +unc ia strdupI.J ,ace o copie a irului .5 ob in-nd spa iu prin apelul ,unc iei mallocIJ. Dup# ,olosirea irului dublat programatorul trebuie s# elibere'e memoria alocat# pentru el. 11. 7u(01ia %$r >r9:+ Crototip1 c/ar QstrlGr Ic/ar Q.J< (,ect1 Trece toate caracterele din irul . -n ec/ivalentul lor minuscul. 7n calitate de parametru ,unc ia ,olosete o variabil# de tip ir de caractere. 7n re'ultatul e)ecut#rii acestei ,unc ii5 dac# -n ir se vor con ine caractere majuscule5 ele vor ,i trans,ormate -n ec/ivalentul lor minuscul5 iar dac# -n ir caractere majuscule nu se vor con ine 8 irul va r#m`ne nesc/imbat. 1!. 7u(01ia %$ru"r9:+ Crototip1 c/ar QstruprIc/ar Q.J< (,ect1 trans,orm# toate caracterele din ir -n ec/ivalentul lui majuscul. 1.. 7u(01ia %$r(0a$9: Crototip1 c/ar Qstrncat Ic/ar Qdest5 const c/ar Qsursa5 si'eBt OJ< (,ect1 ,unc ia strncatIJ adaog# un num#r egal cu O caratere de la -nceputul irului sursa la s,#ritul irului dest. 1/. 7u(01ia %$r(0",9:+ Crototip1 c/ar QstrncpF Ic/ar Qdest5 const c/ar Qsursa5 si'eBt nJ< (,ect1 Copie un numar dat de caractere dintr8un ir -n altul< 12. 7u(01ia %$r(%e$9:+ Crototip1 c/ar Qstrnset Ic/arQ s5 int c/5 si'eBt nJ <
- 13 -

(,ect1 +unc ia strnsetIJ copie caracterul c/ pe primele n locuri din irul Q.. 7n ca' c# nYstrlen IsJ5 atunci n va deveni egal cu strlenIsJ 14. 7u(01ia %$rrev9:+ Crototip c/ar QstrrevI c/ar QsJ< (,ect1 +unc ia strrevIJ inversea'# irul de caractere .. Dup# e)ecu ia ,unc iei strrevIJ primul caracter din ir va ,i sc/imbat cu locul cu ultimul caracter5 caracterul 2 cu penultimul5 etc. ,#r# a lua -n considera ie caracterul nul. 15. 7u(01ia %$r%$r 9:+ Crototip1 c/ar QstrstrIconst c/ar Qs15 const c/ar Qs2J< (,ect1 +unc ia strstrIJ determin# dac# irul .2 se con ine -n irul .1. +unc ia -ntoarce un indicator la caracterul din .1 -ncep-nd cu care a ,ost depistat irul .2. 1;. 7u(01ia %$r0&r9:+ Crototip1 c/ar Qstrc/rIconst c/ar Q.5 int cJ< (,ect1 .canea'# irul . -n c#utarea caracterului c. 7n ca' de succes ,unc ia -ntoarce un indicator la caracterul din . care primul a ,ost g#sit identic cu caracterul c. 7n ca' de eroare Idac# aa caracter nu e)ist# -n irul .J ,unc ia -ntoarce valoare nul#. 1<. 7u(01ia %$rerr'r9:+ Crototip1 c/ar QstrerrorIint errnumJ< (,ect1 Determin# eroarea dup# num#rul erorii i returnea'# un indicator la irul de caractere ce con ine descrierea erorii. !=. 7u(01ia %$r"br?9:+ Crototip1 c/ar QstrpbrOIconst c/ar Qs15 const c/ar Qs2J< (,ect1 +unc ia caut# -n irul .1 primul caracter ce e)ist# i -n irul .2< 7n ca' de succes ,unc ia -ntoarce un indicator la primul caracter din .1 ap#rut -n .2. !. 7ORMULAREA PROBLEMEI. &vem date 2 polinoame cu coe,icien i -ntregi CI)J i aI)J. .e cere1 aJ .# se determine toate r#d#cinile -ntrgi comune< bJ .# se evalue'e e)presia (RCIa+aIaJJ< cJ .# se eviden ie'e metoda matematic# utili'at#. P9*:@"(*( +"(A1*(A1+...+"!*!+"1*+"= B9*:@C(*(+C(A1*(A1+...+C!*!+C1*+C= ;nde pn5 pn815 ...5 p25 p15 p=5 [n 5 [n81 5...5 [25 [15 [= sunt numere -ntregi5 iar n este num#r natural . Centru a re'olva problema calcul#m r#d#cinele polinoamelor separat i apoi le compar#m. Calcul#m r#d#cina primului polinom i inlocuim -n cel de8al doilea polinom pentru a observa dac# r#d#cina polinomului -nt-i este comun# celui de8al doilea. 7ntr8un cuv-nt5 pentru re'olvarea acestei probleme avem posibilitatea de a ,olosi mai multe metode5 unele ,iind mai ra ionale5 iar altele nu . .. METODA MATEMATICD &ceast# problem# const# -n calcularea a r#d#cinelor comune -ntregi a dou# polinoame de gradul ( i calcularea e)presiei E@P9a+B9a:. Centru a calcula aceast# problem# se poate de calculat r#d#cinele ,iec#rui polinom aparte i apoi de comparat. 9#d#cinele pot ,i calculate prin descompunere a polinomului sau prin studiere termenului liber. & doua sarcin# a problemei const# -n veri,icarea e'presiei1 E@P9a+B9a::. &dic# -n polinomul aI)J -nlocuim parametrul a i ob inem 1 B9a +C(A1a(A1+...+C!a!+C1a+C=:@C(a( a+B9a:@C(a(+C(A1a(A1+...+C!a!+C1a+C=+a Deci -n ,inal primim 1 E@P9C(a(+C(A1a(A1+...+C!a!+C1a+C=+a: Deci -n polinomul CI)J -n loc de valoarea necunoscutei * -nlocuim valoarea 9a+B9a::.

- 14 -

&st,el ob inem i veri,ic#m e)presia propus# -n sarcina problemei. %ai sus sunt descrise numai unele din metode care ne pot ,olosi -n re'olvarea problemei. &ceast# problem# poate ,i re'olvat# mai simplu sau mai compus5 mai ra ional sau mai ira ional. Totul depinde de metoda aleas#. /.TEETUL PROGRAMULUI IN LIMBAJUL C++. #include<conio.h> #include<iostream.h> #include<math.h> void main(){ int p[30],q[30],n,i,j, ! "loat sp,sq,#,e,a! clrscr()! cout<<$%na)%n$! cout<<$n&$!cin>>n! cout<<$%n'ntrod. coe". polinomului (())*%n$! "or(i&n!i>&0!i++){cout<<$p[$<<i<<$]&$!cin>>p[i]!, cout<<$%n'ntrod. coe". polinomului -())*%n$! &0! "or(i&n!i>&0!i++){cout<<$q[$<<i<<$]&$!cin>>q[i]!, "or(i&+.00!i<&.00!i//){sp&p[0]!sq&q[0]! "or(j&.!j<&n!j//){sp/&p[j]0po1(i,j)! sq/&q[j]0po1(i,j)!, i"(sp&&022sq&&0) {cout<<$)&$<<i<<$ $! &.!,, i"( &&0) cout<<$(olinoamele nu au radacini comune.$! cout<<$%n%n3)%n$! cout<<$a&$!cin>>a! #&0!e&0! "or(i&0!i<&n!i//) e/&q[i]0po1(a,i)! "or(i&0!i<&n!i//) #/&p[i]0po1(a/e,i)! cout<<$%n#&$<<#! 4etch()!,

2. DESCRIEREA INSTRUCFIUNILOR UTILIGATE HN PROGRAM. 7n te)tul programului de mai sus am utili'at urm#toarele instruc iuni 1 I(%$ru01iu(ea 0i0 i03 7OR. Ciclul +"9 posed# urm#toarele caracteristici1 num#rul de repet#ri ale ciclului este cunoscut de la -nceputul e)ecut#rii lui< conducerea ciclului este e,ectuat# cu ajutorul unei variabile de tip int5 numit# parametrul ciclului5 care5 -n acest proces ciclic primete valori consecutive de la valoarea ini ial# dat# p`n# la valoarea ,inal# dat#. .inta)a instruc iunii este urm#toarea1 for8expre#ie1;expre#ie2;expre#ie39 in#trucCiune; unde e)presie18e)presie de ini iali'are a parametrului ciclului5 e)presie28e)presie de control5 e)presie38 e)presie de incrementareAdecrementareIcorec ieJ a parametrului ciclului. Instruc iunea ciclic# ,or lucrea'# -n ,elul urm#tor1 la -nceput se calculea'# e)presia de ini iali'are. &poi5 dac# e)presia de control este adev#rat#5 atunci se -ndeplinete instruc iunea. Dup# -ndeplinirea instruc iunei se e)ecut# e)presia de corec ie i din nou se controlea'# e)presia de control5 juste ea c#reia duce la -ndepliniea repetat# a instruc iunii. Dac# e)presia de control are valoarea ,als# atunci -ndeplinirea ciclului ,or se termin#5 adic# controlul se transmite instruc iunii
- 15 -

programului ce urmea'# dup# instruc iunea ,or. De e)emplu1 de calculat FR iAIi+1J< unde iR1..!=< '(0; for8i(1;i6(50;i))9 ,')(iA8i)19 -; aici iR1 este e)presie de ini iali'are5 iZR!= 0 e)presie de control5 i++ 8 e)presie de corec ie. &coladele m#rginesc corpul ciclului Iinstruc iuneaJ. 7n ca' c-nd corpul ciclului e compus numai dintr8o instruc iune5 acoladele nu sunt necesare. .c/ema algoritmic# -ndeplinrii instruc iuni ,or este pre'entat# pe desen. Din sc/ema algoritmic# se vede5 c# instruc iunea ,or este un ciclu cu precondi ie 1 deci'ia de a -ndeplini din nou ciclul sau nu se ia -naintea -nceperii -ndeplinirii lui i evident5 se poate -nt-mpla ca corpul ciclului s# nu ,ie -ndeplinit nici o dat#. C-teodat# apare necesitatea ieirii din ciclu -nainte de termen. Centru aceasta -n corpul ciclului5 -n locul unde se dorete ieirea din ciclu se ,olosete instruc iunea 39(&b5 dup# -ndeplinirea c#reia are loc transmiterea controlului la instruc iunea urm#toare dup# ciclu. 6imbajul C++ nu pune restruc ii la tipul instruc iunilor din cadrul corpului ciclului. 7n aa mod5 corpul ciclului poate ,i alc#tuit din instruc iuni i simple i compuse5 -n particular8corpul unui ciclu poate ,i alt ciclu. 7n unele algoritme apar situa ii5 c-nd e necesar# imbricarea unui ciclu -n altul. I(%$ru01iu(ea de rami8i0are I7 #i I7AELSE. 7n structurile rami,icate de calcul5 unele etape nu -ntotdeauna se -ndeplinesc -n una i aceiai ordine. 7n dependen # de careva condi ii5 care sunt controlate Iveri,icateJ pe parcursul calculelor5 se aleg pentru e)ecutare di,erite consecutivit# i de instruc iuni. Centru descrierea ast,el de procese -n limbajul C++ se ,olosesc instruc iunile rami,icate Icondi ionaleJ. " instruc iune condi ional# selectea'# o singur# instruc iune dintre alternativele sale5 pe care apoi o e)ecut#. &st,el de instruc iuni sunt i, i i, 0 else. Instruc iunea i, e compus# i sinta)a ei admite unul din urm#toarele ,ormate1 ifI8expre#ie9Iin#trucCiune #au ifI8expre#ie9Iin#trucCiune1Iel#eIin#trucCiune2; 7n instruc iunile de rami,icare lipsete I<J5 deoarece construc ia instruc iuneB care a ,ost descris# deja include -n sine acest semn I<J. Dac# instruc iuneaB este simpl#5 atunci ea se va s,-ri cu I<J5 iar dac# instruc iuneaB repre'int# un bloc5 atunci acest bloc va ,i de,init de acolade5 unde acolada dreapta va juca rolul s,-ritului. Instruc iunea i, lucrea'# -n ,elul urm#tor1 1. +ormatul i"(e)presie)5instruc6iune. %ai -nt-i se calculea'# valoarea e)presiei. Dac# re'ultatul ei este &D(Mc9 Iadic# e)presia UR=J5 atunci se -ndeplinete Binstruc iunea5 iar -n ca' contrar se sare peste instruc iune i nu avem nici o ac iune. .c/ema algoritmic# a ,ormatului i,Ie)presieJBinstruc iune este pre'entat# pe desen. +ie c# d este egal# cu c. &tunci vom m#ri d cu o unitate5 iar c cu trei unit# i. 7n celelalte ca'uri d i c r#m-n nesc/imbate. Instruc iunea de rami,icare a acestui ca'1 if8d((c9 ))d,c)(3; 7n calitate de instruc iuneB aici se ,olosete instruc iunea e)presie cu virgul#. Mom descrie aceast# instruc iune ast,el1 if8d( (c9))d;c)(3; Di,eren a const# -n aceea c# -n e)emplu al doilea avem 2 instruc iuni1 i, i instruc iunea8 e)presie c+R3<. 7n acest ca' dac# IdRRcJ va avea valoare &D(Mc95 atunci totul va r#m-ne ca mai -nainte1 d se va m#ri cu o unitate5 iar c se va m#ri cu trei unit# i. 7n ca' contrar5 d nu se sc/imb#5 i numai c se m#rete cu 3. Mom considera acest e)emplu din nou1 if8d( (c9,))d c)(3 7n ca'ul c# Id RR cJ va avea valoarea +&6.5 d i c vor r#m-ne nesc/imbate5 deoarece aceste instruc iuni s-nt incluse -n acolade5 adic# ,ormea'# un bloc5 i din punct de vedere logic sunt privite ca o singur# instruc iune bloc. 2. +ormatul i"(e)presie)5instuc7iune.5else5instruc6iune8%
- 16 -

Ca i -n ca'ul precedent5 -n primul r-nd se calculea'# valoarea e)presiei. Dac# ea di,er# de 'ero5 adic# este &D(Mc95 atunci se -ndeplinete instruc iunea15 -n ca' contrar se -ndeplinete instruc iunea2. .c/ematic aceast# instruc iune e pres'entat# pe desen. De e)emplu 1 ,ie c# e necesar de a calcula '5 care este egal cu ma)imum dintre dou# numere a i b. &tunci putem scrie1 if8a7+9"(a;el#e "(+;.^Cre'en a I<J dup# 'Ra este necesar#5 deoarece aceasta este o instruc iune ce intr# -n coponen a instruc iunii i,. Crima ,orm# prescurtat# a instruc iunii i, ne d# posibilitatea -ndeplinirii sau ne-ndeplinirii oric#rei opera ii5 pe c-nd a doua ,orm# o,er# posibilitatea alegerii i -ndeplinirii unei opera ii din dou# posibile. Totui5 c-te odat# apare necesitatea alegerii unei opera ii din mai multe.Mom e)amina un lan de instruc iuni1 if8expre#ie19Iin#trucJiune1Iel#eIif8expre#ie29Iin#trucCiune2Iel#eIif8expre#ie39 Iin#trucCiune3Iel#e Iin#trucCiune4 &a un lan de instruc iuni e admis5 deoarece -n locul instruc iunii -n instruc iunea i, poate ,i orice instruc iune5 inclusiv i i,. 7ns# o aa -nscriere e complicat#. Centru aa procese -n C e)ist# o instruc iune special# care va ,i studiat# ceva mai t-r'iu. .# prec#ut#m 2 e)emple1 a9 if8n709 if8a7+9 "(a;Kel#e "(+; +9 if8n709,if8a7+9 "(a;-el#e "(+; Deosebirea const# -n ,aptul c# -n ca'ul aJ avem instruc iunea i, de ,orm# scurt#5 care are ca instruc iune ,orma i,Belse. 7n ca'ul bJ avem instruc iunea i,Belse -n ,orm# plin#5 av-nd -n calitate de instruc iune1 ,orma i, prescurtat#. .ecven a b di,er# de a numai prin pre'en a acoladelor5 ce de,inesc un bloc5 -ns#5 evident5 joac# un rol important la interpretarea acestor intruc iuni. 7n te)tul programului de mai sus am utili'at urm#toarele ,unc ii1 0'u$II9: 8 ,un ia de a,iare a datelor ,#r# indicarea ,ormatului< 0i(JJ9: 8 ,unc ia de citire a datelor de orice ,ormat< "'>9*K ,: 8 -ntoarce valoarea )F.

- 17 -

4. SCLEMA M BLOC A PROGRAMULUIN

- 1$ -

5. CONCLUGIE. ;n ,actor determinant -n r#sp-ndirea limbajului de programare C++-n r-ndul programatorilor const# -n posibilitatea utili'#rii lui cu succes -n locul limbajelor de asamblare5 care sunt greu de ,olosite -n aplica ii Icon ine un num#r mare de instruc iuni elementare i nu este structuratJ. 7n plus5 programele elaborate -n limbajul de asamblare nu sunt portabile. 6imbajul C++ este singurul limbaj de programare structurat care permite un control riguros al /ardGare8ului i al peri,ericilor I,acilitate o,erit# de limbajele de asamblareJ. 6imbajul C++ a ,ost ,olosit ini ial pentru scrierea programelor de sistem I sisteme de operare5 editoare5 compilatoare5 etc.J5 dar odat# cu creterea popularit# ii lui5 programatorii au -nceput s#8l ,oloseasc# i la scrierea programelor de aplica ii datorit# -n special e,icien ei i portabilit# ii crescute a unor ast,el de programe. 6imbajul C++ este un lim+a& a.reat de pro.ramatori5 permi -ndu8le acestora s# alc#tuiasc# cu uurin # -n mod sistematic programe comple)e. +iecare programator -i poate crea o bibliotec# de ,unc ii pe m#sura personalit# ii ,iec#ruia5 care pot ,i ,olosite -n di,erite situa ii. 6imbajul C++ este un lim+a& de nivel mediu. &sta nu -nseamn# c# el este mai slab dec-t limbajele de nivel -nalt5 sau c# el este similar cu limbajele de asamblare care ridic# probleme de programare utili'atorilor5 C++ se numete de nivel mediu deoarece el combin# avantajele limbajelor de nivel -nalt cu ,unc ionalitatea limbajelor de asamblare. Datorit# acestor calit# i incontestabile lim+a&ul 2)) a devenit lim+a&ul de +a"L Fi pentru pro.ramarea aplicaCiilor de timp real%

;. BIBLIOGRA7IE. 1. +lorin %unteanu (ro4ramarea 9alculatoarelor I3ucureti 1HH4J 2. dourdon H% :ur3o 9// %anual de utili'are I3ucureti 1H24J 3. Cojocaru ". :ur3o 9// IC/iin#u 1HH4J 4. Iorga M% (ro4ramarea ;n lim3ajul 9 I6itogra,ia I.C.3 1H2*J !. efghig 9// <=>?@AB CDEF. jghik8lmkmfnofp Ilqkmf 2==2J $. _erb#na i 6. Gim3aje de pro4ramare Hi compilatoare I(ditura &cademiei5 3ucureti 1H2*J *. dourdon (. 3orland 9// Ianual de utiliJare I3ucureti 1H24J

Kn nou portal in"orma6ionalL

-1 -

MacN de6ii in"orma6ie interesantN si doreHti sN te impar6i cu noi atunci scrie la adresa de e+mail * supportOsursa.md

- 20 -

S-ar putea să vă placă și