Rezolvari Pascal

85
CLASELE DE MATEMATICA-INFORMATICĂ NEINTENSIV Subiectul nr.1 Se citeşte de la tastatură un şir de 10 numere întregi mai mici decât 100. a. Să se creeze fişierul text date.in care să conţină pe o linie cele 10 valori, separate prin spaţiu. b. Să se scrie un subprogram care să returneze elementul minim din fişierul date.in; c. Să se scrie un subprogram care să creeze un tablou unidimensional cu elementele fişierului date.in şi să se insereze între ultimul şi penultimul element al tabloului media lor aritmetică; d. Scrieţi în fişierul text date.out şirul nou obţinut, ordonat crescător. Exemplu: Date de intrare: 17 23 45 67 12 34 5 90 8 9 Date de ieşire: a) Fişierul text date.in conţine pe o linie: 17 23 45 67 12 34 5 90 8 9 b) Elementul minim este: 5 c) Tabloul unidimensional: 17 23 45 67 12 34 5 90 8 8.5 9 d) Fişierul text date.out conţine pe o linie: 5 8.5 8 9 12 17 23 34 45 67 90 Rezolvare: in procedura minelem se determina minimul din vectorul a format cu cele 10 elemente citite de la tastatura; aceste elemente se depun in fisierul date.in; in procedura marit se determina elementul care se insereaza intre penultimul si ultimul element al vectorului a; in acest mod se creaza un nou vector b care se listeaza pe monitor; vectorul b este apoi sortat si se creaza cu noul vector sortat fisierul date.out.

Transcript of Rezolvari Pascal

CLASELE DE MATEMATICA-INFORMATICĂ NEINTENSIVSubiectul nr.1

Se citeşte de la tastatură un şir de 10 numere întregi mai mici decât 100.a. Să se creeze fişierul text date.in care să conţină pe o linie cele 10 valori, separate prin spaţiu.b. Să se scrie un subprogram care să returneze elementul minim din fişierul date.in;c. Să se scrie un subprogram care să creeze un tablou unidimensional cu elementele fişierului

date.in şi să se insereze între ultimul şi penultimul element al tabloului media lor aritmetică;d. Scrieţi în fişierul text date.out şirul nou obţinut, ordonat crescător.

Exemplu:Date de intrare:

17 23 45 67 12 34 5 90 8 9

Date de ieşire:a) Fişierul text date.in conţine pe o linie: 17 23 45 67 12 34 5 90 8 9b) Elementul minim este: 5c) Tabloul unidimensional: 17 23 45 67 12 34 5 90 8 8.5 9d) Fişierul text date.out conţine pe o linie: 5 8.5 8 9 12 17 23 34 45 67 90

Rezolvare: in procedura minelem se determina minimul din vectorul a format cu cele 10 elemente citite

de la tastatura; aceste elemente se depun in fisierul date.in; in procedura marit se determina elementul care se insereaza intre penultimul si ultimul

element al vectorului a; in acest mod se creaza un nou vector b care se listeaza pe monitor; vectorul b este apoi sortat si se creaza cu noul vector sortat fisierul date.out.

Varianta PASCALvar g,f:text; i,ok:integer; a:array[1..10] of integer;

b:array[1..11] of real;aux:real;function minelem:integer;var j,min:integer;beginmin:=1000;for j:=1 to 10 do if a[j] < min then min:=a[j];minelem:=min;end;procedure marit;var m,j:integer;beginm:=a[9]+a[10];b[10]:=m/2.;for j:=1 to 9 do b[j]:=a[j];b[11]:=a[10];end;

Varianta C#include <fstream.h>#include <stdlib.h>

int a[10];float b[11];

int minelem() {

int j,min;min=1000;for(j=1;j<=10;j++)

if(a[j]<min) min=a[j];return min;

}void marit() {

int m,j;m=a[9]+a[10];b[10]=m/2.;for(j=1;j<=9;j++)

b[j]=a[j];b[11]=a[10];

}

beginassign (f,'date.in ');rewrite(f);assign(g,'date.out');rewrite(g);

{ a) }for i:=1 to 10 do begin read(a[i]); write(f,a[i],' '); end;{ b) }writeln(minelem); ok:=1;{ c) }marit;for i:=1 to 11 do write(b[i]:3:2,' ');

{ d) }while ok=1 do begin ok:=0; for i:=1 to 10 do if b[i]>b[i+1] then begin ok:=1;aux:=b[i]; b[i]:=b[i+1];b[i+1]:=aux; end; end;for i:=1 to 11 do write(g,b[i]:3:2,' ');close(f); close(g);end.

void main() {fstream f("date.in",ios::out);fstream g("date.out",ios::out);int i;// a)cout<<endl;for(i=1;i<=10;i++) cin>>a[i];for(i=1;i<=10;i++) f<<a[i]<<" ";

// b)cout<<minelem()<<endl;int ok=1,aux;// c)cout<<endl;marit();for(i=1;i<=11;i++) cout<<b[i]<<" ";// d)while(ok==1) { ok=0; for(i=1;i<=10;i++) if(b[i]>b[i+1]) {ok=1; aux=b[i]; b[i]=b[i+1]; b[i+1]=aux;} }for(i=1;i<=11;i++) g<<b[i]<<" ";g.close();f.close();}

Subiectul nr.2

Se citeşte de la tastatură un şir de 10 numere întregi mai mici decât 100.a. Să se creeze fişierul text date.in care să conţină pe o linie cele 10 valori, separate prin spaţiu.b. Să se scrie un subprogram care să returneze elementul maxim din fişierul date.in;c. Să se scrie un subprogram care să determine numărul elementelor prime conţinute de fişierul

date.in;d. Scrieţi în fişierul text date.out şirul dat, ordonat crescător.

Exemplu:Date de intrare:

7 23 4 17 12 34 5 90 8 9

Date de ieşire:a) Fişierul text date.in conţine pe o linie: 7 23 4 17 12 34 5 90 8 9b) Elementul maxim este: 90c) În fişier sunt 4 numere prime

d) Fişierul text date.out conţine pe o linie: 4 5 7 8 9 12 17 23 34 90 Rezolvare   :

subprogramul scrie creaza fisierul date.in in care sunt depuse cele 10 numere intregi citite de la tastatura ;

se citesc elementele din fisierul date.in si se cauta elementul maxim in subprogramul maxim ; valoarea este returnata programului principal si afisata pe monitor ;

se citesc numerele din fisierul date.in si se determina cate numere sunt prime ; acest lucru se realizeaza in subprogarmul nrprime ; numarul de numere prime este returnat programului principal si afisat pe monitor ;

in programul principal se sorteaza cele 10 numere citite si se scriu in fisierul date.out.

Varianta PASCALvar a,ok,i,j,aux:integer; b:array[1..10] of integer; h:text;procedure scrie;var f:text; i:integer;beginassign(f,'date.in');rewrite(f);for i:=1 to 10 do begin read(a); write(f,a,' '); end;close(f);end;function maxim:integer;var g:text; max,i,a:integer;beginassign(g,'date.in');reset(g);read(g,max);b[1]:=max;for i:=2 to 10 do begin read(g,a);b[i]:=a; if a>=max then max:=a; end;close(g);maxim:=max;end;function nrprime:integer;var k,i,j,nrdiv,nr:integer; ok,aux:integer;g:text;beginassign(g,'date.in');reset(g);

Varianta C#include <fstream.h>#include <stdlib.h>int a,b[10];void scrie(){ofstream f("date.in");int i;for(i=1;i<=10;i++)

{ cin>>a;

f<<a<<" "; }

f.close();

}int maxim(){int max,i,a;

ifstream g("date.in");g>>max;b[1]=max;for(i=2;i<=10;i++) { g>>a; b[i]=a; if (a>max) max=a; }g.close();return max;}int nrprime(){int k,i,j,nrdv,nr;ifstream g("date.in");nr=0;for(i=1;i<=10;i++)

nr:=0;for i:=1 to 10 do begin read(g,k); nrdiv:=0; for j:=1 to k do if k mod j = 0 then nrdiv:=nrdiv+1; if nrdiv=2 then nr:=nr+1; end;close(g); nrprime:=nr;end;beginassign(h,'date.out');rewrite(h);{ a) }scrie;{ b) }writeln('elementul maxim este ',maxim);{ c) }writeln('in fisier sunt ', nrprime,' numere prime ');{ d) }ok:=1;while ok=1 do begin ok:=0; for i:=1 to 10 do if b[i]>b[i+1] then begin ok:=1; aux:=b[i]; b[i]:=b[i+1]; b[i+1]:=aux; end; end;for i:=1 to 10 do write(h,b[i],' ');close(h);end.

{g>>k; nrdv=0;

for(j=1;j<=k;j++) if (k%j==0)

nrdv=nrdv+1;if (nrdv==2) nr=nr+1;}

g.close();

return nr;}void main(){ofstream h("date.out");// a)scrie();// b)cout<<endl<<maxim();

// c)cout<<endl<<nrprime();

// d)int ok=1,i,aux;while(ok==1) { ok=0; for(i=1;i<10;i++) if(b[i]>b[i+1]) { ok=1; aux=b[i]; b[i]=b[i+1]; b[i+1]=aux; } }for(i=1;i<=10;i++) h<<b[i]<<" ";

h.close();}

Subiectul nr.3

Se citeşte de la tastatură un şir de 10 numere întregi mai mici decât 100.a) Să se creeze fişierul text date.in care să conţină pe o linie cele 10 valori, separate prin spaţiu;b) Să se scrie un subprogram care să returneze suma cifrelor elementelor pare din fişierul date.in;c) Să se scrie un subprogram care să determine numărul elementelor pătrate perfecte din fişierul

date.in;d) Scrieţi în fişierul text date.out şirul dat, ordonat decrescător.

Exemplu:

Date de intrare :37 23 4 77 12 34 5 90 18 19

Date de ieşire :a) Fişierul text date.in conţine pe o linie: 37 23 4 77 12 34 5 90 18 19b) Suma cifrelor elementelor pare din fişierul date.in este: 32c) Între elementele din fişierul date.in este un pătrat perfectd) Fişierul text date.out conţine pe o linie: 90 77 37 34 23 19 18 12 5 4

Rezolvare   : cele 10 numere se citesc in programul principal si se depun in fisierul date.in ; in acelasi timp

sunt depuse in vectorul a ; suma cifrelor elementelor pare din vectorul a se calculeaza in subprogramul maxim ,care

returneaza rezultatul in programul principal unde se afiseaza pe monitor ; in subprogramul pp se calculeaza cate elemente din vectorul a sunt patrate perfecte, iar

rezultatul se returneaza programului principal unde se afiseza pe monitor ; in programul principal se ordoneaza vectorul a si se depune sortat in fisierul date.out.

Varianta PASCALvar f,g:text; a:array[1..10] of integer; i,ok,aux:integer;function maxim:integer;var i,k,sum:integer;beginsum:=0;for i:=1 to 10 do if a[i] mod 2 =0 then begin k:=a[i]; while k<>0 do begin sum:=sum+k mod 10; k:=k div 10; end; end;maxim:=sum;end;function pp:integer;var k,i,b,nr:integer;beginnr:=0;for i:=1 to 10 do begin b:=a[i]; for k:=1 to b-1 do if k*k=b then inc(nr); end;pp:=nr;

Varianta C#include <fstream.h>#include <stdlib.h>int a[10];int maxim(){int i,k,sum=0;

for (i=1;i<=10;i++)if (a[i]%2==0) {

k=a[i]; while (k!=0)

{sum+=k%10;k/=10; }

}return sum;}int pp(){int k,i,b,nr=0;

for (i=1;i<=10;i++){

b=a[i]; for (k=1;k<b-1;k++)

if ( k*k==b ) nr+=1; }

end;beginassign (f,'date.in');rewrite(f);assign (g,'date.out');rewrite(g);

{ a) }for i:=1 to 10 do read(a[i]);for i:=1 to 10 do write(f,a[i],' ');close(f); writeln;{ b) }writeln(' suma cifrelor ', maxim);{ c) }writeln(' numarul de patrate perfecte ',pp);{ d) }ok:=1;while ok=1 do begin ok:=0; for i:=1 to 9 do if a[i]<a[i+1] then begin ok:=1;aux:=a[i]; a[i]:=a[i+1]; a[i+1]:=aux; end; end;for i:=1 to 10 do write(g,a[i],' ');close(g);end.

return nr;}void main() {fstream f("date.in",ios::out);fstream g("date.out",ios::out);int i,ok=1,aux;// a)for(i=1;i<=10;i++) cin>>a[i];for(i=1;i<=10;i++) f<<a[i]<<" ";

// b)cout<<endl<<" suma cifrelor "<<maxim();// c)cout<<endl<<" numarul de patrate perfecte "<<pp();// d)

while(ok==1) { ok=0;for(i=1;i<10;i++) if(a[i]<a[i+1])

{ok=1; aux=a[i]; a[i]=a[i+1]; a[i+1]=aux;} }

for(i=1;i<=10;i++) g<<a[i]<<" ";

f.close(); g.close();}

Subiectul nr.4

