Sunteți pe pagina 1din 25

TEMA NR. 5 I. Scopul lucrarii: Declararea si utilizarea tablourilor de date si sirurilor de caractere in Limbajul C. II. Continutul lucrarii: 1.

Prezentarea datelor de tip tablou si siruri in C. 2. Probleme rezolvate cu tablouri si siruri. 3. Probleme propuse spre rezolvare. . Continutul re!eratului. III. Desfasurarea lucrarii 1. Prezentarea datelor de tip tablou in Limbajul C. Tipul de date tablou este un tip structurat de date. "n tablou este deci o multime de date de acelasi tip aran#ate continuu in memorie. "n tablou mai poate !i de!init ca o !unctie de o variabila$ pentru tablouri unidimensionale %vectori sau siruri&$ respectiv de mai multe variabile pentru tablouri multidimensionale %matrici& care pune in corespondenta unei multimi de valori intre'i si pozitive$ respectiv unui produs cartezian a mai multor multimi !inite si ordonate de valori intre'i$ o multime de valori a unui tip de date bine precizat. (n utilizarea tablourilor se distin' doua etape) de!inirea tablourilor si re!erirea la datele tabloului. *a de!inirea unui tablou trebuie precizate) numele si dimensiunile tablourilor precum si tipurile componentelor tablourilor. a. Declararea tablourilor de date in C +inta,a de declarare a unui tablou este urmatoarea) tip_elemente_tablou nume_tablou [dim1][dim2] ... unde) . tip_elemente_tablou / precizeaza tipul elementelor tabloului %tipuri de baza%int$ c0ar$ !loat& sau derivate ale tipurilor de baza&. . nume_tablou este un identi!icator utilizator care reprezinta numele intre'ului tablou prin intermediul caruia vor !i re!erite componentele %elementele& tabloului. .dimi %i11$n& . sunt date intre'i si strict pozitive %literali$ constante& care precizeaza dimensiunile tabloului. Numarul datelor intre'i si strict pozitive dimi determina dimensiunea tabloului. Pentru tablourile unidimensionale %vectori$ siruri& se precizeaza o sin'ura data intrea'a si strict pozitiva dim1$ pentru matrici bidimensionale %dreptun'0ilare& se precizeaza doua date intre'i si strict pozitive %dim1 si dim2&$ iar pentru matrici n.dimensionale se precizeaza n date intre'i si strict pozitive. (n esenta dimi %i11$n& precizeaza dimensiunile ma,ime ale coordonatelor tabloului si determina multimea valorilor indicilor %coordonatelor& prin intermediul carora se repereaza elementele tabloului. dim1, dim2, ... pot !i date cu valori identice sau distincte si precizeaza intervalele intre'i 23$dimi4 in care variaza valorile indicilor %coordonatelor& tabloului (n e,emplu de mai #os) int n$ a2134$ ,224234se decalara trei elemente intre'i) variabila simpla n de tip intre'$ un tablou a unidimensional cu 13 componente intre'i %un vector sau un sir de 13 componente intre'i& si un tablou ,$ bidimensional cu 25316 componente intre'i$ asezate intr.o matrice cu 2 linii si 3 coloane. +e observa !aptul ca variabilele de tip tablou nu necesita declaratii distincte$ tipul de date care se declara !iind de !apt cel al componentelor tabloului. +peci!icarea modului de structurare se

!ace prin declararea numarului ma,im de elemente pentru !iecare indice in parte$ intre doua paranteze drepte. b) referirea componentelor tabloului Componentele unei variabile de tip tablou se refera 7n cadrul unui pro'ram C prin numele variabilei tablou$ urmat de cate o e,presie de tip 7ntre' pentru !iecare indice al tabloului ca mai #os) nume_tablou [e1][e2] ... ; unde) . nume_tablou este numele intre'ului tablou$ precizat la declararea tabloului. - e1,e2 ... sunt date intre'i si pozitive %literali$ constante$ variabile$ !unctii sau e,presii%ei813$ i11.n&& ale caror valori precizeaza pozitia unui element %unei componente& in cadrul tabloului si se mai numesc coordonatele sau indicii elementelor tabloului. (n esenta ei %i11$n& precizeaza valoarea coordonatei i a elementului in cadrul tabloului nume_tablou. Observatie. (ndicii pentru tablouri reprezinta valori 7ntre'i ne.ne'ative care incep intotdeauna cu numarul 3. 9e e,emplu$ pentru variabila tablou a din declaratia precedenta$ componentele sunt urm:toarele) a234$ a214$ a224$ a234$ a2 4$ a254$ a2;4$ a2<4$ a264$ a2=4. ste !resit" re!erirea a2134. (n concluzie$ elementele componente unui tablou unidimensional sunt) a234$ a214$ ...$ a2nma,.14$ in cazul in care nmax reprezinta numarul ma,im de elemente pentru indice. (n mod asemanator se re!era componentele pentru tablourile multidimensionale. 9e e,emplu$ pentru variabila tablou x din declaratia precedenta$ componentele sunt urm:toarele) ,234234$ ,234214$ ,234224$ ,214234$ ,214214$ ,214224. ste !resit" re!erirea ,224234. (n concluzie$ elementele componente unui tablou bidimensional sunt) ,234234$ ,234214$ ...$ ,2342nma,.14$ ,214234$ ,214214$ ...$ ,2142nma,.14$ > ,2mma,.14234$ ,2mma,.14214$ ...$ ,2mma,.142nma,.14$ in cazul in care nmax si mmax reprezinta numarul ma,im de linii respectiv de coloane ale matricii x. Componentele unei variabile de tip tablou pot sa apara in cadrul unui pro'ram 7n aceleasi locuri ca si variabilele de acelasi tip de date ca acela al componentelor. 9e e,emplu$ urmatoarea instructiune este corecta) a2<4 1 n?3#emplul 1. +e consider: un polinom cu coe!icien@i reali de 'rad n. +: se determine valoarea polinomului 7ntr.un punct dat. $naliza problemei de rezolvat. Aie polinomul Pn%,&1 a3,n ?a1 ,n.1$ ...$ an.1 ,1 ?an unde e su!icient: speci!icarea 'radului polinomului %a indicelui n& Bi a sirului !init de coe!icienti) a3$ a1$ ...$ an. +e poate de!ini valoarea polinomului p7ntr.un punct x ca !iind valoarea !unctiei polinomiale atasate) Pn%,&1 a3,n ?a1 ,n.1$ ...$ an.1 ,1 ?an Descrierea al!oritmului in pseudocod. start scrie Cn$,1D citeste n$, pentru i13 la n e,ecuta inceput scrie Cai1D citeste ai s!arsit p1a3pentru i11 la n e,ecuta p1p 5 , ? a( scrie Cp%C$,$D&1D$p s!arsit Descrierea pro!ramului in C.

+e va utiliza o variabil: tablou cu numele a pentru memorarea coe!icien@ilor polinomului. Einclude Fstdio.08 void main%void& G int n$ i!loat ,$ p$ a2234print!%HIn dati n$,1 H&scan!%HJdJ!K$Ln$L,&!or%i13- iF1n- i??& G print!%HIn a%Jd&1K$i&scan!%HJ!K$La2i4&M p 1 a234!or%i11- iF1n- i??& p1p5,?a2i4print!%HIn p%J!&1J!K$ ,$ p&M 9in pro'ramul anterior se observa !aptul ca tabloul a a !ost declarat cu 23 de componente$ !ara sa se cunoasca e!ectiv numarul real de coe!icienti ai polinomului$ memorat in variabila n. Acest lucru se poate determina doar in timpul e,ecutiei pro'ramului$ cNnd variabila n va avea o valoare citita de la terminalul standard de intrare. 9eoarece limba#ul C impune declararea tablourilor cu un numar fi# de componente$ trebuie ca pentru tablourile pentru care nu se cunosc dimensiunile 7n etapa de elaborare a pro'ramelor$ sa se declare o dimensiune ma,ima acoperitoare pentru !iecare indice. Pentru e,emplul precedent se presupune ca nu se lucreaza cu polinoame cu 'rad mai mare ca 23$ presupunere rezonabila in cele mai multe cazuri. $locarea memoriei pentru variabilele de tip tablou se !ace intr.o zona conti'ua de memorie care contine toate elementele tabloului 7n ordinea naturala a cresterii indicilor. 9e e,emplu$ pentru variabila x declarat: anterior$ ordinea de alocare a componentelor este) ,234234$ ,234214$ ,234224$ ,214234$ ,214214$ ,214224. 9in acest motiv$ este posibil sa e,iste zone de memorie neutilizate in cazul !olosirii tablourilor. 9e e,emplu$ in pro'ramul precedent$ dac: n15$ r:mNn neutilizate 15 componente %;3 de octeti$ dac: tipul !loat se reprezinta pe octeti&. (n aceste situatii$ este indicat sa se evite !olosirea tablourilor atunci cand nu este neaparat nevoie$ inlocuind variabilele cu indici cu variabile simple. Cantitatea de memorie necesara pentru stocarea unui tablou n.dimensional este data de relatia) memorieOtablou1dim15dim25 > 5dimn5sizeo!%tipOelementeOtablou& %in octeti& unde) - dimi %i11$n& sunt dimensiunile tabloului n.dimensional - sizeof(tip_elemente_tablou) este marimea unei componente a tabloului %in bPtes1octeti& care nu este altceva decat dimensiunea tipului elementelor tabloului - memorie_tablou este marimea calculata a memoriei ocupate de intre' tabloul respectiv. #emplul %. +a se determine al toti termeni din Birul lui Aibonacci$ pentru un num:r natural n dat. $naliza problemei. Termenii sirul lui Aibonacci sunt speci!icatt de urmatoarea relatie de recurenta) a313$ a111$ ai1ai.1?ai.2$ pentru Q2. Descrierea al!oritmului in pseudocod. start scrie Cn1D citeste n a3 1 3

a1 1 1 scrie Csirul !ibonacci13$1D pentru i12 la n e,ecuta inceput ai 1 ai.1?ai.2 scrie C$D$ a( s!arsit s!arsit +e observa !aptul ca intotdeauna sunt necesare doar trei elemente consecutive. 9upa determinarea lui ai$ elementele a3$ a1$ ...$ ai.1 nu mai sunt necesare. NotNnd cu !3$ !1$ !$ trei variabile simple de tip intre'$ relatia de recurenta se mai poate scrie) ! 1 !3?!1 unde !3$ !1 Bi ! reprezinta cei trei termeni consecutivi ai sirului Aibonacci. Pentru trecerea la urmatoarea iteratie vor trebui e!ectuate urmatoarele atribuiri) !31!1 !11! Ast!el$ al'oritmul poate !i rescris) start scrie Cn1D citeste n !3 1 3 !1 1 1 scrie Csirul !ibonacci13$1D pentru i12 la n e,ecuta inceput ! 1 !1?!3 scrie C$D$ ! !31!1 !11!s!arsit s!arsit Descrierea pro!ramului in C. *a implementarea celor doi al'oritmi se observa consumul mai mare de memorie in cazul primei variante %necesarul de memorie este alt criteriu de evaluare al pro'ramelor$ in a!ara de evaluarea timpului de e,ecu@ie&. varianta 1: Einclude Fstdio.08 void main%void& G int n$ i$ a2234print!%HIn dati n1 H&scan!%HJdK$ Ln&a234 1 3a214 1 1print!%HIn sirul Aibonacci)3$1K&!or%i12- iF1n- i??& G a2i4 1 a2i.24?a2i.14print!%H$JdK$a2i4&M M

