rezolvari algoritmi atestat.

24
eruoATESTAT 2009 – ALGORITMI – 1. Să se scrie un program în limbajul Pascal sau C++ care să calculeze cel mai mic multiplu comun a n numere naturale date. var n:integer; function cmmdc2(a,b:integer):integer; var r:integer; begin r:=a mod b; while r<>0 do begin a:=b; b:=r; r:=a mod b; cmmdc2:=b; end; function cmmmc(n:integer); var x,y,d,i,p:integer; begin write(’x= ’);readln(x); d:=x; p:=x; for i:=2 to n do begin write(’x= ’);readln(x); d:=cmmdc2(x,d); p:=p*x; end; cmmmc:= p div d; end; begin write(’n= ’);readln(n); write(cmmmc(n)); readln; end. 2. Se citesc de la tastatură n numere întregi. Să se scrie un program în limbajul Pascal sau C++ care să partiţioneze acest şir în două subşiruri după un x dat astfel: primul subşir să conţină elementele mai mici decât x, iar al doilea – elementele mai mari decât x. type vector=array[1..100] of longint; var v,a:vector; i,j,n:integer; begin write('n= ');readln(n); for i:=1 to n do begin write('v[',i,']= '); readln(v[i]); end; for i:=1 to n do if v[i]>x then begin inc(j); a[j]:=v[i]; end; writeln(’sirul cu numere mai mici decat x: ’); for i:=1 to n do if (v[i]<> 0) then write(v[i],’ ’); 1

Transcript of rezolvari algoritmi atestat.

Page 1: rezolvari algoritmi atestat.

eruoATESTAT 2009 – ALGORITMI –

1. Să se scrie un program în limbajul Pascal sau C++ care să calculeze cel mai mic multiplu comun a n numere naturale date.

var n:integer;function cmmdc2(a,b:integer):integer;var r:integer;beginr:=a mod b;while r<>0 do begina:=b; b:=r; r:=a mod b;cmmdc2:=b;end;function cmmmc(n:integer);var x,y,d,i,p:integer;begin

write(’x= ’);readln(x);d:=x; p:=x; for i:=2 to n do begin

write(’x= ’);readln(x);d:=cmmdc2(x,d);p:=p*x;end;

cmmmc:= p div d;end;beginwrite(’n= ’);readln(n);write(cmmmc(n));readln; end.

2. Se citesc de la tastatură n numere întregi. Să se scrie un program în limbajul Pascal sau C++ care să partiţioneze acest şir în două subşiruri după un x dat astfel: primul subşir să conţină elementele mai mici decât x, iar al doilea – elementele mai mari decât x.

type vector=array[1..100] of longint;var v,a:vector; i,j,n:integer;beginwrite('n= ');readln(n);for i:=1 to n do begin write('v[',i,']= '); readln(v[i]); end;for i:=1 to n do if v[i]>x then begin

inc(j);a[j]:=v[i];end;

writeln(’sirul cu numere mai mici decat x: ’);for i:=1 to n do

if (v[i]<> 0) then write(v[i],’ ’);writeln(’sirul cu numere mai mari decat x: ’);for i:=1 to j do

write(a[i],’ ’);readln;end.

3. Se citesc de la tastatură n numere naturale. Să se scrie un program în limbajul Pascal sau C++ care să rearanjeze aceste numere astfel încât elementele să fie în ordine crescătoare până la jumătatea şirului, apoi să fie în ordine descrescătoare.

type vector=array[1..100] of longint;

1

Page 2: rezolvari algoritmi atestat.

var v,a,b:vector; i,j,n,k,m:integer;beginwrite('n= ');readln(n);for i:=1 to n do begin write('v[',i,']= '); readln(v[i]); end;repeath:=true;for I := 1 to (n div 2) do if v[i]>v[i+1] then begin aux:=v[i]; v[i]:=v[i+1]; v[i+1]:=aux; end;until h;repeath:=true;for I ;= p+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; end;until h;repeath:=true;for I := (n div 2)+1 to n do if v[i]>v[i+1] then begin aux:=v[i]; v[i]:=v[i+1]; v[i+1]:=aux; end;until h;repeath:=true;for I ;= p+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; end;until h;end;for i:=1 to n do write(v[i],’ ’);readln;end.

4. Se citeşte de la tastatură un n natural nenul. Să se scrie un program în limbajul Pascal sau C++ care să genereze o matrice cu n linii şi n coloane care să fie completată pe linii cu primele numere prime.

Type mat=array[1..100,1..100] of longint;Var a:mat;

I,j,n,nr,k:longint;function prim(x:longint):boolean; var j:longint; h:boolean; begin h:=true; if (x=0) or (x=1) then h:=false; for j:=2 to trunc(sqrt(x)) do if x mod j=0 then h:=false; prim:=h;