Se citeşte de la tastatură un şir de 10 numere întregi mai mici decât 100.a) Să se creeze fişierul text date.in care să conţină pe o linie cele 10 valori, separate prin spaţiu;b) Să se scrie un subprogram care să determine suma elementelor impare conţinute de fişierul

date.in;c) Să se scrie un subprogram care să returneze câte elemente din fişierul date.in sunt numere de

tip palindrom cu cel putin două cifre (palindrom este un număr de cel puţin două cifre care citit de la dreapta la stânga este identic cu numărul citit de la stânga la dreapta);

d) Scrieţi în fişierul text date.out şirul dat, ordonat descrescător.

Exemplu:Date de intrare:

37 23 4 77 12 34 5 90 18 19

Date de ieşire:

a) Fişierul text date.in conţine pe o linie: 37 23 4 77 12 34 5 90 18 19b) Suma elementelor impare conţinute de fişierul date.in este:161 c) În fişier este un numar de tip palindrom cu cel putin două cifred) Fişierul text date.out conţine pe o linie: 90 77 37 34 23 19 18 12 5 4

Rezolvare: in programul principal se citesc datele de la tastatura si se depun in fisierul date.in ; datele din fisierul date.in se citesc in programul principal si se depun in vectorul v ; se calculeaza suma elementelor impare din vectorul v in subprogramul suma si se returneaza

programului principal unde se afiseaza pe monitor ; in subprogramul palindrom se determina numarul de elemente palindrom existente in

vectorul v si rezultatul se returneaza programului principal unde se afieaza pe monitor ; se sorteaza elementele vectorului v in programul principal si se memoreaza in fisierul

date.out.Varianta PASCALtype vect=array[1..10] of integer;var i,n,l,r,a:integer; v:vect; f,g:text;function suma (a:vect;k:integer):integer;var j,s:integer;begins:=0;for j:=1 to k do if a[j] mod 2<>0 then s:=s+a[j];suma:=s;end;function palindrom (a:vect;k:integer):integer;var j,nr,c,p:integer;beginc:=0;for j:=1 to k do begin nr:=0; p:=0; if a[j]>9 then begin nr:=a[j]; while nr<>0 do begin p:=p*10 + nr mod 10; nr:=nr div 10; end; end; if p=a[j] then inc(c); end;palindrom:=c;

Varianta C#include <fstream.h>#include <stdlib.h>int i,n,v[10],l=10,r,a;fstream f("date.in",ios::out);fstream g("date.in",ios::in);fstream h("date.out",ios::out);int suma(int a[100],int k){

int j,s=0; for (j=1;j<=k;j++) if ((a[j]%2)!=0) s=s+a[j]; return s;}int palindrome (int a[100],int k){int j,nr,c=0,p;

for (j=1;j<=k;j++) { nr=0;p=0;

if (a[j]>9) { nr=a[j];

while (nr!=0) {

p=p*10+nr%10; nr=nr/10;}

} if (p==a[j]) c++; } return c;

end;

begin{ a) }assign (f,'date.in');rewrite(f);for i:=1 to 10 do begin read(a); write(f,a,' '); end;close(f);reset(f);{ b) }for i:=1 to 10 do read(g,v[i]);close(g);writeln;writeln(' suma este ',suma(v,10));{ c) }writeln(' numere palindrom in fisier ',palindrom(v,10));{d}for i:=1 to 9 do for r:=i+1 to 10 do if v[i]<v[r] then begin l:=v[i]; v[i]:=v[r]; v[r]:=l; end;assign (g,'date.out');rewrite(g);for i:=1 to 10 do write(g,v[i],' ');close(g);end.

} void main() { // a) for (i=1;i<=10;i++)

{ cin>>a;

f<<a<<" "; }

f.close(); // b) for (i=1;i<=10;i++) g>>v[i]; g.close();

cout<<endl<<" "<<suma(v,l);

// c) cout<<endl<<" "<<palindrom(v,l); // d) for (i=1;i<=9;i++) for (r=i+1;r<=10;r++) if (v[i]<v[r]) { l=v[i];

v[i]=v[r]; v[r]=l;

}for (i=1;i<=10;i++) h<<v[i]<<' ';

h.close(); }

Subiectul nr.5

Se citeşte de la tastatură un şir de 10 numere întregi mai mici decât 100.a. Să se creeze fişierul text date.in care să conţină pe o linie cele 10 valori, separate prin

spaţiu;b. Să se scrie un subprogram care să returneze suma elementelor pare de pe pozitiile

impare din fişierul date.in;c. Să se scrie un subprogram care să determine numărul elementelor prime conţinute de

fişierul date.in;d. Scrieţi în fişierul text date.out şirul dat, ordonat crescător.

Exemplu:

Date de intrare :7 23 4 17 12 34 5 90 8 9

Date de ieşire:a) Fişierul text date.in conţine pe o linie: 7 23 4 17 12 34 5 90 8 9b) Suma elementelor pare de pe pozitiile impare din fişierul date.in este: 24c) În fişier sunt 4 numere primed) Fişierul text date.out conţine pe o linie: 4 5 7 8 9 12 17 23 34 90

Rezolvare   : in programul principal se citesc datele de la tastatura si se depun in fisierul date.in si in

vectorul v ; suma elementelor pare de pe pozitii impare se calculeaza in subprogramul b si se afiseaza in

programul principal pe monitor ; in subprogramul c se determina numarul de elemente prime si in programul principal se

afieaza pe monitor ; in programul principal se sorteaza vectorul v si elementele sortate se depun in fisierul

date.out.Varianta PASCAL

var v:array[1..12] of integer; f,g:text; i,j,aux:integer;

function b:integer;var s,i:integer; j,aux:integer;begins:=0;i:=1;while i<=10 do begin if v[i] mod 2 =0 then begin s:=s+v[i]; i:=i+2; end;b:=s; end;function c:integer;var i,j,ok,p:integer;beginp:=0;for i:=1 to 10 do begin ok:=1; for j:=2 to trunc(sqrt(v[i])) do if v[i] mod j =0 then ok:=0; if ok<>0 then inc(p); end;c:=p;end;begin

Varianta C#include<fstream.h>#include <math.h>fstream f("date.in",ios::out);fstream g("date.out",ios::out);int v[12];int b (){int s=0, i;

for (i = 1;i<= 10;i+=2)

if (v[i] % 2 == 0) s = s + v[i];return s;}int c (){int i, j, ok = 1, p = 0;

for (i = 1; i <= 10; i++){

ok = 1;for(j=2;j<=sqrt(v[i]); j++) if (v[i] % j == 0)

ok = 0;if (ok) p++;}

return p;}void main()

assign (f,'date.in');rewrite(f);{ a) }for i:=1 to 10 do begin read(v[i]);write(f,v[i],' '); end;close(f);{ b) }writeln;writeln(' suma este ',b);{ c) }writeln(' numere prime in fisier ',c);{ d) }assign (g,'date.out');rewrite(g);for i:=1 to 9 do for j:=i+1 to 10 do if v[i]>v[j] then begin aux:=v[i]; v[i]:=v[j]; v[j]:=aux; end;for i:=1 to 10 do write(g,v[i],' ');close(g);end.

{int i, j, aux;// a)for (i=1;i<=10;i++)

{cin>>v[i];f<<v[i]<<" ";}

f.close();

cout<<endl<<b();

cout<<endl<<c();

// d)for (i = 1; i < 10; i++) for (j = i + 1; j <=10; j++)

if (v[i] > v[j]) { aux = v[i]; v[i] = v[j]; v[j] = aux; }

for (i=1;i<=10;i++) g<<v[i]<<' ';

}Subiectul nr.6

Se citeşte de la tastatură un şir de 10 numere întregi mai mici decât 100.a. Să se creeze fişierul text date.in care să conţină pe o linie cele 10 valori, separate prin

spaţiu;b. Să se scrie un subprogram care să determine suma elementelor impare aflate pe

poziţiile pare conţinute de fişierul date.in;c. Să se scrie un subprogram care să returneze un mesaj prin care să se comunice dacă

un element x citit de la tastatură există sau nu în şirul din fişierul date.in;d. Scrieţi în fişierul text date.out şirul dat, ordonat crescător.

Exemplu:Date de intrare:

17 23 45 67 12 34 5 90 8 9

Date de ieşire :a) Fişierul text date.in conţine pe o linie: 17 23 45 67 12 34 5 90 8 b) Suma elementelor impare aflate pe poziţiile pare conţinute de fişierul date.in este: 99c) Pentru x = 99 se va afişa: „elementul nu este în fişier”d) Fişierul text date.out conţine pe o linie: 5 8 9 12 17 23 34 45 67 90

Rezolvare   : in programul principal se citesc datele de la tastatura si se depun in fisierul date.in ;

se citeste fisierul date.in si se depun elementele sale in vectorul v ;suma elementelor impare de pe pozitii pare se calculeaza in subprogramul b si se afiseaza in programul principal pe monitor ;

se citeste elementul x in programul principal si in subprogramul c se verifica daca acest element este in vector sau nu si se afiseaza in programul principal un mesaj corespunzator ;

in programul principal se sorteaza vectorul v si elementele sortate se depun in fisierul date.out.

Varianta PASCAL

var v:array[1..10] of integer;

r,x,i,l,a:integer;

f,g,h:text;

function b:integer;var s,i:integer;begins:=0;i:=2;while i<=10 do begin if v[i] mod 2 <> 0 then s:=s+v[i]; i:=i+2; end;b:=s;end;function c (var x:integer):boolean;var i:integer;p:boolean;beginp:=false;for i:=1 to 10 do if v[i]=x then p:=true;c:=p;end;begin{ a) }assign (f,'date.in');rewrite(f);for i:=1 to 10 do begin read(a); write(f,a,' '); end;close(f);{ b) }assign (g,'date.out');reset(g);for i:=1 to 10 do read(g,v[i]);

Varianta C

#include <fstream.h>#include <stdlib.h>fstream f("date.in",ios::out);fstream g("date.in",ios::in);fstream h("date.out",ios::out);int v[12],r,x,i,l,a;int b (){int s=0, i;

for (i = 2;i<= 10;i+=2)

if (v[i] % 2 != 0) s = s + v[i];return s;

}int c (int &x){int i, p=0;

for(i=1;i<=10;i++)if (v[i]==x) p=1;

return p;} void main() // a) { for (i=1;i<=10;i++)

{ cin>>a;

f<<a<<" "; } f.close(); // b) for (i=1;i<=10;i++) g>>v[i];

close(g);writeln;writeln(' suma elementelor ',b);{ c) }writeln(' elementul cautat '); readln(x);if c(x) then writeln(' elementul este in sir ') else writeln(' elementul nu este in sir ');{d)}for i:=1 to 9 do for r:=i+1 to 10 do if v[i]>v[r] then begin l:=v[i]; v[i]:=v[r]; v[r]:=l; end;assign (h,'date.out');rewrite(h);for i:=1 to 10 do write(h,v[i],' ');close(h);end.

g.close(); cout<<endl<<"suma elementelor "<<b(); // c) cout<<endl<<"dati elementul cautat ";cin>>x; if(c(x) == 1) cout<<endl<<" elementul este in sir ";

else cout<<endl<<" elementul nu este in sir ";// d)for (i=1;i<=9;i++) for (r=i+1;r<=10;r++) if (v[i]>v[r])

{ l=v[i];

v[i]=v[r]; v[r]=l;};

for (i=1;i<=10;i++) h<<v[i]<<' ';h.close(); }

Subiectul nr.7

Se citeşte de la tastatură un şir de 10 numere întregi mai mici decât 100.a. Să se creeze fişierul text date.in care să conţină patru linii. Fiecare linie afişată conţine

elementele unei linii din matrice, separate prin spaţii;b. Să se scrie un subprogram care să returneze elementul maxim de pe diagonala

principală a matricei din fişierul date.in;c. Să se scrie un subprogram care să determine numarul elementelor de tip palindrom

conţinute de fişierul date.in (palindrom este un număr de cel puţin două cifre care citit de la dreapta la stânga este identic cu numărul citit de la stânga la dreapta);

d. Scrieţi în fişierul text date.out elementele de pe linia a doua din matricea de mai sus, ordonate crescător.

Exemplu:Date de intrare:

13 2 3 66 55 4 3 22 2 3 4 5 1 2 1 17

Date de ieşire :a) Fişierul text date.in conţine matricea:

13 2 3 6655 4 3 222 3 4 51 2 1 17b) Elementul maxim de pe diagonala principală a matricei din fişierul date.in este:17

c) Există 3 elemente de tip palindrom. d) Fişierul date.out conţine pe o linie: 3 4 22 55

Rezolvare: in programul principal se citesc datele de la tastatura si se depun in fisierul date.in, sub forma

unui tablou bidimensional ; in subprogramul palindrom se verifica daca exista elemente palindrom in matrice si in caz

afirmativ cate sunt ; numarul elementelor palindrom se transmite programului principal si se afiseaza ;

in subprogramul maxim se cauta elementul maxim al tabloului situat ,pe diagonala principala ,si se transmite programului principal unde se afiseaza ;

in programul principal se ordoneaza elementele de pe linia a doua a tabloului si noul tablou se depune in fisierul date.out.