varianta %: Einclude Fstdio.08 void main%void& G int n$ i$ !3$ !1$ !print!%HIn dati n1 H&scan!%HJdK$ Ln&!3 1 3!1 1 1print!%HIn sirul Aibonacci)3$1K&!or%i12- iF1n- i??& G ! 1 !3?!1print!%H$JdK$!&!31!1!11!M
M

Siruri de caractere si tablouri de siruri de caractere a. Siruri de caractere "n sir de caractere este un tablou unidimensional$ de o anumita lun'ime ma,ima precizata la declararea acestei date$ ale carui componente sunt coduri de caractere din tabela A+C((. *un'imea ma,ima posibila a unei date de tip sir de caractere este de 255 bPtes %octeti&. (n C nu e,ista un tip special pentru siruri de caractere$ acestea putand !i tratate cu a#utorul tablurilor unidimensionale continand caractere A+C(($ R data sir de caractere se reprezinta$ in memorie$ prin insiruirea codurilor A+C(( ale caracterelor componente la care se adau'a la s!arsit caracterul N"** %CI3D& !olosit pentru detectarea s!arsitului de sir. a.1. Literali de tip sir de caractere "n literal de tip sir se reprezinta in *C prin insiruirea caracterelor A+C(($ scrise intre '0ilimele) E,emple) acesta este un sir de caractere A+C((S. Ta1?b11233T a.%. Constante de tip sir de caractere Constantele de tip sir de caractere se declara cu a#utorul directivei Ede!ine avand sinta,a urmatoare) Ede!ine constantaOsir Hsir de caractereK R constanta sir ast!el de!inita nu.si modi!ica valoarea pe parcursul e,ecutarii pro'ramului. a.&. 'ariabile de tip sir de caractere Uariabilele de tip sir se declara ast!el in *imba#ul C) c0ar v12dim14$v22dim24$v32dim34 ... unde) . v1$v2$v3$ ... sint identi!icatori utilizator care denumesc variabile de tip tablou unidimensional adica variabile de tip siruri de caractere avand ca elemente caractere din tabela A+C((. . dim1$ dim2$ dim3$ > sunt dimensiunile$ e,primate in bPtes %octeti&$ ale variabilelor de tip sir de caractere %v1$ v2$ v3$ > &. E,emplu) Pentru a declara tablouri sir de caractere care sa poata memora 13$ 23 si 125 de caractere se va scrie ast!el) c0ar a2114$ sir2214$ b212;4-