2

Page 3: rezolvari algoritmi atestat.

end;beginwrite(’dati rangul matricei’); readln(n);for i:=1 to n do

for j:=1 to n do begink:=2;repeatif prim(k) then a[i,j]:=k;inc(k);until a[i,j]<>0;

5. Să se scrie un program care, pentru n valori întregi citite de la tastatură, afişează valorile în ordine crescătoare.

type vector=array[1..100] of longint;var v:vector; i,j,n:integer;Procedure sortare;repeath:=true;for I := 1 to n do if v[i]>v[i+1] then begin aux:=v[i]; v[i]:=v[i+1]; v[i+1]:=aux; end;until h;repeath:=true;for I ;= p+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; end;until h;end;beginwrite('n= ');readln(n);for i:=1 to n do begin write('v[',i,']= '); readln(v[i]); end;sortare;readln;end.

6. Să se scrie un program care determină şi afişează toate numerele prime mai mici sau egale cu o valoare n naturală, citită de la tastatură.

var x,n:longint;function prim(x:longint):boolean; var j:longint; h:boolean; begin h:=true; if (x=0) or (x=1) then h:=false; for j:=2 to trunc(sqrt(x)) do if x mod j=0 then h:=false; prim:=h; end;beginreadln(n);x:=2;while x<=n do begin

3

Page 4: rezolvari algoritmi atestat.

if prim(x) then write(x);inc(x)end;

end.

7. Scrieţi un program care afişează toate numerele prime de trei cifre ale căror inverse sunt tot prime.

var i: longint;function prim(x:longint):boolean; var j:longint; h:boolean; begin h:=true; if (x=0) or (x=1) then h:=false; for j:=2 to trunc(sqrt(x)) do if x mod j=0 then h:=false; prim:=h; end;function invers(x: longint):longint;

begininvers:=x mod 10;while x>=0 do begin

x:=x div 10;invers:=(invers* 10) + (x mod 10);end;

beginfor i:=100 to 999 do if (prim(i)) and (prim(invers(i))) then write(i,’ ’);end.

8. Să se verifice dacă o valoare întreagă X, citită de la tastatură, se găseşte printre cele n elemente întregi ale unui vector. Elementele vectorului se vor citi de la tastatură în ordine crescătoare.

{cautare binara}var a:array[1..100] of longint; n,i:byte; nr:longint;procedure caut(i,j:byte); var m:byte; begin m:=(i+j) div 2; if nr=a[m] then write('numarul a fost gasit pe pozitia ',m) else if i<j then if nr<a[m] then caut(i,m-1) else caut(m+1,j) else write('numarul nu a fost gasit'); end;beginwrite('dati lungimea vectorului : ');readln(n);for i:=1 to n do begin write('a[',i,']='); readln(a[i]); end;write('dati numarul de cautat : ');readln(nr);caut(1,n);readln;end.

9. Se citesc de la tastatură un cuvânt şi o literă. Să se afişeze toate cuvintele care se obţin prin înlocuirea unei litere din cuvânt cu litera dată. (Ex: pentru c=’TOC’ şi l=’P’ se vor afişa ‘POC’,’TPC’,’TOP’).

var cuv,s:string;c:char;n,i:integer;beginwrite(’cuv: ’);readln(cuv);n:=length(cuv);

4

Page 5: rezolvari algoritmi atestat.

write(’Introduceti o litera: ’);readln(c);s:=cuv;writeln(’Cuvintele noi: ’);for i:=1 to n do begins[i]:=c;writeln(s);s:=cuv;end;readln;end.

10. Să se determine câte elemente prime se află deasupra diagonalei principale a unei matrice cu n x n elemente naturale.

Type mat=array[1..100,1..100] of longint;Var a:mat;

