|
Titlul: Problema admitere! Scris de: Petru Maior din 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. Titlul: Răspuns: Problema admitere! Scris de: Marius Adam din Aprilie 22, 2015, 09:02:59 Pai odata eu cred ca gresesti cand faci atribuirea x[i+1]:=x,trebuia x(i) in loc de x.Si alta chestie citeste si n in cadrul procedurii citire.Succes la simulare daca mergi !:)
|