deoarece in ultimul caracter din !iecare data de tip sir se va insera automat caracterul N"** %CI3D& care va marca s!arsitul sirurilor respective. a.(. )eferirea la date de tip sir Re!erirea la o data de tip sir %constanta sau variabila& se poate !ace in totalitatea caracterelor sirului$ prin precizarea numelui acesteia$ sau partial prin re!erirea la caracterele sirului$ prin precizarea numelui acesteia si a pozitiei caracterului re!erit din sir) . prin a$ sir$ b ne re!erim la sirurile corespunzatoare in totalitatea caracterelor componente ale acestora . prin a2i4$ sir2i4$ b2i4 ne re!erim la caracterul e,istent in sir pe pozitia i %3F1iF1lun'imea sirului.1&E,emplu) c0ar a21=4$sir2234$ b2224$ c1$c2$c3a1Kacesta este un sirK- sir1a- b1sirc11a234- V5 in c1 se va memora al 3.lea caracter din sirul a$ adica s 5V c21sir234- V5 in c2 se va memora primul caracter din sirul sir$ adica a 5V c31b2164- V5 in c3 se va memora caracterul N"** din sirul b$ adica I3 5V a.*. Operatii asupra datelor de tip sir de caractere a.*.1. Operatia de atribuire a unui sir de caractere +in'ura operatie interna de!inita pe multimea sirurilor de caractere este atribuire de!inita aste!el) variabila_sir_de_ caractere expresie_sir_de_caractere; unde) - variabila_sir_de_ caractere este o variabila de tip sir de caractere %c0ar& declarata corespunzator$ numita si variabila rezultat. . expresie_sir_de_caractere este o e,presie de un anumit tip a carei valoare calculata este un sir de caractere. +od de e#ecutie: pasul 1) +e evalueaza e,presia de tip sir expresie_sir_de_caracterepasul 2) +e atribuie variabilei rezultat variabila_sir_de_ caractere valoarea e,presiei de la pasul 1. a.*.%. Operatia de comparare a doua date de tip sir Rperatia de comparare a doua date de tip sir se des!asoara dupa relatia) operand1 operatorOrelatie operand2 unde) . operand1 si operand2 sunt date de tip sir %literali$ constante$ variabile sau e,presii de tip sir&. . operatorOrelatie este un operator de comparare %F$ F1$ 8$ 81$ 1$ W1&. Compararea a doua date de tip sir se !ace comparandu.se de la stan'a la dreapta codurile A+C(( %pozitiile ocupate in tabela& ale caracterelor componente a!late pe pozitii omoloa'e. Rezultatul compararii este o valoare lo'ica true %di!erita de zero& daca compararea este veri!icata si false %e'ala cu 3& daca compararea nu este veri!icata E,emplu de pro'ram cu siruri) Einclude Fstdio.08 void main%& G c0ar c12 4$c2234$s1254$s22234$s32234int l1$l2$l3c11KapaK- c21KacK- s11KrareKs21c2- V5 s2 va contine sirul din c2$ adica ac 5V V5 se concateneaza c1 la s!arsitul sirului s2 obtinandu.se acapa 5V strcat%s2$c1&V5 se concateneaza s1 la s!arsitul sirului s2 obtinandu.se acaparare 5V

strcat%s2$s1&s31s2print!%HI sirul c11Js$c21Js$s11Js si sirul obtinut s21JsK$c1$c2$s1$s2&l11%c2 81 s2&l21%c1 W1 s1&l31%s2 11 s3&i! %l1& print!%HIn l11trueK&else print!HIn l11!alseK&i! %l2& print!%HIn l21trueK&else print!HIn l21!alseK&i! %l3& print!%HIn l31trueK&else print!HIn l31!alseK&M a.,. -unctii predefinite asupra sirurilor de caractere (n *C e,ista mai multe !unctii prede!inite asupra datelor de tip sir de caractere a!late in !isierul strin!.. cum ar !i) a.;.1. !unctia strcpP%s1$s2& . copiaza sirul s2 in sirul s1. #emplul 1) +a se introduca un sir de la tastatura de ma,imum 53 caractere$ sa se copieze intr.un alt sir de ma,imum 63 caractere si apoi sa se a!iseze pe ecran cele doua siruri . Einclude Fstdio.08 Einclude Fstrin'.08 void main%& G c0ar s12634$s22534print!%HIn introduceti sirul s2)K&'ets%s2&strcpP%s1$s2&print!%HIn s11Js$ s21JsK$s1$s2&M a.;.2. !unctia strcat%s1$s2& . concateneaza sirul s2 la s!arsitul sirului s1. #emplul %) +a se introduca doua siruri de la tastatura de ma,imum 3 caractere$ sa se concateneze sirul al doilea la s!arsitul primului sir$ primul sir la s!arsitul celui de.al doilea sir si apoi sa se a!iseze pe ecran rezultatele obtinute Einclude Fstdio.08 Einclude Fstrin'.08 void main%& G c0ar s12 34$s22 34$s2634print!%HIn introduceti sirul s1)K&'ets%s1&print!%HIn introduceti sirul s2)K&'ets%s2&s1s1strcat%s$s2&-

print!%HIn s11Js$ s21Js$s1?s21JsK$s1$s2$s&s1s2strcat%s$s1&print!%HIn s11Js$ s21Js$s2?s11JsK$s1$s2$s&M a.;.3. !unctia strcmp%s1$s2& / compara in ordine al!abetica s1 cu sirul s2 si returneaza un intre' cu semni!icatia) . strcmp%s1$s2& F 3 daca s1 F s2. . strcmp%s1$s2& 8 3 daca s1 8 s2. . strcmp%s1$s2& 1 3 daca s1 1 s2. #emplul &) +e considera un sir de ma,imum 3 caractere numerice bine precizat care constitue o parola$ sa se 'aseasca prin incercari parola tastandu.se cate un 'rup de 3 caractere numerice Einclude Fstdio.08 Einclude Fstrin'.08 void main%& G c0ar parola2 4$s2 41K333Kint nrincercari13parola1<16print!%HIn incercati sa '0iciti parola din 3 caractere numerice)K&'ets%s&nrincercari??X0ile %Wstrcmp%s$parola&& G i! %strcmp%s$parola&F3& print!%HIn parola tastata este mai mica decat parola dataK&else print!%HIn parola tastata este mai mare decat parola dataK&nrincercari??print!%HIn incercati sa '0iciti parola din 3 caractere numerice)K&'ets%s&M print!%HIn parola este Js$ si a !ost '0icita din Jd incercariK$s.nrincercari&M a.;. . !unctia strlen%s& / calculeaza si returneaza un intre' ce reprezinta lun'imea sirului s. #emplul () +e tasteaza un sir oarecare de ma,imum 13 caractere di!erite de spatii. +a se a!iseze sirul tastat impreuna cu lun'imea sa calculata. Einclude Fstdio.08 Einclude Fstrin'.08 void main%& G c0ar sirtastat2114$sirspatii21141K Kprint!%HIn tastati un sir oarecare de ma,imum 13 caractere)K&'ets%sirtastat&X0ile %Wstrcmp%sirtastat$sirspatii&& G print!%HIn ati tastat sirul Js$ care are Jd caractereK$sirtastat.strlen%sirtastat&&print!%HIn tastati un sir oarecare de ma,imum 13 caractere)K&'ets%sirtastat&M

