•shift97
Strain
Karma: 0
Deconectat
Mesaje: 5
|
 |
« : Aprilie 06, 2015, 14:11:13 » |
|
Subiectul 3 Se citeÅŸte de la tastatură o matrice pătratică A cu n linii È™i n coloane conÈ›inȃnd numere naturale (3 ≤ n ≤ 50, 1 ≤ ai,j ≤ 20000). ScrieÅ£i un program care determină È™i apoi tipăreÈ™te ÅŸirul X, conÈ›inȃnd È‹n ordine descrescătoare, numerele „superprime†distincte, care apar È‹n triunghiul stȃng sau cel drept al matricei A. Șirul X se va construi direct ordonat, fără a face ordonarea ulterioară. ÈŠn cazul È‹n care È™irul X este vid, se va tipări mesajul „Șirul este vidâ€. Un număr se numeÈ™te „superprim†dacă toate prefixele sale sunt numere prime (de ex. 239 este „superprim†deoarece 2, 23 È™i 239 sunt prime, dar numărul 241 nu este „superprim†deoarece 24 nu este prim). Se vor scrie subprograme pentru: a). citirea unei matrici pătratice b). tipărirea unui ÅŸir c). verificarea dacă un număr este prim d). verificarea dacă un număr este „superprim†e). inserarea unei valori È‹ntr-un È™ir ordonat descrescător f). construirea È™irului X.
Nu imi afiseaza rezultatul, nu imi pot da seama unde se blocheaza.
program testare; uses crt; type mat=array[1..50,1..50] of integer; type vect=array[1..200] of integer; var a:mat; x:vect; n,k:integer;
procedure citire(a:mat;n:integer); var i,j:integer; begin for i:=1 to n do for j:=1 to n do begin write('a[',i,',',j,']= '); readln(a[i,j]);
end;end;
procedure tiparire(x:vect;n:integer); var i:integer; begin if n=0 then writeln ('Sirul este vid') else for i:=1 to n do write(x, ','); writeln; end;
function test_nr_prim(n:integer):boolean; var d:integer; e_prim:boolean; begin e_prim:=true; if (n=1) then e_prim:=false; for d:=2 to n-1 do if n mod d=0 then e_prim:=false; test_nr_prim:=e_prim;
end;
function esuperprim(n:integer):boolean; var super:boolean; begin super:=true; while (n<>0) do begin if (test_nr_prim(n)=false) then super:=false; n:=n div 10; end; esuperprim:=super; end;
procedure inserare_ordonata(x:vect;n:integer;v:integer); var i,pozitie:integer; begin pozitie:=1; while (x[pozitie]>v) and (pozitie<=n) do pozitie:=pozitie+1; for i:=pozitie to n do x[i+1]:=x; x[pozitie]:=v; n:=n+1; end;
function apartine(x:vect;n:integer;v:integer):boolean; var gasit:boolean; i:integer; begin gasit:=false; while i<=n do if x=v then gasit:=true; apartine:=gasit; end;
procedure construire_sir(a:mat;n:integer;x:vect;var k:integer); var i,j:integer; begin k:=0; for i:=1 to n do for j:=1 to n do if ((i>j) and (i+j<n+1)) or ((i<j) and (i+j>n+1)) then if ((esuperprim(a[i,j])=true) and apartine(x,k,a[i,j])=false) then begin k:=k+1; inserare_ordonata(x,k,a[i,j]); end;
end;
begin write ('Numarul de linii si coloane = ');readln(n); citire(a,n); construire_sir(a,n,x,k); tiparire(x,k); readln; end.
|