Varianta PASCALtype matr=array[1..50,1..50] of integer;var a:matr; i,j,k,elem:integer; f,h:text;function palindrom(a:matr; k:integer):integer;var i,j,nr,c,p:integer;beginc:=0;for i:=1 to k do for j:=1 to k do begin nr:=0; p:=0; if a[i][j]>9 then begin nr:=a[i][j]; while nr<>0 do begin p:=p*10 + nr mod 10; nr:=nr div 10; end; end; if p=a[i][j] then inc(c); end;palindrom:=c;end;function maxim (a:matr; k:integer):integer;var max:integer;beginmax:=a[1][1];for i:=1 to k do if a[i][i]>max then max:=a[i][i];maxim:=max;end;begin

Varianta C#include <fstream.h>#include <stdlib.h>fstream f("date.in",ios::out);fstream h("date.out",ios::out);int a[50][50],i,j,k,elem;intpalindrom(int a[50][50],int k){int i,j,nr,c=0,p;

for(i=1;i<=k;i++) for (j=1;j<=k;j++) { nr=0;p=0;

if (a[i][j]>9) { nr=a[i][j];

while (nr!=0) {

p=p*10+nr%10; nr=nr/10;}

} if (p==a[i][j]) c++; }

return c; }

int maxim(int a[50][50],int k){int max=a[1][1],i;

for(i=1;i<=k;i++)

if(a[i][i]>max) max=a[i][i];return max;

write('dati dimensiunile matricii ');readln(k);{ a) }assign (f,'date.in');rewrite(f);for i:=1 to k do begin for j:=1 to k do begin read(a[i][j]); write(f,a[i][j],' '); end; writeln(f,' '); end;close(f);{ b) }writeln;writeln('elementul maxim de pe diagonala principala ',maxim(a,k));{ c) }writeln(' exista ',palindrom(a,k),' elemente de tip palindrom ');

{ d) }for i:=1 to k do for j:=i+1 to k do if a[2][i]>a[2][j] then begin elem:=a[2][i]; a[2][i]:=a[2][j]; a[2][j]:=elem; end;assign (h,'date.out');rewrite(h);for i:=1 to k do write(h,a[2][i],' ');close(h);end.

}void main(){cout<<" dati dimensiunile matricii ";cin >>k;// a)

for (i=1;i<=k;i++){

for(j=1;j<=k;j++){

cin>>a[i][j]; f<<a[i][j]<<" "; }

f<<" "; }cout<<endl;// b)cout<<" Elementul maxim pe diagonala principala "<<maxim(a,k);

// c)cout<<endl<<"Exista "<<palindrom(a,k)<<" elemente de tip palindrom";// d)for(i=1;i<=k;i++) for (j=i+1;j<=k;j++) if (a[2][i]>a[2][j])

{ elem=a[2][i];

a[2][i]=a[2][j]; a[2][j]=elem;

}for (i=1;i<=k;i++)

h<<a[2][i]<<" ";h<<endl;

}

Subiectul nr.8

Se citeşte de la tastatură un şir de 16 numere întregi mai mici decât 100.a) Să se creeze fişierul text date.in care să conţină patru linii. Fiecare linie afişată conţine

elementele unei linii dintr-o matrice 4x4, separate prin spaţii;b) Să se scrie un subprogram care să returneze elementul maxim de pe diagonala

secundară a matricei din fişierul date.in;

c) Să se scrie un subprogram care să determine numărul elementelor super prime conţinute de fişierul date.in (un număr este superprim dacă este prim atât el cât şi răsturnatul lui);

d) Scrieţi în fişierul text date.out elementele de pe linia a treia din matricea de mai sus, ordonate crescător.

Exemplu:Date de intrare:

13 2 3 66 55 4 3 22 2 3 4 5 1 2 1 17

Date de ieşire :a) Fişierul text date.in conţine matricea:

13 2 3 6655 4 3 222 3 4 51 2 1 17

b) Elementul maxim de pe diagonala secundară a matricei din fişierul date.in este: 66c) Există 2 numere superprime.d) Fişierul date.out conţine pe o linie: 2 3 4 5

Rezolvare: in programul principal se citesc datele de la tastatura si se depun in fisierul date.in, sub forma

unui tablou bidimensional ; se citeste fisierul date.in si se depun elementele tabloului in variabila a de tip tablou

bidimensional ; in subprogramul maxim se cauta elementul maxim al tabloului situat ,pe diagonala

secundara ,si se transmite programului principal , unde se afiseaza ; in subprogramul superprime se verifica daca exista elemente super prime in matrice si in caz

afirmativ cate sunt ; numarul elementelor superprime se transmite programului principal si se afiseaza ;

in programul principal se ordoneaza elementele de pe linia a treia a tabloului si se depun in fisierul date.out.

Varianta PASCALtype matr=array[1..50,1..10] of integer;var a:matr; i,j,k,elem:integer; f,g,h:text;function maxim (a:matr;k:integer):integer;var max,i:integer;beginmax:=a[1][k];for i:=1 to k do if a[i][k-i+1]>max then max:=a[i][k-i+1];maxim:=max;end;

Varianta C#include <fstream.h>#include <stdlib.h>fstream f("date.in",ios::out);fstream g("date.in",ios::in);fstream h("date.out",ios::out);int a[50][50],i,j,k,elem;int maxim(int a[50][50],int k){int max=a[1][k],i;

for(i=1;i<=k;i++)if(a[i][k-i+1]>max)

max=a[i][k-i+1];return max;}

function superprim (a:matr;k:integer):integer;var i,j,nr,c,p,inv,m:integer;beginc:=0;for i:=1 to k do for j:=1 to k do if a[i][j]>9 then begin p:=0; for nr:=2 to a[i][j] div 2 do if a[i][j] mod nr =0 then inc(p); if p=0 then begin inv:=1; m:=a[i][j]; while m<>0 do begin inv:=inv*10 + m mod 10; m:=m div 10; end; p:=0; for nr:=2 to inv div 2 do if inv mod nr =0 then inc(p); if p=0 then inc(c); end; end;superprim:=c;end;begin{ a) }assign (f,'date.in');rewrite(f);for i:=1 to 4 do begin for j:=1 to 4 do begin read(elem); write(f,elem,' '); end; writeln(f,' '); end;close(f);{ b) }assign (g,'date.in'); reset(g);for i:=1 to 4 do for j:=1 to 4 do read(g,a[i][j]);close(g);writeln;

int superprim (int a[50][50],int k){int i,j,nr,c=0,p,inv,m;for(i=1;i<=k;i++) for (j=1;j<=k;j++) {

if (a[i][j] > 9) { p=0; for(nr=2;nr<(a[i][j]/2);nr++)

if (a[i][j]%nr==0) p++; if (p==0) { inv=1;

m=a[i][j];while(m!=0){

inv=inv*10+m%10;

m/=10; }

p=0; for(nr=2;nr<inv/2;nr++)

if (inv%nr==0) p++;if (p==0) {cout<<a[i][j];c++;}

} } }

return c; }void main()// a){for (i=1;i<=4;i++) { for (j=1;j<=4;j++)

{ cin>>elem;

f<<elem<<" "; } f<<endl;}f.close();// b)

for (i=1;i<=4;i++)

for (j=1;j<=4;j++) g>>a[i][j];g.close();cout<<" Elementul maxim

writeln(' elementul maxim ',maxim(a,4));{ c) }writeln(' numarul de elemente superprime ',superprim(a,4));{ d) }for i:=1 to 3 do for j:=i+1 to 4 do if a[3][i]>a[3][j] then begin elem:=a[3][i]; a[3][i]:=a[3][j]; a[3][j]:=elem; end;assign (h,'date.out');rewrite(h);for j:=1 to 4 do write(h,a[3][j],' ');close(h);end.

"<<maxim(a,4);

// c)cout<<" Numarul de elem superprime "<<superprim(a,4);// d)for (i=1;i<=3;i++)

for (j=i+1;j<=4;j++) if (a[3][i]>a[3][j])

{elem=a[3][i];a[3][i]=a[3][j];a[3][j]=elem;}

for(j=1;j<=4;j++) h<<a[3][j]<<" ";

h<<endl;h.close();}

Subiectul nr.9

Se citeşte de la tastatură un şir de 10 numere întregi mai mici decât 100.a) Să se creeze fişierul text date.in care să conţină pe o linie cele 10 valori, separate prin

spaţiu;b) Să se scrie un subprogram care să returneze suma cifrelor elementului maxim din

fişierul date.in;c) Să se scrie un subprogram care să determine numărul elementelor prime conţinute de

fişierul date.in;d) Scrieţi în fişierul text date.out şirul dat, ordonat crescător.

Exemplu:Date de intrare :

37 23 4 77 12 34 5 90 18 19

Date de ieşire:a) Fişierul text date.in conţine pe o linie: 37 23 4 77 12 34 5 90 18 19b) Suma cifrelor elementului maxim din fişierul date.in este: 9c) Numărul elementelor prime conţinute de fişierul date.in : 4d) Fişierul text date.out conţine pe o linie: 4 5 12 18 19 23 34 37 77 90

Rezolvare   : in programul principal se citesc datele de la tastatura si se depun in fisierul date.in ; se citeste fisierul date.in si se depun elementele intr-un vector ; in subprogramul maxim se

cauta elementul maxim din vector si se determina suma cifrelor sale ; in subprogramul prime se determina numarul elementelor prime din fisier si rezultatul este

returnat programului principal ; in programul principal se ordoneaza elementele si se depun in fisierul date.out.

Varianta PASCALtype vect=array[1..10]of integer;var a:vect; f,g:text; b,i,ok,aux:integer;function maxim (a:vect;k:integer):integer;var i,max,s:integer;beginmax:=a[1]; s:=0;for i:=2 to k do if max<a[i] then max:=a[i];i:=max;while i<>0 do begin s:=s+i mod 10; i:=i div 10; end;maxim:=s;end;function prime (a:vect;k:integer):integer;var i,p,l,j:integer;beginp:=0;for i:=1 to k do begin l:=1; for j:=2 to a[i] div 2 do if a[i] mod j =0 then l:=0; if l=1 then inc(p); end;prime:=p;end;beginassign (f,'date.in'); rewrite(f);{ a) }for i:=1 to 10 do begin read(b); write(f,b,' '); end;close(f);{ b) }reset(f);for i:=1 to 10 do read(f,a[i]); writeln;writeln(' suma cifrelor ',maxim(a,10));{ c) }

Varianta C#include <fstream.h>#include <stdlib.h>int a[10],b;int maxim(int a[50],int k){int i,max=a[1],s=0;

for (i=2;i<=k;i++)if (max<a[i]) max=a[i];

i=max;while (i!=0){ s+=i%10;

i/=10;}return s;}int prime(int a[50],int k){int i,p=0,l,j;for (i=1;i<=k;i++)

{ l=1;

for(j=2;j<=(a[i]/2);j++) if(a[i]%j==0) l=0;if (l==1) p++;}

return p;}void main() {fstream f("date.in",ios::out);fstream g("date.in",ios::in);fstream h("date.out",ios::out);int i,ok=1,aux;// a)for(i=1;i<=10;i++) { cin>>b;

f<<b<<" "; }f.close();// b)

for(i=1;i<=10;i++) g>>a[i];

cout<<endl<<" suma cifrelor "<<maxim(a,10);// c)

writeln(' numarul elementelor prime ',prime(a,10));

{ d) }ok:=1;while ok=1 do begin ok:=0; for i:=1 to 10 do if a[i]>a[i+1] then begin ok:=1; aux:=a[i]; a[i]:=a[i+1]; a[i+1]:=aux; end; end;assign (g,'date.out');rewrite(g);for i:=1 to 10 do write(g,a[i],' ');close(g);end.

cout<<endl<<"numarul elementelor prime "<<prime(a,10);// d)while(ok==1) { ok=0; for(i=1;i<10;i++)

if(a[i]>a[i+1]) {

ok=1;aux=a[i]; a[i]=a[i+1];

a[i+1]=aux;}

}

for(i=1;i<=10;i++) h<<a[i]<<" ";

f.close();g.close();h.close();}

Subiectul nr.10

Se citeşte de la tastatură un şir de 10 numere întregi mai mici decât 100.a) Să se creeze fişierul text date.in care să conţină pe o linie cele 10 valori, separate prin

spaţiu;b) Să se scrie un subprogram care să returneze numărul de elemente din fişierul date.in

care au ultima cifră egală cu 3;c) Să se scrie un subprogram care să determine numărul elementelor conţinute de fişierul

date.in care au suma cifrelor număr par;d) Scrieţi în fişierul text date.out şirul dat, ordonat descrescător.

Exemplu:Date de intrare :

17 23 45 67 12 34 3 90 8 9

Date de ieşire:a) Fişierul text date.in conţine pe o linie: 17 23 45 67 12 34 3 90 8 9b) Numărul de elemente din fişierul date.in care au ultima cifră egală cu 3: 2c) Numărul elementelor conţinute de fişierul date.in care au suma cifrelor număr par: 2d) Fişierul text date.out conţine pe o linie: 90 77 37 34 23 19 18 12 5 4