M a.;.5. !unctia strc0r%s$c& / returneaza pointerul primei aparitii a caracterului c in sirul s iar daca nu este 'asit returneaza un pointer nul. a.;.;. !unctia strstr%s1$s2& / returneaza pointerul primei aparitii a sirului s2 in sirul s1 iar daca nu este 'asita nici.o aparitie returneaza un pointer nul. #emplul *) +e tasteaza un sir oarecare de ma,imum 13 caractere di!erite de spatii. +a se analizeze aparitia unui caracter precizat in sirul tastat si aparitia unui alt sir precizat in sirul tastat si sa se a!iseze sirul tastat impreuna cu mesa#ele corespunzatoare . Einclude Fstdio.08 Einclude Fstrin'.08 void main%& G c0ar sirtastat2114$sircautat2114$sirspatii1K K$carcactercautatprint!%HIn tastati un sir oarecare de ma,imum 13 caractere)K&'ets%sirtastat&print!%HIn ati tastat sirul Js$ care are Jd caractereK$sirtastat.strlen%sirtastat&&X0ile %Wstrcmp%sirtastat$sirspatii&& G print!%HIn tastati un sir de cautare de ma,imum 13 caractere)K&'ets%sircautat&print!%HIn tastati un caracter de cautare)K&'etc0ar%caractercautat&i!%strstr%sirtastat$sircautat& print!%HIn sirul Js se 'aseste in sirul JsK$sircautat$sirtastat&else print!%HIn sirul Js nu se 'aseste in sirul JsK$sircautat$sirtastat&i!%strc0r%sirtastat$caractercautat& print!%HIn caracterul Jc se 'aseste in sirul JsK$caractercautat$sirtastat&else print!%HIn caracterul Jc nu se 'aseste in sirul JsK$caractercautat$sirtastat&print!%HIn tastati un sir oarecare de ma,imum 13 caractere)K&'ets%sirtastat&M M b. /ablouri de siruri de caractere "n tablou de siruri este un tablou ale carui componente sunt siruri de caractere Pentru a de!ini un tablou unidimensional de siruri se va declara un tablou bidimensional de carcatere cu sinta,a) c!ar tablou_de_siruri [dim1][dim2]unde) - c!ar precizeaza ca toate componentele tabloului sunt de tip caracter - tablou_de_siruri este numele tabloului de siruri de caractere . dimensiunea din stan'a dim1 precizeaza numarul de siruri din tablou . dimensiunea din dreapta dim2 precizeaza numarul ma,im de caractere din !iecare sir. Accesarea unui anumit sir al tabloului de siruri se !ace speci!icandu.se doar indicile din stan'a sau adresa de inceput a primului caracter din !iecare sir iar accesarea unui anumit caracter dintr.un anumit sir se !ace speci!icandu.se ambii indici) indicele din stan'a precizand sirul din tablou iar cel din dreapta caracterul din sirul speci!icat. #emplul 1: +a se citesca de la tastatura un numar de 13 siruri de caractere a cate 3 de caractere ma,im si sa se a!iseze apoi pe ecran sirurile citite caracter cu caracter.

Einclude Fstdio.08 Einclude Fstrin'.08 Ede!ine nma, 13 Ede!ine lma, 3 void main%& G c0ar te,t2nma,42lma,4- int n$l!or%n13- nFnma,- n??& G print!%HIn tastati un sir oarecare de ma,imum 13 caractere)K&print!%HIn te,t%Jd&1K$n&'ets%te,t2n4&- V5 citirea unui sir al tabloului de siruri 5V V5 sau 'ets%Lte,t2n4234&- 5V M print!%HIn ati tastat urmatoarele siruri)K&V5 a!isarea caracter cu caracter a sirurilor tabloului 5V !or%n13- nFnma,- n??& G !or%l13- te,t2i42#4- l??& putc0ar%te,t2i42#4&putc0ar%CInD&M M #emplul %: +a se citesca de la tastatura un te,t !ormat din cuvinte despartite prin spatii. +a se a!iseze !iecare cuvant impreuna cu lun'imea sa determinata. Einclude Fstdio.08 Einclude Fstrin'.08 void main%& G c0ar 5te,t0 1cuvant- int Q$ii!%%te,t W1 %c0ar5&malloc%133&&11N"**& G print!%HIn eroare de alocare pentru te,tK&e,it%3&M i!%%cuvant W1 %c0ar5&malloc%15&&11N"**& G print!%HIn eroare de alocare pentru cuvantK&e,it%3&M print!%HIn dati te,tul de analizat)K&- 'ets%te,t&Q13X0ile%5te,t W1 CI3D& V5 cat timp nu s.a detectat s!arsitul de sir 5V G i13V5 cat timp nu este un spatiu si nu este s!arsit de sir 5V X0ile%%5te,t W1 C C& LL %5te,t W1 CI3D&& G 5cuvant15te,tcuvant??- te,t??i??-

M 5cuvant1DI3Dprint!%HIn s.a detectat cuvantul Js care are Jd caractereK$5cuvant$i&X0ile%5te,t 11 C C& te,t??- V5se sar spatiile dintre cuvinte 5V M M a. /ablouri si pointeri in C "n pointer este o variabila care contine adresa de memorie a altei variabile. 9eclararea pointerilor se !ace ast!el) tip_variabila "pointer_variabila; unde) . tip_variabila este tipul variabilelor ale caror adrese de memorie vor !i memorate in variabilele de tip pointer. - pointer_variabila este numele variabilei de tip pointer care va contine adresele variabilelor indicate$ de tipul precizat de tip_variabila. Pentru a intele'e mai bine notiunea de pointer ne ima'inam memoria ca o succesiune de locatii de memorie %bPtes sau octeti& conti'ue$ !iecare avand o anumita adresa %numarul de locatii a!late inaintea locatiei considerate&. 9e e,emplu daca n este o variabila de tip intre' %int& pe 1; biti %2 locatii& avand valoarea 132 %in 0e,a 3, 33& memorata la adresa in 0e,a 3,1!3d iar p este o variabila de tip pointer la adresa 3,133$ pe doua locatii de memorie$ se contine adresa variabilei n %1!3d$ octetul in!erior memorat la o adresa mai mica&$ structura memoriei va arata ast!el) 3d 1! ... 33 3 5 5 5 5 3133 3131 1!3d 1!3e Pentru !olosirea variabilelor de tip pointer e,ista$ dupa cum s.a aratat$ doi operatori si anume) . operatorul adresa L care permite determinarea adresei unui obiect oarecare #emplu: int 5p- V5 p . pointer la un intre' %in e,emplu$ la adresa 25;13,133 5V int n1132 - V5 declararea variabilei n de tip intre' avand valoarea 132 13, 33 5V p1Ln- V5 in p se va memora adresa variabilei n %1!3d din e,emplu& 5V . operatorul de indirectare 5 . care permite declararea variabilelor de tip pointer precum si la accesarea obiectului catre care indica pointerul respectiv int n1133- m1123- a2154int 5p- V5 p . pointer la un intre' 5V p1Ln- V5 atribuie pointerului p adresa variabilei n 5V m15p- V5 se atribuie lui m valoarea lui n1133 a carui adresa este memorata in p 5V 5p13- 21 se atribuie variabilei a carei adresa este in p valoarea 3$ deci n13 5V p1La234- V5 atribuie pointerului p adresa variabilei a234 5V Observatie: 9aca pointerul p pointeaza %indica& spre un intre' n atunci pointerul p poate sa apara in orice conte,t in care apare n.
#emplu:

int a1133$b1233$5p$5Yp1La- V5 atribuie pointerului p adresa variabilei intre'i a 5V Y1Lb- V5 atribuie pointerului p adresa variabilei intre'i b 5V 5p 1 5p ? 23- 25a1a?231133?231123 5V 5Y15p ? 33- V5 b1a?331123?331153 5V ??5Y- V5 b1b?11153?11151 5V %5p&.. V5 a1a.11123.1111= 5V

