57863615 rezolvari pascal

Upload: amanda-wright

Post on 30-Oct-2015

167 views

Category:

Documents


6 download

DESCRIPTION

rezolvari pascal

TRANSCRIPT

  • Programare(PASCAL)

    SUBIECTUL 1Fiierul date.in conine cel mult 100000 numere naturale separate prin spaii, fiecare numr

    avnd cel mult nou cifre. S se realizeze un program care scrie n fiierul date.out, pe o singur linie, separate prin cte un spaiu, toate numerele din date.in care au prima cifra par.

    Exemplu:date.in date.out45 123 68 8 134 56 876 45 68 8 876

    Rezolvare:var n:integer; f,g:text;function par(nr:integer):boolean;var ok:boolean;beginwhile nr>=10 donr:=nr div 10;if nr mod 2=0 then ok:=true else ok:=false;par:=ok;end;

    beginassign(f,'date.in');reset(f);assign(g,'date.out');rewrite(g);while not eof(f) do begin read(f,n); if par(n)=true then write(g,n,' '); end;close(f);close(g);end.

    SUBIECTUL 2Fiierul Atestat.txt conine cel mult 100 de numere naturale de cel mult 6 cifre fiecare, cte

    un numr pe fiecare linie a fiierului. Scriei un program care: a) afieaz pe ecran toate numerele din fiier, cte 3 pe fiecare linie, numerele de pe o linie

    fiind separate prin cte un spaiu, ultima linie rmnnd eventual incompletb) afieaz pe ecran, pe urmtoarea linie, suma numerelor prime din fiierExemplu:

    Atestat.txt5687433

    Se afieaz: 5 6 87 4 3 318

    Rezolvare:var s,k,n:integer;

    PROGRAMARE ATESTAT 2009 - INFORMATIC INTENSIV-

    1

  • f:text;function prim(nr:integer):boolean;var ok:boolean; begin j:=2; ok:=true; while (j
  • ok:=true;while (ky then begin write(x,' '); read(f,x); end

    PROGRAMARE ATESTAT 2009 - INFORMATIC INTENSIV-

    3

  • else if y>x then begin write(y,' '); read(g,y); end else begin write(x,' '); write(y,' '); read(f,x); read(g,y); end;if x>y then write(x,' ') else write(y,' ');if ((not seekeof(f))and(seekeof(g))) then begin read(f,x); if x>y then write(x,' ',y,' ') else write(y,' ',x,' '); end;if ((not seekeof(g))and(seekeof(f))) then begin read(g,y); if x>y then write(x,' ',y,' ') else write(y,' ',x,' '); end;while not seekeof(f) do begin read(f,x); write(x,' '); end;

    while not seekeof(g) do begin write(y,' '); read(g,y); end;close(f);close(g);end;begininterclasare;writeln;writeln;end.

    SUBIECTUL 5Fiierul atestat.txt conine pe prima linie un numr natural n i pe fiecare linie dintre

    urmtoarele n linii cte un cuvnt format din cel mult 20 de litere mici ale alfabetului englez. S se scrie un program care citete valoarea n i apoi determin cte dintre cele n cuvinte memorate n fiier conin secvena bac. Programul va afia pe ecran numrul de cuvinte determinat (0 n cazul c nu exist niciunul).

    Exemplu:atestat.txt

    5tabaclaureattabacar

    Se afieaz: 3

    PROGRAMARE ATESTAT 2009 - INFORMATIC INTENSIV-

    4

  • bacteriebarca

    function numara:integer;var f:text; k,i,n:integer; cuv:string;beginassign(f,'atestat.txt');reset(f);readln(f,n);k:=0;for i:=1 to n do begin readln(f,cuv); if pos('bac',cuv)>0 then k:=k+1; end;numara:=k;close(f);end;beginwrite(numara);end.

    SUBIECTUL 6Fiierul text cuvinte.txt conine mai multe linii nevide de text, fiecare linie de cel mult 255 de

    caractere. Orice linie este compus din unul sau mai multe cuvinte separate prin cte un spaiu. S se scrie un program care citete de la tastatur un numr natural L i scrie in fiierul cuvinte.out toate cuvintele de lungime L din fiierul de intrare, n ordinea n care apar ele n text.

    Exemplu:cuvinte.txt

    A fost odatCa niciodat O fata frumoasa de mprat

    L = 4cuvinte.out fost fat

    var f,g:text; s:string; l:integer;procedure cuvinte(s:string;var l:integer);var cuv:string; i:integer;begini:=1;while s[i]=' ' do i:=i+1;cuv:='';while i

  • end;end;procedure rez;beginwrite('l=');readln(l);assign(f,'cuvinte.txt');reset(f);assign(g,'cuvinte.out');rewrite(g);while not seekeof(f) do begin readln(f,s); cuvinte(s,l); end;close(f);close(g);end;beginrez;end.

    SUBIECTUL 7Scriei un program care citete de la tastatur un ir cu maxim 255 de caractere format numai din litere mici i mari ale alfabetului englez i l scrie n fiierul atestat.out codificat conform urmtoarei reguli: dac numrul de vocale din ir este mai mare sau egal cu numrul de consoane din ir, fiecare vocal se va nlocui cu caracterul urmtor din alfabetul englez, altfel, fiecare consoan se va nlocui cu caracterul precedent din alfabetul englez.

    Exemplu:Pentru irul de intrare: Bacalaureat se scrie n fiierul atestat.out Bbcblbvrfbt.Pentru irul de intrare: Basca se scrie n fiierul atestat.out aarba.

    Rezolvare :

    var s:string; f:text;

    procedure rezolva;var i,v,c:integer; begin assign(f,atestat.out);rewrite(f); c:=0; v:=0; i:=1; while i0) or (pos(s[i],AEIOU)>0) then v:=v+1 else c:=c+1; if v>c then begin if (s[1]>=A) and (s[1]0) then s[1]:=chr(ord(s[1]+32)); for i:=1 to length(s) do if pos(s[i],aeiou)>0 then

    PROGRAMARE ATESTAT 2009 - INFORMATIC INTENSIV-

    6

  • s[i]:=chr(ord(s[i]+1)); end;if v=A) and (s[1]
  • beginfor i:=1 to n dobeginfor j:=1 to m dowrite(a[i,j], );writeln;end;

    procedure afis2;var s,i,j:integer; f:text;beginassign(f,grade.txt);rewrite(f);for i:=1 to n dobegins:=0;for j:=1 to n dos:=s+a[i,j];writeln(f,i,s);end;close(f);end;

    beginconstructie;afis1;afis2;end.

    SUBIECTUL 9Se citesc de la tastatur dou numere ntregi m i n , apoi m perechi de numere ntregi

    reprezentnd extremitile muchilor unui graf neorientat cu m muchii i n vrfuri. S se construiasc i s se afieze pe ecran matricea de adiacent, apoi s se scrie pentru fiecare vrf lista veciniilor n fiierul Graf.txt (pe fiecare rnd se vor scrie vrful i lista veciniilor, separate prin spaii).

    Exemplu:m=4 n=4

    1 2 3 24 32 4

    Matricea de adiacen:0 1 0 01 0 1 10 1 0 10 1 1 0

    Graf.txt1 22 1 3 43 2 44 2 3

    Rezolvare:

    type matrice=array[1..50,1..50] of integer;var n:integer; a:matrice;

    procedure constr_matr;var i,x,y,m:integer;begin

    PROGRAMARE ATESTAT 2009 - INFORMATIC INTENSIV-

    8

  • write('m=');readln(m);write('n=');readln(n);for i:=1 to m do beginreadln(x,y);a[x,y]:=1;a[y,x]:=1;end;end;

    procedure vecini;var f:text; i,j:integer;beginassign(f,'graf.txt');rewrite(f);for i:=1 to n dobeginwrite(g,i);for j:=1 to n doif a[i,j]=1 thenwrite(g,j);end;close(f);end;

    procedure afis;var i,j:integer;beginfor i:=1 to n dobeginfor j:=1 to n do write(a[i,j],' ');writeln;end;end;

    beginconstr_matr;vecini;afis;end.

    SUBIECTUL 10Fiierul nr.txt conine pe prima linie un numr natural k i, pe urmtoarele linii, cte un

    numr ntreg. S se memoreze ntr-o structur de tip list liniar simplu nlnuit numerele ntregi distincte din fiier i apoi s se afieze elementele acestei liste care sunt multipli de k.

    Exemplu:

    PROGRAMARE ATESTAT 2009 - INFORMATIC INTENSIV-

    9

  • Nr.txt36545865

    Lista conine 6 5 45 8Se afieaz: 6 45

    Rezolvare:

    type vector=array[1..50] of integer;var v:vector; k,n:integer;

    procedure creare;var i:integer; f:text;beginassign(f,'nr.txt');reset(f);readln(f,k);i:=0;while not seekeof(f) do begin i:=i+1; readln(f,v[i]); end;n:=i;close(f);end;

    procedure elimina;var i,j,l:integer;beginfor i:=1 to n do for j:=i+1 to n do if v[i]=v[j] then begin for l:=j to n-1 do v[l]:=v[l+1]; n:=n-1; end;end;procedure afiseaza;var i:integer;beginwriteln;write('lista contine: ');for i:=1 to n do write(v[i],' ');end;

    PROGRAMARE ATESTAT 2009 - INFORMATIC INTENSIV-

    10

  • procedure multiplii;var i:integer;beginwriteln;write('multiplii: ');for i:=1 to n do if v[i] mod k=0 then write(v[i],' ');end;

    begincreare;elimina;afiseaza;multiplii;end.

    SUBIECTUL 11 Fie un tablou bidimensional (matrice) cu n linii i n coloane. Se cere:a) s se afieze transpusa matricei;b) s se afieze cte perechi de numere prime ntre ele sunt pe diagonala secundar a matricei

    iniiale.Datele de intrare se vor citi din fiierul date.in astfel:- pe prima linie se gsete n- pe urmtoarele n linii se gsesc cte n numere ce reprezint elementele matricei.Exemplu:

    Fiierul de intrare date.in: 41 2 3 45 6 7 89 10 11 1213 14 15 16

    Se afieaz:a) 1 5 9 13

    2 6 10 143 7 11 154 8 12 16

    b) 5

    Rezolvare:

    type matrice=array[1..50,1..50] of integer;var f:text; m:matrice; n,i,j,s,k,p:integer;

    function prim(a,b:integer):boolean;beginwhile ab do begin if a>b then a:=a-b else if a

  • reset(f);readln(f,n);for i:=1 to n do begin for j:= 1 to n do read(f,m[i,j]); readln(f); end;for j:= 1 to n do begin for i:= 1 to n do write(m[i,j],' '); writeln; end;s:=0;for i:= 1 to n-1 do for j:= 2 to n do if j=n-i+1 then begin k:=i+1; p:=j-1; while (k=1) do begin if prim(m[i,j],m[k,p])=true then s:=s+1; k:=k+1; p:=p-1; end; end;writeln;write(s);close(f);end.

    SUBIECTUL 12

    n fiierul date.in se gsesc, pe o singur linie, prenumele unor elevi separate prin cte un spaiu.

    a) S se ordoneze alfabetic (fr s se fac distincie ntre litere mari i mici) i s se afieze irul de nume astfel obinut.

    b) S se afieze numrul de fete din fiier, tiind c numai prenumele fetelor se termin cu litera a.

    Datele de ieire se vor scrie pe ecran, astfel:- pe prima linie, prenumele ordonate- pe a doua linie, numrul de fete.Exemplu:

    Pentru fiierul de intrare date.in: IOANA Marius Ciprian maria Silvia Gabriel Vlad

    Se afieaz pe ecran:a) Ciprian Gabriel IOANA maria Marius Silvia Vlad b) 3

    type vector=[1..100] of string;var v:vector; n:integer;

    PROGRAMARE ATESTAT 2009 - INFORMATIC INTENSIV-

    12

  • procedure citire;var f:text; s,cuv:string; i:integer;beginassign(f,'date.in');reset(f);read(f,s);close(f);i:=1;while i
  • for i:=1 to n dowrite(v[i],' ');writeln;k:=0;for i:=1 to n doif v[i][length(v[i])] in ['a','A'] then k:=k+1;writeln(k);end;

    begincitire;sortare;afis;end.

    SUBIECTUL 13n fiierul date.in se gsesc, pe aceeai linie, numere ntregi separate prin spaii.a) S se afieze elementele din fiier situate pe poziii pare (al doilea, al patrulea etc.).b) S se construiasc o list simplu nlnuit care s conin toate elementele irului, n

    ordine invers celei n care apar n fiier. S se afieze pe ecran coninutul acestei liste.Datele de ieire se vor scrie pe ecran, astfel:- pe o linie, elementele, din fiier, situate pe poziiile pare - pe linia a doua, elementele listei.Exe mplu :

    Pentru fiierul de intrare date.in: 18 20 17 34 15 29 16 14 15 34

    Se afieaz pe ecran:a) 20 34 29 14 34b) 34 15 14 16 29 15 34 17 20 18

    Rezolvare:

    type adresa=^nod;nod=recordinfo:integer;urm:adresa;end;var prim,c,d:adresa;f:text; k,n:integer;beginassign(f,'date.txt');reset(f);k:=0;new(prim);prim^.urm:=nil;prim^.info:=maxint;while not eof(f) do begin read(f,n); k:=k+1; if k mod 2=0 then write(n,' '0; new(d); d^.info:=n; d^.urm:=prim; prim:=d; end;writeln;c:=prim;

    PROGRAMARE ATESTAT 2009 - INFORMATIC INTENSIV-

    14

  • while c^.urmnil do begin write(c^.info,' '); c:=c^.urm; end;close(f);end.

    SUBIECTUL 14n fiierul date.in se gsesc cuvinte separate prin cte un spaiu, cuvinte care sunt scrise cu

    litere mari i mici. Se cere:a) s se afieze cuvintele din fiier, n ordinea cresctoare a lungimii fiecrui cuvnt.b) s se memoreze fiecare cuvnt din fiier transformat n litere mari precum i numrul de

    vocale ce apar n cuvntul respectiv; se vor lua n calcul doar vocalele a e i o i u;Datele de ieire se vor scrie pe ecran astfel:- pe un rnd cuvintele n ordinea cerut la punctul a, separate prin spaii.- pe rndul al doilea cuvintele i numrul de vocale n formatul (cuvnt, nr_de_vocale).Exemplu:

    Pentru fiierul de intrare date.in: InformatICa eLEV sCOalA CARTE

    Se vor afia pe ecran liniile:eLEV CARTE sCOalA InformatICa(INFORMATICA,5) (ELEV,2) (SCOALA,3) (CARTE,2)

    Rezolvare:

    type bp=recorda:integer;b:integer;end;var f:text; v:array[1..50]of bp; s,n:string; i,k,p,x,j:integer; aux:bp; z:char;beginassign(f,'date.in');reset(f);k:=0;p:=ord('A')-ord('a');n:='AEIOU';while not eof(f) do begin read(f,s); k:=k+1; v[k].a:=length(s); v[k].b:=s; x:=0; for i:=1 to length(s) do begin for z:='a' to 'z' do begin if s[i]=z then s[i]:=chr(ord(s[i])+p); end; if pos(s[i],n)0 then x:=x+1; end; write(s,',',x); end;writeln;for i:=1 to k-1 do

    PROGRAMARE ATESTAT 2009 - INFORMATIC INTENSIV-

    15

  • for j:=i+1 to k do if v[i].a>v[j].a then begin aux:=v[i]; v[i]:=v[j]; v[j]:=aux; end;for i:=1 to k do write(v[i].b,' ');close(f);end.

    SUBIECTUL 15Un graf neorientat cu n noduri i m muchii este descris n fiierul graf.in cu urmtoarea

    structur :- pe prima linie valorile pentru n i m separate printr-un spaiu;- pe urmtoarele m linii, perechi de numere i,j reprezentnd noduri ce formeaz o muchie.S se realizeze un program care s rspund urmtoarelor cerine:a) s se afieze matricea de adiacen asociat grafului descris n fiierul graf.in.b) s se afieze nodurile grafului n ordinea descresctoare a gradelor.Exemplu:

    Pentru fiierul graf.in:5 41 21 42 43 4

    a) Se va afia pe ecran:0 1 0 1 01 0 0 1 00 0 0 1 01 1 1 0 00 0 0 0 0

    b) Deoarece d(1)=2, d(2)=2, d(3)=1, d(4)=3 i d(5)=0, se va afia: 4 1 2 3 5

    var a:array[1..100,1..100]of 0..1; v,v1:array[1..100]of integer; f,g:text;n,i,x,y,m,j:integer;procedure sort;var i,aux,aux1:integer; ok:boolean;begin repeat ok:=true; for i:=1 to n-1 do if v[i]

  • sort; for i:=1 to n do begin for j:=1 to n do write(g,a[i,j],' '); writeln(g); end; for i:=1 to n do write(g,v1[i],' '); close(f);close(g); end.

    SUBIECTUL 16Scriei un program care rezolv urmtoarea problem: se citete un numr ntreg format din

    cel mult 8 cifre. S se afieze mesajul DA dac toate cifrele numrului citit sunt identice, n caz contrar, s se afieze mesajul NU.

    Exemplu: Dac se citete unul dintre numerele 777777 sau -9999 se va afia mesajul DA, iar dac se citete unul

    dintre numerele 777767 sau -9099 se va afia mesajul NU.

    var n,a:integer; ok:boolean;beginwrite('n=');readln(n);if n0) and (ok=true) dobeginif a=n mod 10 thenn:=n div 10 elseok:=false;end;if ok=true thenwrite('DA') elsewrite('NU');end;end.

    SUBIECTUL 17In fiierul date.in se gsesc pe o linie, numere naturale de cel mult 9 cifre, separate prin cate

    un spaiu. Se cere:a) s se determine numerele ce reprezint un factorial, adic sunt de forma k!, pentru fiecare

    astfel de numr afindu-se valoarea lui k.b) s se scrie, n ordine descresctoare dup prima cifr, toate numerele din fiier.Datele de ieire se vor scrie pe ecran, astfel:- pe prima linie, numerele k determinate, separate prin spaii;- pe a doua linie numerele sortate descresctor dup prima cifr, separate prin spaii.

    Exemplu: Fiierul date.in:

    233 24 210 6 17 720a) Se va afia pe ecran:4 3 6720 6 233 24 210 17

    type vac=record x:longint;

    PROGRAMARE ATESTAT 2009 - INFORMATIC INTENSIV-

    17

  • y:integer; end;var v:array[1..30] of vac; i,k:integer; p:longint; f:text; aux:vac;function cif(n:longint):integer;beginwhile n>9 do n:=n div 10;cif:=n;end;

    beginassign(f,'date.in');reset(f);a:=0;while not eof(f) do begin a:=a+1; read(f,v[a].x); v[a].y:=cif(v[a].x); ok:=true; k:=2; p:=2; while p

  • - pe prima linie, elementele determinate la punctul a);- pe a doua linie, rspunsul cerinei b).

    Exemplu: Fiierul date.in:

    31 38 45 52 59 66

    Se afieaz pe ecran: 31 38 54 52 95 66

    Primul termen este: 31 i raia: 7

    Rezolvare:

    type vector=array[1..30]of integer;var v,x:vector; i,j,a,b,k,p:integer; ok:boolean; f:text;beginassign(f,'date.in');reset(f);a:=0;while not eof(f) do begin a:=a+1; read(f,v[a]); if v[a] mod 20 then begin k:=v[a]; b:=0; while k0 do begin b:=b+1; x[b]:=k mod 10; k:=k div 10; end; for i:=1 to b-1 do for j:=i+1 to b do if x[i]

  • aux:=x[i]; x[i];=x[j]; x[j]:=aux; end; for i:=1 to b do k:=k*10+x[i]; write(k,' '); end else write(v[a],' '); end; p:=v[2]-v[1]; ok:=true;for i:=2 to a-1 do if v[i]+pv[i+1] then ok:=false; if ok=true then write('Primul termen este ',v[1],' si ratia ',p) else write('nr nu sunt in progresie aritmetica');close(f);end.

    SUBIECTUL 19Fie un ir de n(0

  • read(f,v[i]);for i:=1 to n-1 dofor j:=i+1 to n doif v[i]=v[j] then ok:=false;if ok=false then writeln('Elementele nu pot forma multime') else writeln('Elementele pot forma multime'); close(f);end;

    procedure rezolvare2;var max,i,c,k:integer;beginmax:=-MAXINT;for i:=1 to n doif v[i]>max then max:=v[i];c:=2;while max1 do begink:=0;while max mod c=0 do begin k:=k+1; max:=max div c; end; if k>0 then write(c,' '); c:=c+1; end;end;

    beginrezolvare1;rezolvare2;end.

    end;

    SUBIECTUL 20Se d un tablou bidimensional cu n linii i m coloane ce conine numere naturale

    nenule distincte. a) s se determine, dac exist un numr superprim n matrice i s se afieze;

    dac exist mai multe astfel de numere, afiai unul dintre ele, dac nu exist nici unul, dai un mesaj (un numr este superprim daca att el ct i rsturnatul su sunt numere prime);

    b) s se determine i s se afieze toate elementele vecine elementului maxim din matrice.

    Datele de intrare se vor citi din fiierul date.in astfel:- pe prima linie se gsesc n i m;- pe urmtoarele n linii se gsesc cte m numere ce reprezint elementele matricei.Datele de ieire se vor scrie pe ecran astfel:- pe prima linie, numrul superprim i indicele de linie sau un mesaj corespunztor,

    n cazul n care nu exist nici un numr superprim;

  • - pe linia a doua elementele cerute la punctul b) separate printr-un spaiu.

    Exemplu:Fiierul date.in:

    4 3 33 65 10544 32 2262 76 4131 1 12

    Se va afia pe ecran:31 465 32 22

    Rezolvari:

    type gab=record s:integer; t:integer; u:integer; end;matrice=array[1..20,1..20]of integer;var a:matrice; i,j,b,z,m,n:integer; f:text; max:gab;

    procedure rast(x:integer; var k:integer);begink:=0;while x0 do begin k:=k*10 + x mod 10; x:=x div 10; end;end;

    function prim(p:integer):boolean;var q:integer; ok:boolean;beginq:=2;ok:=true;while (q

  • read(f,a[i,j]); if a[i,j]>max.s then begin max.s:=a[i,j]; max.t:=i; max.u:=j; end; if b=0 then begin rast(a[i,j],z); if prim(a[i,j])=prim(z)=true then begin write(a[i,j],' ',i); b:=1; end; end; end; writeln;end;if b=0 then write('nu exista numere superprime in matricea data');if max.t-10 then write(a[max.t-1,max.u]);if max.u+1