Rezolvare: in programul principal se citesc datele de la tastatura si se depun in fisierul date.in ; se citeste fisierul date.in si se depun elementele intr-un vector ; in subprogramul nrtrei se

calculeaza cate elemente din fisier au ultima cifra trei ; rezultatul este transmis in programul principal si afisat ;

in subprogramul cifre se calculeaza suma cifrelor elementelor din fisier si daca aceasta suma este para se incrementeaza variabila nr ; in programul principal se transmite acest numar si se afiseaza pe monitor ;

tot in programul principal se ordoneaza elementele sirului dat si se scriu in fisierul date.out.

Varianta PASCALtype vect=array[1..10] of integer;var a:vect; f,g:text; b,i,ok,aux:integer;function nrtrei (a:vect; k:integer):integer;var i,trei:integer;begintrei:=0;for i:=1 to k do if a[i] mod 10 = 3 then inc(trei);nrtrei:=trei;end;function cifre (a:vect; k:integer):integer;var i,s,nr,p:integer;beginnr:=0;for i:=1 to k do begin s:=0; p:=a[i]; while p<>0 do begin s:=s+p mod 10; p:=p div 10; end; if s mod 2 =0 then inc(nr); end;cifre:=nr;end;beginassign (f,'date.in');rewrite(f);{ a) }for i:=1 to 10 do begin read(b); write(f,b,' '); end;close(f);{ b) }reset(f);for i:=1 to 10 do read(f,a[i]);close(f);writeln;

Varianta C#include <fstream.h>#include <stdlib.h>int a[10],b;

int nrtrei(int a[50],int k){int i,trei=0;

for (i=1;i<=k;i++)

if (a[i]%10==3) trei++;return trei;}

int cifre(int a[50], int k){int i,s,nr=0,p;

for (i=1;i<=k; i++){

s=0;p=a[i]; while(p!=0) {s+=p%10;

p/=10; }

if(s%2==0) nr++; }

return nr;}void main() {fstream f("date.in",ios::out);fstream g("date.in",ios::in);fstream h("date.out",ios::out);int i,ok=1,aux;// a)for(i=1;i<=10;i++) {cin>>b;

f<<b<<" ";}

f.close();// b)for(i=1;i<=10;i++) g>>a[i];

cout<<endl;

writeln(' numarul de elemente care se termina cu trei ',nrtrei(a,10));{ c) }writeln;writeln(' numarul de elemente cu suma cifrelor para ',cifre(a,10));{ d) }assign (g,'date.out');rewrite(g); ok:=1;while ok=1 do begin ok:=0; for i:=1 to 10 do if a[i]<a[i+1] then begin ok:=1; aux:=a[i]; a[i]:=a[i+1]; a[i+1]:=aux; end; end;for i:=1 to 10 do write(g,a[i],' ');close(g);end.

cout<< "numarul de elemente care se termina cu trei ";cout<<nrtrei(a,10);// c)cout<<endl;cout<<" numarul de elemente care au suma cifrelor para ";cout<<cifre(a,10);// d)while(ok==1) {

ok=0; for(i=1;i<10;i++)

if(a[i]<a[i+1]) { ok=1;aux=a[i]; a[i]=a[i+1];

a[i+1]=aux;}

}

for(i=1;i<=10;i++) h<<a[i]<<" ";

f.close(); g.close();h.close();}

Subiectul nr.11

Se citeşte de la tastatură un şir de 10 numere întregi mai mici decât 100.a) Să se creeze fişierul text date.in care să conţină pe o linie cele 10 valori, separate prin

spaţiu;b) Să se scrie un subprogram care să returneze suma cifrelor pare ale numerelor din

fişierul date.in;c) Să se scrie un subprogram care să determine numărul elementelor prime de două cifre

conţinute de fişierul date.in;d) Scrieţi în fişierul text date.out şirul dat, ordonat crescător.

Exemplu:Date de intrare :

7 23 4 17 12 34 5 90 8 9

Date de ieşire :a) Fişierul text date.in conţine pe o linie: 7 23 4 17 12 34 5 90 8 9b) Suma cifrelor pare ale numerelor din fişierul date.in este: 20c) În fişier sunt 2 numere prime de două cifre

d) Fişierul text date.out conţine pe o linie: 4 5 7 8 9 12 17 23 34 90

Rezolvare   : in programul principal se citesc datele de la tastatura si se depun in fisierul date.in ; se citeste fisierul date.in si se memoreaza elementele sale intr-un vector a ; in subprogramul suma se calculeaza suma cifrelor pare ale elementelor pare din vectorul a ;

rezultatul se transmite programului principal si se afiseaza ; in subprogramul nrprime se determina numarul elementelor prime de doua cifre din fisier ; sirul de numere date in fisierul date.in se ordoneaza si se depune in fisierul date.out.

Varianta PASCALtype vect=array[1..10] of integer;var a:vect; b,i,ok,aux:integer; f,g:text;function suma (a:vect; k:integer):integer;var i,s,m,nr:integer;begins:=0;for i:=1 to k do begin nr:=a[i]; while nr<>0 do begin m:=nr mod 10; if m mod 2 = 0 then s:=s+m; nr:=nr div 10; end; end;suma:=s;end;function nrprime (a:vect; k:integer):integer;var i,j,nr,p:integer;beginnr:=0;for i:=1 to k do if ((a[i]>9) and (a[i] < 1000)) then begin p:=1; for j:=2 to a[i] div 2 do if a[i] mod j = 0 then p:=0; if p=1 then inc(nr); end;nrprime:=nr;end;

Varianta C#include <fstream.h>#include <stdlib.h>int a[50],b;

int suma(int a[50],int k){int i,s=0,nr;

for (i=1;i<=k;i++){

nr=a[i];while (nr!=0)

{if ((nr%10)%2==0)

s+=nr%10;

nr/=10;}

return s;}int nrprime(int a[50],int k){int i,j,nr=0,p;for (i=1;i<=k;i++) if((a[i]>9)&&(a[i]<1000))

{ p=1;

for(j=2;j<=a[i]/2;j++) if (a[i]%j==0)

p=0;if (p==1) nr++;

}return nr;}void main() {fstream f("date.in",ios::out);

beginassign (f,'date.in');rewrite(f);{ a) }for i:=1 to 10 do begin read(b);write(f,b,' '); end;close(f);{ b) }reset(f);for i:=1 to 10 do read(f,a[i]);close(f);writeln;writeln(' suma cifrelor pare ',suma(a,10));{ c) }writeln(' numarul de elemente prime ',nrprime(a,10));

{ d) }assign (g,'date.out');rewrite(g); ok:=1;while ok=1 do begin ok:=0; for i:=1 to 9 do if a[i]>a[i+1] then begin ok:=1; aux:=a[i]; a[i]:=a[i+1]; a[i+1]:=aux; end; end;for i:=1 to 10 do write(g,a[i],' ');close(g);end.

fstream g("date.in",ios::in);fstream h("date.out",ios::out);int i,ok=1,aux;// a)for(i=1;i<=10;i++){cin>>b;

f<<b<<" ";}f.close();

// b)cout<<endl;cout<<" suma cifrelor pare ";

cout<<suma(a,10);

cout<<endl;// c)cout<<" numarul de elemente prime ";cout<<nrprime(a,10);// d)while(ok==1) { ok=0; for(i=1;i<10;i++)

if(a[i]>a[i+1])

{ ok=1;aux=a[i]; a[i]=a[i+1];

a[i+1]=aux;}

}for(i=1;i<=10;i++) h<<a[i]<<" ";f.close();g.close();h.close();}

Subiectul nr.12

Se citeşte de la tastatură un şir de 10 numere întregi mai mici decât 100.a) Să se creeze fişierul text date.in care să conţină pe o linie cele 10 valori, separate prin

spaţiu;b) Să se scrie un subprogram care să returneze elementele din fişierul date.in care aparţin

intervalului [a,b] unde a şi b sunt numere întregi mai mici decât 100 citite de la tastatură;

c) Să se scrie un subprogram care să determine cel mai mare număr prim din fişierul date.in;

d) Scrieţi în fişierul text date.out şirul dat, ordonat descrescător. Exemplu:Date de intrare :

37 23 4 77 12 34 5 90 18 19

Date de ieşire :a) Fişierul text date.in conţine pe o linie: 37 23 4 77 12 34 5 90 18 19b) Pentru intervalul [36, 80] elementele din fişierul date.in care aparţin intervalului sunt: 37 77 c) Cel mai mare număr prim din fişierul date.in este: 37d) Fişierul text date.out conţine pe o linie: 90 77 37 34 23 19 18 12 5 4

Rezolvare   : se citesc datele de la tastatura si se depun in fisierul date.in ; in subprogramul apartine se verifica elementele care apartin intervalului [a,b] si se afiseaza

cele aflate in interiorul intervalului ; datele din fisierul date.in se memoreaza in vectorul v care se utilizeaza apoi in rezolvarea

cerintelor problemei ; subprogramul maxprim determina cel mai mare numar prim si il returneaza programului

principal ; in programul principal se sorteaza elementele vectorului v si se depun in fisierul de iesire

date.out.Varianta PASCALvar f,g:text; p:boolean; i,nr,a,b,contor:integer; v:array[1..10] of integer; procedure creare;var i,nr:integer;beginassign(f,'date.in'); rewrite(f);for i:=1 to 10 do begin read(nr); write(f,nr,' ');end;close(f);end;procedure apartine;beginwrite('a= '); readln(a);write('b= '); readln(b);contor:=0;assign(f,'date.in');reset(f); read(f,nr);while not eof(f) do begin if(nr>=a)and (nr<=b) then begin inc(contor);v[contor]:=nr; end; read(f,nr);end;end;

Varianta C#include <fstream.h>

#include <stdlib.h>

int i,a,b,v[10],p,j,contor=0;

fstream f("date.in",ios::out);

fstream h("date.out",ios::out);

void apartine(int a,int b) {

for (i=1;i<=10;i++) {

if((v[i]>=a)&&(v[i]<=b))

cout<<v[i]<<" ";

}

}

function maxprim:integer;var nrdiv,maxp,j:integer;beginassign(f,'date.in'); reset(f);maxp:=0;read(f,nr);v[1]:=nr;j:=1;while not eof(f) do begin nrdiv:=0; for i:=1 to nr do if nr mod i=0 then inc(nrdiv); if nrdiv = 2 then if maxp<nr then maxp:=nr; read(f,nr);inc(j);v[j]:=nr; end;maxprim:=maxp;end;begin{a}creare;

{b}apartine;

for i:=1 to contor do write(' ',v[i]);{c}writeln; writeln(' ',maxprim);{d}assign (g,'date.out');rewrite(g); p:=true;while p do begin p:=false; for i:=1 to 9 do if v[i]<v[i+1] then begin p:=true;a:=v[i]; v[i]:=v[i+1]; v[i+1]:=a;end; end;for i:=1 to 10 do write(g,v[i],' ');close(g); end.

int maxprim(int v[10]){int i,j,maxp=0,nrdiv,nr;for(i=1;i<=10;i++) {

nr=v[i];nrdiv=0;for (j=1;j<=nr;j++) if(nr%j==0) nrdiv+=1;

if((nrdiv==2)&&(maxp<nr))

maxp=nr;

}

return maxp;

} void main() { // a)for(i=1;i<=10;i++){cin>>v[i];

f<<v[i]<<" ";}f.close();// b)cout<<endl<<"a= ";cin>>a;cout<<endl<<"b= ";cin>>b;apartine(a,b);cout<<endl;// c)cout<<endl<<" "<<maxprim(v);// d)for (i=1;i<=9;i++) for (j=i+1;j<=10;j++) if (v[i]<v[j]) { a=v[i];

v[i]=v[j]; v[j]=a;

}; for (i=1;i<=10;i++) h<<v[i]<<' ';

h.close(); }

Subiectul nr.13

Se citeşte de la tastatură un şir de 10 numere întregi mai mici decât 100.a) Să se creeze fişierul text date.in care să conţină pe o linie cele 10 valori, separate prin

spaţiu;b) Să se scrie un subprogram care să returneze suma cifrelor impare ale numerelor din

fişierul date.in;

c) Să se scrie un subprogram care să determine cel mai mare număr palindrom din fişierul date.in (număr palindrom este un şir de cel puţin două cifre care citit de la dreapta la stânga este identic cu numărul citit de la stânga la dreapta);

d) Scrieţi în fişierul text date.out şirul dat, ordonat crescător.

Exemplu:Date de intrare:

7 23 4 17 12 33 5 99 8 9

Date de ieşire:a) Fişierul text date.in conţine pe o linie: 7 23 4 17 12 33 5 99 8 9b) Suma cifrelor impare ale numerelor din fişierul date.in: 57c) Cel mai mare număr palindrom din fişierul date.in este: 99d) Fişierul text date.out conţine pe o linie: 4 5 7 8 9 12 17 33 34 99

Rezolvare: datele se citesc in programul principal si se depun in fisierul date.in ; din fisierul date.in se preiau si se depun in vectorul v ; suma cifrelor impare ale numerelor din fisier se calculeaza in subprogramul suma care