b.1. "tilizarea indicilor la pointeri catre tablouri (n limba#ul C$ pointerii si tablourile sunt notiuni !oarte apropiate. 9upa cum se cunoaste numele unui tablou !ara speci!icarea indicilor reprezinta in esenta un pointer catre primul element al tabloului #emplu: int a2134a si La234 sunt valori identice deoarece amandoua reprezinta adresa primului element al tabloului a$ iar e,presia a 11 La234 este adevarata deoarece adresa tabloului a este aceeasi cu adresa primului element al tabloului a. 9eci numele unui tablou$ care este neurmat de indici$ 'enereaza automat un pointer catre elementele tabloului iar unui pointer i se pot atasa indici ca si cum ar !i !ost declarat ca tablou #emplu: int 5p$a2154p1a- V5 in p se plaseaza adresa tabloului a 5V V5 in al 11.lea element al tabloului a se plaseaza valoarea intrea'a 233 !olosind te0nica indicilor 5V p2134 1 233V5 in al 11.lea element al tabloului a se plaseaza valoarea intrea'a 233 !olosind aritmetica pointerilor 5V 5%p?13& 1 233Aceleasi principii se aplica si tablourilor de doua sau mai multe dimensiuni. 9aca a21342134 este o matrice patrata de 13 linii si 13 coloane atunci a si La234234 sunt ec0ivalente. (n acelasi mod elementul elementul a%3$5& poate !i re!erit cu indici prin a234254 sau cu aritmetica pointerilor prin %a?5& si similar a%2$5& poate !i re!erit cu indici prin a224254 sau cu %a?25& utilizand aritmetica pointerilor. Zeneralizand$ un element al unui tablou bidimensional a%i$#& poate !i re!erit cu indici prin a2i42#4 si cu aritmetica pointerilor prin 5%a?%i5lun'ime linie&?#&. (n multe situatii utilizarea aritmeticii pointerilor duce la e!ectuarea mai rapida a calculelor decat te0nica indicilor. Ast!el un tablou bidimensional poate !i redus la un pointer catre un tablou de tablouri unidimensionale. #emplu: +a se citesca de la tastatura elementele unei matrici patrate de 13 linii si 13 coloane si apoi sa se a!iseze prin dialo' elementele dintr.o anumita linie data utilizandu.se aritmetica pointerilor) Einclude Fstdio.08 Einclude Fstrin'.08 Ede!ine nma, 13 Ede!ine lma, 13 void main%& G int a2nma,42lma,4$i$#$Q$5p !or%i13- iFnma,- i??& !or%#13- #Flma,- #??& G print!%HIn a%Jd$Jd&1K$i$#&scan!%HJdK$La2i42#4&M do G print!%HIn dati numarul liniei de a!isat %Q813 si QF13&)K&scan!%HJdK$LQ&[ M

