atestat pascal revizuit cu rezolvari

36
Subiecte de atestat – Limbajul Pascal _______________________________________________________________ ____________ 1. Să se calculeze: S=1+1*2+1*2*3+…+1*2*3*…*n, unde n se citeşte de la tastatură. program pr_1; var n,i,s,p:longint; begin writeln('n=');readln(n); s:=0; p:=1; for i:=1 to n do begin p:=p*i; s:=s+p; end; writeln('suma s=1+1*2+1*2*3+ ... +1*2*3..*n=',s); readln; end. 2. Se citeşte un număr natural n. Afişaţi al n-lea termen al şirului lui Fibonacci. Folosiţi o funcţie care întoarce cel de-al n-lea termen al şirului lui Fibonacci. program pr_2; var i,n:integer; sf:array[1..100] of longint; function nf(n:integer):longint; begin sf[1]:=1; sf[2]:=1; i:=2; while i<n do begin i:=i+1; sf[i]:=sf[i-1]+sf[i-2]; end; if n=1 then nf:=sf[1] else nf:=sf[i]; end; 1

Upload: mark-myers

Post on 07-Nov-2014

162 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Atestat Pascal Revizuit Cu Rezolvari

Subiecte de atestat – Limbajul Pascal___________________________________________________________________________

1. Să se calculeze: S=1+1*2+1*2*3+…+1*2*3*…*n, unde n se citeşte de la tastatură.

program pr_1;var n,i,s,p:longint;beginwriteln('n=');readln(n);s:=0;p:=1;for i:=1 to n do begin p:=p*i; s:=s+p; end;writeln('suma s=1+1*2+1*2*3+ ... +1*2*3..*n=',s);readln;end.

2. Se citeşte un număr natural n. Afişaţi al n-lea termen al şirului lui Fibonacci. Folosiţi o funcţie care întoarce cel de-al n-lea termen al şirului lui Fibonacci.

program pr_2;var i,n:integer; sf:array[1..100] of longint;function nf(n:integer):longint;beginsf[1]:=1;sf[2]:=1;i:=2;while i<n do begin i:=i+1; sf[i]:=sf[i-1]+sf[i-2]; end;if n=1 then nf:=sf[1]else nf:=sf[i];end;beginwrite('n=');readln(n);writeln(nf(n));end.

3. Se citesc de la tastatură 2 numere întregi a şi b (a<b). Creaţi fişierul “a.txt” care să conţină toate numerele prime din intervalul [a,b]

program Pr_3;var f:text;

1

Page 2: Atestat Pascal Revizuit Cu Rezolvari

Subiecte de atestat – Limbajul Pascal___________________________________________________________________________

a,b,i:integer;function prim(x:integer):boolean;var d:integer;begind:=2;prim:=TRUE;while d<=sqrt(x) do begin if x mod d=0 then begin prim:=FALSE; exit; end; d:=d+1; end;end;beginwrite('a=');readln(a);write('b=');readln(b);if a<=1 then a:=2;assign(f,'a.txt');rewrite(f);for i:=a to b do if prim(i) then write(f,i,' ');close(f);end.

4. Se citesc de la tastatură 2 numere întregi a şi b (a<b). Afişaţi numărul care are suma cifrelor maximă. Pentru aflarea sumei cifrelor unui număr se va folosi o funcţie care are ca parametru un număr întreg şi returneaza suma cifrelor lui.

program Pr_4;var a,b,i:integer;function sumcif(x:integer):integer;var d:integer;begind:=0;repeat d:=d+(x mod 10); x:=x div 10;until x=0;sumcif:=d;end;beginwrite('a=');readln(a);write('b=');readln(b);if sumcif(a)>(sumcif(b)) then writeln(a)

2

Page 3: Atestat Pascal Revizuit Cu Rezolvari

Subiecte de atestat – Limbajul Pascal___________________________________________________________________________

else writeln(b);end.

5. Creaţi fişierul “trei.out” care să conţină pe prima linie toate numerele de trei cifre divizibile cu suma cifrelor lor.

program pr_5;var i,x:integer; f:text;function suma(n:integer):integer;var r,s:integer;begins:=0;while n<>0 do beginr:=n mod 10;n:=n div 10;s:=s+r;end;suma:=s;end;beginassign(f,'trei.out');rewrite(f);for i:=100 to 999 do beginx:=suma(i);if i mod x=0 then write(f,i,' ');end;close(f);readln;end.

6. Să se afişeze în fişierul “tri1.txt” triunghiul de numere:n n-1 n-2…3 2 1……………3 2 12 11

unde n este un număr natural citit de la tastatură.