intoarce in programul principal rezultatul ;acesta se afiseaza pe monitor ; calculul celui mai mare palindrom se face in subprogramul maxpalin si rezultatul este

transmis programului principal unde se afiseaza pe monitor ; tot in programul principal se face si sortarea vectorului v, crescator, si apoi se memoreaza in

fisierul date.out.Varianta PASCALtype vect=array[1..10] of integer;

var f,g:text;v:vect;i,l,r,a:integer;

function suma(a:vect;k:integer):integer;var j,s,nr:integer;begin s:=0;for j:=1 to k do begin nr:=a[j]; while nr<>0 do begin if (nr mod 10) mod 2<>0 then s:=s+nr mod 10; nr:=nr div 10; end; end;suma:=s;end;function maxpalin(a:vect;k:integer):integer;var j,nr,maxp,p:integer;

Varianta C#include <fstream.h>#include <stdlib.h>int i,v[10],l,r,a;fstream f("date.in",ios::out);fstream g("date.in",ios::in);fstream h("date.out",ios::out);int suma(int a[10],int k){nt j,s=0,nr; for (j=1;j<=k;j++) {

nr=a[j];while (nr!=0)

{ if ((nr%10)%2!=0)

s+=nr%10;nr/=10;}

} return s;}int maxpalin(int a[10],int k){int j,nr,maxp=0,p;

beginmaxp:=0;for j:=1 to k do begin p:=0; if a[j]>9 then begin nr:=a[j]; while nr<>0 do begin p:=p*10 + nr mod 10; nr:=nr div 10; end; if(p=a[j])and(maxp<a[j]) then maxp:=a[j]; end; end;maxpalin:=maxp;end;begin{ a) }assign (f,'date.in');rewrite(f);for i:=1 to 10 do begin read(a);write(f,a,' '); end;close(f);reset(f);{ b) }for i:=1 to 10 do read(f,v[i]);close(f);writeln;writeln(' suma este ',suma(v,10));{ c) }writeln(' maxim palindrom in fisier ',maxpalin(v,10));{d}for i:=1 to 9 do for r:=i+1 to 10 do if v[i]>v[r] then begin l:=v[i];v[i]:=v[r]; v[r]:=l;end;assign (g,'date.out');rewrite(g);for i:=1 to 10 do write(g,v[i],' ');close(g);end.

for (j=1;j<=k;j++) { p=0;

if (a[j]>9){ nr=a[j];

while (nr!=0) {

p=p*10+nr%10;

nr=nr/10; } if ((p==a[j])&& (maxp<a[j]))

maxp=a[j]; } } return maxp; } void main() { // a) for (i=1;i<=10;i++)

{cin>>a;f<<a<<" ";}

f.close(); // b) for (i=1;i<=10;i++) g>>v[i]; g.close(); cout<<endl<<" "<<suma(v,10);

// c) cout<<endl<<" "<<maxpalin(v,10); // d) cout<<endl; for(i=1;i<=9;i++) { for (r=i+1;r<=10;r++) if (v[i]>v[r]){

l=v[i];v[i]=v[r];v[r]=l;}

}for (i=1;i<=10;i++) h<<v[i]<<" "; h.close();}

Subiectul Nr.16

Să se realizeze un program care să raspundă următoarelor solicitări. Să se creeze fişierul text date.in care să conţină un şir de 10 numere întregi aleatoare mai mici decât 100. Cerinţe :

a) Să se scrie un subprogram care să returneze câte dintre elementele din fişierul date.in au trei divizori;

b) Să se scrie un subprogram care să determine cel mai mare număr neprim din fişierul date.in;

c) Scrieţi în fişierul text date.out şirul de mai sus ordonat descrescător. Am folosit subprogramele:- CREARE: crează un fişier cu structura cerută de date – - AFIŞARE: citeşte datele din fişierul de intrare şi afişează pe ecran datele citite din fişier- NR_A: citeşte datele din fişierul de intrare şi calculează numărul de elemente din fişierul de intrare care au exact 3 divizori, număr pe care îl scrie pe ecran;- MAXIM: citeşte datele din fişierul de intrare, află cel mai mare număr neprim dintre datele citite şi il returnează pentru programul principal; dacă nu există numere neprime, atunci se returnează o valoare negativă; - SORTARE: citeşte datele din fişierul de intrare şi le sortează, după care le scrie în fişierul de ieşire.

Varianta PASCALuses crt;var a:array[1..20] of integer; f,g:text; procedure creare;var i:integer;begin assign(f,'date.in'); rewrite(f); randomize; for i:=1 to 10 do write(f,random(100),' '); close(f);end;

procedure afisare;var i:integer;begin reset(f); for i:=1 to 10 do begin read(f,a[i]); write(a[i],' '); end; writeln;end;

function nr_a:integer;var nr,d,i,x:integer; prim:boolean;beginreset(f);

Varianta C/C++#include <iostream.h>#include <conio.h>#include <math.h>#include <stdlib.h>#include <fstream.h>int a[20];

void creare(){ int i; ofstream f("date.in"); randomize(); for (i=1; i<=10; i++) f<<random(100)<<" "; f.close();}void afisare(){ int i; ifstream f("date.in"); for (i=1; i<=10; i++) { f>>a[i]; cout<<a[i]<<" "; } cout<<endl; f.close();}int nr_a(){ int nr,d,i,x,prim; ifstream f("date.in"); for (i=1; i<=10; i++)

for i:=1 to 10 do read(f,a[i]);close(f);nr:=0;for i:=1 to 10 do begin x:=trunc(sqrt(a[i])); if x*x=a[i] { daca a[i] este un patrat prefect } then begin { vad daca a[i] este patratul unui numar prim } prim:=true; for d:=2 to trunc(sqrt(x)) do if x mod d = 0 then begin prim:=false; break; end; if (x=0) or (x=1) then prim:=false; if prim then nr:=nr+1; end; end; nr_a:=nr;end;function maxim:integer;var max,i,d,x:integer; prim:boolean;begin reset(f); for i:=1 to 10 do read(f,a[i]); close(f); max:=-maxint; for i:=1 to 10 do begin prim:=true; for d:=2 to trunc(sqrt(a[i])) do if a[i] mod d = 0 then begin prim:=false; break; end; if (a[i]=0) or (a[i]=1) then prim:=false; if not prim then if a[i]>max then max:=a[i]; end; maxim:=max;end;procedure sortare;

f>>a[i]; f.close(); nr=0; for (i=1; i<=10; i++) { x=floor(sqrt(a[i])); if (x*x==a[i]) { prim=1; for (d=2; d<=floor (sqrt(x)); d++)

if (x % d == 0) { prim=0; break; }

if (x==0 || x==1) prim=0; if (prim)

nr++; } } f.close(); return nr;}

int maxim(){ int max,i,d,x,prim; ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); max=-32768; for (i=1; i<=10; i++) { prim=1; for (d=2; d<=floor(sqrt(a[i])); d++) if (a[i] % 2 == 0)

{ prim=0; break; } if (a[i]==0 || a[i]==1) prim=0; if (!prim) if (a[i]>max) max=a[i]; } f.close(); return max;}

void sortare(){

var i,j,x:integer;begin assign(g,'date.out'); rewrite(g); reset(f); for i:=1 to 10 do read(f,a[i]); close(f); for i:=1 to 9 do for j:=i+1 to 10 do if a[i]>a[j] then begin x:=a[i]; a[i]:=a[j]; a[j]:=x; end;for i:=1 to 10 do write(g,a[i],'');close(g);end;

beginclrscr; creare; write('Sirul generat: ');afisare;writeln('a) Sirul are ',nr_a,' elemente cu exact 3 div.’); if maxim>=0 then writeln(’b)’,maxim) else writeln('b) Nu sunt numere neprime in sirul generat'); sortare;end.

int i,j,x; ofstream g("date.out"); ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; for (i=1; i<=9; i++) for (j=i+1; j<=10; j++) if (a[i]>a[j]) { x=a[i]; a[i]=a[j]; a[j]=x; } for (i=1; i<=10; i++) g<<a[i]<< ” "; f.close(); g.close();}

void main(){ clrscr(); creare(); cout<<"Sirul generat: "; afisare();cout<<"a) Sirul are "<<nr_a() <<" elemente cu exact 3 divizori"<<endl;if (maxim()>=0) cout<<"b) ”<<maxim()<<endl;else cout<<"b) Nu sunt numere neprime in sirul generat"<<endl;sortare();}

Subiectul Nr.17

Să se realizeze un program care să raspundă următoarelor solicitări. Să se creeze fişierul text date.in care să conţina un şir de 10 numere întregi aleatoare mai mici decât 100. Cerinţe :

a) Să se scrie un subprogram care să returneze elementele din fişierul date.in care sunt divizibile cu o valoare x citită de la tastatură;

b) Să se scrie un subprogram care să insereze între ultimul şi penultimul element al şirului din fişierul date.in media aritmetică a lor;

c) Scrieţi in fişierul text date.out şirul de mai sus ordonat descrescător.

Observaţii- datele cerute la cerinţa a) au fost afişate pe ecran;- la punctul b), media aritmetică poate „ieşi” din Z şi de aceea, am lucrat cu un vector de numere reale

Am folosit subprogramele:- CREARE: crează structura cerută de date

- AFIŞARE: citeşte datele din fişierul de intrare şi le afişează pe ecran- DIVIZ: citeşte datele din fişierul de intrare, apoi citeşte o valoare x şi calculează numărul de elemente din şirul de intrare care se divid cu x- INSERARE: citeşte datele din fişierul de intrare şi realizează inserarea cerută- SORTARE: citeşte datele din fişierul de intrare şi le sortează, după care le scrie în fişierul de ieşire

uses crt;var a:array[1..20] of integer; f,g:text; procedure creare;var i:integer;begin assign(f,'date.in'); rewrite(f); randomize; for i:=1 to 10 do write(f,random(100),' '); close(f);end;

procedure afisare;var i:integer;begin reset(f); for i:=1 to 10 do begin read(f,a[i]); write(a[i],' '); end; writeln;end;

procedure inserare;var b:array[1..11] of real; i:integer;begin reset(f); for i:=1 to 10 do read(f,a[i]); for i:=1 to 9 do b[i]:=a[i]; b[11]:=a[10]; b[10]:=(a[9]+a[10])/2; for i:=1 to 11 do write(b[i]:0:1,' '); writeln;end;

procedure diviz;var i,k,x:integer;begin

#include <iostream.h>#include <conio.h>#include <math.h>#include <stdlib.h>#include <fstream.h>int a[20];

void creare(){int i;ofstream f("date.in"); randomize(); for (i=1; i<=10; i++) f<<random(100)<<" "; f.close();}

void afisare(){ int i; ifstream f("date.in"); for (i=1; i<=10; i++) { f>>a[i]; cout<<a[i]<<" "; } cout<<endl; f.close();}void inserare(){ int i; float b[12]; ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); for (i=1; i<=9; i++) b[i]=a[i]; b[10]=(a[9]+a[10])/2.0; b[11]=a[10]; cout<<"b) "; for(i=1; i<=11; i++) cout<<b[i]<<" "; cout<<endl;}void diviz(){ int i,k=0,x;

reset(f); k:=0; for i:=1 to 10 do read(f,a[i]); close(f); write(’a) x: ’); readln(x); for i:=1 to 10 do if a[i] mod x = 0 then begin k:=k+1; write(a[i],' '); end; if k=0 then write('Nu sunt asemenea numere in sir'); writeln;end;procedure sortare;var i,j,x:integer;begin assign(g,'date.out'); rewrite(g); reset(f); for i:=1 to 10 do read(f,a[i]);

for i:=1 to 9 do for j:=i+1 to 10 do if a[i]<a[j] then begin x:=a[i]; a[i]:=a[j]; a[j]:=x; end; for i:=1 to 10 do write(g,a[i],' ');end;

begin clrscr; creare; assign(f,'date.in'); write('Sirul generat: '); afisare; diviz; inserare; sortare; close(f); close(g);end.

ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); cout<<"a) x: "; cin>>x; for (i=1; i<=10; i++) if (a[i] % x == 0)

{ k++; cout<<a[i]<<" "; } if (k==0) cout<<"Nu sunt asemenea numere in sir"; cout<<endl;}

void sortare(){ int i,j,x; ofstream g("date.out"); ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i];

for (i=1; i<=9; i++) for (j=i+1; j<=10; j++)

if (a[i]<a[j]) { x=a[i]; a[i]=a[j];

a[j]=x; } for (i=1; i<=10; i++) g<<a[i]<<" "; f.close(); g.close();}void main(){ clrscr(); creare(); cout<<"Sirul generat: "; afisare(); diviz(); inserare(); sortare();}

Subiectul Nr.18

Să se realizeze un program care să raspundă următoarelor solicitări. Să se creeze fişierul text date.in care să conţină un şir de 10 numere întregi aleatoare mai mici decât 100. Cerinţe:

a) Să se scrie un subprogram care să returneze cel mai mare divizor comun al elementelor din fişierul date.in;

b) Să se scrie un subprogram care să insereze între primul şi al doilea element al şirului din fişierul date.in o valoare x citită de la tastatură;