X0ile %%QF3&\\%Q8=&&p1La2Q4234print!%HIn elementele liniei Jd a matricii a sunt)K$i&!or %i13-iF13-i??& print!%HLd H$5%p?i&&M (n mod analo' un tablou cu n dimensiuni poate !i redus in mod similar$ utilizandu.se aritmetica pointerilor$ la pointerul unui tablou cu n.1 dimensiuni$ care la randul sau poate !i redus la pointerul unui tablou cu n.2 dimensiuni s.a.m.d$ reducerea poate continua pana la obinerea unui pointer unidimensional. b.%. Initializarea tablourilor dimensionate *imba#ul C permite initializarea unui tablou in momentul declararii acestuia ast!el) tip_elemente_tablou nume_tablou [dim1][dim2] ... #lista_de-valori$; unde lista_de-valori este o lista de literali separati prin vir'ula$ al caror tip este compatibil cu tipul elementelor tabloului speci!icat de tip_elemente_tablou. Primul literal din lista este plasat pe prima pozitie din tablou$ al doilea literal in cea de.a doua pozitie s.a.m.d. #emplu 1: int a2134 1 G13$ 23$ 33$ 3$ 53$ ;3$ <3$ 63$ =3$ 133MAceasta presupune ca a234113$ a214123$ a224133$ > $a2=41133Tablourile de caractere care contin siruri permit o initializare rapida de !orma) c!ar nume_de_sir[dimensiune] %sir de caractere&; #emplu %: c0ar sir2114 1 Hlimba#ul CK- care este acelasi lucru cu) c0ar sir2114 1 GClD$DiD$DmD$DbD$DaD$D#D$DuD$DlD$D C$DCD$DI3DM9eoarece in *C toate sirurile de caractere trebuie sa se inc0eie cu caracterul nul CI3D trebuie sa ne asi'uram ca tabloul declarat sa !ie su!icient de lun' pentru a include si caracterul de s!arsit de sir CI3D. Cand se !oloseste initializarea cu un literal sir compilatorul C insereaza automat caracterul de s!arsit de sir CI3D. Tablourile multidimensionale se initializeaza asemanator celor unidimensionale #emplu &: int matriceaOunitate2342341GG1$3$3M$G3$1$3M$G3$3$1MM corespunde matricii) 1 3 3 3 1 3 3 3 1 int a2 42 4 1 GG1M$G1$2M$G1$2$3M$G1$2$3$ MM corespunde matricii) 1 3 3 3 1 2 3 3 1 2 3 3 1 2 3 int b2 42 4 1 G1$2$3$ $5$;$<$6$=$13$11M corespunde matricii) 1 2 3 5 ; < 6 = 13 11 3 3 3 3 3 b.&. Initializarea tablourilor nedimensionate Pentru a evita$ prin initializare$ depasirea dimensiunilor tablourilor si deci a erorilor le'ate de aceasta situatie$ se !olosesc tablouri adimensionale %nedimensionate& dupa sinta,a) tip_elemente_tablou nume_tablou [][] ... #lista_de-valori$; Pentru declaratii de tablouri nedimensionate compilatorul C creaza automat tablouri su!icient de mari pentru a memora toti literalii de initializare. #emplu 1) c0ar er124 1 HIn eroare de citire dateKc0ar er224 1 HIn eroare de scriere dateK-

c0ar er324 1 HIn eroare de desc0idere !isierK*un'imea e!ectiva a tablourilor nedimensionate se poate a!la utilizandu.se operatorul sizeo!$ ca in e,emplul de mai #os) #emplu %) print!%HIn sirul er11Js are lun'imea 1 JdK$er1$sizeo! er1&print!%HIn sirul er21Js are lun'imea 1 JdK$er2$sizeo! er2&print!%HIn sirul er31Js are lun'imea 1 JdK$er3$sizeo! er3&%. Probleme rezolvate cu tablouri. 2.1. Aiind dati doi vectori a$ b de dimensiune n sa se determine produsul scalar al celor doi vectori. +olutie) Aie a1%a214$a224$...$ a2n4& si b1%b214$ b224$...$ b2n4& atunci produsul scalar al celor doi vectori este prin de!initie) p1a5b1a2145b214?a2245b224?...?a2n45b2n4a) Descrierea al!oritmul in Limbajul PseudoCod 3LPC): PRRZRAM Produs+calar (NCEP"T +CR(E %Tn1T&- C(TE+TE %n&PENTR" i11 (N +"+ P(NA *A n E]EC"TA (NCEP"T +CR(E %Ta%T$ i$ T&1T&- C(TE+TE %a%i&& +A(R+(TPENTR" i11 (N +"+ P(NA *A n E]EC"TA (NCEP"T +CR(E %Tb%T$ i$ T&1T&- C(TE+TE %b%i&& +AAR+(Tp)13PENTR" i11 (N +"+ P(NA *A n E]EC"TA (NCEP"T p)1p?a%i&5b%i& +AAR+(T+CR(E %Tp1ab1T$ p&+AAR+(T. b) Descrierea al!oritmul in Limbajul C 3LC): Einclude Fstdio.08 void main%void& G int n$ i!loat a2234$b2234$pprint!%HIn dati dimensiunea vectorilor$ n1 H&scan!%HJdK$ Ln&V5 citirea componenetelor vectorului a 5V !or%i13-iFn-i??& G print!%HIn a%Jd&1K$i&- scan!%HJ!K$La2i4&M V5 citirea componenetelor vectorului b 5V !or%i13-iFn-i??& G print!%HIn b%Jd&1K$i&- scan!%HJ!K$Lb2i4&M

p13- V5 initializarea produsului scalar 5V V5 calcularea produsului scalar 5V !or%i13-iFn-i??& p1p?a2i45b2i4V5 scrierea rezultatului 5V print!%HIn produsul scalar p1ab1J!K$p&M 2.2. Aiind dat un polinom de 'radul n prin coe!icientii sai reali sa se calculeze valoarea polinomului pentru orice , din intervalul 2a$b4 cu pasul 0 %0Fb.a&. +olutie) Aie polinomul P%,&1a35,n?a15,n.1?...?an.15,1?an- unde ai%i13..n& sunt coe!icientii reali ai polinomului$ n este 'radul polinomului si , ar'umentul polinomului$ a si b %aFb& sunt limitele intervalului 2a$b4 iar 0 %0F%b.a& este pasul cu care variaza ar'umentul , in intervalul 2a$b4. Pentru rezolvare se utilizeaza urmatorul al'oritm descris pe pasi) pasul 1. citeste %n&- citeste %a$b$0&pasul 2. citeste a%i&$ i13$n pasul 3. ,1apasul . daca ,8b mer'i la pasul 13 pasul 5. p)1a234- i11pasul ;. daca i8n mer'i la pasul 13 pasul <. p)1p5,?a%i& pasul 6. i)1i?1 pasul =. mer'i la pasul ; pasul 13. scrie Tp%,&1T$p pasul 11. ,1,?0 pasul 12. mer'i la pasul pasul 13. +top a) Descrierea al!oritmul in Limbajul PseudoCod 3LPC): PRRZRAM Ualpolinom (NCEP"T REPETA +CR(E %Tn1T&- C(TE+TE %n&- +CR(E %Ta1T&- C(TE+TE %a&+CR(E %Tb1T&- C(TE+TE %b&- +CR(E %T01T&- C(TE+TE %0&CAT T(MP %%nF1& +A" %n823&+A" %a8b&+A"%081b.a&&PENTR" i)13 P(NA *A n E]EC"TA (NCEP"T +CR(E %Tv%T$ i$ T&1T&- C(TE+TE %v%i&& +AAR+(T ,1a CAT T(MP %,F1b& E]EC"TA (NCEP"T p1v%3&- i)11PENTR" i)11 P(NA *A n E]EC"TA p1p5,?v%i&+CR(E %Tp%T$,$T&1T$p&,1,?0+AAR+(T +AAR+(T. b) Descrierea al!oritmul in Limbajul C 3LC): Einclude Fstdio.08 void main%void&

G int n$ i!loat ,$ a$ b$ 0$ v2234$pdo G print!%HIn dati 'radul polinomului n1 H&scan!%HJdK$Ln&print!%HIn dati limita din stan'a a intervalului$ a1 H&scan!%HJ!K$La&print!%HIn dati limita din dreapta a intervalului$ b1 H&scan!%HJ!K$Lb&print!%HIn dati pasul de variatie al ar'umentului in interval$ 01 H&scan!%HJ!K$L0&M X0ile %%nF1&\\%n823&\\%a8b&\\%08%b.a&&&!or%i13- iF1n- i??& G print!%HIn v%Jd&1K$i&scan!%HJ!K$Lv2i4&M ,1aX0ile %,F1b& G p 1 v234!or%i11- iF1n- i??& p1p5,?v2i4print!%HIn p%J!&1J!K$ ,$ p&,1,?0M M 2.3. +e considera un sir de numere reale dat. +a se determine valoarea ma,ima si minima din sirul dat precum si pozitiile ocupate de acestea. +olutie) a) Descrierea al!oritmul in Limbajul PseudoCod 3LPC): PRRZRAM UalMa,Min (NCEP"T +CR(E %Tn1T&- C(TE+TE %n&PENTR" i)13 P(NA *A n.1 E]EC"TA (NCEP"T +CR(E %T,%T$ i$ T&1T&- C(TE+TE %,%i&&+AAR+(Tma,)1,%3&- rma,13- min)1,%3&- rmin13PENTR" i)13 (N +"+ P(NA *A n.1 E]EC"TA (NCEP"T 9ACA ,%i& 8 ma, AT"NC( (NCEP"T ma,)1,%i&- rma,)1i+A(R+(T 9ACA ,%i& F min AT"NC( (NCEP"T min)1,%i&- rmin)1i+AAR+(T +AAR+(T

+CR(E %Tma,1T$ma, T +( RC"PA PR^(T(A T$rma,&+CR(E %Tmin1T$min$T +( RC"PA PR^(T(A T$ rmin&+AAR+(T. b) Descrierea al!oritmul in Limbajul C 3LC): Einclude Fstdio.08 void main%void& G int n$ i$ rma,$ rmin!loat a2234$ ma,$ mindo G print!%HIn dati n1 H&scan!%HJdK$Ln&M X0ile %%nF1&\\%n823&&!or%i13- iFn- i??& G print!%HIn a%Jd&1K$i&scan!%HJ!K$La2i4&M ma,1a234- rma,13min1a234- rmin13!or%i13- iFn- i??& G i! %a2i4 8 ma,& G ma,1a2i4- rma,1iM i! %a2i4 F min& G min1a2i4- rmin1iM M print!%HIn ma,umul este J! si se a!la pe pozitia JdK$ ma,$ rma,&print!%HIn minimul este J! si se a!la pe pozitia JdK$ min$ rmin&M 2. . +e considera doua matrici a si b de dimensiuni n , m %n linii si m coloane& date prin elementele sale reale. +a se calculeze suma si di!erenta %s si d& celor doua matrici. +olutie) +e stie ca) s%i$#&1a%i$#&?b%i$#& si d%i$#&1a%i$#&.b%i$#& pentru i13..n.1 si #13..m.1 +e citesc mai intii dimensiunile matricilor n si m$ dupa care se citesc pe rind elementele matricilor a si b. a) Descrierea al!oritmuluui in Limbajul PseudoCod 3LPC): PRRZRAM +uma9i!erentaMatrici (NCEP"T +CR(E %Tn1T&- C(TE+TE %n&- +CR(E %Tm1T&- C(TE+TE %m&PENTR" i)11 PANA *A n E]EC"TA (NCEP"T PENTR" #)13 PANA *A m.1 E]EC"TA

(NCEP"T +CR(E %Ta%T$i$T$T$#$T&1T&- C(TE+TE %a%i$#&&+AAR+(T+AAR+(TPENTR" i)13 PANA *A n.1 E]EC"TA (NCEP"T PENTR" #)11 PANA *A m.1 E]EC"TA (NCEP"T +CR(E %Tb%T$i$T$T$#$T&1T&-C(TE+TE %b%i$#&&+AAR+(T+AAR+(TPENTR" i)13 PANA *A n.1 E]EC"TA (NCEP"T PENTR" #)13 PANA *A m.1 E]EC"TA (NCEP"T c%i$#&)1a%i$#&?b%i$#&d%i$#&)1a%i$#&.b%i$#&+AAR+(T+AAR+(T+CR(E %TMATR(CEA a1T&PENTR" i)13 PANA *A n.1 E]EC"TA (NCEP"T PENTR" #)13 PANA *A m.1 E]EC"TA (NCEP"T +CR(E PE ACE*A+( R(N9 a%i$#&$T T +AAR+(T +CR(E +A(R+(T 9E R(N9 PE ECRAN +AAR+(T +CR(E %TMATR(CEA b1T&PENTR" i)13 PANA *A n.1 E]EC"TA (NCEP"T PENTR" #)13 PANA *A m.1 E]EC"TA (NCEP"T +CR(E PE ACE*A+( R(N9 b%i$#&$T T +AAR+(T +CR(E +AAR+(T 9E R(N9 PE ECRAN +AAR+(T +CR(E %TMATR(CEA s1a?b1T&PENTR" i)13 PANA *A n.1 E]EC"TA (NCEP"T PENTR" #)13 PANA *A m.1 E]EC"TA (NCEP"T +CR(E PE ACE*A+( R(N9 s%i$#&$T T +AAR+(T +CR(E +A(R+(T 9E R(N9 PE ECRAN +AAR+(T +CR(E %TMATR(CEA d1a.b1T&PENTR" i)13 PANA *A n.1 E]EC"TA (NCEP"T PENTR" #)13 PANA *A m.1 E]EC"TA (NCEP"T +CR(E PE ACE*A+( R(N9 d%i$#&$T T

+AAR+(T +CR(E +A(R+(T 9E R(N9 PE ECRAN +AAR+(T +AAR+(T. b) Descrierea al!oritmului in Limbajul bc 3LC): Einclude Fstdio.08 void main%void& G int n$ m$ i$ #!loat a22342234$b22342234$ s22342234$s22342234do G print!%HIn dati numarul de linii al matricilor$ n1 H&scan!%HJdK$ Ln&print!%HIn dati numarul de coloane al matricilor$ m1 H&scan!%HJdK$ Lm&M X0ile %%nF1&\\%n823&\\%mF1&\\%m823&&V5 citirea componenetelor matricii a 5V !or%i13-iFn-i??& !or%#13-#Fm-#??& G print!%HIn a%Jd$Jd&1K$i$#&- scan!%HJ!K$La2i42#4&M V5 citirea componenetelor matricii b 5V !or%i13-iFn-i??& !or%#13-#Fm-#??& G print!%HIn b%Jd$Jd&1K$i$#&- scan!%HJ!K$Lb2i42#4&M V5 calcularea sumei si di!erentei matricilor 5V !or%i13-iFn-i??& !or%#13-#Fm-#??& G s2i42#41a2i42#4?b2i42#4d2i42#41a2i42#4.b2i42#4V5 scrierea rezultatelor 5V print!%HIn matricea a)InK&!or%i13-iFn-i??& G !or%#13-#Fm-#??& print!%HJ5.2! H$a2i42#4&print!%HInK&M print!%HIn matricea b)InK&!or%i13-iFn-i??& G !or%#13-#Fm-#??& print!%HJ5.2! H$b2i42#4&print!%HInK&M print!%HIn matricea s1a?b)InK&-

!or%i13-iFn-i??& G !or%#13-#Fm-#??& print!%HJ5.2! H$s2i42#4&print!%HInK&M print!%HIn matricea d1a.b)InK&!or%i13-iFn-i??& G !or%#13-#Fm-#??& print!%HJ5.2! H$d2i42#4&print!%HInK&M M 2.5. Aiind date matricea a %n5m&$ de n linii si m coloane si matricea b %m5p&$ de m linii si p coloane sa se calculeze produsul celor doua matrici. +olutie) "n element al matricii produs c este) c%i$#&1a%i$1&5b%1$#&?a%i$2&5b%2$#&? ... ?a%i.m&5b%m$#& a) Descrierea al!oritmul in Limbajul PseudoCod 3LPC): PRRZRAM ProdusMatrici (NCEP"T +CR(E %Tn1T&- C(TE+TE %n&+CR(E %Tm1T&- C(TE+TE %m&+CR(E %Tp1T&- C(TE+TE %p&PENTR" i)13 P(NA *A n.1 E]EC"TA PENTR" #)13 P(NA *A m.1 E]EC"TA (NCEP"T +CR(E %Ta%T$i$T$T$#$T&1T&- C(TE+TE %a%i$#&&+A(R+(TPENTR" i)13 P(NA *A m.1 E]EC"TA PENTR" #)13 P(NA *A p.1 E]EC"TA (NCEP"T +CR(E %Tb%T$i$T$T$#$T&1T&- C(TE+TE %b%i$#&&+A(R+(TPENTR" i)13 P(NA *A n.1 E]EC"TA PENTR" #)13 P(NA *A p.1 E]EC"TA (NCEP"T c%i$#&)13 PENTR" Q)13 P(NA *A m.1 E]EC"TA c%i$#&)1c%i$#& ? a%i$Q&5b%Q$#& +A(R+(T+CR(E %TMATR(CEA a5b1T&PENTR" i)11 P(NA *A n.1 E]EC"TA (NCEP"T PENTR" #)11 P(NA *A p.1 E]EC"TA +CR(E pe acelasi rind c%i$#&$T T+CR(E +A(R+(T 9E *(N(E +A(R+(T+A(R+(T. b) Descrierea al!oritmului in Limbajul C 3LC): Einclude Fstdio.08

void main%void& G int n$ m$ p$ i$ #$ Q!loat a22342234$b22342234$ c22342234do G print!%HIn dati dimensiunile matricilor$ n$m$p1 H&scan!%HJdJdJdK$ Ln$Lm$Lp&M X0ile %%nF1&\\%n823&\\%mF1&\\%m823& \\%pF1&\\%p823&&V5 citirea componenetelor matricii a 5V !or%i13-iFn-i??& !or%#13-#Fm-#??& G print!%HIn a%Jd$Jd&1K$i$#&- scan!%HJ!K$La2i42#4&M V5 citirea componenetelor matricii b 5V !or%i13-iFm-i??& !or%#13-#Fp-#??& G print!%HIn b%Jd$Jd&1K$i$#&- scan!%HJ!K$Lb2i42#4&M V5 calcularea produdului matricilor 5V !or%i13-iFn-i??& !or%#13-#Fp-#??& G c2i42#413!or%Q13-QFm-Q??& c2i42#4?1a2i42Q45b2Q42#4M V5 scrierea rezultatelor 5V print!%HIn matricea a)InK&!or%i13-iFn-i??& G !or%#13-#Fm-#??& print!%HJ5.2! H$a2i42#4&print!%HInK&M print!%HIn matricea b)InK&!or%i13-iFm-i??& G !or%#13-#Fp-#??& print!%HJ5.2! H$b2i42#4&print!%HInK&M print!%HIn matricea c1a5b)InK&!or%i13-iFn-i??& G !or%#13-#Fp-#??& print!%HJ5.2! H$c2i42#4&print!%HInK&M M

2.;. +e da un sir de n numere reale. +a se ordoneze crescator sirul !olosind metoda de sortare prin selectia minimului. +olutie) +e determina minimul dintre elementele sirului %,%i&$ ,%i?1&$ ...$ ,%n&& pentru i11$n.1 %M(N 1 minim %,%i&$ ,%i?1&$ ...$ ,%n&&& si se plaseaza pe pozitia SiS iar elementul de pe pozitia SiS se plaseaza pe pozitia S#S ocupata anterior de elementul minim. Al'oritmul continua pina cand i1n.1$ si cand sirul este de#a ordonat. a) Descrierea al!oritmul in Limbajul PseudoCod 3LPC): PRRZRAM Rrdonare+electieMinim (NCEP"T +CR(E %Tn1T&- C(TE+TE %n&PENTR" i)11 P(NA *A n E]EC"TA (NCEP"T +CR(E %Tsir%T$i$T&1T&- C(TE+TE %sir %i&&+A(R+(TPENTR" i)11 P(NA *A n.1 E]EC"TA (NCEP"T Q)1iPENTR" #)1i?1 P(NA *A n E]EC"TA (NCEP"T 9ACA sir%Q& 8 sir%#& AT"NC( Q)1#) +A(R+(TGplasarea minimului pe pozitia i$ si a elementului anterior de pe pozitia i pe pozitia QM au,)1sir2Q4- sir2Q4)1sir2i4- sir2i4)1au,+A(R+(T+CR(E %Tsirul ordonat este)&PENTR" i)11 P(NA *A n E]EC"TA +CR(E %sir%i&$T T&+A(R+(T. b) Descrierea al!oritmul in Limbajul C 3LC): Einclude Fstdio.08 void main%void& G int n$ i$ #$ Q!loat a2234$ au,do G print!%HIn dati n1 H&scan!%HJdK$Ln&M X0ile %%nF1&\\%n823&&!or%i13- iFn- i??& G print!%HIn a%Jd&1K$i&scan!%HJ!K$La2i4&M !or%i13- iFn.1- i??& G Q1i!or%#1i?1-#Fn-#??& i!%a2Q4 8 a2#4& Q1#V5 Plasarea minimului pe pozitia i$ si a elementului a!lat pe pozitia i$ in locul minimului 'asit 5V

au,1a2Q4- a2Q41a2i4- a2i41au,M print!%HIn sirul ordonat)K&!or%i13- iFn- i??& print!%HJ!$ H$a2i4&M 2.<. +e da un te,t !ormat din propozitii terminate prin punct. Aiecare propozitie contine cuvinte separate prin spatii. +a se determine numarul de propozitii din te,t$ numarul cuvintelor si numarul vocalelor din !iecare propozitie Einclude Fstdio.08 Einclude Fstrin'.08 Einclude Falloc.08 Einclude Fprocess.08 void main%& G c0ar 5te,t- int nrprop$nrcuv2234-nrvoc2234i!%%te,t W1 %c0ar5&malloc%133&&11N"**& G print!%HIn eroare de alocare pentru te,tK&e,it%3&M print!%HIn dati te,tul de analizat)K&- 'ets%te,t&nrprop13- V5 numarul de propozitii 1 3 5V nrcuv23413- V5 numarul de cuvinte al primei propozitiei13 5V nrvoc23413- V5 numarul de vocale al primei propozitiei13 5V X0ile%5te,t W1 CI3D& V5 cat timp nu s.a detectat s!arsitul de sir 5V G X0ile%5te,t W1 C.D& V5 cat timp nu s.a detectat s!arsitul de propozitie 5V G V5 cat timp nu este un spatiu si nu este s!arsit de propozitie 5V X0ile%%5te,t W1 C C& LL %5te,t W1 C.D&& G sXitc0%5te,t& G case CaD) case CAD) case CeD) case CED) case CiD) case C(D) case CoD) case CRD) case CuD) case C"D) nrvoc2p4??- breaQM te,t??- V5 trecerea la caracterul urmator din te,t 5V M nrcuv2p4??- V5 contorizarea cuvintelor 5V i!%5te,t W1 C.D& V5 trecerea la un nou caracter se !ace ptr aceeasi propozitie 5V te,t??M te,t??-

