Professional Documents
Culture Documents
IXintensivMilosescu PDF
IXintensivMilosescu PDF
=2 (352) => Se afigeaza 11 Aigoritmii eunt: ni0 =nq ng= nto Sntreg n10,nqip.a;, Antreg ¢,ni0,q) ‘Enceput Saoepae se ended Heiteste nl0,q;. ing © 0; po 1; timp n10<>0 exe 4 ng + pi (no. nl0 © ni0 div gq;Probleme care se pot rezoiva cu ajutorul algoritmilor de conversi teme de numeratie 1 2. 10. 1. 12, 13, 14. 15, tre sis} Se citeste un numar natural n de la tastaturd. Sa se afigeze reprezentarea lui baza 4. q €[2, 9]. q$i nse introduc de la tastatura. Se citesc de la tastatura un numair natural n si un numar g, qe[2, 9]. Sa veriice daca n poate fi considerat ca o reprezentare a unui numar in baza g. Se citeste un numar natural n de la tasteturd. SA se afigeze cate cifre a reprezentarea lui in baza g, q¢[2, 9]. q$i nse introduc de ia tastatur. Se citesc de la tastaturd q, baza de numerajie, qe[2, 9], si mai multe num naturale care reprezinta cifrele unui numar in baza g, pand c&nd numa introdus nu mai poate fi considerat cifré in aceasta bazA de numeratie. $3 se afi numarul reprezentat in baza 10. Se citeste de la tastatura un numér n, care este reprezentarea numarului tn bi 4. GEl2, 9]. Sa se afigeze numarul reprezentat in baza 10. q se introduce de tastaturd Se citeste de la tastaturd un numa n, care este reprezentarea numérului In bazd 4. 1 (2, 9} Sa se afgeze cate cite are reprezentarea lui In baza 10, q se introy duce de la tastatura. t Se citeste de la tastaturd un numar n, care este reprezentarea numarull In b: Gel, 9}. Sa se afigeze numérul reprezentat in baza p, pe[2 9]. q $i ps introduc de la tastatura Se citeste un numair in baza 4. Sa se verfice c& numarul este corect(cifele salt corespund bazei de numeratie) si sa se afigeze frecventa ciftelor sale. Se introduc de la tastaura baza de numeraie k, Kee, §], $i citele unui numa eprezentat in baza k. SA se verifice daca cifele sunt corecte pentru baza di umeratie aleasa si sd se afigeze suma ciffelor de rang par (impar). Citrea cifrelo. se face Incepand cu cifra cea mai semnificativa a numarului. ! Sa se genereze toate numerele naturale a c&ror reprezentare In baza 8 are exad 4citre. i ‘Si se gonereze toate numerele naturale a caro reprezentare In baza q are exec! elfre; qi ke introduc de la tastaturd siq €[2, 9]. Sa se afigeze toate numerele naturale mai mii Uecal un nuntdt dat 1, care introduce de la tastaturd (n27), a caror reprezentare in baza 2 contine exact tre cifre binare de 1 [ Sa se afigeze toate numerele naturale cuprinse intre a si b (acb) care at Broprlates 8 pauls! cubu lr, reprezentate In baza 2, conn acelag umd, de cifre binare 0. a si bse introduc de la tastatura. Sa se afigeze toate numerele in baza 2 care au k ciffe gi sunt civiibile cu 27. k. 1 se introduc de la tastaturd. (Indicafie. Un numar reprezentat in baza 2 es diviibil cu 2" daca ultimele n cite ale reprezentarii sunt 0} Sa se afigeze toate numerele naturale mai mici decat n care sunt palindrom i baza k. ni ke introduc de la tastatura gi ke [2,9]. 16. Sa se afigeze toate numerele reprezentate in baza k, mai mici decat n, care sunt palindrom in baza 10. n si kse introduc de la tastatura ke [2, 9]. 3.3.8. Algoritmi pentru generarea sirurilor recurente ‘Aigoritmul pentru generarea termenitor girului lui Fibonacci este un exemplu clasic de algoritm pentru definirea recurenta a termenilor unui gi. Sirul lui Fibonacci este E. format din termeni definiti prin recurenta, astfet ans Ano Ant Pentru generarea primilor n termeni ai sirulu lui Fibonacci (n23), se vor genera repe- tat termenii de rang ‘ai sirului, cu 3sisn. Se vor folosi rei variabile de memoria: at Pentru a2, a2 pentru aj. si a3 pentru termenul curent aj. Dupa fiecare generare a unui termen se vor actualiza vaiorile din variabilele a1 si a2. Pasi algoritmului sunt: Pasul 1. Se infiaizeazai termenii at $i a2, prin atribuirle ate—t1 si a1. Pasul2. So afigeazd termenii at si a2. Pasul 3. Se iniializeaza contoru! i care numéira termenii generati, prin operatia ie-3 (urmeaza s8 se calcuieze termenul 3) ‘Se calculeaza a3, prin operatia de atribuire a3—at+a2. Se afigeaza termenul a3. Se actualzeaza valonie pentru at si a2, prin atrbuirle ate-a2 si a2—a3. Se incrementeaza contorul cu 1, prin operafia ie~i+. Pasul 8. Dacd i=n, atunci se revine la Pasul 4; altfel, se termind algontmul De exemplu, daca n=5, generarea termenilor se desfsoara astfet a2=1; Aigeaza 1, 1. Se inijalizeaza contorul Pasul 4. Pasul 5. Pasul 6. Pasul 7. Se actualizeazs termeni at gi a2: a ‘Se incrementeaza contoru cu 1: =3+1=4, cu (426) = Se calculeaza a3=142=3, Se afigeazé 3 ‘Se actualizeaz& termenii at si a2: at=a2=2 g| ad=a3e% Se incrementeazé contorul cu 1:i=4+1=5, e=5 (Ge=5) = Se calculeaza a=z2+ ‘Se actualizeaza termenil at gi a2: a 10. Se incrementeaz contorul cu 1: i=5+1=6 11, 5 (655) => Se termina algoritmul Ered at.a2/a3,n,i7 . sia2: ‘Se atigeaza 5, Su aeProbleme care se pot rezolva cu ajutorul algoritmilor de generare a siturilor rere ' 1. Sé se afigeze tot termenii girului lui Fibonace! mai mici decat un numar natural n introdus de la tastaturd Sa se determine dac& un numar n introdus de a tastatura poate fi un termen al sirului tui Fibonacci F Sd se verifice daca dou’ numere naturale n si m introduse de ia tastatura (m>=n) pot fi termeni consecutiv ai girulul lui Fibonacci, fard a se calcula termenil siulu (Indicatie. Se executa operata inversd, de determinare a termenilor precedent si generarea, cu a3e-a2, a2eal sit ‘m sin sunt termeni consecutiv “} 2 iniaizarea, cu a3e—m, a2—n, atm: al0; daca 23=a2: sirului tui Fibonacci) re se introduc de la | 4. Fiind date x un numar real si nun numar natural (n>=3), tastaturd, sd se atigeze Pn(x), definitrecurent astek Pry(s)ax Pat I Palx)= x Pa(x) - P4(x) i Prtl) - Pr-al) ai 5. Se citesc trei numere inregi a, b si ¢ care reprezinté coefcjeni unei ecuati de {gradul 2, gi un numar natural n. Sa se calculeze Sq=xr"+x2 ", unde x1 gi xo sunt! Fadacinile ecuafje Suma se calculeaza fara a se rezolva ecualia de gradul 2 Notam cu S suma rédacinlor (S;-bla)s cu P produsul radacinior (P=cla). Atunc: Sp= Sect ang ) PQ xy 2x0) = SxSpea~ PS. 2. Stnd 8 Sp = 1+1=2 $181 =5, se va folosi definiia recurenta Sp-SxSy - PSo F “SxS pu} ~ PxSp.2 6. Sa se calculeze rédacina patraté dint-un numa real x, prin generarea unui sir de! rumere (aicen Care © aproximeaz’,folosind deft recurenta } ast i agn(tHu v2 age(1+x)/24x/((143)/2))/2. (2n-t Han V2 : Termeni aj vor fi generati recursiv pana cénd diferenta fa; - ai-sl va fi mai mica | decat 0 valoare e (eroarea acceptaté, un numar subunitar foarte mic). Ultimul termen aj generat va contine valoarea aproximativa a radicalului din numéirul x. x $i 6 se introduc de la tastatura, 7. SA se afigeze primi n termeni ai sirului (n se introduce de la tastatura): 1, 1, 2, 1,: 2,3,1,2,3,4,1,2,3,4,5, . i 8. Sa se afigeze primi n termeni al giulul (n se introduce de la tastatura): 1, 2, 1, 4. 2,3, 4,3,2,1,1,2,3,4,5,6,5,4,3,2,1, = + 3.4, Eficienta algoritmilor ‘Afi vazut c& pentru rezolvarea unei probleme se pot folosi mai multi algoritmi. In acest caz se va alege algoritmut cel mai eficient. Algoritmul cel mai eficient este cel care foloseste cel mai putin resursele calculato- rului si anume: ¥ Memoria interna. In memoria interna se aloca spatiu atat pentru datele folosite de algoritm, cat gi pentru codul executabil al programului (instructiunile In cod magina), ¥ Procesorul. Timpul de utiizare a procesorului depinde de timpul necesar pen- ‘ru executarea algoritmului Memorie interna Din punct de vedere al ganditi algoritmului, pentru a face economie de aceasta resurs@, trebuie avute Tn vedere urmatoarele: ¥ Alegerea corecta a tipului de data pentru fiecare variabité de memore folosita in algoritm. ¥ Rezolvarea probleme’ folosind cat mai putine variable de memorie ‘Ati vazut 0 atunei cand i se atribuie unei date un tip de dat, data capata mat multe atribute care determina domeniul de definitie intern al ei (mulfimea in care poate lua valori data). Tipul de data ales influenfeaza calitatea programului, deoarece el determina dimensiunea zonei de memorie alocata, algoritmul de codificare si opera- toil admisi pentru prelucrare, Din aceasta cauzé, la alegerea tipului de dat& trebuie 84 se facdi In dou moduri analiza date ¥ Logic (la nivelul conceptual). Analiza se face pomind de la enuntul problemei gi constd in identificarea domeniului de definitie extern al datei, De exemplu, in enuntul problemei se precizeaza c& trebuie prelucrat un numar intreg pozitiv, cu vvalori cuprinse Intre 0 §1 200. Acesta este domeniul de definite extem al datai Fizic (la nivelul reprezentari ei in memoria interna). Analiza se face pomind de la tipurile de date implementa in limbajul de programare, fiecare tip de data avand un domeniu de definitie intern al datei. S8 presupunem ca in limbajul de pro- sgramare sunt implementate urmatoarele tei tipuri de date intregi: tipul 1 cu dome- Niul de definite [-128, 127] reprezentat pe un octet, tioul 2cu domeniul de defintie [0, 255} reprezentat pe un octet si tiou 3 cu domeniul de definite [-32768, 32767) reprezentat pe doi octeti. In urma analizei fizice trebuie ales tipul de dati adecvat. Regula este: se alege tipul de daté care consuma cea mai putin’ memorie, astfel ineat domeniul de definitie extern al datei sa fie inclus in domeniul de definitie intern al datei. Pentru exemplul prezentat se va alege tipul 2 de data deoarece numai tipul 2 si tipul 3 respecta conditia de incluziune a domenilor de defniie ((0,200}c[0,255} si [0,200]c|-32768,52767), dar [0,200}¢{-128,127)), iar tipul 2ocupa mai putin spatiu de memorie (1 octet) decal foul 3 (2 octet. Problema pare neimportanta atunci cénd algoritmul foloseste cateva variabile de memorie. Dar trebule s8 va ganditi c& pentru rezolvarea problemelor complexe se pot folosi structuri de date in care se memoreaza foarte multe date elementare (de74 Algoritmii ; | L la cateva zeci pana la milioane de date elementare). in acest caz este important j daca tipul de data elementara este ales corect. Fiecare octet de care nu are nevoie | 0 dat elementara poate sa insemne un consum inutil de milioane de octeti pentru structura de date. Procesorul Este evident ca timpul de executie al unui algoritm depinde de cate valor ale date-} lor de intrare vor fi prelucrate. Intro formulare de genul .se prelucreazé ni valori{ numeric citte de la tastatura sau int-o formulare de genul ,se prelucreaza mai mute numero inegi otto do fa fastaturs, pana la ntnres vaio 0 ao execute a algoritmului se pot prelucra numai 2 valori pentru data de intrare (daca n are! vValoarea 2, sau daca se citese numai dou’ numere inlregi dferite de 0), sau se pot prelucra 100 de valor pentru data de intrare (dac& n are valoarea 100, sau daca se! citesc 100 numere intregi diferite de 0). Se defineste dimensiunea datelor de! intrare ca find numarul de valori pentru datele de intrare ale unui algoritm. Pentru} compararea timpului de executie @ doi algoritmi care rezolva aceeagi problema, se} va folosi aceeasi dimensiune a datelor de intrare, t In functie de complexitatea algortmului, evaluarea timpulu de executie se poate face prin ; a) numéarul de operatii elementare ale algoritmului, sau ) timpul mediu al algortmulul © operatie elementara este 0 operatie sau 0 succesiune de operatii care nu depind de caracteristcile problemei. De exemplu, poate fi operatie elementara 0 operatie aritmetica (adunare, scadere etc.), 0 operatie de comparalie, o operatie de atribuire sau un grup bine precizat de astfel de operatii (5 operali de adunare, 2° operatii de comparare, 10 operatii de atribuire etc.). In schimb, n operafi de ati! buire nu reprezinta o operatie elementara, deoarece depind de 0 caracteristica @ problemei, si anume de valoarea lui n, Exist& cazuri in care nu se poate precize numarul de operatii elementare, acestea depinzand de valoarea dateior de intrare 88 comparzim urmatorii doi algoritmi: Enuntul problemei 1. Se citesc n numere, S8 se caiculeze suma lor. Enunful problemei 2. Se citesc n numere. Sa se calculeze suma numerelor pare. | Problema 1 Problema 2 i intreg n.a,1,57 Sntreg n,a,i,s ! inceput 3nceput : citeste n: 5 © 0; citeste ni 5 <0; t pentru ici,n executa pentru ic-i,n executa a | citeste a; citeste a: : 5 Sta; daca mod 260) sfargit pentru; atunci s € sta; serie 5; ‘ sfargit cack; > sfargit. sfargit pentruy acre 6702. ; efargit. Informatica 75 In cazul ambilor algoritmi se execut, in afara structurii repetitive, patru operatii ele- mentare (0 operatie de citire, 0 atribuire, 0 initializare contor si o operatie de scriere). In cazul primului algoritm se executa in structura repetitiva patru operatii elemen- tare (dowd operatii asupra contorului i - 0 comparare si 0 incrementare -, 0 operatie de ciire $i 0 atribuire). In total, se executa 4+4xn operat In cazul celui de al doilea algoritm se executa in structura repetitva doua operati supra contorului /~ 0 comparare si o incremetare —, 0 operatie de citi, 0 opera- tie de comparare gi nu se poate preciza daca se execut $i atribuirea). In total se executa 4+4xn+x operatil, unde x depinde de cate numere pare se citesc de la tastatura Ii cel de al doilea caz, pentru compararea algoritmilor se foloseste timpul mediu de executie al algoritmului. Exista un timp minim de execufie care corespunde cazului cei mai favorabil (cazul In care se executé cele mai putine operati) si un timp maxim de execufie care corespunde cazului cel mai defavorabil (cazul in care se executa cele mai multe operati). Pentru exemplul prezentat cazul cel mai favorabil este ca sa nu existe nici un numar par. In acest caz x=0 si numarul de operatii elementare este 4+4xn. Cazul cel mai defavorabil este ca toate numerele © 84 fie pare. In acest caz xn gi numarul de operafii elementare este 4*5xn. Pentru a calcula timpul mediu de executie, va trebui s& analizam toate cazurile posibile (in total né1 cazuri): nici un numa par, un numa par, doua numere pare, .., anumere pare, numdirul mediu de operati find dat de x calculat astfel: x=(0+1424...tn)(n+1) = (1x (n+1)/2)/(n+1 “Studiu de'caz” Scop: exemplificarea modului in care pot fi comparati doi algoritmi folosind nu- marul de operatii elementare, al2 Enuntul problemei 1: Sa se determine valoarea unui polinom de gradul n. Gradul polinomulu n, coeficienti a ai polinomului si valoarea lui x se introduc de la tastaturd. ‘Se vor folosi urmatoarele variabile de memorie; ¥ Date de intrare: n pentru gradul polinomului, x pentru valoarea pentru care se efectueaza caloulul si a pentru citiea unui coeficient. ¥ Data intermediara: ide tip contor, pentru numararea celor n+1 coeficienti citi. ¥ Data de iesire: p, pentru valoarea polinomuiul Pentru rezolvarea acestei probleme se vor folosi doug variante de algoritmi; Varianta 1. 1 P(x) = aq x" ana +. + ayx! + aQX” Introducerea coeficienfior Incepe cu coeficientul ag si se termina cu coeficientul an, Varianta 2. PX) = (((aaX + Aes) X+ da) + + ay) x4 89 Introducerea coeficientilor incepe cu coeficientul an $i se termina cu coeficientul ap.Aigoritmil sunt Varianta 1 Varianta 2 intreg n,p.x,a,i; Antreg n,p,x,a,i7, 5 inceput Gnceput ‘ a citeste a,x, a; citeste n,x.a7 i pea: pea : pentru i¢-l,n executa pentru i¢i,n execute “citeste a: citeste, a7 Po plate: Be pixtal i x x; sfargit_pentrur i sfargit_pentruy serie pj : scrie p; sfargit. sfargit. és Se observa ca cei doi algoritmi difera din punct de vedere al structurii repetitive, In care se executa, In prima variant’, un grup de cinci operatii (doua operatii asupra ontorului i — 0 comparare si o incrementare -, 0 citire si dou atribuiri), far ina dova variant’, un grup de patru operalii (doud operafii asupra contorului /- 0 comparare si 0 incrementare -, 0 citire si 0 atribuire), in afara structurl repetitive executandu-se in ambele cazuri patru operatii elementare (0 operatie de citire @ trei date de intrare, o operatie de atribuire, o operatie de initializare a contorului si of operatie de scriere). Asadar, pentru aceeasi dimensiune a datelor de intrare (n), inf prima varianté se executa 4+5:n operat elementare, iar in a dova varianta 44x) operatii elementare. Este evident ca a doua varianta este cea eficient I Enunful problemei 2: Se introduc n numere de /a tastatura. Si se numere céte| sunt divizibile cu 2, cate sunt divizible cu 3 $i céte sunt divizibile cu 6, ; ‘Se vor folosi urmatoarele variabile de memorie; i Y. Date de intrare: n pentru numarul de elemente si a pentru citirea unui numar. | Bata intermediar de ip cone, pny nunéavea clr numore cae oe chess | ¥ Data de iesire: k7, pentru numararea numerelor divizibile cu 2, k2 pentru} humbrarea numer cvble 9 9119 port nunétarea nme dbl wae. Pentiu reculvarex avestei probleine se vor folusi dou’ varianle ue alguiil Varianta 1 Varianta 2 intreg n,a,k1,42,k3,i; Sotene a, aaa nea Snceput citeste na; KL © 0; k2 00; "3 0; pentru ici,n executd. citeste daca nod 2 = 0 tunel eee KL © kled: ee ‘oS dac& a mod 3.2/0. atunei i | I eal | | atuncd, Bea 241 sfargit daca, dack a mod 6 = 0 tuned KB 342, sfargit daca, sfargit daca; sfargit pentru; serie ki;k2,k3: sfaraite 2 & kasd; 3 Bed; sfargit dac, altfel dacd a mod 3 In acest caz, nu se poate preciza numérul de opera elementae ale fecrui algo ritm, deoarece el depinde de fiecare numar care se citeste: dacé nu este divizibil nici cu 2 gi nici cu 3, daca este divizibl numai cu 2, daca este divizibil numai cu 3 sau dacd este divizibil cu 8, Pentru compararea célor doi algoritmi, vom calcula rnumarul de operati pentru fiecare caz de divizbilitate Varianta 1 Varianta Givizibil cu nu 2 3 6 mu | 2 3 6 comparati | 2 | 2| 2 |21|3)31|]31|3 atribuiri ce | et | Ts) AE _total 2[3]3l[s|/3 ,/4 [4/6 Se observa ca prima variant’ este mai eficienta decat ceadeadous. ‘Studiw de caz sn ee. ‘Scop: exemplificarea modului in care pot fi comparati doi algoritmi folosind timpit de execute. Vom considera primele doua variante de algoritmi pentru testarea unui numar prim. In cole doua variante se executa sigur: ¥ Varianta 1: 5 operatii elementare: o operate de citre, doua atribuir, o compa- rajia sia operalia de scriera ¥ Varianta 2: 5 operatiielementare: 0 operajie de citire, o atribuire, doa com- parati si o operatie de scriere. Cazul cel mai favorabil este ca numérul sa fie par. In acest caz, se mai executa: ¥ Varianta 1: 3 operat elementare: doud operatii de comparatie (una in structura repetitiv’ si una in structura altemativ’) si 0 operatie de atribuire — in total 8 operati ¥ Varianta 2: 0 operatie de atribuire — In total 6 operati Cazul cel mai defavorabil este ca numarul sa fie prim. In acest caz se executa: ¥ Varianta 1: de [sqrt(n)]-1 off trei operat (dou’ comparatii si 0 atribuite), in total 3x({5qrt(n)}-1) operat in total 5+3xi{sqrtin)}-1) operati.¥ Varianta 2: do (sqt(n))-2V2 of tri operat (oud comparati i o tribute), Inj total 3°(({sqrt(n)}-2)2) operatii—in total 5+3x (({sqrtin)}-2)2) operat : ! 3.5. Aplicarea algoritmilor ay a ie ete est ioe trate | fizic& sau chimie) cu ajutorul calculatorului, Pentru aceasta trebuie mai intai s& descrieti rezolvarea lor cu ajutorul algoritmilor. 3.5.1. Rezolvarea problemelor de matematica Enuntul problemei 1: Se citesc trei numere intregi a, b $i c care reprezinta coefick enti unei ecuatii de gradul 2, Sa se rezolve ecuatia. Se vor folosi urmatoarele variabile de memorie: ' Date de intrare: a, b gi c pentru coeficientii ecuatiei ¥ Data intermediara: d pentru discriminant. Date de iegire: x1 i x2 pentru radaicinile reale ale ecuatiei. F Algoritmul este: t real a,b,c, x1,x2,d; inceput } citeste a,b,c: ack a=0 atuncd serie "Ecuatie de gradul intai- dac& c=0 atunci serie “ cu o infinitate de solutiit; altfel scrie * care nu are solutii*; sfargit_daca; 7 pentrazc=0 altfel xl © -c/b; serie " cu radacina", x1; sfargit_ dao, altfel d © btb-dtate; daca d>0 atuned, xl @ (-bisqrt(d))/(2ta); x2 © (-b-eqrt (a) /(J+a serie *Ecuatia are doua radacini reale diferite scrie altfel /f-pentzu b=0 xe Ht2hayy serie ‘Ecuatia are doua solutii reale identice serie *x1=x2= "x1; altfel : serie “Xcuatia nu are solutii reale*; sfargit dack; IY pentrn 4 2 sfargit dack; 77 pentru 430. sfargit dack; sfargit. : Pentru testarea algoritmului folositi un set de date de intrare care este format din Coeficienti ecuatiei (2,b.c), iar 0 multime completa de seturi de date de intrare poate fi {(0.0,0),(0,0,1), (0.2,5), (1,-5.6), (1,21), (1,1,1)). Testati algoritrml Enuntul problemei 2: $4 se rezolve un sistem de dou’ ecuafi lniare cu dou necu- noscute: 74 pentru axx+bixy=cy a2XX+Dexy= er Soluile sistemului de ecuati sunt hdd, = (bax; - byxc)/(ayxbe- b xa) Y= dyde= (ayxcp~ 22x; )/(ayxbe~ bras) Se vor folosi urmatoarele variabile de memorie ¥ Date de intrare: a1, b1, cf, a2, b2 51 c2 pentru coeficienti sistemului de ecuat ¥ Data intermediara: 05, ax si dy pentru dy, $i dy. ¥ Date de iegire: xi y pentru solufile ecuatiei Aigoritmul este: Antzeg al,bl,cl,a2,b2,c2,ds,dx, dy; real x,y; Sncoput, citeste al,bl,cl,a2,b2,c: 2d © al*b2-bitad:. dx © bo*ct-birc2; dacé ds=0 ay © alte2-a2tel; altfer x & dx/ds; ¥ € dy/ds; : scrie “x= "/x; serie argit dack; | sfargit. Enunful problemei 3: Se considera dou segmente de dreapta in plan, neparalele cu axa Oy, reprezentate prin coordonatele lor. S& se determine intersectia celor dou sogmente, dact exista, iar in caz contrar, s& se specifice cazurile de except Coordonatele extremitailor segmentelor sunt (x, ys) Si (Xe Ye) Pentru primul seg- ‘ment $i (X, Yo) 81 (Xa Ya) Pentru al doilea segment. Coordonatele punctului de inter.‘Seu SUNE UG, Yi). Panta $1 ordonata la origine ale dreptelor sunt m; si nm, pent prima dreapté sim, sing pentru a doua dreapta, Se vor folosi urmatoarele variabile de memoria; ¥ Date de intrare: x1, y1, x2, y2, x3, y3, x4, y4 pentru coordonatele extremitatilcr segmentelor. ¥ Data intermediara: m1 si m2 pentru pantele segmentelor, 1 si n2 pentru or. donatele la origine ale segmentelor, mint si max? pentru minimul si maximu| dintre abscisele primului segment, min2 gi max2 pentru minimul $i maximul dintre ordonatele primului segment, ming i maxé pentru minimul gi maximuils, Gintre abscisele celui de al doilea segment, mind $i max4 pentru minimul i maximul dintre ordonatele celui de al doilea segment. ¥ Date de iesire: xi y pentru coordonatele punctului de intersectie. Pasul 1. Se citaso coordonatele extremitaior segmentelor. Pasul 2. aod segmentele sunt paralele cu axa Oy (x1=x2 or x3ax4) scrie mesajul “Cel putin o dreapta este paralelé cu Oy" si termina algoritml. | Pasul 3. Se calculeaz’ pantele mt $i m2. Pasul 4. Daca pantole sunt egale (m1 = m2), trecila Pasul 5, alfel traci la Pasul 6 Pasul 5. Dac’ un punct de pe prima dreapid se gaseste pe a doua dreapta (coordo- nate lui veri’ ecuatia celel de a dova crepte), atunci scrie mesajul “*Segmentele sunt pe acceasi dreapia’, altel soe mesajul “Segmentele sunt paralele™. Termin aigontm Pasul 6. Se calculeaza coordonatole punctului de intersectie al dreptelor | Pasul 7. Daca abscisa punctului de intersectio nu este intre abscisele capetelor unuia dintre segmente sau daca ordonata punctului de intersectie nu | este intre ordonatele capetelor unuia dntre segment, atunci serio | ‘mesajul “Segmentele se intersecteazé pe prelungin’. | Pasul 7. Scrie coordonatele punctului de intersecta, Algoritmul este: real x1,y1,x2,y2,23,v3,24,y4,x,y,ml,nl,m2,22,minl,maxt, nin2, max2,min3,max3,mind,maxd; Snceput citegte xd v1 /x2,y2,23,y3 24,947 & ack (x1=x2) or. (3x4) Z = atuncd scrde "Cel putin o dreapts. este paralela cu oy" alter z Si eee BL (yB-yl) Mx2oxd) 5 m2 (yd-y3) / tedon) 7 al © ylemb*a1; 12 «- y3-m2"3; daca ml=m2 : ne atunci, E dacd yi=n2*xi+n2 : atunci serie "Segmentele sunt pe acecasi dreapt: altfel serie “scomentele sunt’ paralele”; sfargit dack; 5 ; i altfel x © (nd-nt)/ (mi-n2: 5 daca xlow, atunci ) mod intima oS ; ‘altfel 2 i mink x2; maxl © x1; | seargit_ daca Gack yey? aiteel a ean efargit dact; Sack 4 i ares i ming << y3; max t yd i altfel - > mind << yd as a iz s "i SEU sso or ynina oe ain’ oF voted oF sont ea ce aa oe ee atunel serie sdegnertele se intersecteara pe : prelungisi": max3 23; naxd <— y37 sfargit_dack: serie “x= °,x; scrie "y- ", efargit deck; sfargit dacs; Alegeti o multime completa de seturi de date de intrare gi testaji algoritmul Probleme de matematica propuse: imensiunea inatinit si a razel unui 4. Ge citese dowd numere care reprezint& dime: Glindru circular drept $8 se calculeze aria iaterala, aria toatata si volumul i i ale conului circular drept de aceeasi raza si inakime cu clindrul. cilindrut a 2, Se citesc trei numere intregi a, b si c. Dac’ pot reprezenta laturile unui triunghi, 5 se calculeze dimensiunile razei cercului inscris, razei cercului circumscrs, razelor cercurilor exinscrise gi a inattimilor. . 3. S& se determine r&dacinile ecuatiei ao +bxx*+c=0. Coeficientii ecuatiei se citesc de fa tastatura, ; 4, Se citesc de la tastaturd numaratorul a si numitorul b ale unei fractil, SA se afigeze fractia simpiificata 5. Se citesc coordonatele unui punct din plan, S8 se precizeze unde este sitvat punectul in plan (numele axei sau numérul cadranului)Se citesc coordonatele a doua puncte din plan. S3 se calculeze distanta dintre} ele gi coordonatele milocului segmentului de dreapta care le uneste. Se citesc coordonatele a trei puncte din plan. Sa se precizeze daca punctele sunt coliniare sau nu. Se citesc coeficienti ecuatiei carteziene generale a unei drepte. Sd se preci zeze cum este dreapta: oarecare, prima bisectoare, a doua biseotoare, trece prin origine, paralela cu Ox, paraleld cu Oy, axa Ox sau axa Oy. Se citesc coordonatele varfurlor unui triunghi. S& se determine coordonatele ortocentrul 10. trului. $8 se determine coordonatele celullat vat. Se citesc coeficientii ecuatilor carteziene generale pentru trei drepte. S8 se deter-mine daca dreptele sunt paralele gi echidistante, Se citesc coordonatele varfului unui patrat si coeficienfii ecuatiel carteziene| generale a unei drepte pe care se gaseste una dintre laturile patratului care nu| ‘rece prin acel varf. Sa se determine coordonatele celoriate varfuri ale patratulul si aria patratului Se citesc coordonatele a trei puncte din plan, Sa se precizeze daca ele pot f varfurile unui triunghi. In caz afirmativ, s8 se spuna de ce tip este triunghiul (oarecare, echilateral, isoscel, dreptunghic, dreptunghic isoscel) si s& se| calculeze aria gi perimetrul triunghiului Se citesc coeficientii ecuatilor carteziene generale a trei drepte. S& sei analizeze relatia dintre aceste drepte: se intersecteaza toate in acelasi punct, se} intersecteaza doua cate coud, sunt toate trei paralele, toate trei se suprapun doua sunt paraele Inte ele gi se inlersecteazé cu a tei, doud se suprapun | se intersecteaza cu a treia sau dou se suprapun si sunt paralele cu a treia. In cazul in care exist puncte de intersectie, s8 li se afigeze coordonatele. | Se citesc un numér natural n gi un numar real / care reprezinta lungimea laturil Uunui patrat, Patratulul i se circumscrie un cerc, cercului un patrat §.a.m.6. S& se} determine aria patratului si a cercului obtinute dupa n operati de circumscriere. 1. 12. 13. 14. 15. 3.5.2. Rezolvarea probler lor de fizicd | Enunful problemei 1: Dous mobile pornesc din punctul A, se misc& rectiliniy uniform in aceeasi direct, cu vitezele v, $/ Vz (Vs > vz), $i ajung simultan fn punctul B, [a distanta d de A. Mobilul 1 pleacé mai tarziu cu tp decat mobilul 2. Se considera} cunoscute: vs, V2 $i d. S& se caiculeze te Unitatea de masuré pentru viteze estef kmh, iar pentru distanf& km, Timpul se va exprima In ore, minute si secunde. Se noteaza cu d distanta dintre A si B, cu tt $i t2 timpul de migcare pentru cele doua mobile si cu v1 gi v2 vitezele lor. Legea de migcare pentru cele doua mobile are forma: a) @) davixtt dev2xtev2x (t1+10) Se citesc coordonatele a doua varfuri ale unui triunghi si coordonatele ortocen-F Rezulté cA t0=dx(1Wv1+4/v2). Unitatea de masura pentru distant va fi m, pentru viteze m/s, iar pentru timp s. Se vor folosi urmatoarele variabile de memorie; ¥ Date de intrare: v1, v2 sid. ¥ Date de legire: th, tm sits pentru reprezentarea timpului in ore, minute si secunde. ‘Aigostmul este: wi, v2.4; th, tn, ta t ce eae citeste vi, wae ai ae a = fet wiss/104 ya. cvars/ay a <-avi000, parte intreaga cin.x "in th: (eh/36009173600; eh E(Eh/3600117 altfer 2 4 AL tad atuned fs @ tm-[tm/60)1*60; altfel ts © tm; tm ¢ 0; tm E(tm/60) 17 argit dict: : fe teinps 104,72 tm, “n +88, 8°7 aoe oe ! : Enunful problomet 2: Dowd enur de ug Ly $i Le $i ave vitez010 Vs 8 Vs (va > vj) $e apropie unul de altul in migcare rectiinie uniform’, pe lini! paraiele. Se consider’ cunoscute: v,, ve $i L=L2=d. Affai timpul t scurs intre momentul cénd se Intainesc $i momentul depasiti complete. Unitatea de masurd pentru vileze este sh, far pentru distant m. Timpui se va exprima tn secunde, Se noteaza cu d lungimea trenului, cu t timpul si cu vf si v2 vitezele trenurilor. Unitatea de masura pentru lungime va fi m, pentru viteze m/s, iar pentru timp s. Existé doua variante: Varianta 1. Trenurile se deplaseazé amandoua In aceeasi directie. Se noteaza cu x distanfa parcursa de primul tren. Legea de migcare pentru cele doua trenuri are forma: (1) xevit (2) x#2xdev2xt Rezuita ca t=2"d"H(v2-V1), Varianta 2. Trenurile se deplaseazé in direotii opuse. Se noteaz’ cu x1 distanta parcurs8 de primul tren si cu x2 distanta parcursa de cel de al doilea tren. Legea de migcare pentru cele doua trenuri are formar xtevint x2 =vart xd, Rezults c& t=2xd/(v1 402).Se vor folosi urmatoarele variabile de memore; ¥ Date de intrare: v1, v2 de tip real pentru viteze, d de tip intreg pentru distanta si opt de tip caracter, pentru a stabil care dintre variante se alege (are valoarea "1" Pentru prima varianta si "2" pentru a doua variant. ¥ Data de iesire:¢, de tip real, pentru calcularea timpului Algoritmul este: real vl,v2,t; intreg 4; caracter opt; inceput citeste v1, v2.d; opt; in caz cf opt : az ‘it: b @ 24d/((v2-vi)* (5/18); ( serie t; i eaz "22 bo 2d / ((v2+v1)* (5/28) ); serie t; altfel serie “Optiune-ercnata"; sfargit_in caz ci; sfargit, Probleme de fizic& propuse: 16. Fie A si B doua puncte pe dreapta si d distanta dintre ele. Din A pleaca spre B lun mobil cu viteza v;, Dupa timpul fj pleac’ din B, in acelagi sens, un al doilea mobil cu viteza ve (V2 > v;). Se considera cunoscute: v,, vs $i ty. Se core s8 se afle dupa cat timp t are loc intainirea vehiculelor gi distanta x de la A la punctu de intalnire. Unitatea de masura pentru viteze este knvh, pentru distanfa km, iar pentru timp h. Fie A si B doua puncte pe dreapta si d distanfa dintre ele. Din A si B pomnesc in migcare uniforma pe dreapta, in acelasi sens, doua mobile cu vitezele vy $/ v, (¥; > v2), al dollea mobil cu timpul tj mai tarziu decat primul, Se considers Cunoscute: Vv, Ve $i ty. Se cere Sa se afle dupa cat timo t de la pornirea primului ‘mobil, acesta il ajunge pe al doilea si distanele 1 si d2 parcurse de mobile pana la intainirea lor. Unitatea de masura pentru viteze este mis, pentru distant m, iar pentru timp s, Fie A si B doud puncte pe dreapta gi d distanja dintre ele. Din A pleaca spre B un mébil cu viteza v; si dupa timpul f) din 8 pleaca spre A un al doilea mobil cu viteza vz Ambele mobile se deplaseaza in migcare uniforma pe dreapta si se Intainesc la distanta x de 8. Se consider cunoscute: d, ve $i f Se cere SA se! afle timpul t scurs de la plecarea primului mobil pana la intainire gi viteza v, Unitatea de masura pentru viteze este km/h, pentru distanta km, iar pentru timp s, Dou mobile poresc simultan din punctul © in acelasi sens, in migcare Lniforma pe dreapta cu vitezele v; $i ve (vy > v2). Dupa timpul ty, pomeste din O, in acelagi sens, un al treilea mobil. El ajunge primul mobil cu timpul ty mal t&rziv decat pe al doilea. Se considera cunoscute: vs, Va fy $i t, Se cere si se afle 17. 18. 19, viteza v> a masinii a treia. Unilatea de msura pentru viteze este kmvh, iar pentru timp min, ). Fie A si B dou’ puncte pe o dreaptd gi d distanta dintre ele. Din A gi 8 pornesc simultan, unul spre altul, dou mobile in migcare uniforma. Ele se intainesc dupa timpul t, gi Igi continua fiecare migcare. Mobilul plecat din A ajunge In unctul B cu timpul ty mai térziu decat ajunge in A mobilul plecat din B. Se considera cunoscute: d, t, $i t, Se cere 54 se afle vitezele v, $i ve ale mobilelor. Unitatea de masurd pentru viteze este mvs, pentru distant m, iar pentru timp min, Fie A si 8 doua puncte pe o dreapta si d distanta dintre ele. Din A si 8 pornesc simultan, unul spre altul, dou’ mobile in migcare uniforma, Ele se Intalnesc la distanta d, de 8 §i igi continua fiecare migcarea ajungand in B si respectiv in A. Se Intorc fara oprire gi se Intalnesc a doua oara la distanta dy de A la timpul t dupa prima intalnire. Se considera cunoscute: di, de $i t. Aflati vitezele v; gi v2 ale mobilelor gi distanta d. Unitatea de masura este pentru viteze mis, pentru distant m, iar pentru timp s . Fie A si B doud puncte pe o dreapta si d distanta dintre ele. Din A gi B pornesc simultan, unul spre aitul, doud mobile in migcare uniforma. Ele se intalnesc a distanta d, de A si isi continua flecare migcarea ajungand in B si respectiv in A unde stalioneaza timpul f, apoi se intorc cu aceeasi viteza si se intélnesc a doua oard la distanja d de B. Se considera cunoscute: ,, dy s/t Aflai distanta d dintre ecele doua puncte. Unitatea de masurd este pentru pentru distanté km, iar pentru timp h. at. 1. Ce metode puteti folosi pentru reprezentarea unui algoritm? 2. Dece se folosesc cuvinte cheie la descrierea algoritmului prin pseudocod? 3, Dati cate un exemplu de problema pentru fiecare dintre cele trei tipuri de struc- turi de control 4. Verificati algoritmul tui Euclid de la pag. 58 pentru a=2 si b=162. Ce constatati? Modificati algoritmul astfel Incat sd fie mai eficient. Adevarat sau Fals: 1. Pentru calculul modulului unui numér x folosito structura repetitiva 2. Pentru calculul produsului a 10 numere folosifio structura alternative 3. Pentru a vedea daca un element k apartine unei multi infinite de elemente, se foloseste un algoritm prin care se verifcd fiecare element al mulimii dacd este Identic cu elementul k 4, Pentru a vedea daca un element j apartine unei mulfimi infinite de elemente, se construieste un algoritm prin care se veriticé dacé elementul j corespunde unui criteriu prin care sunt definite elementele multiAlegeti: i 1. Fraza ,cumpara actiuni daca produsul intern brut a crescut si vinde In caa contrar" poate fi descrisa cu o: a) structurailiniaré —b) structuré alternativa ——_) structurd repetitiva 2. Fraza ,citeste mai multe numere pana cand intalnesti numarul 0° poate fi descrisa cu: a) 0 structura repetitiva cur numar cuncscut de pasi b) o structurd alternativa generalizata ©) © structurd repetitivs cu numair necunoscut de pagi 3. La un magazin se acord un bonus cumparatorilor. daca valoarea cumpairal turlar (v) este intre 5.000.000 lei $1 10.000 000 ei, bonusul este de 1% din va, loare, daca valoarea este Intre 10,000,000 lei gi 20.000.000 lei, bonusul este de 2% din valoare, iar dac& valoarea este mai mare de 20.000.000 lei, bonus este de 5% din valoare, Precizati care dintre pseudocoduri descrie corect alg ritmul de acordare a bonusului! } fay By ey daca 275000000" | [asca v>so00000 dack v>5000000 tunel feeunes farmed poveres J acd vex0000000 | ,dack v>10000000 beaxgit_daca, ff tunes ‘atunci act voi0000000 | ff |" aaca yo20000000 ack v>20000000 | tunes, fp | atunes | atuncs { vev-2rvsi00; | |) were-$*v/200; | “eev-sevis00; | beargit_daca; PPP ante, 'efargit_daca; dac& v>20000000 fd ob wew-2evva00; altfel fatuncd P| peargit daca; vev-24¥/100; | vev-sev/too; | |} | attest sfarqit_dack; beargit_aacd; | LS vei-vit00: | seaceat deck; bearqie dacs; 4. In urma executati seoventel pe-2; pentru F3,5 executa p «p%: sfarsit pentru' valoarea lui p este: a) 16 b) 24 5. In uma executini secventei s-10; pentru sfargit_pentru; valoarea lui seste: a) 16 b) 22 ©) 30 i 6. In urmia executari secventei pe-2; pentru i=1,3 executd p «p'p: sférsit pentru, valoarea lui peste: | a)16 ©) 120 6 pas 2 executé s «51! b) 64 ©) 256 " Sugestie: Verifcati flecare pseudocod alegand corect un set complet de date de intrare Pentru testarea algoritmului. Alegerea setulul complet de date de intrare se face dnd valori ‘corespunzatoare variabilei a pentru fiecare dintre cele patru cazuri de acordare a bonusului 7. In_urma _executéri secventel i; cat timp i m execulé n—n-m; ‘sfargit_c&t timp; variabla n s& aiba valoarea 0, un numdir m cu dou’ cifre trebuie 84 abd valoarea: a) 99 ») 97 <) 19 Rezolvati 12. Se considera urmatorul algoritm reprezentat in pseudocod (n este un numar natural} citeste nj im <0; eat timp n<>0 executa Z ‘ nen @iv 2; m © mil; sfargit_cAt_timp, serie mi as a) Ce valoare se va afiga pentru n=21? b) Ce valori se pot citi pentru n asttel incat sa se afigeze 2? c) Scriefi pseudocodul unei structuri repetitive condifionate posterior echivalente. 13. Se considera urmatorul algoritm reprezentat In pseudocod (a gi b sunt numere naturale): citeste a,b; dacd:a>b atuned sfargit_dack; neo; eS apeeb be x a) Ce valoare se va afiga pentru a=20 1 b) Pracizalo valoare pentru a gio valoare pentru b astfel incdt sa se afigeze 0. ©) Scriati in pseudocod un algoritm echivalent care sa foloseasca structura repitivé conditionata anterior gi un algoritm care si nu foloseasc nici 0 structura repetitv14, Se considera urmatorulalgoritm reprezentat in pseudocod (a si b sunt numere naturale}: citeste a,b; dacd a>b atuncd x Capa ebb ee sfargit dack; ne 0; : cat timp acb executa : a flasl; b bed nents : sfargit pentru; ; serie n; : a) Ce valoare se va afiga pentru a=17 $i b=25? b)Precizatio valoare pentru a gio valoare pentru b astelincdt s& se afgeze 0 ©) Scrieti in pseudocod un algoritm echivalent care s& nu foloseasca nici o structurd repetitva 15, $a se caleuleze functia sin(x) folosind urmatoarea expresieiterativa: y= X= 1192S) 4° 12°9*4"S) « 1(12°°4°5'B7) ae + FCA 2845'6'7"..2(2041)) Calcuiuliterativ al expresiei e(x) se va face pind cénd | @, - ens | < 0.00001 Valoarea lui en va ficu 0 aproximatie de 0.00001 valoarea Iu sin(x) 16. Sa se calculeze functia eos(x) folosind urmatoarea exoresie iterativ y= 122112) 4 X°1(1°2°9°4) = X(124S'6) + + + CAP 11°2°9"4"5°6°7"..."(2'n)) Catcuiuliteratv al expresiei e(x) se va face p&na cand | e, - ey: | < 0.00001. Valoarea lui e, va fi cu © aproximatie de 0.00001 valoarea lui cos(x). 17. Urmatorii doi algoritmi descrisi in pseudocod caiculeaza a, unde a gi b sunt Goud numere naturale. Analizati cei doi algorimi din punct de vedere al eficien- fel. Precizati care este algoritmul cel mai eficient. ustiicatiréspunsul Varianta 1 Varianta 2 | intreg a,b, i,p: Antreg a,b.i.p:” t Anceput inceput Gees | citeste a,b; giteste a,b; tee by pea; feb pe i eat timp i>0 executs cAt timp ind cxequea 2 Pe pia ack Vmod 2 = 0 : ie ind; abenet rhs See | sfargit_cat_timp; S pope ie i serie p; ~valtfel, e sfargit, 4. Implementarea algoritmilor 4.1. Caracteristicile limbajului de programare Pentru a putea executa cu ajutorul calculatorului algoritmii descrigi in pseudocod, acestia trebuie implementati intr-un limba] de programare, adica trebuie sai re- prezentafi cu_ajutorul instructiunilor unui limbaj de programare, de exemplu, limbajul C++. Transcrierea algorismului intr-un limbaj de programare se face cu un program specializat numit editor de texte, In acest mod se obtine un figier care confine un text gi care se numeste program sursa. In limbajul C++ fisierul care contine programul sursa are extensia .epp. Pentru a putea rezolva 0 problema cu ajutorul calculatorului trebuie Ins s& folosit un program executabil (un program care sa fie Incdrcat In memoria interna @ calculatorului si care sa poata fi executat de procesor). Aceasta Inseam c& nu este suficient sa transcriefi algoritmul din limbajul pseudocod in limbajul de pro- ‘gramare, ci trebuie sé mai executati si alte operali: ¥ Compilarea, adica traducerea fiecarei instructiuni din limbajul de programare intr-un grup de instructiuni in imbajul masinil, objinandu-se programul obiect. Programul obiect se memoreazé tot intr-un fisier, care are insd extensia .obj. ¥ Editaroa legaturilor, adic asamblarea pieselor rezultate in urma compilaii pen- tru a se obtine programul executabil, In programul surs pe care il screti veti face apel de multe of la functile din biblotecile standard ale limbajului. Aceste functii au fost realizate gi implementate in limbajul de programare de cétre autori lui si se numesc functii standard. Ele realizeazé operafii de care aveti nevoie intr-un algoritm, cum sunt de exemplu operatile de citire sau scriere (functile de ite si de scriere) sau operafii matematice (funcfile matematice). Programul execulabil trebuie s& confind, pe lang’ grupurile de instructuni in cod masina obfinute Tn urma traduceri instrucfiunilor din programul sursa, $i instructiunile fn cod magina ale functilor standard pe care ie-ali apelat tn program. Rolul operatiel de editare a legaturilor este acela de a asambla impreuna instrucfiunle In cod magina obfinute prin treducerea instructiunilor din programul surs cu instruc- {iunlle in cod magina ale functilor standard apelate in program. Aceste operatii se realizeaza cu ajutorul a doua programe numite compilator si editor de legaturi, Ansambiul de programe compilator $i editor de legaituri functio- rneaz ca un translator Intre dou persoane care vorbesc limbi diferte. Daca in ca- zul unui translator traducerea se face Intre doua limbaje naturale, in cazul acestor programe traducerea se face intre doua limbale artificiale: fimbajul de programa- imbajul masinii, Compilatorul reprezinté dictionarul pe baza céruia se real- zeazA traducerea cuvintelor, iar editorul de legaturi asambieaza aceste cuvinte in constructii gramaticale corecte.La fel ca si un limbaj natural, orice limbaj de programare este caracterizat de ¥ Sintaxa. Este formata din totalitatea regullor de scriere corecta asttel incat s& se realizeze constructii acceptate de compilator (constructii pe care compilatorul 8a le poata traduce in cod magina). Daca nu veti realiza constructii corecte care sa-i permita compilatorului sd identifice si s8 recunoasca fiecare unitate lexica- 4, nu veti putea transmite calculatorululinformatile necesare pentru rezolvarea probleme’ (algoritmul gi datele cu care lucreaza algoritmul) ¥ Somantica. Reprezinta semnificatia constructilor corecte din punct de vedere Sintactic. Chiar daca ati realizat 0 constructie corecta din punct de vedere lexi- Cal, trebuie s& cunoasteti semnificatia ei pentru a fi siguri cd ati implementat co- rect algoritmul pentru rezolvarea probleme. Y Vocabular. Este format din totaltatea cuvintelor care pot fi folosite intr-un program. Setul de caractere folosit pentru construirea cuvintelor este format din: ¥ literele mari si mici ale alfabetului latin (az, AZ), Y cifrele sistemulul de numeratie zecimal (0:9), Y caracterele speciale (spatiu, +-,"/, %, Cuvintele pot “ Identificatoril sunt nume de obiecte folosite in program (cum sunt, de exemplu, varia- bitele de memorie si funcfile). Identifcatorul este 0 succesiune de litere, cifte sau caracterul de subliniere (), din care prima trebuie oblgatoriu s8 nu fie cifré. Lungimea maxima a unui identical est de 91 de careciere, De exempl, sunt considera den | tificator corecti: a1, AY, delta, _nr, nr_prim, dar nu sunt considerati corec{ identificatoril | 1A, A B, A&B sau cm... Limbajul C+ face diferenta intra literele mari si literele icl ale aifabetului. De exemplu, identiicatorul AT este diferit de identificatorul a. identificatori, separatori, constante, cuvinte cheie si operatori. Recomandar: 1. Nuiincepeti un nume de variabila de memorie cu caracterul _, deoarece in func- tile standard se folosesc frecvent identificatori care incep cu acest caracter. 2. Folositlterele mici pentru numele de variabile ¢ilterele mari pentru numele de ‘constante. Separatorii se folosesc pentru a delimita unitatile lexicale (0 unitate lexicalé este format dintr-un sir de caractere care are o semnificatie lingvisticd). Se folosesc in ¥ spatiul gi caracterul tabulator (TAB) pentru a separa cuvintele, Yj pentru a separa instrucfiuniie (corespunde punctului care separa propozitile din limbajul natural), Y ansamblul de caractere de control CR+LF generat la apasarea tastei Enter | Pentru a separa linile de text (corespund scrieri unui paragrat de la inceputul randului din limbajul natural), Y virgula (,) care separa elementele unei liste (corespunde virgulei care separ& cuvintele unei enumerairi din imbajul natura). Cuvintele cheie (keywords) sunt identificatori cu 0 semnificatie precisé pentru lim- | baj, care nu pot fi folositiint-un ait context decat cel permis de semantica limbajului De exemplu, int, char, float, double, unsigned, signed, short, long, void, sizeot, typedet, struct, const, enum, if, else, switch, case, default, for, while, do, break, continue, return etc. Din aceasta cauzé nu putel folosi ca identificatori cuvinte cheie. Programul poate confine si comentari. Comentariile sunt texte explicative folosite jn program pentru ad face mai ugor de infeles. Ele nu sunt interpretate de compilator. Pot fi scrise oriunde in program si sunt delimitate de restul programului asttet ¥ daca ocupa mai multe randuri, se folosesc perechile de caractere /* si", daca se scrie pe un singur rand, comentariul este precedat de caracterele Il De exemplu: a) /* Acesta este un comentariu +/ i b) 7/ Acesta este #0 sa conentarin 4.2, Structura programului Pentru a Infelege structura unui program, vorn defini mai intai biocul. = Blocul este unitatea de baza a oricdrul program C++. Blocul este format din lini de text scrise in limbajul de programare. Pe o linie de text se pot scrie una sau mai multe instructiuni, Instructiunea codificd in limbajul de pro- ‘gramare un pas al algoritmului descris In pseudocod. Blocul poate confine doua parti ¥ Partea declarativi. Contine defiiti de obiecte necesare algoritmului pentru rezol- varea problemei:tipuri de date, constante, variable de memorie etc. Definirea lor se face cu ajutorul instructiunilor declarative. Instructiunile declarative furizeazd Ccompilatoruiui informatii despre semnficata identificatoilor folosit in program. ¥ Partea executabila sau partea procedural. Contine instructiunile care des- criu pagii algoritmului care trebuie implementat pentru rezolvarea problemei Aceste instructiuni se numesc instructiuni imperative. Ele sunt: a) Instructiunea expresie prin care se evalueaza o expresie. In cazul In care expresia contine operatorul de atribuire prin care se atribuie unei variabile do memorle valoarea unei expresii, ea va fi echiveluni cu v instructiune de atribuire din alte imbaje de programare si corespunde operatiel de atri- buire din algoritm. In cazul in cate expresia contine numai apelul unei functi (functia este un program care poate fi apelat dintr-un alt program, apelarea ei Insemnand o cerere de executare), ea va fi echivalenta cu o instructiune Procedural ‘din alte limbaje de programare si corespunde unei operat ‘complexe din algoritm (cum este, de exemplu, scrierea sau citrea datelor). b) Instructiunea de control prin care se modificd ordinea de executie a pro- ‘gramului, Ea corespunde unei structuri de control dntr-un algoritm. Observatie. La sfarsitul fiecaei instructiuni se scrie caracterul separator;Limbajul de programare permite definirea unel instructiuni compuse. Instructiunea compusa este 0 instructiune formata dintr-un grup de instructiuni care sunt interpre- tate de compilator ca o singuré instructiune, Definirea se face prin incadrarea grupu- lui de instructiuni de parantezele {... }. Parantezele acolada sunt separatorl. Blocul este incapsulat intr-o instructiune compus’. Nu este oblgatoriu ca blocul sa contina ambele pail. Constructi de forma { } sau {; } sunt acceptate de compilator gi inseamna blocul vid (blocul care nu contine nimic), respectiv blocul care contine 0 instuctiune care nu face nimic, adicd instructiunea vida. Orice program C++ este o colectie de definitii de variabile gi functii. Funcfia are un nume §i rezolva o anumita sarcina. Ea este un bloc precedat de un antet, Agadar programul contine entitati de forma: antet functie { bloc} in antet se precizeaza numele functil,tipul rezultatulul pe care- intoarce, prin chiar numele su, si eventual parametni de executie (valori care se transmit blocului si care sunt necesare cand se execut) tip_rezultat nume (listé_parametri) Daca nu se precizeazs tip_rezultat se presupune cf functiaintoarce un rezultat inte. Una dintre funofi este functia ridiicina. Ea este obligatore si este primul bloc cu Incepe executia programului, Numele sau este main(). Antetul acestel functi este void main() ceea ce semnificd faptul c8 functia nu intoarce nici un rezultat (void) si nu necesita Parametri pentru apelare — parantezele () nu contin o lista de parametri. Chiar daca functia nu are nevoie de parametri pentru apelare, parantezele () sunt obligatori Daca nu se precizeaza pentru functia main tipul rezuttatului, chiar daca functia nu intoarce nici un rezutat, nu se va produce o eroare de compilare, ci numai un aver- tisment al compilatorului. Pentru algoritmii simpli pe care ii vefi implementa cu _ajutorul imbajului C+ nu vetifolosi decat o singura funcfie: funcfia radaicina. Ca exemplu pentru structura unui program C++ se considera urmatoarea problemé: Enunful problemei: Se citesc dou numere intregi a, b. Sa se calculeze suma lor. Programul in timbajul C++ este void maint) ‘Antetul funcfioi rAdacind (este obligatoru) £ Tnceputul blocului (este obligatoriu) int @,b, 8; Partea declarativa; conjine o instrucjune declarativi iru variabilele de memore a, b gis, de tip inre T= faceputul piel executable cout < >a; ‘expresie care creeaza fuxuri de date implementate In bi- coutc<*bs "; bliotecile imbajului de programare (cin>> gi coutc<). Co- cin respund une! inatrucfiunl procedurale dinate lmbaje. pats > Instructune exprosie pentru operatia de atribule. cout<<*suma= “<3; r Stirgtul blocuil (eso obigatoma) | | 4,3. Instructiunile declarative Se folosesc pentru deciararea obiectelor folosite in algoritm: ¥- variabile de memorie, ¥ constante simbolice, Y tipuri de date. 4.3.1. Tipuri de date Afi aftat deja c& unul dintre atributele unei date elementare este tipul ei. in imbajul C++ pute folosi urmatoarele tipuri de date: ¥ tipuri standard sau predefinite, adicd tipuriimplementate In imbaj, si ¥ tipuri definite de utilizator. Fiecare tip de data se identifi printr-un nume. Identificatori folosti pentru tipurite standard sunt cuvinte cheie. In imbajul C++ sunt implementate urmatoarele tipurl standard (tipuri de baza) char pentru memorarea caracterelor; int pentru memorarea numerelor intregi; float si double pentru memorarea numerelor reale; v v v void pentru tip neprecizat. Observafie: in limbajul C++ nu este implementat tipul logic. Pentru acest tip de data se poate folosi orice tip numeric. Interpretarea este urmatoarea ¥ unei expresii al carei rezuitat este de tip logic i se atribuie valoarea 0 pentru False si 1 pentru True, intr-o expresie, un operand numeric este interpretat ca un operand logic, astte! daca are valoarea 0, este considerat False, iar daca are valoarea diferita de 0, este considerat True. v Tipul datei determina dimensiunea zonei de memorie alocata datei si modul de codi- ficare gi, implicit, domeniul de definifie intern al datei. Dimensiunea zonei de me- morie alocata unei date de un anumit tip este dependent de magina (de hardware), cu excepfia tipului char pentru care se foloseste 1 octet. De exemplu, pentru tipul int dimensiunea poate fi de 2 octeti (18 bit) sau de 4 octeti (32 de biti). Compiiatorul (C++ alege singur dlmenslunea specifica echipamentutul hardware, Modurile de codificare folosite pentru tipurile de baz& sunt char foloseste reprezentarea caracterului in codul ASCII (care este un cod nu- meric), . int foloseste reprezentarea In complement fata de 2, ¥ float foloseste reprezentarea in virgul mobild simplai precizie, ¥ double foloseste reprezentarea in virgula mobila dubla precizie. Aceste moduri de codificare sunt prezentate in Anexa 8. Tipul char este tratat astfel: Y operatia de atribuire: i se poate atribui o constant& de tip caracter sau 0 valoa- re numeric ce reprezint& codul ASCII al unui caracter.Y operatori matematici: intr-o expresie se pot aplica operatori matematici pe acest tip de data, in evaluarea expresiel find folosita valoarea numericé memo- rata in data, Y operatiile de citire si scriere: valoarea introdusa de la tastatura nu poate sa fie decat un caracter, iar valoarea numeric’ memorat In data este afigata sub forma unui caracter al cdrui cod ASCII este acea valoare numerica. Modui de implementare a aoestor tipuri de date poate fi modificat prin declarati suplimentare de tip: short (scurt), long (lung), signed (cu semn) si unsigned (ra semn). De exemply, tipul unsigned char este tipul char pe care s-a aplicat modi catorul unsigned §i Inseamna tipul caracter far semn, adicd valoarea numeric& Memoraté care reprezinté codul ASCII al unui caracter este interpretata ca un ‘numar Intreg poziti, sau 0, iar tipul signed char este tipul char pe care s-a apicat modificatorul signed si inseamna tipul caracter cu semn, adica valoarea numericd ‘memorata este interpretata ca un numar intreg pozitiv sau negativ Observatii: 1. Toti acesti modificatori de tip se pot apiica pe tipul int. in acest caz, tipul int poate fi omis (este considerat implicit). Asttel, tipul short este echivalent cu tipul short int, iar tipul unsigned long este echivaient cu tipul unsigned long int. Deoarece tipul int se foloseste pentru numere intregi (pozitive si negative), aplicarea modificatorului signed pe acest tip de data este de prisos 2. Pe tipul char se pot aplica numai modificatorii signed i unsigned. 3. Pe tipurile de date reale se poate aplica numai modificatorul long, si acesta numa pe tipul double. 4, Prin aplicarea modificatorilor de tip se modific’ dimensiunea zonei de memorie alocati acelui tip. Regulile sunt urmatoarele: pentru tipul short cel putin 2 octet, dar nu mai mult decat pentru tipul int, iar pentru tipul long, cel putin 4 octet, dar | Ru mai putin decat pentru tipul int. Astfel, daca pe masina respectivé pentru | tipul int dimensiunea zonei de memorie alocata este de 2 octeti, aplicarea modi- ficatorului short pe acest tip de data este de prisos, In tabelul urmator sunt prezentate tipurie de date pe care le putetifolosi in cazul | une! masini pentru care tip int este reprezonta pe 2 octet Tip de data Dimensiune Domeniu de definitie intern al datet char 8 bi “128127 | unsigned char 8 bi 01255 i int 16 bi -82.768+32.767 unsigned 16 bit 0+65.535 i Jong 32 bit -2.147.483,648+2.147.489.647 unsigned tong 32 bili 0+4.294.967.205, i float 32 bi 49,4"10°7~28,4°10" (cu 0 precizie de 6 cre) |, double 64 bi ——£1,7"10221,7"10%8 (cu 0 procizie de 10 cire) | long double 80biy—43,4410°*41,1°10" (exo precizie do 18 cre) | I Cunoasterea domeniului intern de definifie al tipului de data este important’ in alegerea corecta a tipului de daté. De exemplu, daca cerinta este ca inti-o data si se memoreze 0 valoare numerica din domeniul [10.000-40.000], se va fotosi tipul unsigned int, iar daca cerinta este ca intr-o data sé se memoreze un numar natural cu 9 cifre, se va folosi tipul unsigned long int. 4.3.2. Constantele lnt-un program putefi fotos: ¥ constante literale — sunt valori efective pe care le folosit! in program; ¥ constante simbolice — sunt identificatori pe care fi folosit in locul valorior efective. Constantele literale pot f: ¥ numetice: —Iintregi, ~teale, ¥ caracter, ¥ sit de caractere. Constantele numerice literate Observatie. Constantele numerice intregi nu pot fi decat numere poztive. Constantele numerice intregi pot fi exprimate: ¥ in baza 10, printr-un numar intreg pozitiv (de exemplu: 2, 1021), ¥ in baza 8, printr-un numar intreg pozitiv precedat de un 0 (de exemplu: 0124 reprezinta 124.)), ¥ in baza 16, printr-un numér intreg pozitiv precedat de Ox sau OX (de exemplu OX1A sau Oxta reprezinté 1A). Constantele numerice reale pot fi exprimate: ¥ printr-un numar real, separarea parti intregi de partea fractionara facandu-se cu caracterul punct (de exemplu -50.12; 2.; 01; 0.01), ¥ folosind notafia stiintifica, in care numerele sunt reprezentate prin mantis si exponent, cu ajutorul puteror ui 10 (exponent), cele doua parti find separate de litera e sau E (de exemplu -5 E -10, care inseamna -5*10"”, sau -1.1¢ -5 are Insoamna 1.110). 12.5 =125°10' = 125 E-1=125 e -1 a mantis’ ‘exponent Constantele caracter literale Pot fi exprimate: ~ printr-un caracter delimitat cu apostrofuri (de exemplu: a’, 'A’,"1'), ¥ prin codul ASCII al caracterului, precizat in baza 10 (de exemplu: 97, 65, 49), ¥ prin secvenfe escape, constanta find precizaté prin codul sau ASCII exprimat in baza 8 sau 16; secventa escape este delimitatd de apostrofuri si ncepe cu carac-terul \ (de exemplu, caracterul ‘a’ are codul ASCII 9710) = 1419) = lus) $i constanta a’ mai poale fi reprezentata gi prin secventele escape 141" sau ‘x61. Observatic. Secventele escape se folosesc in general pentru: ¥ caractere care sunt reprezentate in codul ASCII dar nu pot fi tarea cu apostrofuri a unor caractere introduse de la tastatura, aga zisele carac+ tere albe (whitespace), pentru aceste caractere putand fi folosite gi notatile speciale: Reprezentat Caracterul ‘cod ASCIIin: zecimal | octal | hexazecimal newline (linie nous) 0 | 2" "AT carriage return (retur de car) 13 | 5" "xD" bell (semnal sonor) 7 ar ia tabulator orizontal__ ee 1x9" tabulator vertical 1s" UB" | Backspace (revenire cu o pozitie) 6 | 0 Ke" formfeed (salt de paging la 12 | ta" AC imprimanta) ¥ ‘caractere care au o semnificatie specialé in definirea constantelor de tip carac- ter, pentru aceste caractere putdnd fi folosite gi notatiile speciale: Reprezentat in: Caracterul notafie cod ASCII speciala | zecimal | octal | hexazecimal (backslash) nv 92 [uss sc" “(apostrof) i 34 ar war" 2 (Semn de intrebare) ae 63 | 165" x35" Constantele gir de caractere literale © constanta de tip sir de este formatd dintr-un grup de caractere delimitat cu ghilimete (de exemplu BC", 123"). Atunci cdnd vrei 8 afigati pe ecran ‘un mesaj, vefi scrie o constanta de tip sir de caractere. Un caracter delimitat de apostrofuri este diferit de un ca- racter delimitat de ghilmele (de exemplu ‘a’ este diferit de ! *a"). Primul este 0 constant de tip char (o dat elemen- | tard), lar al doilea este o structurd de date denumita gir de caractere ce contine un singur caracter. Atentie 4.3.3. Deciararea variabilelor de memorie Declararea variabilelor de memorie se face prin instructiune tip_data num unde tip_data precizeaza tipul datel memorate in Variabila de memorie, iar nume, identificatorul variabilei de memorie. De exemplu, prin instructiunile deciarative: | | t t int a; char b; se declard doua variabile de memorie: a de tip intreg gi b de tip caracter. La deciarare, variabilei de memorie i se alocd o zona de memorie cu dimensiunea corespunzatoare tipului de datd, iar tipul de data va determina modul in care va putea fi prelucrata acea variabila de memorie In program. Observatil: 1. Intr-o instructiune declarativa se pot declara mai multe variabile de memorie de acelasitip, astfel: tip_data lista_nume; unde lista_nume este 0 list8 de nume de variabile de memorie de acelasitip, in care numele sunt separate prin virgula. De exemplu, prin instructiunile deciarative: int a,b,c; char xy; se declara Variabilele de memorie: a, b si cde tip intreg si x i y de tip caracter. La declararea unei variabile de memorie aceasta va avea o valoare reziduala (reprezinta valozrea atribuité zonei de memorie alocate variabilei de catre un program care a fost executat anterior). Prin instructiunea declarativa, variabilei de memorie i se poate atribui o valoare initial (poate fi initializata), astfel: tip_daté nume=valoare; unde valoare reprezinta 0 constanta de acelasi tip ca gi variablla de memorie sau 0 variabild de memorie declarata anterior si c&reia i s-a atribuit o valoare, iar carac- terul egal (=) are rol de separator intre numele variabilei de memorie si vaicarea cu cate se initiaizeaza. De exemplu, prin instructiunile declarative: int a, b=1, c=2; float char x='a', y=97, 2=\141", wa"x61"; se declara variabilele de memorie de tip intreg: a care are o valoare reziduala, bca- re are valoarea 1 gi c care are valoarea 2, 0 variabila de tip real d care are valoarea 10 si patru variabile de memorie de tip caracter x, y, z si w care contin 0 valoare numerica intreaga (97) care reprezinta codul ASCII ai lterei a © iinstructiune deciarativa poate s8 apard oriunde in blocul funcfiei (nu este obligatoriu s& fie scrisa la inceputul biocului) Regula care trebuie insd respectata este: declararea unei date trebule sa se faca inainte ca ea sa fie folositd intr-o instructiune impera Pin instructiunile dectarative: char x='a'; int a=10, b=a, c=x; se deciara variabila de memorie de tip caracter x care contine o valoare numeric’ Inireaga (97) care reprezinta codul ASCII al iterei a gi trei variabile de memorie de tp Intreg: @ care are valoarea 10, b care are valoarea ce a fost atribuitd anterior varia- bile a, adicd 10, si ccare are valoarea ce a fost atribuité anterior variablel x, adica 87.