c) Scrieţi în fişierul text date.out şirul de mai sus ordonat descrescător.

Am folosit subprogramele:- CREARE: creaz structura cerută de date- AFIŞARE: citeşte datele de intrare din fişierul de intrare şi le afişează pe ecran- CMMDC: citeşte datele din fişierul de intrare şi calculează cmmdc-ul elementelor din fişier (folosind algoritmul lui Euclid)- INSERARE: citeşte datele din fişierul de intrare şi realizează inserarea cerută;- SORTARE: citeşte datele din fişierul de intrare şi le sortează, după care le scrie în fisierul de ieşire

uses crt;var a:array[1..20] of integer; f,g:text;

procedure creare;var i:integer;begin assign(f,'date.in'); rewrite(f); randomize; for i:=1 to 10 do write(f,random(100),' '); close(f);end;

procedure afisare;var i:integer;begin reset(f); for i:=1 to 10 do begin read(f,a[i]); write(a[i],' '); end; writeln;end;

function cmmdc:integer;var dc,i,x,y,r:integer;begin reset(f); for i:=1 to 10 do read(f,a[i]); dc:=a[1]; for i:=2 to 10 do begin x:=a[i]; y:=dc; while x mod y <> 0 do begin

#include <iostream.h>#include <conio.h>#include <stdlib.h>#include <fstream.h>int a[20];

void creare(){ int i; ofstream f("date.in"); randomize(); for (i=1; i<=10; i++) f<<random(100)<<" "; f.close();}void afisare(){ int i; ifstream f("date.in"); for (i=1; i<=10; i++) { f>>a[i]; cout<<a[i]<<" "; } cout<<endl; f.close();}int cmmdc(){ int dc,i,x,y,r; ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); dc=a[1]; for (i=2; i<=10; i++) {

x=a[i]; y=dc;

r:=x mod y; x:=y; y:=r; end; dc:=y; end; cmmdc:=dc;end;

procedure inserare;var x,i:integer; b:array[1..11] of integer;begin reset(f); for i:=1 to 10 do read(f,b[i]); write('x: '); readln(x); for i:=10 downto 2 do b[i+1]:=b[i]; b[2]:=x; write('b) '); for i:=1 to 11 do write(b[i],' '); writeln;end;

procedure sortare;var i,j,x:integer;begin assign(g,'date.out'); rewrite(g); reset(f); for i:=1 to 10 do read(f,a[i]); close(f); for i:=1 to 9 do for j:=i+1 to 10 do if a[i]<a[j] then begin x:=a[i]; a[i]:=a[j]; a[j]:=x; end; for i:=1 to 10 do write(g,a[i],' '); close(g);end;

begin clrscr; creare; assign(f,'date.in'); write('Sirul generat: '); afisare;

while (x % y ) { r=x %y; x=y; =r; } dc=y;

} return dc;}void inserare(){ int i; float b[12]; ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); b[1]=a[1]; b[2]=(a[1]+a[2])/2.0; for (i=2; i<=10; i++) b[i+1]=a[i]; cout<<"b) "; for(i=1; i<=11; i++) cout<<b[i]<<" "; cout<<endl;}void sortare(){ int i,j,x; ofstream g("date.out"); ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); for (i=1; i<=9; i++) for (j=i+1; j<=10; j++) if (a[i]<a[j]) { x=a[i]; a[i]=a[j]; a[j]=x; } for (i=1; i<=10; i++) g<<a[i]<<" "; g.close();}

void main(){ clrscr(); creare(); cout<<"Sirul generat: "; afisare();

writeln('a) Cmmdc: ',cmmdc); inserare; sortare; close(f); close(g);end.

cout<<"a) Cmmdc: "<<cmmdc()<<endl; inserare(); sortare();}

Subiectul Nr.19

Să se realizeze un program care să raspundă următoarelor solicitări. Să se creeze fişierul text date.in care să conţina un şir de 10 numere întregi aleatoare mai mici decât 100. Cerinţe

a) Să se scrie un subprogram care să returneze câte dintre elementele din fişierul date.in sunt prime cu o valoare x citită de la tastatură;

b) Să se scrie un subprogram care să calculeze media aritmetică a numerelor din şir şi să o insereze la jumătatea şirului;

d) Scrieţi în fişierul text date.out şirul de mai sus ordonat descrescător.

Observaţii- pentru cerinta a) se lucreaza cu un vector de numere reale;

Am folosit subprogramele:- CREARE: crează structura cerută de date- AFIŞARE: citeşte datele de intrare din fişierul de intrare şi afişează pe ecran datele citite din fişier- PRIME: citeşte datele din fişierul de intrare şi returnează numărul de elemente din şirul de intrare şi care sunt prime cu valoarea x citită de la tastatură, adică (a[i],x)=1;- INSERARE: citeşte datele din fişierul de intrare şi realizează inserarea dorită (pe poziţia 6) într-un vector de numere reale;- SORTARE: citeşte datele din fişierul de intrare şi le sortează, după care le scrie în fişierul de ieşire

uses crt;var a:array[1..20] of integer; f,g:text; x,nr:integer;

procedure creare;var i:integer;begin assign(f,'date.in'); rewrite(f); randomize; for i:=1 to 10 do write(f,random(100),' '); close(f);end;

#include <iostream.h>#include <conio.h>#include <stdlib.h>#include <fstream.h>int a[200],x,nr=0;

void creare(){ int i; ofstream f("date.in"); randomize(); for (i=1; i<=10; i++) f<<random(100)<<" "; f.close();

procedure afisare;var i:integer;begin reset(f); for i:=1 to 10 do begin read(f,a[i]); write(a[i],' '); end; writeln;end;procedure prime;var i,p,q,r:integer;begin nr:=0; reset(f); for i:=1 to 10 do read(f,a[i]); close(f); write('x: '); readln(x); for i:=1 to 10 do begin p:=a[i]; q:=x; while p mod q <> 0 do begin r:=p mod q; p:=q; q:=r; end; if q=1 then nr:=nr+1; end;end;

procedure inserare;var x,i:integer; b:array[1..11] of real; s:real;begin reset(f); s:=0; for i:=1 to 10 do begin read(f,b[i]); s:=s+b[i]; end; close(f); for i:=10 downto 6 do b[i+1]:=b[i]; b[6]:=s/10; write('b) '); for i:=1 to 11 do

}void afisare(){ int i; ifstream f("date.in"); for (i=1; i<=10; i++) { f>>a[i]; cout<<a[i]<<" "; } cout<<endl; f.close();}

void prime() { int i,p,q,r; ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); cout<<"Valoarea x: "; cin>>x; for (i=1; i<=10; i++) {

p=x; q=a[i]; while (p%q) { r=p%q; p=q; q=r; } if (q==1) nr++;

}}

void inserare(){ int i,s=0; float b[12]; ifstream f("date.in"); for (i=1; i<=10; i++) { f>>b[i]; s=s+b[i]; } f.close(); for (i=10; i>=6; i--) b[i+1]=b[i]; b[6]=s/10.0; cout<<"b) "; for(i=1; i<=11; i++) cout<<b[i]<<" ";

write(b[i]:0:2,' '); writeln;end;procedure sortare;var i,j:integer;begin assign(g,'date.out'); rewrite(g); reset(f); for i:=1 to 10 do read(f,a[i]); close(f); for i:=1 to 9 do for j:=i+1 to 10 do if a[i]<a[j] then begin x:=a[i]; a[i]:=a[j]; a[j]:=x; end; for i:=1 to 10 do write(g,a[i],' '); close(g);end;

begin clrscr; creare; assign(f,'date.in'); write('Sirul generat: '); afisare; prime; writeln('a) Nr de elemente prime cu ',x,': ',nr); inserare; sortare;end.

cout<<endl;}

void sortare(){ int i,j; ofstream g("date.out"); ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); for (i=1; i<=9; i++) for (j=i+1; j<=10; j++) if (a[i]<a[j]) { x=a[i]; a[i]=a[j]; a[j]=x; } for (i=1; i<=10; i++) g<<a[i]<<" "; g.close();}

void main(){ clrscr(); creare(); cout<<"Sirul generat: "; afisare(); prime(); cout<<"a) Nr elem prime cu "<<x<<": "<<nr<<endl; inserare(); sortare();}

Subiectul Nr.20

Să se realizeze un program care să raspundă următoarelor solicitări. Să se creeze fişierul text date.in care să conţină un şir de 10 numere întregi aleatoare mai mici decât 100. Cerinţe

a) Să se scrie un subprogram care să determine elementul minim şi maxim din fişierul date.in şi poziţiile pe care le ocupă în şirul numerelor date;

b) Să se scrie un subprogram care să determine câte dintre elementele şirului cuprinse într-un interval citit de la tastatură sunt numere pare;

c) Scrieţi în fişierul text date.out şirul de mai sus ordonat crescător.

Am folosit subprogramele:

- CREARE: crează structura cerută de date- AFIŞARE: citeşte datele din fişierul de intrare şi le afişează pe ecran- MIN_MAX: citeşte datele din fişierul de intrare şi afişează rezultatele de la cerinţa a)- INTERVAL: citeşte datele din fişierul de intrare şi (de la tastatură) limitele unui interval; apoi va calcula şi va afişa câte dintre elementele din fişierul de intrare sunt pare şi în intervalul citit;- SORTARE: citeşte datele din fişierul de intrare şi le sortează, după care le scrie în fişierul de ieşire.

uses crt;var a:array[1..20] of integer; f,g:text;

procedure creare;var i:integer;begin assign(f,'date.in'); rewrite(f); randomize; for i:=1 to 10 do write(f,random(100),' '); close(f);end;

procedure afisare;var i:integer;begin reset(f); for i:=1 to 10 do begin read(f,a[i]); write(a[i],' '); end; writeln;end;

procedure min_max;var min,max,i:integer;begin reset(f); for i:=1 to 10 do read(f,a[i]); min:=a[1]; max:=a[1]; for i:=2 to 10 do if a[i]<min then min:=a[i] else if a[i]>max then max:=a[i];write('a) Maximul din sir:',max ,'; el se afla pe pozitiile: '); for i:=1 to 10 do if a[i]=max then write(i,' ');

#include <iostream.h>#include <conio.h>#include <stdlib.h>#include <fstream.h>int a[200];

void creare(){ int i; ofstream f("date.in"); randomize(); for (i=1; i<=10; i++) f<<random(100)<<" "; f.close();}

void afisare(){ int i; ifstream f("date.in"); for (i=1; i<=10; i++) { f>>a[i]; cout<<a[i]<<" "; } cout<<endl; f.close();}

void min_max(){ int min,max,i; ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); min=a[1]; max=a[1]; for (i=2; i<=10; i++) if (a[i]<min) min=a[i]; else if (a[i]>max) max=a[i];cout<<"a) Maximul din sir: "<< max<<"; el se afla pe pozitiile: ";for (i=1; i<=10; i++) if (a[i]==max) cout<<i<<" ";

writeln; write('a) Minimul din sir: ',min ,'; el se afla pe pozitiile: '); for i:=1 to 10 do if a[i]=min then write(i,' '); writeln;end;

procedure interval;var i,x,y,n:integer;begin reset(f); for i:=1 to 10 do read(f,a[i]); close(f); n:=0; write('Lim stanga: '); readln(x); write('Lim dreapta: '); readln(y); for i:=1 to 10 do if (a[i]>=x) and (a[i]<=y) and (a[i] mod 2 = 0) then n:=n+1; writeln('b) Nr de elem pare din [',x,',',y,']: ',n);end;procedure sortare;var i,j,x:integer;begin assign(g,'date.out'); rewrite(g); reset(f); for i:=1 to 10 do read(f,a[i]); close(f); for i:=1 to 9 do for j:=i+1 to 10 do if a[i]>a[j] then begin x:=a[i]; a[i]:=a[j]; a[j]:=x; end; for i:=1 to 10 do write(g,a[i],' '); close(g);end;

begin clrscr; creare; assign(f,'date.in');

cout<<endl;cout<<" Minimul din sir:"<<min <<"; el se afla pe pozitiile: "; for (i=1; i<=10; i++) if (a[i]==min) cout<<i<<" ";; cout<<endl;}

void interval(){ int i,x,y,n=0; ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); cout<<"b) Lim stanga: "; cin>>x; cout<<" Lim dreapta: "; cin>>y; for (i=1; i<=10; i++) if (a[i]>=x && a[i]<=y && a[i] % 2 == 0)

n++;cout<<"Nr de elem pare din [” <<x<<","<<y<<"]: ” <<n<<endl;}

void sortare(){ int i,j; ofstream g("date.out"); ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); for (i=1; i<=9; i++) for (j=i+1; j<=10; j++) if (a[i]>a[j]) { x=a[i]; a[i]=a[j]; a[j]=x; } for (i=1; i<=10; i++) g<<a[i]<<" "; g.close();}

void main(){ clrscr(); creare();

write('Sirul generat: '); afisare; min_max; interval; sortare;end.

cout<<"Sirul generat: "; afisare(); min_max(); interval(); sortare();}

Subiectul Nr.21