X0ile%5te,t 11 C C& te,t??- V5sarirea spatiilor dintre propozitii 5V nrprop??- V5 contorizarea propozitiilor 5V nrcuv2p413- V5 initializarea contorului de cuvinte 5V nrvoc2p413- V5 initializarea contorului de vocale 5V M print!%HIn (n te,tul introdus s.au detectat Jd propozitiiK$p&!or%i13-iFp- i??& print!%HIn (n propozitia Jd sunt Jd cuvinte si Jd vocaleK$i$nrcuv2i4$nrvoc2i4&M &. Probleme propuse spre rezolvare: 3.1. +e considera un sir de numere reale si o valoare ,. +a se stabileasac daca valoarea , !ace parte din sir$ iar in caz a!irmativ sa se determine pozitia sa in sir. 3.2. +e da un sir de n numere reale date. +a se ordoneze descrescator sirul utilizindu.se metoda de ordonare cu intersc0imbare prin compararea elementelor vecine si intersc0imbarea acestora daca nu sint in ordine. 3.3. +e dau doua siruri de numere , si P cu n,$ respectiv nP elemente care reprezinta doua multimi de numere. +a se scrie un pro'ram care pornind de la cele doua siruri determina un sir z care contine reuniunea elementelor celor doua siruri. Elementele comune se vor lua o sin'ura data. (ndicatie) +e copiaza in sirul z unul din sirurile date %de e,emplu sirul ,&$ dupa care se citeste cite un element din sirul celalalt %sirul P& si se veri!ica daca se a!la in sirul z %adica in sirul ,&. Rperatia se continua pina la ultimul element al sirului P. 9aca elementul comparat nu se a!la in sirul ,$ atunci el se va adau'a sirului z. 3. . +e da un sir ,%1&$ ,%2&$...$,%n& si un numar natural Q %QF1n&. +a se ordoneze crescator sirul ,%1&$ ,%2&$..$ ,%Q& si descrescator sirul ,%Q?1&$...$,%n&. 3.5. Aiind data o matruce A patrata de dimensiune n sa se determine numarul elementelor ne'ative$ pozitive si nule din matrice. 3.;. Aiind dati vectorii a si b de dimensiune n data sa se determine suma si di!erenta acestor vectori. 3.<. +e dau doua polinoame P si _ de dimensiune n respectiv m. +a se determine suma si di!erenta celor doua polinoame. 3.6. +e dau doua polinoame p si Y de dimensiune n respectiv m. +a se determine produsul celor doua polinoame. 3.=. +e dau doua polinoame p si Y de dimensiune n respectiv m %n8m&. +a se determine citul si restul celor doua polinoame si sa se precizeze printr.un mesa# daca sint divizibile. 3.13. +e da o matrice a de n linii si m coloane. +a se determine vectorul v care contine suma elementelor matricii a de pe !iecare linie. Apoi sa se determine vectorul X care contine suma elementelor matricii de pe !iecare coloana. 3.11. +e da un te,t !ormat din propozitii terminate cu caracterul punct. +a se a!iseze !iecare propozitie impreuna cu lun'imea sa$ cu numarul sau de cuvinte si numarul sau de vocale. 3.12. +e da un te,t !ormat din propozitii terminate cu caracterul punct. +a se a!iseze numarul total de separatori %spatii$ vir'ula si punct& precum si numarul !iecarui tip de separatori. 3.13. +e da un te,t !ormat din propozitii compuse din cuvinte$ terminate cu caracterul punct. +a se a!iseze toate cuvintele din sir in ordine al!abetica. 3.1 . +e da un te,t !ormat din propozitii compuse din cuvinte$ terminate cu caracterul punct. +a se a!iseze toate cuvintele din sir care au o anumita vocala precizata. (. Continutul referatului: .1. Prezentarea succinta a datelor de tip tablou si a modalitatilor de de!inire si re!erire ale elementelor tablourilor. .2. E,ecutarea pe calculator a problemelor rezolvate cu prezentarea in re!erat a datelor si rezultatelor problemelor. .3. Rezolvarea in pseudocod si in C a problemelor propuse pentru rezolvare.

. . Rbservatii si concluzii asupra lucrarii. http://software.ucv.ro/~mburicea/luc6p05.html

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