C
Exemple de probleme rezolvate in C si PascalPrezentam in continuare, spre initiere, citeva exemple de probleme rezolvate. Vom oferi programul rezultat atit in limbajul de programare Pascal cit si in limbajul C. Deasemenea, fiecare program va fi precedat de o scurta descriere a modului de elaborare a solutiei. 1. Se citesc a,b,c coeficientii reali a unei ecuatii de gradul II. Sa se afiseze solutile ecuatiei. Descrierea algoritmului: - ecuatia de gradul II este de forma ax2+bx+c=0 - presupunind ca a 0 calculam determinantul ecuatiei delta=b*b-4*a*c - daca delta >= 0 atunci ecuatia are solutiile reale x1,2=(-b delta)/(2*a) - daca delta < 0 atunci ecuatia are solutiile complexe z1=(-b/(2*a), (-delta)/(2*a)), z1= (-b/(2*a), - (-delta)/(2*a)) Program Ecuatie_grad_2; Var a,b,c,delta:real; BEGIN Write('Introd. a,b,c:');Readln(a,b,c); delta:=b*b-4*a*c; If delta>=0 then Begin Writeln('x1=',(-b-sqrt(delta))/(2*a):6:2); Writeln('x2=',(-b+sqrt(delta))/(2*a):6:2); End else Begin Writeln('z1=(',-b/(2*a):6:2, ‘,’ , -sqrt(-delta))/(2*a):6:2, ‘)’); Writeln('z2=(', -b/(2*a):6:2, ‘,’ , sqrt(-delta))/(2*a):6:2, ‘)’); End Readln; END. // versiunea C #include <stdio.h> #include <math.h> float a,b,c; // coeficientii ecuatiei de gradul II float delta; void main() else 2. Sa se determine daca trei numere a,b,c reale pot reprezenta laturile unui triunghi. Daca da, sa se caculeze perimetrul si aria sa. Descrierea algoritmului: - conditia necesara pentru ca trei numere sa poata fi lungimile laturilor unui triunghi este ca cele trei numere sa fie pozitive (conditie implicita) si suma a oricaror doua dintre ele sa fie mai mare decit cel de-al treilea numar - dupa conditia este indeplinita vom calcula perimetrul si aria triunghiului folosind formula lui Heron s=sqrt(p(p-a)(p-b)(p-c)) unde p=(a+b+c)/2. Program Laturile_Unui_Triunghi; Var a,b,c,s,p:real; function laturi_ok:boolean; begin laturi_ok:= (a>0) and (b>0) and (c>0) and (a+b>c) and (a+c>b) and (b+c>a) ; end; BEGIN write('introduceti laturile');readln(a,b,c); IF laturi_ok then
begin p:=(a+b+c)/2; s:=sqrt(p*(p-a)*(p-b)*(p-c)); writeln('Aria=',s:5:2); writeln(‘Perimetrul=’,2*p:5:2); end else writeln('Nu formeaza triunghi'); readln; END. // versiunea C #include <stdio.h> #include <math.h> float a,b,c,s,p; int validare_laturi(float a,float b,float c) void main(void) Se citeste n intreg. Sa se determine suma primelor n numere naturale. Descrierea algoritmului: - vom oferi varianta in care suma primelor n numere naturale va fi calculata cu una dintre instructiunile repetitive cunoscute(for,while ,repeat) fara a apela la formula matematica cunoscuta S(n)=n*(n+1)/2 Program Suma_n; Var n,s,i:word; BEGIN Writeln(‘Introduceti limita n=’);Readln(n); s:=0; For i:=1 to n do s:=s+i; Writeln(‘s=’,s); Readln; END. // versiunea C #include <stdio.h> int n,s; void main(void) Se citeste valoarea intreaga p. Sa se determine daca p este numar prim. Descrierea algoritmului: - un numar p este prim daca nu are nici un divizor inafara de 1 si p cu ajutorul unei variabile contor d vom parcurge toate valorile intervalului [2.. p]; acest interval este suficient pentru depistarea unui divizor, caci: d1 | p T p = d1*d2 (unde d1 < d2) T d1 d1*d2 = p iar d2 d1*d2 = p Program Nr_prim; Var p,i:word; prim:boolean; BEGIN write('p=');readln(p); prim:=true; for i:=2 to trunc(sqrt(p)) do if n mod i=0 then prim:=false; prim:=true; if prim then write(p,' este nr prim') else write(p,' nu e nr prim'); END. // versiunea C (optimizata !) #include <stdio.h> #include <math.h> int p,i,prim; void main(void) 5. Se citeste o propozitie (sir de caractere) terminata cu punct. Sa se determine cite vocale si cite consoane contine propozitia. Program Vocale; Var sir:string[80]; Vocale,Consoane,i:integer; BEGIN Write(‘Introd.propozitia terminata cu punct:’);Realn(sir); i:=1;Vocale:=0;Consoane:=0; While sir[i]<>’.’ do begin If Upcase(sir[i]) in [‘A’,’E’,’I’,’O’,’U’] then Inc(Vocale) else If Upcase(sir[i]) in [‘A’..’Z’] then Inc(Consoane); Inc(i); end; Writeln(‘Vocale:’,Vocale,’ Consoane:’, Consoane,’ Alte caractere:’,i-Vocale-Consoane); END. // versiunea C #include <stdio.h> #include <ctype.h> int i,vocale=0,consoane=0; char c,sir[80]; void main(void) printf('Vocale:%i, Consoane:%i, Alte car.:%i', vocale, consoane, i-vocale-consoane); Metoda practica de invatare ce garanteaza rezultate imediateDaca cele spuse mai sus cu privire la secretul invatarii rapide a programarii, acum nu ne mai ramine decit sa incepem sa aplicam practic ideile prezentate. Pentru aceasta, avem la dispozitie urmatoarea metoda care garanteaza cu siguranta rezultate. Iat-o, pe pasi: se citeste si se intelege cit mai bine exemplul de problema rezolvata (se poate incepe chiar cu primul exemplu de mai sus) se acopera (se ascunde) solutia si se incearca reproducerea ei din memorie (reinventarea solutiei) pe calculator numai in cazuri exceptionale se poate apela (se poate trage cu ochiul) la solutie Oricare dintre noi poate recunoaste aici metoda pe care o aplica copiii din primele clase primare: metoda trasului cu ochiul la rezultatul aflat la spatele manualului sau al culegerii de probleme. Din moment ce metoda este verificata si garantata (am folosit-o si noi cindva), de ce ne-ar fi rusine s-o aplicam acum din nou ? Iata in continuare o lista de probleme de 'antrenament care au majoritea rezolvarea intr-unul din capitolele urmatoare. Este numai bine pentru a incepe sa aplicam metoda oferita chiar acum !
|