Să se realizeze un program care să raspundă următoarelor solicitări. Sa se creeze fişierul text date.in care să conţină un şir de 10 numere întregi aleatoare mai mici decât 100. Cerinţe

a) Să se scrie un subprogram care să returneze cel mai mic multiplu comun dintre elementele din fişierul date.in;

b) Să se scrie un subprogram care să insereze între ultimul şi penultimul element al şirului din fişierul date.in media aritmetică a lor;

c) Scrieţi în fişierul text date.out şirul de mai sus ordonat descrescător. Observaţii- în fişierul de intrare am generat valori nenule şi mici deoarece la cerinţa a) avem de calculat cmmmc- pentru cerinţa b) se lucrează cu un vector de numere reale

Am folosit subprogramele:- CREARE: acesta crează structura cerută de date- AFIŞARE: citeşte datele din fişierul de intrare şi le afişează pe ecran- CMMMC: citeşte datele din fişierul de intrare şi afişează cmmmc al elementelor citite din fişier, dupa formula: [x; y]=a*b / (a; b), iar (x; y) se află cu algoritmul lui Euclid;- INSERARE: citeşte datele din fişierul de intrare şi realizează inserarea cerută- SORTARE: citeşte datele din fişierul de intrare şi le sortează, după care le scrie în fişierul de ieşire

uses crt;var a:array[1..20] of integer; f,g:text; procedure creare;var i:integer;begin assign(f,'date.in'); rewrite(f); randomize; for i:=1 to 10 do write(f,1+random(10),' '); close(f);end;

#include <iostream.h>#include <conio.h>#include <stdlib.h>#include <fstream.h>int a[200];

void creare(){ int i; ofstream f("date.in"); randomize(); for (i=1; i<=10; i++) f<<1+random(10)<<" "; f.close();

procedure afisare;var i:integer;begin reset(f); for i:=1 to 10 do begin read(f,a[i]); write(a[i],' '); end; writeln; clodse(f);end;

procedure cmmmc:longint;var mc,i,x,y,r:integer;beginreset(f); for i:=1 to 10 do read(f,a[i]); close(f); mc:=a[1]; for i:=2 to 10 do begin x:=a[i]; y:=mc; while x mod y <> 0 do begin r:=x mod y; x:=y; y:=r; end; mc:=a[i] div y * mc; end;writeln(’a) Cmmmc=’,mc);end;

procedure inserare;var b:array[1..11] of real; i:integer;begin reset(f); for i:=1 to 10 do read(f,a[i]); close(f); for i:=1 to 9 do b[i]:=a[i]; b[11]:=a[10]; b[10]:=(a[9]+a[10])/2; write('b) sirul dupa inserare: '); for i:=1 to 11 do write(b[i]:0:1,' ');

}

void afisare(){ int i; ifstream f("date.in"); for (i=1; i<=10; i++) { f>>a[i]; cout<<a[i]<<" "; } cout<<endl; f.close();}

void cmmmc(){ long mc,i,x,y,r; ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); mc=a[1]; for (i=2; i<=10; i++) { x=a[i]; y=mc; while (x % y) { r=x % y;

x=y;y=r;

} mc=a[i] / y * mc; }cout<<”a) Cmmmc=’<<mc <<endl;}

void inserare(){ float b[12]; int i; ifstream f("date.in"); for(i=1; i<=10; i++) f>>a[i]; f.close(); for (i=1; i<=9; i++) b[i]=a[i]; b[11]=a[10]; b[10]=(a[9]+a[10])/2.0; cout<<"b) sirul dupa inserare: "; for (i=1; i<=11; i++) cout<<b[i]<<" ";

writeln;end;

procedure sortare;var i,j,x:integer;begin assign(g,'date.out'); rewrite(g); reset(f); for i:=1 to 10 do read(f,a[i]); close(f); for i:=1 to 9 do for j:=i+1 to 10 do if a[i]<a[j] then begin x:=a[i]; a[i]:=a[j]; a[j]:=x; end; for i:=1 to 10 do write(g,a[i],' '); close(g);end;

begin clrscr; creare; assign(f,'date.in'); write('Sirul generat: '); afisare; cmmmc; inserare; sortare;end.

cout<<endl;}

void sortare(){ int i,j,x; ofstream g("date.out"); ifstream f("date.in"); for (i=1; i<=10; i++) f>>a[i]; f.close(); for (i=1; i<=9; i++) for (j=i+1; j<=10; j++) if (a[i]<a[j]) { x=a[i]; a[i]=a[j]; a[j]=x; } for (i=1; i<=10; i++) g<<a[i]<<" "; g.close();}

void main(){ clrscr(); creare(); cout<<"Sirul generat: "; afisare(); cmmmc(); inserare(); sortare();}

Subiectul Nr.22

Să se realizeze un program care să raspundă următoarelor solicitări. Să se creeze fişierul text date.in care să conţina o matrice cu numere întregi cu 4 linii şi 4 coloane. Cerinţe

a) Să se scrie un subprogram care să returneze elementul minim al matricei şi numărul lui de apariţii;

b) Să se scrie un subprogram care să determine numărul elementelor de tip palindrom de sub diagonala principală a matricei (număr palindrom este un şir de cel puţin două cifre care citit de la dreapta la stânga este identic cu numărul citit de la stânga la dreapta);

c) Scrieţi în fişierul text date.out elementele de pe prima linie a matricei de mai sus ordonate crescător.

Am folosit subprogramele:

- CREARE: crează structura cerută de date- AFIŞARE: citeşte datele din fişierul de intrare şi le afiseaza pe ecran- MINIM: citeşte datele din fişierul de intrare, află şi afişează minimul şi poziiţiile în care acesta apare în matrice;- PALINDROM: primeşte ca parametru numîrul natural x; dacă x este palindrom, atunci returnează valoarea logică ADEVARAT, iar în caz contrar, valoarea logică FALS- NR_PALINDROM: citeşte datele din fişierul de intrare, calculează şi returnează în programul principal numărul de palindroame de sub diagonala principală; - SORTARE: citeşte datele din fişierul de intrare, depune prima linie a matricei într-un vector, pe care îl sortează şi îl scrie în fişierul de ieşire

uses crt;var a:array[1..10,1..10] of integer; f,g:text;

procedure creare;var i,j:integer;begin assign(f,'date.in'); rewrite(f); randomize; for i:=1 to 4 do for j:=1 to 4 do write(f,random(100),' '); close(f);end;

procedure afisare;var i,j:integer;begin reset(f); for i:=1 to 4 do begin for j:=1 to 4 do begin read(f,a[i,j]); write(a[i,j],' '); end; writeln; end; writeln; close(f);end;

procedure minim;var m,i,j:integer;begin

#include <iostream.h>#include <conio.h>#include <stdlib.h>#include <fstream.h>int a[10][10];

void creare(){ int i,j; ofstream f("date.in"); randomize(); for (i=1; i<=4; i++) { for(j=1; j<=4; j++)

f<<random(100)<<" "; f<<endl; } f.close();}void afisare(){ int i,j; ifstream f("date.in"); for (i=1; i<=4; i++) { for (j=1; j<=4; j++) { f>>a[i][j]; cout<<a[i][j]<<" "; } cout<<endl; } cout<<endl; f.close();}void minim(){ int i,j,m;

reset(f); for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); close(f); m:=a[1,1]; for i:=1 to 4 do for j:=1 to 4 do if a[i,j]<m then m:=a[i,j]; writeln('a) Minimul: ',m,'. Pozitiile in care apare el: '); for i:=1 to 4 do for j:=1 to 4 do if a[i,j]=m then write('(',i,',',j,') '); writeln;end;

function palindrom(x:integer):boolean;var xr,z:integer;begin xr:=0; z:=x; while z<>0 do begin xr:=xr*10 + z mod 10; z:=z div 10; end; if x=xr then palindrom:=true else palindrom:=false;end;

function nr_palind:integer;var i,j,nr:integer;begin reset(f); nr:=0; for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); close(f); for i:=1 to 4 do for j:=1 to 4 do if (i>j) and palindrom(a[i,j]) then nr:=nr+1; nr_palind:=nr;

ifstream f("date.in"); for(i=1; i<=4; i++) for (j=1; j<=4; j++)

f>>a[i][j]; f.close(); m=a[1][1]; for(i=1; i<=4; i++) for (j=1; j<=4; j++) if (a[i][j]<m) m=a[i][j];cout<<”a) Minimul: „<<m<< „. Poz in care apare el: „<<endl;for(i=1; i<=4; i++) for (j=1; j<=4; j++) if(a[i][j]==m) cout<<”(”<<i<<”,”<<j<<”)”; cout<<endl;}

int palindrom(int x){ int xr,z; xr=0; z=x; while (z) {

xr=xr*10 + z % 10; z=z / 10;

} if (x==xr) return 1; else return 0;}

int nr_palind(){ int i,j; ifstream f("date.in"); nr=0; for (i=1; i<=4; i++) for (j=1; j<=4; j++)

f>>a[i][j]; f.close(); for (i=1; i<=4; i++) for (j=1; j<=4; j++) if (i>j && palindrom(a[i][j]) && a[i][j]>9)

nr++; return nr;}

end;

procedure sortare;var i,j,x:integer; v:array[1..4] of integer;begin assign(g,'date.out'); rewrite(g); reset(f); for j:=1 to 4 do read(f,v[j]); close(f); for i:=1 to 3 do for j:=i+1 to 4 do if v[i]>v[j] then begin x:=v[i]; v[i]:=v[j]; v[j]:=x; end; for i:=1 to 4 do write(g,v[i],' '); close(g);end;

begin clrscr; creare; assign(f,'date.in'); writeln('Matricea generata: '); afisare; minim; write('b) Nr de palindroame de sub diag princ: ',nr_palind); sortare;end.

void sortare(){ int i,j,x,v[5]; ofstream g("date.out"); ifstream f("date.in"); for (j=1; j<=4; j++) f>>v[i]; f.close(); for (i=1; i<=3; i++) for (j=i+1; j<=4; j++) if (v[i]>v[j])

{ x=v[i]; v[i]=v[j]; v[j]=x; } for (i=1; i<=4; i++) g<<v[i]<<" "; g.close();}void main(){clrscr(); creare();cout<<"Matricea generata:"<<endl; afisare(); minim(); cout<<"b) Nr de palindroame de sub diag princ: "<< nr_palind() <<endl;sortare();}

Subiectul Nr.23

Să se realizeze un program care să raspundă următoarelor solicitări. Să se creeze fişierul text date.in care să conţina o matrice cu numere întregi cu 4 linii şi 4 coloane. Cerinţe

a) Să se scrie un subprogram care să returneze elementul maxim de sub diagonala secundară a matricei din fişierul date.in;

b) Să se scrie un subprogram care să determine câte dintre elementele matricei sunt numere perfecte;

c) Scrieţi în fişierul text date.out elementele de pe coloana a doua ale matricei de mai sus ordonate crescător.

Am folosit subprogramele:- CREARE: crează structura cerută de date- AFIŞARE: citeşte datele din fişierul de intrare şi le afişează pe ecran- MAXIM: citeşte datele din fişierul de intrare şi afişează maximul de sub diagonala secundară a matricei

- NR_PERF: citeşte datele din fişierul de intrare şi numără câte numere perfecte sunt în matrice; utilizează subprogramul:- PERFECT, care primeşte un parametru natural x şi returnează valoarea logică ADEVARAT sau FALS, după cum x este sau nu un număr perfect;- SORTARE: citeşte datele din fişierul de intrare, selectează într-un vector coloana a doua din matrice, sorteaza vectorul şi îl scrie în fişierul de ieşire

uses crt;var a:array[1..10,1..10] of integer; f,g:text; procedure creare;var i,j:integer;begin assign(f,'date.in'); rewrite(f); randomize; for i:=1 to 4 do for j:=1 to 4 do write(f,1+random(10),' '); close(f);end;

procedure afisare;var i,j:integer;begin reset(f); for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); close(f); for i:=1 to 4 do begin for j:=1 to 4 do write(a[i,j]:5); writeln; end; writeln;end;

procedure maxim;var i,j.m:integer;begin reset(f); for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); close(f);

#include <iostream.h>#include <conio.h>#include <stdlib.h>#include <fstream.h>int a[10][10];

void creare(){ int i,j; ofstream f("date.in"); randomize(); for (i=1; i<=4; i++) { for(j=1; j<=4; j++)

f<<1+random(10)<<" "; cout<<endl; } f.close();}void afisare(){ int i,j; ifstream f("date.in"); for (i=1; i<=4; i++) for (j=1; j<=4; j++) f>>a[i][j]; f.close(); for (i=1; i<=4; i++) { for (j=1; j<=4; j++) cout<<a[i][j]<<" "; cout<<endl; } cout<<endl;}void maxim(){ int i,j,m; ifstream f("date.in"); for(i=1; i<=4; i++) for (j=1; j<=4; j++)

m:=a[4,4]; for i:=1 to 4 do for j:=1 to 4 do if (a[i,j]>m) and (i+j >4+1) then m:=a[i,j]; writeln('a) Maximul de sub diag sec: ',m);end;

function perfect(x:integer):boolean;var d,nd,s: integer;begin s:=0; for d:=1 to x div 2 do if x mod d = 0 then s:=s+d; if (s=x) and (x<>0) then perfect:=true else perfect:=false;end;

function nr_perf:integer;var i,j:integer;begin reset(f); for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); close(f); nr:=0; for i:=1 to 4 do for j:=1 to 4 do if perfect(a[i,j]) then nr:=nr+1; nr_perf:=nr;end;