I,j,n,nr:longint;function prim(x:longint):boolean; var j:longint; h:boolean; begin h:=true; if (x=0) or (x=1) then h:=false; for j:=2 to trunc(sqrt(x)) do if x mod j=0 then h:=false; prim:=h; end;beginwrite(’dati 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;

nr:=0;for i:=1 to n do

for j:=i to n do if prim(a[i,j]) then inc(nr);write(’deasupra diagonalei principale sunt ’,nr,’ numere prime’);end.

11. Fie un vector cu n componente întregi. Să se determine elementul maxim din vector şi să se afişeze vectorul după ce elementele din stânga celui maxim au fost sortate crescător, iar cele din dreapta maximului au fost sortate descrescător.

type vector=array [1..10] of longint;var v :vector; i,imax,max,n,aux:longint; ok:boolean;beginwrite('n=');readln(n);for i:=1 to n doreadln(v[i]);max:=0;imax:=0;for i:=1 to n doif v[i]>max then begin max:=v[i]; imax:=i; end;repeatok:=true;for i:=1 to imax-1 doif v[i]>v[i+1] then begin

5

Page 6: rezolvari algoritmi atestat.

aux:=v[i]; v[i]:=v[i+1]; v[i+1]:=aux; ok:=false; end;until ok;repeatok:=true;for i:=imax+1 to n-1 doif v[i]<v[i+1] then begin aux:=v[i]; v[i]:=v[i+1]; v[i+1]:=aux; ok:=false; end;until ok;for i:=1 to n dowrite(v[i]:3);readln;end.

12. Să se determine câte elemente prime se află deasupra diagonalei secundare a unei matrice cu n x n elemente naturale.

type matrice=array[1..10,1..10] of longint;var a:matrice; n,i,j,nr:longint;function prim(x:longint):boolean;var k:longint; ok:boolean; begin ok:=true; if (x=0) or (x=1) then ok:=false; for k:=2 to trunc(sqrt(x)) do if x mod k=0 then ok:=false; prim:=ok; end;beginwrite('n=');readln(n);for i:=1 to n dofor j:=1 to n dobeginwrite('a[',i,',',j,']=');readln(a[i,j]);end;nr:=0;for i:=1 to n-1 dofor j:=1 to n-i doif prim(a[i,j]) then inc(nr);write(nr);readln;end.

13. Se citeşte de la tastatură un şir cu n cuvinte. Să se afişeze cuvintele palindrom cu lungime maximă.

type vector=array[1..10] of string;var cuv:string; v:vector; n,i,max:longint;function palindrom(x:string):boolean;var h:boolean; k,y:longint;beginh:=true;y:=length(x);

6

Page 7: rezolvari algoritmi atestat.

for k:=1 to y div 2 doif x[k]<>x[y-k+1] then begin h:=false; break; end;palindrom:=h;end;beginwrite('n=');readln(n);for i:=1 to n dobeginwrite('dati cuvantul',i);readln(v[i]);end;max:=0;for i:=1 to n doif palindrom(v[i]) then if length(v[i])>max then max:=length(v[i]);for i:=1 to n doif palindrom(v[i]) then if length(v[i])=max then write(v[i]);readln;end.

14. Scrieţi un program care să afişeze câte cifre pare şi câte cifre impare conţine un număr natural (cu maxim 8 cifre), citit de la tastatură.

var x,par,impar:longint;beginwrite('dati numarul');readln(x);repeatif (x mod 10)mod 2=1 then inc(impar) else inc(par);x:=x div 10;until x=0;write(par,' ',impar);readln;end.

15. Să se scrie un program care să afişeze factorul prim care apare la puterea cea mai mare în descompunerea numărului natural x (citit) în factori primi.

var x,f,d,p,max,dd:integer;beginwrite('x=');readln(x);max:=0;for d:=2 to x dobeginp:=0;while x mod d=0 do begininc(p);x:=x div d;end;if p>max then begindd:=d;max:=p;end;end;writeln('factorul ',dd,' apare la puterea ', max);readln;end.

16. Se citeşte de la tastatura un număr natural n (100<=n<=999). Dintre numerele naturale mai mici sau egale cu n, să se afişeze acelea care sunt divizibile cu suma cifrelor lor.

var n,i:integer;function sum(x:integer):integer;

7

Page 8: rezolvari algoritmi atestat.

var s:integer; begin s:=0; while x<>0 do begin s:=s+x mod 10; x:=x div 10; end; sum:=s; end;beginwrite(’dati numarul’);readln(n);if (n>=100) and (n<=999) then for i:=n downto 1 do

if i mod sum(i)=0 then write(i,’ ’);readln;end.

17. Sa se scrie un program care să calculeze recursiv suma cifrelor unui număr natural cu cel mult 8 cifre.

var n:longint;function sc(n:longint):longint; begin if n=0 then sc:=0 else sc:=sc(n div 10)+n mod 10; end;beginreadln(n);write('suma cifrelor lui ',n,' = ',sc(n));readln;end.

18. Să se scrie un program care să verifice recursiv egalitatea a două şiruri de caractere citite.

{verificare siruri care coincid}var s1,s2:string;function verif(s1,s2:string):boolean; begin if length(s1)<>length(s2) then verif:=false else if s1<>'' then if s1[1]<>s2[1] then verif:=false else begin delete(s1,1,1); delete(s2,1,1); verif:=verif(s1,s2); end else verif:=true; end;beginreadln(s1);readln(s2);writeln(verif(s1,s2));readln;end.

19. Se citeşte de la tastatură o cifră x şi un număr natural n (care poate să fie de ordinul sutelor). Calculaţi xn.

var x,n,p:longint;beginwrite(’dati baza: ’); readln(x);write(’dati exponentul: ’); readln(n);p:=1;repeatp:=p*x;dec(n);until n=0;

8

Page 9: rezolvari algoritmi atestat.

write(x,’ la puterea ’,n,’ =’,p);readln;end.

20. Se citesc din fişierul NUMERE.TXT un număr natural n (de pe primul rând) şi n numere naturale separate prin spaţii (de pe al doilea rând). Să se afişeze pe ecran cel mai mare divizor comun al celor n numere.

var f:text; n,i,aux:integer;function cmmdc (a,b:longint):longint; var r:longint; begin repeat r:=a mod b; a:=b; b:=r; until r=0; cmmdc:=a; end;begin assign (f, ‘DATE.IN’); reset (f);readln (f,n); read(f,x);aux:=x;while not(eof(f)) do begin

read(f,x);aux:=cmmdc(x,aux);end;

write(’CMMDC valorilor din fisier este: ’,aux);readln;end.

21. Se citeşte de la tastatură un text cu cel mult 250 de caractere. Ştiind că separatorii de cuvinte pot fi:‘ ‘‚ ’,’, ’;’, ’:’, ’!’, ’?’, ’.’ se cere să se împartă fraza în cuvinte şi să se afişeze fiecare cuvânt pe câte un rând. La sfârşit se va preciza numărul de cuvinte.

const sep:set of char= [‘ ‘‚ ’,’, ’;’, ’:’, ’!’, ’?’, ’.’];var t,cuv:string;

n,i,nr:integer;beginwrite(’Dati textul: ’); readln(t);n:=length(t);i:=1; nr:=0;while i<=n do begin

while (t[i] in sep) and (i<=n) do inc(i);cuv:=’’;while not(t[i] in sep) and (i<=n) dp begin

cuv:=cuv+t[i];inc(i);end;

writeln(cuv);inc(nr);end;

writeln(’In text sunt ’,nr,’ cuvinte.’);readln; end.

22. Să se ordoneze crescător un şir de n numere întregi folosind metoda sortării prin numărare.

23. Să se creeze o listă liniară alocată dinamic cu numere întregi, să se calculeze media aritmetică a elementelor sale şi să se afişeze elemente pare de pe poziţii impare.

24. Se citeşte un text şi o secvenţă. Să se determine numărul de apariţii al secvenţei în text.

var t,s:string;p,nr:integer;

begin

9

Page 10: rezolvari algoritmi atestat.

write(’Dati textul: ’);readln(t);write(’Dati secventa: ’);readln(s);p:=pos(s,t);while p>0 do begin

inc(nr);delete(t,1,p);p:=pos(s,t);

end;writeln(’Apare de ’,nr,’ ori.’);readln; end.

25. Să se parcurgă în lăţime un graf neorientat cu n noduri dat prin matricea de adiacenţă.

type mat=array[1..20,1..20] of 0..1;sir=arrau[1..100] of integer;

var a:mat;n,i:integer;viz,c:sir;

procedure citire(var a:mat; var n:integer);var i,j:integer;

f:text;beginassign(f,’adiacenta.in’); reset(f);read(f,n);for i:=1 to n do

for j:=1 to n doread(f,a[i,j]);

close(f);end;procedure bf;var i,u,p,v,x0:integer;beginwrite(’dati nodul initial: ’);readln(x0);c[1]:=x0;p:=1; u:=1; viz[x0]:=1;while p<=u do begin

v:=c[p];for i:=1 to n do

if (a[v,i]=1) and (viz[i]=0) then begininc(u);c[u]:=i;viz[i]:=1;end;

inc(p);end;

end;

begincitire(a,n);bf;write(’Parcurgere in latime: ’);for i:=1 to n do write (c[i],’ ’);readln; end.

26. Să se ordoneze crescător un vector de n elemente numere reale folosind metoda inserţiei.

Program calcul;Var v :array[1..10] of longint; N,I,j,k,aux:integer; H:Boolean;BeginWrite(‘n=’);Readln(n);

10

Page 11: rezolvari algoritmi atestat.

For I := 1 to n do beginWrite(‘a[‘,I,’]=’);Readln(a[i]);End;For I := 2 to n do BeginAux:=v[i];K:=0;J:=i-1;H:=false;While (J>!) and (not h) do If v[j]>aux then begin V[j+1]:=v[j]; J:=j-1; End; Else begin H:=true; K:=j; End;V[k+1]:=aux;End;For I := 1 to n do write(v[i],’ ‘);Readln;End.

27. Să se ordoneze crescător un vector de n elemente numere reale folosind metoda selecţiei.

Program calcul; Var v:array[1..10] of longint; N,I,j,aux :longint; BeginWrite(‘n=’);Readln(n);For I ;= 1 to n do Readln(v[i]);For I := 1 to n-1 do For j := i+1 to n do If v[j]>v[i] then beginAux:=v[i];V[i]:=v[j];V[j]:=aux;End;For I := 1 to n do Write(v[i],’ ‘);Readln;end.

28. Să se creeze o listă liniară cu informaţii numere naturale. Eliminaţi din listă toate nodurile care conţin informaţii pare. Se va afişa conţinutul listei atât înainte de eliminare, cât şi după eliminare.

29. Să se afişeze permutările mulţimii {1,2,3, …, n}, unde n este un număr natural dat.

type sir=array[1..100] of integer;var x:sir; n,i:integer;procedure prelsol;var i:integer;beginfor i:=1 to n do write(x[i],' ');writeln;end;function valid(k:integer):boolean;var i:integer;beginvalid:=true;for i:=1 to k-1 do

11

Page 12: rezolvari algoritmi atestat.

if x[k]=x[i] then begin valid:=false; exit; end;end;procedure back;var k:integer;beginfor k:=1 to n do x[k]:=0;k:=1;while k>0 do if k=n+1 then begin prelsol; dec(k); end else if x[k]<=n-1 then begin inc(x[k]); if valid (k) then inc(k); end else begin x[k]:=0; dec(k); end;end;beginwrite('n= ');readln(n);writeln('Permutarile multimii sunt:');back;readln;end.

30. Se dau 2 liste alocate dinamic cu elemente numere întregi aflate în ordine crescătoare. Să se interclaseze cele 2 liste.

31. Să se determine numărul componentelor conexe dintr-un graf neorientat cu n vârfuri şi m muchii.

type mat=array[1..20,1..20] of 0..1;sir=arrau[1..100] of integer;

var a:mat;n,i,nc:integer;viz,c:sir;

procedure citire(var a:mat; var n:integer);var i,j:integer;

f:text;beginassign(f,’adiacenta.in’); reset(f);read(f,n);for i:=1 to n do

for j:=1 to n doread(f,a[i,j]);

close(f);end;procedure bf(x0:integer; var c:sir; var u:integer);var i,p,v:integer;beginc[1]:=x0;p:=1; u:=1; viz[x0]:=1;while p<=u do begin

v:=c[p];for i:=1 to n do

if (a[v,i]=1) and (viz[i]=0) then begininc(u);c[u]:=i;viz[i]:=1;end;

inc(p);end;

end;function nod:integer;var i:integer;beginnod:=0;for i:=1 to n do

if viz[]=0 then beginnod:=i; exit; end;

end;

12

Page 13: rezolvari algoritmi atestat.

begincitire(a,n);x:=nod;while x>0 do begin

inc(nc);bf(x,c,u);x:=nod;

end;write(’Graful are ’,nc,’ componente conexe.’);readln; end.

32. Să se inverseze elementele unui şir printr-o procedură recursivă.

type sir=array[1..100] of integer;var v:sir;

n,i:integer;procedure citire(var v:sir; var n:integer);var i:integer;begin

write(’n= ’);readln(n);for i:=1 to n do begin

write(’v[’,i,’]= ’);readln(v[i]); end;end;procedure invers(var v:sir; i:integer);var aux:integer;begin

if i<=n div 2 then beginaux:=v[i];v[i]:=v[n-i+1];v[n-i+1]:=aux;invers(v,i+1);end;

end;citire(v,n);invers(v,1);for i:=1 to n do write(v[i],’ ’);readln; end.

33. Se citeşte din fişierul MAT.IN o matrice cu n linii şi m coloane conţinând numai elemente de 0 şi 1. Elementele fiecărei linii reprezintă cifrele binare ale unui număr natural. Să se determine cel mai mare număr natural.

34. Se dă un fişier text MAT.IN care conţine pe câte o linie numele şi prenumele unui elev. Să se creeze un alt fişier MAT.OUT care conţine pe fiecare linie prenumele şi numele elevilor (în această ordine) din fişierul MAT.IN sortaţi alfabetic după prenume.

35. Se citesc din fişierul BAC.IN pe mai multe rânduri mai multe numere naturale de cel mult 3 cifre despărţite prin spaţiu.(pe o linie cel mult 100 numere) Scrieţi in fişierul BAC.OUT pe fiecare linie numerele din fişierul iniţial dar sortate crescător.

Ex BAC.IN

3 8 5 8 3 9 4 1 BAC.OUT 3 5 8 3 8 9 1 4

36. Se citeşte din fişierul bac. in un text pe mai multe linii. Scrieţi în fişierul bac. out acelaşi text dar in care se schimba literele mici cu litere mari si literele mari cu litere mici.ExBac.inTata Este la

13

Page 14: rezolvari algoritmi atestat.

PiatA?Bac. outTATA eSTE LApIATa?

37. Se citeşte de la tastatura pentru n elevi informaţii referitoare la nume, prenume, media, vârsta. Sortaţi descrescător elevii după medie, iar daca au aceeaşi medie se sortează crescător după nume.

38. Realizaţi un program care calculează recursiv maximul a n numere citite de la tastatura.(n< 20, numerele sunt naturale de cel mult 5 cifre).

type vector=array[1..100] of integer;var v:vector; i,n:integer; max,s,d,mij:integer;procedure citire;begin writeln('Introduceti elementele vectorului : ');

for i:=1 to n do readln(v[i]);end;function maxim(s,d:integer):integer;var max1,max2:integer;begin if s=d then maxim:=v[s] else begin max1:=maxim(s,(s+d)div 2); max2:=maxim((s+d)div 2 +1,d); if max1>max2 then maxim:=max1

else maxim:=max2; end; end;beginwrite(’n= ’);readln(n);citire;write(’Maximul din vector: ’, maxim(1,n);readln; end.

39. Se citeşte de la tastatura o matrice n x m si calculaţi pentru fiecare coloana numărul de numere neprime.ExN=3 m=42 5 7 5 1 4 7 02 4 5 6 se va afisa1 2 0 2

40. Se citeste din fisierul bac.in pe prima linie n si apoi pe urmatoarele n linii cate n numere 0 si 1 reprezentand matricea de adiacenta pentru un graf neorientat.Calculati pentru fiecare nod gradul si spuneti daca sunt noduri izolate in grafExBac.inN=40 1 1 01 0 0 01 0 0 10 0 1 0Se va afisaGradele 2 1 2 1 Nu sunt varfuri izolate.

41. Se dau doua numere naturale a si b citite de la tastatura, a de cel mult 9 cifre , b<=10. Afisati numarul a in baza b.Ex:A=18B=2 Se va afisa 10010

14

Page 15: rezolvari algoritmi atestat.

42. Se citeste de la tastatura un numar natural a si un numar natural b (a, b de cel mult 9 cifre). Scrieti cele doua numere in baza 2 pe 32 biti si spuneti cate pozitii dintre cele 32 contin cifre disticte.Ex.A=27B=13A este 000000000000000000000000000011011B este 000000000000000000000000000001101Se va afisa 3.

43. Se citeste de la tastatura numarul n. Generati in fisierul bac.out primele n numere prime, cate 10 pe fiecare linie.

Ex.N=40Bac.out2 3 5 7 11 13 17 19 23 2931 37

44. Generati toate numerele naturale de 5 cifre care au proprietatea ca suma cifrelor este divizor al produsului cifrelor.Ex.Un numar este 12345 in care are suma cifrelor 15 si produsul 120.

45. Pentru un numar natural n citit de la tastatura (de cel mult 8 cifre) afisati al p-lea numar prim strict mai mare decat numarul.Ex. N=20P=4 se va afisa 37

46. Sa se calculeze produsul primilor n termeni ai sirului lui Fibonacci definit astfel   :f 1=1, f2=1, fn=fn-1+fn-2 pentru n>=3;Ex   : n=6, produsul este 240.

47. Pentru un numar intreg n dat sa se calculeze expresia de mai jos :s=12+42+72+…+(3*n-2)2

Ex : n=5, s=335.48. Sa se calculeze produsul a doua numere naturale prin adunari repetate.

49. Sa se determine toate numerele intregi de 3 cifre abc cu proprietatea ca numarul este egal cu suma cuburilor cifrelor.Ex : 371=33+53+13.

50. Sa se determine daca 2 numere sunt termeni consecutivi ai sirului lui Fibonacci.Ex : 55 si 89 sunt termeni consecutivi ai sirului lui Fibonacci.

51. Sa se afiseze primele n numere care au suma cifrelor mEx :n=10, m=4 : 1, 2, 3, 4, 10, 11, 12, 13, 20, 21.

52. Se citesc perechi de numere până la întâlnirea valorii 0. Să se afişeze doar acele perechi alcătuite din numere prime între ele. Să se precizeze câte sunt în total.

Ex: (3 27) (5 12) (8 13) (2 46) (13 17) (0 0)Se va afişa 5 12, 8 13, 13 173 perechi

53. Sa se scrie un program care afişează pe ecran conţinutul unui fişier text cu nume citit de la tastatura.

54. Sa se creeze un fişier text care conţine toate numerele cuprinse intre a si b formate din cifre identice. Valorile lui a si b se citesc de la tastatura.Ex : a=10, b=150 fişierul de ieşire va arata astfel : 11, 22, 33, …, 99, 111 .

55. Din fişierul “numere. in” se citesc mai multe numere întregi. Ele sunt scrise in fişier pe mai multe linii. Numerele de pe aceeaşi linie sunt separate prin spaţiu. Sa se scrie un program care construieşte fişierul text  “numere. out” conţinând numărul cel mai mare si numărul cel mai mic din fiecare linie a fişierului “numere. in”. Cele doua numere se vor scrie pe aceeaşi linie separate prin spaţiu.Ex : “numere. in” :

10 9 13 57 332 53 96

“numere. out” :

15

Page 16: rezolvari algoritmi atestat.

3 579 536 6

56. Se citesc numere până la întâlnirea valorii 0. Să se realizeze un program care afişează pentru fiecare număr citit numărul de apariţii al unei cifre specificate de la tastatură.

57. Să se realizeze un program care să calculeze maximul dintre trei numere folosind o funcţie ce calculează maximul dintre două numere şi o alta care foloseşte prima funcţie şi care întoarce maximul dintre cele trei numere.

58. Se citeşte din fişierul „matrice. txt” o matrice pătratică de ordin n. Pe prima linie din fişier se găseşte numărul de linii, iar pe liniile următoare elementele matricei. Realizaţi un program care verifică dacă matricea este simetrică.

59. Fişierul “sir. in” conţine pe o singura linie, separate prin caracterul blanc un şir de numere. Să se scrie în fişierul “sir. out” elementele prime din acest sir.

60. Se da un fişier text cu mai multe linii. Sa se copieze aceste linii in alt fişier text in ordinea descrescătoare a lungimilor liniilor.

61. Să se realizeze un program care verifică dacă un număr n natural este număr prim.

62. Să se realizeze un program care verifică dacă un număr n natural este număr perfect.

63. Se dau doua numere întregi a si b, ce reprezintă numărătorul, respectiv numitorul unei fracţii. Să se realizeze un program care afişează fracţia adusă la formă ireductibilă.

64. Să se realizeze un program care să testeze dacă un vector cu n elemente poate reprezenta o mulţime ( în sens matematic)

65. Să se realizeze un program care afişează numărul de apariţii al elementului maxim dintr-un şir dat cu n elemente numere reale.

66. Se dau doi vectori A si B cu n si respectiv m elemente ce reprezintă două mulţimi. Să se determine mulţimea ce reprezintă intersecţia celor două mulţimi date.

67. Sa se ordoneze un vector dat cu n elemente întregi prin metoda bulelor. Program calcul;Var v:array[p1..10] of longint; N,i,j,k,aux:longint; H:Boolean; BeginWrite(‘n=’);Readln(n):For I := 1 to n do Write(‘v[‘,I,’]=’);Readln(v[i]);End;RepeatH:=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;H:=false;End;Until h;For I := 1 to n do Write(v[i],’ ‘);Readln;End.

68. Sa se determine produsul a doua matrice date A(m,n) si B(n,p).

16

Page 17: rezolvari algoritmi atestat.

69. Sa se ordoneze crescător elementele de pe diagonala principală a unei matrice pătratice folosind interschimbări de linii si coloane.

70. Să se realizeze un program care calculează produsul elementelor de sub diagonala secundară a unei matrice pătratice de ordin n..

71. Scrieţi un program ce creează un fişier text cu date introduse de la tastatura.

72. Scrieţi un program care concatenează doua fişiere text. Rezultatul concatenării se va pune în primul fişier.

program concatenare;var f, g:text; s:integer;begin assign (f, ‘FISIER1.TXT’); append (f); assign (g, ‘FISIER2.TXT’); reset (g); writeln (f);while not eof (g) do begin readln (g,s); writeln (f,s); end;close (f); close (g);end.

73. În fişierul NUMERE.TXT se află mai multe numere naturale scrise cu spaţiu între ele. Să se creeze fişierul PARE.TXT care sa conţină, cate una pe linie doar acele valori din fişierul NUMERE.TXT care sunt numere pare.

74. Se consideră n numere naturale. Să se determine c. m .m. d. c. al celor n numere. Datele de intrare se citesc din fişierul „input.txt” sub forma următoare: pe prima linie se va găsi n iar pe următoarele n linii numerele. Rezultatul se va afişa pe ecran.

75. Să se creeze o listă liniară simplu înlănţuită cu elemente numere întregi. Să se afişeze elementele listei de la ultimul element câtre primul.

76. Să se realizeze un program care construieşte două liste liniare simplu înlănţuite cu elemente numere întregi. Să se descompună în două liste, una care să conţină elementele pare, iar cealaltă elementele impare.

77. Să se realizeze un program care citeşte din fişierul GRAF.TXT matricea de adiacenţă a unui graf orientat (pe primul rând al fişierului se află numărul de noduri, iar pe următoarele linii – matricea) şi afişează acele noduri al căror grad interior este egal cu gradul exterior.

78. Se citeşte dintr-un fişier text un număr întreg. Să se afişeze în acelaşi fişier text inversul acestui număr.

79. Să se scrie un program în care să se calculeze expresia: E= ½+1/3+ ¼+….+1/n, unde n este un număr natural dat.

80. Să se scrie un program în care să se calculeze expresia E=1+1*2+1*2*3+….+1*2*3*…*n, unde n este un număr natural dat.

81. Să se scrie un program în care să se calculeze expresia E=12+42+72+….+(3*n-2)2, unde n este un număr natural dat.

82. Să se scrie un program în care să se calculeze expresia E=1*3+2*5+3*7+…+n*(2*n+1), unde n este un număr natural dat.83. Se dau doi vectori u şi v cu n componente numere întregi. Să se calculeze produsul scalar al acestora,

u[1]*v[1]+u[2]*v[2]+….+u[n]*v[n].

84. Fiind dat un vector v cu n componente numere întregi, să se afişeze de câte ori găsim două elemente consecutive egale între ele.

85. Fiind dat un vector v cu n componente numere întregi, să se insereze la mijlocul vectorului media aritmetică a elementelor sale.

86. Fiind dat un vector v cu n componente numere întregi, să se afişeze elementele cu proprietatea că suma cifrelor lor este divizibilă cu o valoare p dată.

17

Page 18: rezolvari algoritmi atestat.

87. Fiind dat un vector v cu n componente numere întregi, să se afişeze elementele pare de pe poziţiile impare din vector.

Type vect=array [1..100] of longint;var n,i:integer; v:vect;beginwrite(’dati numarul’);readln(n);for i:=1 to n do begin write(’a[’,i,’]=’); readln(a[i]); end;for i:=1 to n do if (i mod 2=1) and (v[i] mod 2=0) then write(v[i],’ ’);readln;end.

88. Fiind dat un vector v cu n componente numere întregi, să se afişeze toate perechile de elemente consecutive cu proprietatea că al doilea element al perechii este egal cu suma cifrelor primului.

Type vect=array [1..100] of longint;var n,i:integer; v:vect;function sum(x:integer):integer; var s:integer; begin s:=0; while x<>0 do begin s:=s+x mod 10; x:=x div 10; end; sum:=s; end;beginwrite(’dati numarul’);readln(n);for i:=1 to n do if v[i]=sum(v[i+1] then write (’( ’,v[i],’,’,v[i+1],’ )’);readln;end.

89. Se dă un număr natural par. Să se descompună în sumă de două numere prime.

program descompunere_suma_numere_prime;var n,i,k,nr_desc:integer; prim1, prim2:boolean; f:text;begin write (‘Introduceti valoarea n= ’); readln(n); writeln (‘Descompunerea lui ‘,n,’ in suma de numere prime: ‘); nr_desc:=0; for i:=2 to n div 2 do begin prim1:=true; if (i=0) or (i=1) then prim1:=false; for k:=2 to I div 2 do if i mod k=0 then prim1:=false; if prim1 then begin prim2:=true; if (n-i=0) or (n-i=1) then prim2:=false; for k:=2 to (n-i) div 2 do if (n-i) mod k=0 then prim2:=false; if prim2 then begin nr_desc:=nr_desc+1; writeln (I, ‘ + ‘, n-i); end; end; end; if nr_desc=0 then writeln (n, ‘ nu poate fi descompus!’ )

18

Page 19: rezolvari algoritmi atestat.

else writeln (‘Avem ‘, nr_desc,’ descompuneri! ‘);end.

90. Să se afişeze toate modurile de aşezare a n regine pe o tablă de şah de dimensiune n*n, fără să se atace între ele(să nu fie pe aceeaşi linie, coloană sau diagonală). Valoarea lui n se citeşte de la tastatură

{Regine}type vector=array[1..30] of longint;var n,i,v:longint; a,x:vector;procedure prel_sol; var i,j:longint; begin for i:=1 to n do begin for j:=1 to x[i]-1 do write(0:2); write('R':2); for j:=x[i]+1 to n do write(0:2); writeln; end; writeln; end;function valid(k:longint):boolean; var i:longint; begin valid:=true; for i:=1 to k-1 do if (x[k]=x[i]) or (k-i=abs(x[k]-x[i])) then valid:=false; end;procedure back(k:longint); begin if k=n+1 then prel_sol else begin x[k]:=0; while x[k]<=n-1 do begin x[k]:=x[k]+1; if valid(k) then back(k+1); end; end; end;beginread(n);back(1);readln;end.

19