program pr_6;var n,i,j:integer;beginwrite('n=');readln(n);for i:=1 to n do begin for j:=1 to N+1-I do write(j,' '); writeln;

3

Page 4: Atestat Pascal Revizuit Cu Rezolvari

Subiecte de atestat – Limbajul Pascal___________________________________________________________________________

end;end.

7. Să se afişeze în fişierul “tri2.txt” triunghiul de numere:1 2 3…. N…………………1 2 31 21

unde n este un număr natural citit de la tastatură.

program pr_7;var n,i,j:integer;beginwrite('n=');readln(n);for i:=1 to n do begin for j:=1 to n+1-i do write(j,' '); writeln; end;end.

8. Se citesc doi vectori u şi v cu câte n elemente fiecare. Scrieţi un program care determina şi afişează suma celor doi vectori. Citirea, afişarea şi suma vectorilor se vor face folosind proceduri.

program pr_8;type vector=array[1..100]of real;var v,u,s:vector; i,n:integer;procedure citire(n:integer;var v:vector);beginfor i:=1 to n do begin write('v[',i,']='); readln(v[i]); end;end;procedure citire1(n:integer;var u:vector);beginfor i:=1 to n do begin write('u[',i,']='); readln(u[i]); end;end;procedure tiparire(n:integer;s:vector);beginfor i:=1 to n do write(s[i]:4:2,' ');readln;

4

Page 5: Atestat Pascal Revizuit Cu Rezolvari

Subiecte de atestat – Limbajul Pascal___________________________________________________________________________

end;procedure suma(n:integer;var v,u:vector);beginfor i:=1 to n dos[i]:=v[i]+u[i];end;BEGINwriteln('n=');readln(n);citire(n,v);citire(n,u);suma(n,v,u);tiparire(n,s);readln;end.

9. Se citeşte de la tastatură un şir de numere reale. Scrieţi programul care afişează valoarea elementului minim din şir. Pentru citirea, afişarea şirului precum şi pentru determinarea minimului din şir se vor folosi subprograme.

program pr_9;type vector=array[1..100]of real;var v:vector; min:real; i,n:integer;procedure citire(n:integer;var v:vector);beginfor i:=1 to n do begin write('v[',i,']='); readln(v[i]); end;end;procedure tiparire;beginfor i:=1 to n do write(v[i]:4:2,' ');readln;end;procedure minim(n:integer;var v:vector);beginmin:=v[1];for i:=2 to n doif v[i]<min then min:=v[i];writeln('Minimul este:',min :4 :2 );end;BEGINwriteln('n=');readln(n);citire(n,v);minim(n,v);tiparire;readln;end.

5

Page 6: Atestat Pascal Revizuit Cu Rezolvari

Subiecte de atestat – Limbajul Pascal___________________________________________________________________________

10. Se citeşte de la tastatură un şir de numere intregi. Scrieţi programul care afişează valoarea elementului maxim din şir. Pentru citirea, afişarea şirului precum şi pentru determinarea maximului din şir se vor folosi subprograme

program pr_10;type vector=array[1..100]of integer;var v:vector; i,n,max:integer;procedure citire(n:integer;var v:vector);beginfor i:=1 to n do begin write('v[',i,']='); readln(v[i]); end;end;procedure tiparire;beginfor i:=1 to n do write(v[i],' ');readln;end;procedure maxim(n:integer;var v:vector);beginmax:=v[1];for i:=2 to n doif v[i]>max then max:=v[i];writeln('Maximul este:',max );end;BEGINwriteln('n=');readln(n);citire(n,v);maxim(n,v);tiparire;readln;end.

11. Se citeşte de la tastatură un vector de numere întregi şi un număr natural k nenul. Creaţi un nou vector care să conţină toate elementele din vectorul dat care se divid cu k. Crearea noului vector se va realiza intr-un subprogram.

program pr_11;type vector=array[1..100] of integer;var i,n,k,l:integer; a,b:vector;procedure calcul(var a:vector; n:integer);beginl:=1;for i:=1 to n do if a[i] mod k=0 then begin

6

Page 7: Atestat Pascal Revizuit Cu Rezolvari

Subiecte de atestat – Limbajul Pascal___________________________________________________________________________

b[l]:=a[i]; l:=l+1; end;end;procedure citire(var a:vector; n:integer);beginfor i:=1 to n do begin write('a[',i,']='); read (a[i]); end;end;procedure afisare(var a:vector; n:integer);beginfor i:=1 to l-1 do write(b[i]:3);end;beginwrite('n=');readln(n);write('k=');readln(k);citire(a,n);calcul(a,n);afisare(a,n);readln;end.