procedure sortare;var i,j,x:integer; v:array[1..4] of integer;begin assign(g,'date.out'); rewrite(g); reset(f); for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); close(f);

f>>a[i][j]; f.close(); m=a[4][4]; for(i=1; i<=4; i++) for (j=1; j<=4; j++) if (a[i][j]>m && i+j>4+1)

m=a[i][j];cout<<"a) Maximul de sub diag sec: "<<m<<endl;}

int perfect(int x){ int d,nd,s=0; for (d=1; d<=x/2; d++) if (x % d == 0)

s=s+d; if (s==x && x!=0)

return 1; else return 0;}

int nr_perf(){ int i,j,nr; ifstream f("date.in"); nr=0; for (i=1; i<=4; i++) for (j=1; j<=4; j++)

f>>a[i][j]; f.close(); for (i=1; i<=4; i++) for (j=1; j<=4; j++) if (perfect(a[i][j]))

nr++; return nr;}

void sortare(){ int i,j,x,v[5]; ofstream g("date.out"); ifstream f("date.in"); for (i=1; i<=4; i++) for(j=1; j<=4; j++)

f>>x; f.close(); for (i=1; i<=4; i++)

for i:=1 to 4 do v[i]:=a[i,2]; for i:=1 to 3 do for j:=i+1 to 4 do if v[i]>v[j] then begin x:=v[i]; v[i]:=v[j]; v[j]:=x; end; for i:=1 to 4 do write(g,v[i],' '); close(g);end;

begin clrscr; creare; assign(f,'date.in'); writeln('Matricea generata: '); afisare; maxim; writeln('b) Nr de elem perfecte din matrice:,nr_perf);sortare;end.

v[i]=a[i][2]; f.close(); for (i=1; i<=3; i++) for (j=i+1; j<=4; j++) if (v[i]>v[j]) { x=v[i]; v[i]=v[j]; v[j]=x; } for (i=1; i<=4; i++) g<<v[i]<<" "; g.close();}

void main(){ clrscr(); creare(); cout<<"Matricea generata: "<<endl; afisare(); maxim(); cout<<"b) Nr de numere perfecte din matrice: "<<nr_perf()<<endl; sortare();}

Subiectul Nr.24

Să se realizeze un program care să raspundă următoarelor solicitări. Să se creeze fişierul text date.in care să conţină o matrice cu numere întregi cu 4 linii şi 4 coloane. Cerinţe

a) Să se scrie un subprogram care să returneze suma elementelor pare de pe marginea exterioară a matricei;

b) Să se scrie un subprogram care să determine numărul elementelor matricei egale cu o valoare x dată de la tastatură;

c) Scrieţi in fişierul text date.out elementele de pe linia a doua ale matricei de mai sus ordonate crescător.

Am folosit subprogramele:- CREARE: crează structura cerută de date- AFIŞARE: citeşte datele de intrare din fişierul de intrare şi afişează pe ecran datele citite din fişier- SUMA: citeşte datele din fişierul de intrare, calculează şi returnează suma elementelor de pe marginile matricei;- NX: citeşte datele din fişierul de intrare şi apoi o valoare x, după care numără câte elemente egale cu x se găsesc în matrice, număr pe care îl returnează- SORTARE: citeşte datele din fişierul de intrare, depune elementele din linia a doua a matricei într-un vector pe care îl sortează şi îl afişează în fişierul de ieşire.

uses crt;var a:array[1..20,1..20] of integer;

#include <iostream.h>#include <conio.h>#include <stdlib.h>

f,g:text; procedure creare;var i,j:integer;begin assign(f,'date.in'); rewrite(f); randomize; for i:=1 to 4 do begin for j:=1 to 4 do write(f,random(100),' '); writelnf); end close(f);end;

procedure afisare;var i,j:integer;begin reset(f); for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); closef); for i:=1 to 4 do begin for j:=1 to 4 do write(a[i,j]:5); writeln; end; writeln;end;

function suma:integer;var s,i,j:integer;begin s:=0; reset(f); for i=1 to 4 do for j=1 to 4 do readf,a[i,j]); close(f); for i:=1 to 4 do if a[i,1] mod 2 = 0 then s:=s+a[i,1]; for i:=1 to 4 do if a[i,4] mod 2 = 0 then s:=s+a[i,4]; for j:=2 to 3 do

#include <fstream.h>int a[10][10];

void creare(){ int i,j; ofstream f("date.in"); randomize(); for (i=1; i<=4; i++) {

for(j=1; j<=4; j++) f<<random(100)<<" "; f<<endl;

} f.close();}

void afisare(){ int i,j; ifstream f("date.in"); for (i=1; i<=4; i++) for (j=1; j<=4; j++) f>>a[i][j]; for i=1; i<=4; i++) { for j=1; j<=4; j++) cout<<a[i][j]<<” ”; cout<<endl; } cout<<endl; f.close();}

int suma(){ int s=0,i,j; for(i=1; i<=4; i++) for(j=1; i<=4; j++) f>>a[i][j]; f.close(); for (i=1; i<=4; i++) if (a[i][1] % 2 == 0)

s=s+a[i][1]; for (i=1; i<=4; i++) if (a[i][4] % 2 == 0)

s=s+a[i][4]; for (j=2; j<=3; j++)

if a[1,j] mod 2 = 0 then s:=s+a[1,j]; for j:=2 to 3 do if a[4,j] mod 2 = 0 then s:=s+a[4,j]; suma:=s;end;

function nx:integer;var i,j,n,x:integer;begin reset(f); for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); close(f);write('Valoarea x: ');readln(x); n:=0; for i:=1 to 4 do for j:=1 to 4 do if a[i,j]=x then n:=n+1; nx:=n;end;

procedure sortare;var i,j,x:integer; v:array[1..4] of integer;begin assign(g,'date.out'); rewrite(g); reset(f); for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); close(f); for j:=1 to 4 do v[j]:=a[2,j]; for i:=1 to 3 do for j:=i+1 to 4 do if v[i]>v[j] then begin x:=v[i]; v[i]:=v[j]; v[j]:=x; end; for i:=1 to 4 do write(g,v[i],' '); close(g);end;

begin clrscr; creare;

if (a[1][j] % 2 == 0) s=s+a[1][j];

for (j=2; j<=3; j++) if (a[4][j] % 2 == 0)

s=s+a[4][j]; return s;}

int nx(){ int i,j,n,x; ifstream f("date.in"); for (i=1; i<=4; i++) for (j=1; j<=4; j++)

f>>a[i][j]; cout<<"Valoarea x: "; cin>>x; n=0; for (i=1; i<=4; i++) for (j=1; j<=4; j++)

if (a[i][j]==x) n++;

return n;}

void sortare(){ int i,j,x,v[5]; ofstream g("date.out"); ifstream f("date.in"); for (i=1; i<=4; i++) for(j=1; j<=4; j++)

f>>a[i][j]; f.close(); for (j=1; j<=4; j++) v[j]=a[2][j]; for (i=1; i<=3; i++) for (j=i+1; j<=4; j++) if (v[i]>v[j]) { x=v[i]; v[i]=v[j]; v[j]=x; } for (i=1; i<=4; i++) g<<v[i]<<" "; g.close();}

void main(){

assign(f,'date.in'); writeln('Matricea generata: '); afisare; writeln('a) ',suma); writeln('b) ’,nx); sortare;end.

clrscr(); creare(); cout<<"Matricea generata: "<<endl; afisare(); cout<<"a) "<<suma()<<endl; cout<<"b) "<<nx()<<endl; sortare();}

Subiectul Nr.25

Să se realizeze un program care să raspundă următoarelor solicitări. Să se creeze fişierul text date.in care să conţină o matrice cu numere întregi cu 4 linii şi 4 coloane. Cerinţe

a) Să se scrie un subprogram care să returneze elementul maxim de pe diagonala principală a matricei din fişierul date.in;

b) Să se scrie un subprogram care să determine câte dintre elementele matricei sunt numere perfecte;

c) Scrieţi în fişierul text date.out elementele de pe linia a doua ale matricei de mai sus ordonate crescător.

Am folosit subprogramele:- CREARE: crează structura cerută de date- AFIŞARE: citeşte datele din fişierul de intrare şi le afişează pe ecran- MAXIM: citeşte datele din fişierul de intrare, află maximul din diagonala principală a matricei, maxim pe care îl returnează;- NR_PERF: citeşte datele din fisierul de intrare şi returnează numărul de numere perfecte din matrice; pentru aceasta, el se foloseşte de subprogramul:- PERFECT, care primeşte parametrul natural x şi returnează ADEVARAT sau FALS, după cum x este perfect sau nu- SORTARE: citeşte datele din fişierul de intrare, depune linia a doua a matricei într-un vector pe care îl sortează, dupa care îl scrie în fişierul de ieşire.

uses crt;var a:array[1..20,1..20] of integer; f,g:text; procedure creare;var i,j:integer;begin assign(f,'date.in'); rewrite(f); randomize; for i:=1 to 4 do begin for j:=1 to 4 do write(f,random(100),' '); writeln(f);

#include <iostream.h>#include <conio.h>#include <stdlib.h>#include <fstream.h>int a[10][10];

void creare(){ int i,j; ofstream f("date.in"); randomize(); for (i=1; i<=4; i++) { for(j=1; j<=4; j++) f<<random(100)<<" ";

end; close(f);end;

procedure afisare;var i,j:integer;begin reset(f); for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); close(f); for i:=1 to 4 do begin for j:=1 to 4 do write(a[i,j]:5); writeln; end; writeln;end;

function maxim:integer;var m,i,j:integer;begin reset(f); for i:=1 to 4 do for j:=1 to 4 do readf,a[i,j]); close(f); m:=a[1,1]; for i:=2 to 4 do if a[i,i] > m then m:=a[i,i]; maxim:=m;end;

function perfect(x:integer):boolean;var d,nd,s: integer;begin s:=0; for d:=1 to x div 2 do if x mod d = 0 then s:=s+d; if s=x then perfect:=true else perfect:=false;end;

f<<endl; } f.close();}

void afisare(){ int i,j; ifstream f("date.in"); for (i=1; i<=4; i++) for (j=1; j<=4; j++) f>>a[i][j]; f.close(); for (i=1; i<=4; i++) { for j=1; j<=4; j++) cout<<a[i][j]<<" "; } cout<<endl; } cout<<endl;}

int maxim(){ int i,j,m; ifstream f("date.in"); for (i=1; i<=4; i++) for(j=1; j<=4; j++)

f>>a[i][j]; f.close(); m=a[1][1]; for(i=2; i<=4; i++) if (a[i][i]>m)

m=a[i][i]; return m;}

int perfect(int x){ int d,nd,s=0; for (d=1; d<=x/2; d++) if (x % d == 0) s=s+d; if (s==x && x!=0) return 1; else return 0;}

int nr_perf()

function nr_perf:integer;var nr,i,j:integer;begin reset(f); for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); close(f); nr:=0; for i:=1 to 4 do for j:=1 to 4 do if perfect(a[i,j]) then nr:=nr+1; nr_perf:=nr;end;

procedure sortare;var i,j,x:integer; v:array[1..4] of integer;begin assign(g,'date.out'); rewrite(g); reset(f); for i:=1 to 4 do for j:=1 to 4 do read(f,a[i,j]); close(f); for j:=1 to 4 do v[j]:=a[2,j]; for i:=1 to 3 do for j:=i+1 to 4 do if v[i]>v[j] then begin x:=v[i]; v[i]:=v[j]; v[j]:=x; end; for i:=1 to 4 do write(g,v[i],' ');end;

begin clrscr; creare; assign(f,'date.in'); writeln('Matricea generata: '); afisare; writeln('a) ',maxim); writeln('b) ',nr_perf); sortare;end.

{ int i,j,nr; ifstream f("date.in"); nr=0; for (i=1; i<=4; i++) for (j=1; j<=4; j++)

f>>a[i][j]; f.close(); for (i=1; i<=4; i++) for (j=1; j<=4; j++)

if (perfect(a[i][j])) nr++;

return nr;}

void sortare(){ int i,j,x,v[5]; ofstream g("date.out"); ifstream f("date.in"); for (i=1; i<=4; i++) for(j=1; j<=4; j++)

f>>a[i][j]; f.close();

for (j=1; j<=4; j++) v[j]=a[2][j]; for (i=1; i<=3; i++) for (j=i+1; j<=4; j++) if (v[i]>v[j]) { x=v[i]; v[i]=v[j]; v[j]=x; } for (i=1; i<=4; i++) g<<v[i]<<" "; g.close();}

void main(){ clrscr(); creare(); cout<<"Matricea generata: "<<endl; afisare(); cout<<"a) "<<maxim()<<endl; cout<<"b) "<<nr_perf()<<endl; sortare();}