12. Se citeşte de la tastatură un vector de numere reale. Scrieţi programul care afişează valoarea elementului minim din vector precum şi poziţiile pe care acesta apare în vector. Pentru citirea, afişarea elementelor vectorului precum şi pentru determinarea minimului din vector se vor folosi subprograme.

De recalculat pozitiile

program pr_12;type vector=array[1..100]of real;var v,u:vector; i,n,l:integer; min:real;procedure citire(n:integer;var v:vector);beginfor i:=1 to n do begin write('v[',i,']='); readln(v[i]); end;end;procedure tiparire;beginfor i:=1 to n do write(v[i]:4:2,' ');readln;end;procedure minim(n:integer;var v:vector);

7

Page 8: Atestat Pascal Revizuit Cu Rezolvari

Subiecte de atestat – Limbajul Pascal___________________________________________________________________________

beginmin:=v[1];l:=1;for i:=2 to n doif v[i]<min then begin min:=v[i]; v[l]:=i; l:=l+1; end;writeln('Minimul este:',min:4:2) ;for i :=1 to l do write( ‘si se afla pe pozitia ',u[l]);end;

BEGINwrite('n=');read(n);citire(n,v);minim(n,v);tiparire;readln;end.

13. Se citeşte de la tastatură un vector de numere întregi (folosind un subprogram). Sunt toate elementele din vector nenule?

program pr_13;type vector=array[1..100]of integer;var v,a:vector; i,n,l:integer;procedure citire(n:integer;var v:vector);beginfor i:=1 to n do begin write('v[',i,']='); readln(v[i]); end;end;procedure verific_elemente_nule(n:integer;var v:vector);begin l:=0; for i:=1 to n do if v[i]<>0 then l:=1; if l=0 then writeln('toate elementele sunt nule') else writeln('exixta elemente nenule in vector');end;procedure tiparire;beginfor i:=1 to n do write(v[i],' ');readln;end;BEGINwrite('n=');read(n);

8

Page 9: Atestat Pascal Revizuit Cu Rezolvari

Subiecte de atestat – Limbajul Pascal___________________________________________________________________________

citire(n,v);verific_elemente_nule(n,v);tiparire;readln;end.

14. Se citeşte de la tastatură un vector de numere întregi pozitive. Creaţi un nou vector care sa conţina inversul fiecărui element din vectorul dat Afişaţi noul vector. Pentru aflarea inversului unui numar se va folosi o functie.Obs: inversul lui 123 este 321.

program pr_14;type vector=array[1..100]of integer;var v:vector; i,n,l,m,nn:integer;procedure citire(n:integer;var v:vector);beginfor i:=1 to n do begin write('v[',i,']='); readln(v[i]); end;end;procedure tiparire;beginfor i:=1 to n do write(v[i],' ');readln;end;function inv(nr:integer):integer;var m,nn:longint; begin m:=v[i]; nn:=0; repeat nn:=nn*10+m mod 10; m:=m div 10; until m=0; inv:=nn; end;procedure calculez_invers(n:integer;var v:vector);beginfor i:=1 to n dov[i]:=inv(v[i]);end;BEGINwrite('n=');read(n);citire(n,v);calculez_invers(n,v);tiparire;readln;end.

9

Page 10: Atestat Pascal Revizuit Cu Rezolvari

Subiecte de atestat – Limbajul Pascal___________________________________________________________________________

15. Se citeşte de la tastatură un vector de numere întregi Afişaţi câte numere perfecte sunt în vector. Un număr este perfect dacă este egal cu suma divizorilor săi mai mici decât el. (ex: 6=1+2+3) – se va folosi un subprogram care verifica aceasta proprietate.

program pr_15;type vector=array[1..100]of integer;var v,a:vector; i,n,l,j:integer;procedure citire(n:integer;var v:vector);beginfor i:=1 to n do begin write('v[',i,']='); readln(v[i]); end;end;procedure tiparire;beginfor i:=1 to n do write(v[i],' ');readln;end;procedure perfecte(n:integer;var v:vector);var s:integer;beginl:=0;for i:=1 to n do begin s:=0; for j:=1 to v[i]-1 do if v[i] mod j=0 then s:=s+j; if s=v[i] then l:=l+1; end;writeln('In sir sunt ', l, ' numere perfecte');end;BEGINwrite('n=');read(n);citire(n,v);perfecte(n,v);tiparire;readln;end.

16. Se citeşte de la tastatură un vector de numere întregi (folosind un subprogram). Să se scrie un program care calculează şi afişează maximul dintre elementele pare ale vectorului sau afişează un mesaj în cazul în care nu există numere pare în vector.

program pr_16;const max_inf=1.e-5;type vector=array[1..100]of integer;var v:vector; i,n,l:integer;

10

Page 11: Atestat Pascal Revizuit Cu Rezolvari

Subiecte de atestat – Limbajul Pascal___________________________________________________________________________

max:real;procedure citire(n:integer;var v:vector);beginfor i:=1 to n do begin write('v[',i,']='); readln(v[i]); end;end;procedure tiparire;beginfor i:=1 to n do write(v[i],' ');readln;end;procedure maxim (n:integer;var v:vector);beginmax:=max_inf;for i:=1 to n do if v[i]mod 2 =0 then if v[i]>max then max:=v[i]; if max<>max_inf then writeln('Maximul este:',max:4:2) else writeln(' Nu exista elemente pare');end;

BEGINwrite('n=');read(n);write(1.e-5);citire(n,v);maxim(n,v);tiparire;readln;end.

17. Se citeşte de la tastatură un vector de numere întregi (folosind un subprogram). Să se scrie un program care calculează şi afişează media aritmetică a elementelor impare din vector sau afişează un mesaj în cazul în care nu există numere impare în vector.

program pr_17;type vector=array[1..100]of integer;var v:vector; i,n,l,s:integer; ma:real;procedure citire(n:integer;var v:vector);beginfor i:=1 to n do begin write('v[',i,']='); readln(v[i]); end;end;procedure tiparire;

11

Page 12: Atestat Pascal Revizuit Cu Rezolvari

Subiecte de atestat – Limbajul Pascal___________________________________________________________________________

beginfor i:=1 to n do write(v[i],' ');readln;end;procedure media_aritmetica (n:integer;var v:vector);beginl:=0;s:=0;for i:=1 to n do if v[i]mod 2 <>0 then begin s:=s+v[i]; l:=l+1; end; if l<>0 then ma:=s/l else ma:=0; if ma<>0 then writeln('Media ariotmetica este:',ma:4:2) else writeln(' Nu exista elemente impare');end;BEGINwrite('n=');read(n);citire(n,v);media_aritmetica(n,v);tiparire;readln;end.

18. Se citeşte de la tastatura un vector cu n elemente numere reale. Afişaţi vectorul obţinut după ordonarea crescătoare a elementelor sale. Ordonarea se va face într-un subprogram ce primeşte ca parametru elementele şirului şi le returnează ordonate.

program pr_18;type vector=array[1..100] of real;var v:vector; i,n:integer; aux:real; gasit:boolean;procedure citire(var v:vector; n:integer);beginfor i:=1 to n do begin write('v[',i,']='); readln(v[i]); end;end;procedure tiparire;beginfor i:=1 to n do write(v[i]:4:2,' ');readln;end;procedure ordonare (var v:vector;n:integer);begin

12

Page 13: Atestat Pascal Revizuit Cu Rezolvari

Subiecte de atestat – Limbajul Pascal___________________________________________________________________________

repeat gasit:=true;for i:=1 to n-1 do if v[i]>v[i+1] then begin aux:=v[i]; v[i]:=v[i+1]; v[i+1]:=aux; gasit:=false; end;until gasit; end;BEGINwrite('n=');read(n);citire(v,n);ordonare(v,n);tiparire;readln;end.

19. Se citeşte de la tastatura o matrice cu n linii şi m coloane. Să se afişeze matricea şi suma elementelor pozitive din matrice. Calculul sumei se va face cu ajutorul unui subprogram ce primeşte ca parametru matricea şi returnează suma.

program Pr_19;type matrice=array[1..100,1..100] of integer;var n,m,i,j,s:integer; a:matrice;procedure suma(var a:matrice); begin s:=0; for i:=1 to n do for j:=1 to m do if a[i,j]>0 then s:=s+a[i,j];end;beginwrite('n=');readln(n);write('m=');readln(m);for i:=1 to n do for j:=1 to m do begin write('a[',i,',',j,']='); readln(a[i,j]); end;suma(a);writeln('Suma elementelor pozitive este ',s);for i:=1 to n dobegin for j:=1 to n do write(a[i,j],' ' ); writeln;

13

Page 14: Atestat Pascal Revizuit Cu Rezolvari

Subiecte de atestat – Limbajul Pascal___________________________________________________________________________

end;readln;end.

20. Se citeşte de la tastatura o matrice pătratică. Să se afişeze matricea şi elementul minim din matrice. Calculul valorii minime se va face cu ajutorul unui subprogram ce primeste ca parametru matricea şi returnează minimul elementelor ei.

program Pr_20;type matrice=array[1..100,1..100] of integer;var n,m,i,j,min:integer; a:matrice;procedure minim(var a:matrice); begin min:=a[1,1]; for i:=1 to n do for j:=1 to m do if a[i,j]<min then min:=a[i,j];end;beginwrite('n=');readln(n);write('m=');readln(m);for i:=1 to n do for j:=1 to m do begin write('a[',i,',',j,']='); readln(a[i,j]); end;minim(a);writeln('Minimul elementelor este ',min);for i:=1 to n dobegin for j:=1 to n do write(a[i,j],' ' ); writeln; end;readln;end.

21. Se citeşte de la tastatura o matrice pătratică. Să se afişeze matricea şi elementul maxim din matrice. Calculul valorii maxime se va face cu ajutorul unui subprogram ce primeste ca parametru matricea şi returnează maximul elementelor ei.

program Pr_21;type matrice=array[1..100,1..100] of integer;var n,m,i,j,max:integer; a:matrice;procedure maxim(var a:matrice); begin min:=a[1,1];

14

Page 15: Atestat Pascal Revizuit Cu Rezolvari

Subiecte de atestat – Limbajul Pascal___________________________________________________________________________

for i:=1 to n do for j:=1 to m do if a[i,j]>max then max:=a[i,j];end;beginwrite('n=');readln(n);write('m=');readln(m);for i:=1 to n do for j:=1 to m do begin write('a[',i,',',j,']='); readln(a[i,j]); end;maxim(a);writeln('Maximul elementelor este ',max);for i:=1 to n dobegin for j:=1 to n do write(a[i,j],' ' ); writeln; end;readln;end.

22. Se citeşte de la tastatura un număr natural N. Afişaţi al N-lea termen al şirului lui Fibonacci. Folosiţi o funcţie care întoarce cel de-al N-lea termen al şirului lui Fibonacci.

program Pr_22;var i,n:integer; sf:array[1..100] of longint;function nf(n:integer):longint;beginsf[1]:=1;sf[2]:=1;i:=2;while i<n do begin i:=i+1; sf[i]:=sf[i-1]+sf[i-2]; end;if n=1 then nf:=sf[1]else nf:=sf[i];end;beginwrite('n=');readln(n);writeln(nf(n));end.

15

Page 16: Atestat Pascal Revizuit Cu Rezolvari

Subiecte de atestat – Limbajul Pascal___________________________________________________________________________

23. Se citesc notele unui student obţinute la cele n examene din timpul unui an universitar. Să se determine numărul de examene nepromovate precum şi care a fost cea mai mare notă obţinută.

program pr_23;type vector=array[1..100]of real; vector1=array[1..100] of integer;var v:vector; u:vector1; i,n,l:integer; max:real;procedure citire(n:integer;var v:vector);beginfor i:=1 to n do begin write('v[',i,']='); readln(v[i]); end;end;procedure tiparire;begin writeln('Notele obtinute de student sunt: ' );for i:=1 to n do write(v[i]:4:2,' ');readln;end;procedure verific(n:integer;var v:vector);beginmax:=v[1];l:=0;for i:=1 to n dobeginif v[i]<5 then l:=l+1;if v[i]>max then max:=v[i];end;writeln('Nota maxima este:',max:4:2) ;writeln('numarul de examene nepromovate este ', l);end;BEGINwrite('Introduceti notele studentului');read(n);citire(n,v);verific(n,v);tiparire;readln;end.

24. Se consideră o matrice nepătratică (nxm) care conţine elemente de tip real. Afişaţi matricea şi maximul de pe fiecare coloană a unei matrice.

program pr_24;type matrice=array[1..10,1..10] of integer;var a:matrice; m,n,max:integer;

16

Page 17: Atestat Pascal Revizuit Cu Rezolvari

Subiecte de atestat – Limbajul Pascal___________________________________________________________________________

procedure citire(var a:matrice);var i,j:integer;beginfor i:=1 to n dofor j:=1 to m do begin write('a[',i,',',j,']='); readln(a[i,j]); end;end;procedure afisare(var a:matrice);var i,j:integer;beginfor i:=1 to n do beginfor j:=1 to m do write (a[i,j]:3);writeln;end;end;procedure maxim;var i,j:integer;beginfor j:=1 to m do begin max:=a[1,j];for i:=1 to n doif max<a[i,j] then max:=a[i,j];writeln('maximul de pe coloana ',j,'este',max); end; end; beginwrite('n=');readln(n);write('m=');readln(m);citire(a);afisare(a);maxim;readln;end.

25. Se dă o matrice A nepatratică (n*m). Să se construiască o matrice B cu 2 coloane şi n linii care să conţină indicii elementelor subunitare pozitive ale matricei A. Afişaţi cele 2 matrici.

program pr_25;var n,m,i,j,k:integer;a:array [1..100,1..100] of real;b:array [1..100,1..2] of integer;

beginwrite('n=');readln(n);write('m=');readln(m);for i:=1 to n dofor j:=1 to m dobegin

17

Page 18: Atestat Pascal Revizuit Cu Rezolvari

Subiecte de atestat – Limbajul Pascal___________________________________________________________________________

write('a[',i,',',j,']=');readln(a[i,j]);end;k:=0;for i:=1 to n dofor j:=1 to m doif (k<=n) and (a[i,j]>0) and (a[i,j]<1) thenbegink:=k+1;b[k,1]:=i;b[k,2]:=j;end;writeln('matricea a are elementele: ');for i:=1 to n dobeginfor j:=1 to m dowrite(a[i,j]:3:1,' ');writeln;end;writeln('maricea b are elementele: ');for i:=1 to n dobeginfor j:=1 to 2 dowrite(b[i,j],' ');writeln;end;end.

26. Se dă o matrice pătratică A. Afişaţi matricea. Să se înlocuiască elementele situate pe diagonala principală şi pe diagonala secundară cu valoarea 0 (zero). Afişaţi noua matrice.

program Pr_26;type matrice=array[1..100,1..100] of integer;var n,i,j:integer; a:matrice;beginwrite('n=');readln(n);for i:=1 to n do for j:=1 to n do begin write('a[',i,',',j,']='); readln(a[i,j]); end;for i:=1 to n do begin j:=i; a[i,j]:=0; end;for i:=1 to n do begin

18

Page 19: Atestat Pascal Revizuit Cu Rezolvari

Subiecte de atestat – Limbajul Pascal___________________________________________________________________________

j:=n+1-i; a[i,j]:=0; end;for i:=1 to n dobegin for j:=1 to n do write(a[i,j],' ' ); writeln; end;readln;end.

27. Se dă o matrice pătratică A. Afişaţi matricea şi numărul elementelor pare de sub diagonala principală.

program Pr_27;type matrice=array[1..100,1..100] of integer;var n,i,j,l:integer; a:matrice;beginwrite('n=');readln(n);for i:=1 to n do for j:=1 to n do begin write('a[',i,',',j,']='); readln(a[i,j]); end;l:=0;for i:=2 to n do for j:=1 to i-1 do if a[i,j] mod 2=0 then l:=l+1;writeln('sub diagonala principala sunt',l,' numere pare');for i:=1 to n dobegin for j:=1 to n do write(a[i,j],' ' ); writeln; end;readlnend.

28. Se consideră o matrice de dimensiune n*m care conţine elemente întregi. Să se afişeze suma elementelor pare de pe fiecare coloană.

program Pr_28;type matrice=array[1..100,1..100] of integer;var n,m,i,j,l:integer; a:matrice;beginwrite('n=');readln(n);

19

Page 20: Atestat Pascal Revizuit Cu Rezolvari

Subiecte de atestat – Limbajul Pascal___________________________________________________________________________

write('m=');readln(m);for i:=1 to n do for j:=1 to m do begin write('a[',i,',',j,']='); readln(a[i,j]); end;for j:=1 to m do begin s:=0; for i:=1 to n do; s:=s+a[i,j]; writeln('Suma elementelor pe coloana ',j,' este',s); end;for i:=1 to n dobegin for j:=1 to n do write(a[i,j],' ' ); writeln; end;readln;end.

29. Se consideră o matrice de dimensiune n*m care conţine elemente întregi. Să se afişeze numărul elementelor impare de pe fiecare linie.

program Pr_29;type matrice=array[1..100,1..100] of integer;var n,m,i,j,s:integer; a:matrice;beginwrite('n=');readln(n);write('m=');readln(m);for i:=1 to n do for j:=1 to m do begin write('a[',i,',',j,']='); readln(a[i,j]); end;for i:=1 to n do begin s:=0; for j:=1 to m do if a[i,j]mod 2 <>0 then s:=s+1; writeln('Numartul de elemente impare pe linia ',i,' este',s); end;for i:=1 to n dobegin for j:=1 to m do write(a[i,j],' ' );

20

Page 21: Atestat Pascal Revizuit Cu Rezolvari

Subiecte de atestat – Limbajul Pascal___________________________________________________________________________

writeln; end;readln;end.

30. Să se construiască un tablou pătratic de dimensiune n2 (1<= n<=50) cu primele n2

numere pare începând cu 2.Exemplu: Pentru n=4 se va afişa:

2 4 6 810 12 14 1618 20 22 2426 28 30 32

program Pr_30;type matrice=array[1..100,1..100] of integer;var n,i,j,s:integer; a:matrice;beginwrite('n=');readln(n);s:=0;for i:=1 to n do for j:=1 to n do begin s:=s+2; a[i,j]:=s; end;for i:=1 to n dobegin for j:=1 to n do write(a[i,j],' ' ); writeln; end;readlnend.

31. Se dă un tablou bidimensional cu n linii şi m coloane (1<= n, m< =50) având componente întregi. Să se determine cel mai mare număr de pe marginea tabloului

Program pr_31;type matrice=array [1..10,1..10] of integer;var a:matrice; m,n :integer;procedure citire (var a:matrice);var i,j :integer;beginfor i:=1 to n dofor j:=1 to m do beginwrite ('a[',i,',',j,']=');readln(a[i,j]);end;end;

21

Page 22: Atestat Pascal Revizuit Cu Rezolvari

Subiecte de atestat – Limbajul Pascal___________________________________________________________________________

procedure tiparire (var a:matrice);var i,j :integer;beginfor i:=1 to n do beginfor j:=1 to m dowrite (a[i,j] :3);writelnend;end;procedure maxim (var a:matrice);var i,j,max :integer;beginmax := a[1,1];for i:=1 to n dofor j:=1 to m do beginif (i=1) or (j=1) or (i=n) or (j=n)then if a[i,j] >max then max:=a[i,j];end;writeln('cel mai mare',max);end;beginwrite('n=');readln(n);write('m=');readln(m);citire(a);tiparire(a);maxim(a);readln;end.

32. Să se verifice dacă o matrice patratică este “triunghiular superioară” (toate elementele aflate sub diagonala principală sunt nule ).

program Pr_32;type matrice=array[1..100,1..100] of integer;var n,i,j,l:integer; a:matrice;beginwrite('n=');readln(n);for i:=1 to n do for j:=1 to n do begin write('a[',i,',',j,']='); readln(a[i,j]); end;l:=0;for i:=2 to n do for j:=1 to i-1 do if a[i,j]<>0 then l:=1;if l=0 then writeln('Matricea este superior triunghiulara') else writeln('Matricea nu este superior triunghiulara');

22

Page 23: Atestat Pascal Revizuit Cu Rezolvari

Subiecte de atestat – Limbajul Pascal___________________________________________________________________________

for i:=1 to n dobegin for j:=1 to n do write(a[i,j],' ' ); writeln; end;readlnend.

33. Se dă o matrice pătratică A de dimensiune n*n. Să se verifice dacă matricea este simetrică (adică aij=aji , 1<=i,j<=n).

program Pr_33;type matrice=array [1..100,1..100]of integer;var a:matrice; n,i,j:integer; q:boolean;beginwrite('n=');readln(n);for i:=1 to n do for j:=1 to n do begin write('a[',i,',',j,']='); readln(a[i,j]); end;q:=true;for i:=1 to n do for j:=1 to n do if a[i,j]<>a[j,i] then q:=false;if q then write('matricea este simetrica') else write('matricea nu este simetrica');readln;end.

34. Se citeşte de la tastatură un şir de caractere s ce reprezintă un cuvânt din dicţionarul limbii române. Să se scrie acest cuvânt în limba “păsărească”, adică se inserează în şir după fiecare vocală subşirul format din litera ‘p’ şi vocala respectivă.

Exemplu: s= ‘acoperire’Rezultă s =’apacoporeperipirepe’

program pr_34 ;var vocale:set of char; s:string; i,n:integer;beginvocale :=['a','e','i','o','u'];write('s=');readln(s);n:=length(s);for i:=1 to n doif s[i] in vocale then write (s[i],'p',s[i]) else write (s[i]);

23

Page 24: Atestat Pascal Revizuit Cu Rezolvari

Subiecte de atestat – Limbajul Pascal___________________________________________________________________________

readln;end.

35. Se citeşte de la tastatură un şir de caractere s ce reprezintă un cuvânt din dicţionarul limbii române. Afişaţi toate sufixele şirului s.

Ex: s=’vara’ se va afişa a ra ara vara

program pr_35;var s:string; j,i,l,n:integer;beginwrite('Dati sirul de caractere: ');readln(s);l:=length(s);for i:=l downto 1 dobeginfor j:=i to l dowrite(s[j]);writeln;end;readln;end.

36. Se citeşte de la tastatură un şir de caractere s ce reprezintă un cuvânt din dicţionarul limbii române. Afişaţi toate prefixele şirului s.

Ex: s=’vara’ se va afisă v va var vara

Program pr_36 ;var s:string; n,i,j:integer;beginwrite ('s=');readln (s);n:=length (s);for i:= 1 to n dobeginfor j:= 1 to i dowrite (s[j]);writeln ;end;readln ;end.

37. Se citeşte de la tastatură un şir de caractere s ce reprezintă un cuvânt din dicţionarul limbii române. Afişaţi şirul obţinut prin transformarea literelor mari în mici şi a celor mici în mari.

program Pr_37;var s:string;

24

Page 25: Atestat Pascal Revizuit Cu Rezolvari

Subiecte de atestat – Limbajul Pascal___________________________________________________________________________

i,l,m:integer;beginwrite('dati cuvantul:');readln(s);l:=length(s);for i:=1 to l do if (ord(s[i])>=65) and (ord(s[i])<=90) then begin m:=ord(s[i])+32; s[i]:=chr(m); end else if (ord(s[i])>=97) and (ord(s[i])<=122) then begin m:=ord(s[i])-32; s[i]:=chr(m); end;writeln(s);readln;end.

38. Se citeşte de la tastatură un şir de caractere (maxim 25 caractere). Verificati dacă cuvantul are proprietatea de palindrom (dacă cuvantul citit invers este identic cu cel dat).

Ex: ‘cojoc’ – palindrom

program Pr_38;var s:string; n,i,j:integer; ok:boolean;beginwrite('s=');readln(s);n:=length(s);j:=n;ok:=true;for i:=1 to n do begin if s[i]<>s[j] then ok:=false; j:=j-1 end;if ok then write(s,' este palindrom') else write(s,' nu este palindrom');readln;end.

39. Se defineşte o înregistrare cu numele MAŞINA care conţine următoarele câmpuri: MARCA de tip string;CULOARE de tip string;PREŢ de tip real;

Se citesc n înregistrări de tip MAŞINA, n număr întreg. Să se afişeze toate maşinile având o anumită culoare citită de la tastatură şi cu preţul mai mic decât o valoare dată p (citită de la tastatură).

program Pr_39;

25

Page 26: Atestat Pascal Revizuit Cu Rezolvari

Subiecte de atestat – Limbajul Pascal___________________________________________________________________________

type masina=record marca, culoarea:string; pret:real; end; vector=array[1..100] of masina;var v:vector; i,n:integer; min:real;beginwrite('n=');readln(n);for i:=1 to n dobeginwrite('marca:');readln (v[i].marca);write('culoarea:');readln(v[i].culoarea);write('pret:');readln(v[i].pret);end;min:=v[1].pret;for i:=1 to n do if v[i].pret<min then min:=v[i].pret;for i:=1 to n do if min=v[i].pret then begin writeln(v[i].marca); writeln(v[i].culoarea); writeln(v[i].pret:3:2); end;

readln;end.

40. Să se determine termenul al n-lea din şirul lui Fibonnaci folosind un subprogram recursiv.

program Pr_40;var n:word;function fib(n:word):word;beginif n=0 then fib:=1 else if n=1 then fib:=1 else fib:=fib(n-1)+fib(n-2)end;beginwrite('n=');readln(n);writeln('fib(',n,')=',fib(n));readln;end.

41. Să se calculeze suma primelor n numere naturale folosind un subprogram recursiv.

program Pr_41;

26

Page 27: Atestat Pascal Revizuit Cu Rezolvari

Subiecte de atestat – Limbajul Pascal___________________________________________________________________________

var n:byte;function suma(n:byte):longint;beginif n=0 then suma:=0 else suma:=n+suma(n-1);end;beginwrite('n=');readln(n);writeln(suma(n));readln;end.

42. Să se afişeze suma cifrelor unui număr folosind un subprogram recursiv.

program Pr_42;var n:integer;function s(n:integer):integer;beginif n=0 then s:=0 else s:=n mod 10+s(n div 10);end;beginwrite('n=');readln(n);writeln(s(n));readln;end.

43. Să se afişeze cifrele unui număr (fiecare cifră pe o nouă linie) folosind un subprogram recursiv.

program pr_43; {nerecursiv}var n,x:integer;function cifre(var n:integer):integer; begin x:=n mod 10; n:=n div 10; writeln(x); end;begin writeln('numarul este:');readln(n); repeat cifre(n); until n=0; readln;end.

44. Scrieţi o funcţie recursivă care ridică un număr A la puterea N (A şi N numere întregi)

program pr_44;var n,A:byte;

27

Page 28: Atestat Pascal Revizuit Cu Rezolvari

Subiecte de atestat – Limbajul Pascal___________________________________________________________________________

function putere(A,n:byte):longint;begin if n=0 then putere:=1 else putere:=A*putere(A,n-1);end;begin write('n=');readln(n); write('A=');readln(A); if A<>0 then writeln(putere(A,n)) else writeln('0');readln;end.

45. Scrieţi o funcţie recursivă care întoarce N factorial.

program pr_45;var n:byte;function fact(n:byte):longint;begin if n=0 then fact:=1 else fact:=n*fact(n-1);end;beginwrite('n=');readln(n);writeln(fact(n));readln;end.

28