QReferate - referate pentru educatia ta.
Referatele noastre - sursa ta de inspiratie! Referate oferite gratuit, lucrari si proiecte cu imagini si grafice. Fiecare referat, proiect sau comentariu il poti downloada rapid si il poti folosi pentru temele tale de acasa.



AdministratieAlimentatieArta culturaAsistenta socialaAstronomie
BiologieChimieComunicareConstructiiCosmetica
DesenDiverseDreptEconomieEngleza
FilozofieFizicaFrancezaGeografieGermana
InformaticaIstorieLatinaManagementMarketing
MatematicaMecanicaMedicinaPedagogiePsihologie
RomanaStiinte politiceTransporturiTurism
Esti aici: Qreferat » Referate informatica

Subiectele probei practice pentru examenul de atestat profesional la informatica - programare



SUBIECTELE PROBEI PRACTICE PENTRU EXAMENUL DE ATESTAT PROFESIONAL LA INFORMATICA - PROGRAMARE



  • In problemele acestui capitol datele folosite s-au considerat cele "uzuale" si nu s-a analizat limita posibilitatilor mediului de programare.
  • Solutiile prezentate au un caracter didactic si de aceea  s-au utilizat subprograme. Acest mod de abordare determina o urmarire mai usoara a algoritmului folosit in rezolvarea problemei.
  • Rezolvarile s-au facut de cele mai multe ori in paralel pentru cele doua limbaje de programare ( Pascal/C++) chiar daca se puteau gasi variante mai bune pentru fiecare mediu de programere.
  • In multe cazuri au fost calculate anumite valori intermediare. Pentru o mai buna urmarire a modului de executie a programului am ales afisarea acestora pe monitor.
  • Chiar daca unele cerinte se puteau rezolva in paralel, s-a optat pentru o redactare cat mai clara, care sa puna in evidenta fiecare etapa.
  • De cele mai multe ori am depus datele din fisier intr-un tablou pe care apoi l-am utilizat in rezolvarea cerintelor ulterioare.
  • Am folosit in general variabile globale pentru a avea programe cat mai simple, desi experienta in programare ne-ar fi determinat sa utilizam variabile locale in anumite situatii.



PROGRAMARE


Subiectul nr.1


Se citeste de la tastatura un sir de 10 numere intregi mai mici decat 100.

  1. Sa se creeze fisierul text date.in care sa contina pe o linie cele 10 valori, separate prin spatiu.
  2. Sa se scrie un subprogram care sa returneze elementul minim din fisierul date.in;
  3. Sa se scrie un subprogram care sa creeze un tablou unidimensional cu elementele fisierului date.in si sa se insereze intre ultimul si penultimul element al tabloului media lor aritmetica;
  4. Scrieti in fisierul text date.out sirul nou obtinut, ordonat crescator.

Exemplu:

Date de intrare:

17 23 45 67 12 34 5 90 8 9


Date de iesire:

a) Fisierul text date.in contine 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) Fisierul text date.out contine 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 PASCAL

var

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;

begin

min:=1000;

for j:=1 to 10 do

if a[j] < min then min:=a[j];

minelem:=min;

end;

procedure marit;

var m,j:integer;

begin

m:=a[9]+a[10];

b[10]:=m/2.;

for j:=1 to 9 do b[j]:=a[j];

b[11]:=a[10];

end;

begin

assign (f,'date.in ');rewrite(f);

assign(g,'date.out');rewrite(g);



for i:=1 to 10 do begin

read(a[i]);

write(f,a[i],' ');

end;


writeln(minelem);

ok:=1;


marit;

for i:=1 to 11 do

write(b[i]:3:2,' ');



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.

Varianta C

#include <fstream.h>

#include <stdlib.h>


int a[10];

float b[11];


int minelem()


void marit()

void main()


for(i=1;i<=11;i++) g<<b[i]<<' ';

g.close();

f.close();



Subiectul nr.2


Se citeste de la tastatura un sir de 10 numere intregi mai mici decat 100.

  1. Sa se creeze fisierul text date.in care sa contina pe o linie cele 10 valori, separate prin spatiu.
  2. Sa se scrie un subprogram care sa returneze elementul maxim din fisierul date.in;
  3. Sa se scrie un subprogram care sa determine numarul elementelor prime continute de fisierul date.in;
  4. Scrieti in fisierul text date.out sirul dat, ordonat crescator.

Exemplu:

Date de intrare:

7 23 4 17 12 34 5 90 8 9


Date de iesire:

a) Fisierul text date.in contine pe o linie: 7 23 4 17 12 34 5 90 8 9

b) Elementul maxim este: 90

c) In fisier sunt 4 numere prime

d) Fisierul text date.out contine 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 PASCAL

var a,ok,i,j,aux:integer;

b:array[1..10] of integer;

h:text;

procedure scrie

var f:text;

i:integer;

begin

assign(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;

begin

assign(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;

begin

assign(g,'date.in');reset(g);

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;

begin

assign(h,'date.out');rewrite(h);


scrie;


writeln('elementul maxim este ',maxim);


writeln('in fisier sunt ', nrprime,' numere prime ');


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.

Varianta C

#include <fstream.h>

#include <stdlib.h>

int a,b[10];

void scrie()



f.close();



int maxim()


g.close();

return max;


int nrprime()


g.close();


return nr;


void main()


}

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


h.close();


Subiectul nr.3


Se citeste de la tastatura un sir de 10 numere intregi mai mici decat 100.

a) Sa se creeze fisierul text date.in care sa contina pe o linie cele 10 valori, separate prin spatiu;

b) Sa se scrie un subprogram care sa returneze suma cifrelor elementelor pare din fisierul date.in;

c) Sa se scrie un subprogram care sa determine numarul elementelor patrate perfecte din fisierul date.in;

d) Scrieti in fisierul text date.out sirul dat, ordonat decrescator.


Exemplu:

Date de intrare :

37 23 4 77 12 34 5 90 18 19


Date de iesire :

a) Fisierul text date.in contine pe o linie: 37 23 4 77 12 34 5 90 18 19

b) Suma cifrelor elementelor pare din fisierul date.in este: 32

c) Intre elementele din fisierul date.in este un patrat perfect

d) Fisierul text date.out contine 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 PASCAL

var f,g:text;

a:array[1..10] of integer;

i,ok,aux:integer;

function maxim:integer;

var i,k,sum:integer;

begin

sum:=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;

begin

nr:=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;

end;

begin

assign (f,'date.in');rewrite(f);

assign (g,'date.out');rewrite(g);



for i:=1 to 10 do read(a[i]);

for i:=1 to 10 do

write(f,a[i],' ');

close(f); writeln;


writeln(' suma cifrelor ', maxim);


writeln(' numarul de patrate perfecte ',pp);


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.

Varianta C

#include <fstream.h>

#include <stdlib.h>

int a[10];

int maxim()


}

return sum;


int pp()


return nr;


void main()



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


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


Subiectul nr.4


Se citeste de la tastatura un sir de 10 numere intregi mai mici decat 100.

a) Sa se creeze fisierul text date.in care sa contina pe o linie cele 10 valori, separate prin spatiu;

b) Sa se scrie un subprogram care sa determine suma elementelor impare continute de fisierul date.in;

c) Sa se scrie un subprogram care sa returneze cate elemente din fisierul date.in sunt numere de tip palindrom cu cel putin doua cifre (palindrom este un numar de cel putin doua cifre care citit de la dreapta la stanga este identic cu numarul citit de la stanga la dreapta);

d) Scrieti in fisierul text date.out sirul dat, ordonat descrescator.


Exemplu:

Date de intrare:

37 23 4 77 12 34 5 90 18 19


Date de iesire:

a) Fisierul text date.in contine pe o linie: 37 23 4 77 12 34 5 90 18 19

b) Suma elementelor impare continute de fisierul date.in este:161

c) In fisier este un numar de tip palindrom cu cel putin doua cifre

d) Fisierul text date.out contine 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 PASCAL

type

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;

begin

s:=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;

begin

c:=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;

end;


begin


assign (f,'date.in');rewrite(f);

for i:=1 to 10 do

begin

read(a);

write(f,a,' ');

end;

close(f);

reset(f);


for i:=1 to 10 do

read(g,v[i]);

close(g);

writeln;

writeln(' suma este ',suma(v,10));


writeln(' numere palindrom in fisier ',palindrom(v,10));


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.

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 palindrome

(int a[100],int k)


}

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

}

return c;

}

void main()



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])


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


h.close();

}


Subiectul nr.5


Se citeste de la tastatura un sir de 10 numere intregi mai mici decat 100.

a.  Sa se creeze fisierul text date.in care sa contina pe o linie cele 10 valori, separate prin spatiu;

b. Sa se scrie un subprogram care sa returneze suma elementelor pare de pe pozitiile impare din fisierul date.in;

c.  Sa se scrie un subprogram care sa determine numarul elementelor prime continute de fisierul date.in;

d. Scrieti in fisierul text date.out sirul dat, ordonat crescator.


Exemplu:

Date de intrare :

7 23 4 17 12 34 5 90 8 9


Date de iesire:

a) Fisierul text date.in contine pe o linie: 7 23 4 17 12 34 5 90 8 9

b) Suma elementelor pare de pe pozitiile impare din fisierul date.in este: 24

c) In fisier sunt 4 numere prime

d) Fisierul text date.out contine 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;

begin

s:=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;

begin

p:=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

assign (f,'date.in');

rewrite(f);


for i:=1 to 10 do begin

read(v[i]);write(f,v[i],' ');

end;

close(f);


writeln;

writeln(' suma este ',b);


writeln(' numere prime in fisier ',c);


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.

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 c ()


return p;


void main()


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])


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



Subiectul nr.6


Se citeste de la tastatura un sir de 10 numere intregi mai mici decat 100.

a. Sa se creeze fisierul text date.in care sa contina pe o linie cele 10 valori, separate prin spatiu;

b. Sa se scrie un subprogram care sa determine suma elementelor impare aflate pe pozitiile pare continute de fisierul date.in;

c. Sa se scrie un subprogram care sa returneze un mesaj prin care sa se comunice daca un element x citit de la tastatura exista sau nu in sirul din fisierul date.in;

d. Scrieti in fisierul text date.out sirul dat, ordonat crescator.

Exemplu:

Date de intrare:

17 23 45 67 12 34 5 90 8 9


Date de iesire :

a) Fisierul text date.in contine pe o linie: 17 23 45 67 12 34 5 90 8

b) Suma elementelor impare aflate pe pozitiile pare continute de fisierul date.in este: 99

c) Pentru x = 99 se va afisa: "elementul nu este in fisier"

d) Fisierul text date.out contine 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;

begin

s:=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;

begin

p:=false;

for i:=1 to 10 do

if v[i]=x then p:=true;

c:=p;

end;

begin


assign (f,'date.in');rewrite(f);

for i:=1 to 10 do

begin

read(a);

write(f,a,' ');

end;

close(f);


assign (g,'date.out');reset(g);

for i:=1 to 10 do

read(g,v[i]);

close(g);

writeln;

writeln(' suma elementelor ',b);


writeln(' elementul cautat '); readln(x);

if c(x) then writeln(' elementul este in sir ')

else writeln(' elementul nu este in sir ');


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.

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 c (int &x)


void main()

// a)


f.close();

// b)


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


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])

;

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

h.close();

}

Subiectul nr.7


Se citeste de la tastatura un sir de 10 numere intregi mai mici decat 100.

a. Sa se creeze fisierul text date.in care sa contina patru linii. Fiecare linie afisata contine elementele unei linii din matrice, separate prin spatii;

b. Sa se scrie un subprogram care sa returneze elementul maxim de pe diagonala principala a matricei din fisierul date.in;

c. Sa se scrie un subprogram care sa determine numarul elementelor de tip palindrom continute de fisierul date.in (palindrom este un numar de cel putin doua cifre care citit de la dreapta la stanga este identic cu numarul citit de la stanga la dreapta);

d. Scrieti in fisierul text date.out elementele de pe linia a doua din matricea de mai sus, ordonate crescator.


Exemplu:

Date de intrare:

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


Date de iesire :

a) Fisierul text date.in contine matricea:

13 2 3 66

55 4 3 22

2 3 4 5

1 2 1 17

b) Elementul maxim de pe diagonala principala a matricei din fisierul date.in este:17

c) Exista 3 elemente de tip palindrom.

d) Fisierul date.out contine 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 PASCAL

type 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;

begin

c:=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;

begin

max:=a[1][1];

for i:=1 to k do

if a[i][i]>max then max:=a[i][i];

maxim:=max;

end;

begin

write('dati dimensiunile matricii ');

readln(k);


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);


writeln;

writeln('elementul maxim de pe diagonala

principala ',maxim(a,k));


writeln(' exista ',palindrom(a,k),' elemente de tip palindrom ');



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.

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;

int

palindrom(int a[50][50],int k)


}

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

}


return c;

}


int maxim(int a[50][50],int k)


void main()


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])

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

h<<a[2][i]<<' ';

h<<endl;



Subiectul nr.8


Se citeste de la tastatura un sir de 16 numere intregi mai mici decat 100.

a) Sa se creeze fisierul text date.in care sa contina patru linii. Fiecare linie afisata contine elementele unei linii dintr-o matrice 4x4, separate prin spatii;

b) Sa se scrie un subprogram care sa returneze elementul maxim de pe diagonala secundara a matricei din fisierul date.in;

c) Sa se scrie un subprogram care sa determine numarul elementelor super prime continute de fisierul date.in (un numar este superprim daca este prim atat el cat si rasturnatul lui);

d) Scrieti in fisierul text date.out elementele de pe linia a treia din matricea de mai sus, ordonate crescator.


Exemplu:

Date de intrare:

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


Date de iesire :

a) Fisierul text date.in contine matricea:

13 2 3 66

55 4 3 22

2 3 4 5

1 2 1 17

b) Elementul maxim de pe diagonala secundara a matricei din fisierul date.in este: 66

c) Exista 2 numere superprime.

d) Fisierul date.out contine 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 PASCAL

type 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;

begin

max:=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;

function superprim

(a:matr;k:integer):integer

var i,j,nr,c,p,inv,m:integer;

begin

c:=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


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);


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;

writeln(' elementul maxim ',maxim(a,4));


writeln(' numarul de elemente superprime ',superprim(a,4));


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.

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 superprim

(int a[50][50],int k)

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

if (inv%nr==0) p++;

if (p==0)

}

} }

return c;

}

void main()

// a)


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 '<<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])



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

h<<a[3][j]<<' ';

h<<endl;

h.close();



Subiectul nr.9


Se citeste de la tastatura un sir de 10 numere intregi mai mici decat 100.

a) Sa se creeze fisierul text date.in care sa contina pe o linie cele 10 valori, separate prin spatiu;

b) Sa se scrie un subprogram care sa returneze suma cifrelor elementului maxim din fisierul date.in;

c) Sa se scrie un subprogram care sa determine numarul elementelor prime continute de fisierul date.in;

d) Scrieti in fisierul text date.out sirul dat, ordonat crescator.


Exemplu:

Date de intrare :

37 23 4 77 12 34 5 90 18 19


Date de iesire:

a) Fisierul text date.in contine pe o linie: 37 23 4 77 12 34 5 90 18 19

b) Suma cifrelor elementului maxim din fisierul date.in este: 9

c) Numarul elementelor prime continute de fisierul date.in : 4

d) Fisierul text date.out contine 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 PASCAL

type 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;

begin

max:=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;

begin

p:=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;

begin

assign (f,'date.in'); rewrite(f);


for i:=1 to 10 do

begin

read(b);

write(f,b,' ');

end;

close(f);


reset(f);

for i:=1 to 10 do

read(f,a[i]); writeln;

writeln(' suma cifrelor ',maxim(a,10));


writeln(' numarul elementelor

prime ',prime(a,10));



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.

Varianta C

#include <fstream.h>

#include <stdlib.h>

int a[10],b;

int maxim(int a[50],int k)


return s;


int prime(int a[50],int k)


return p;


void main()

f.close();

// b)


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


cout<<endl<<' suma cifrelor '<<maxim(a,10);

// c)

cout<<endl<<'numarul elementelor prime

'<<prime(a,10);

// d)

while(ok==1)

}


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


f.close();

g.close();

h.close();



Subiectul nr.10


Se citeste de la tastatura un sir de 10 numere intregi mai mici decat 100.

a) Sa se creeze fisierul text date.in care sa contina pe o linie cele 10 valori, separate prin spatiu;

b) Sa se scrie un subprogram care sa returneze numarul de elemente din fisierul date.in care au ultima cifra egala cu 3;

c) Sa se scrie un subprogram care sa determine numarul elementelor continute de fisierul date.in care au suma cifrelor numar par;

d) Scrieti in fisierul text date.out sirul dat, ordonat descrescator.


Exemplu:

Date de intrare :

17 23 45 67 12 34 3 90 8 9


Date de iesire:

a) Fisierul text date.in contine pe o linie: 17 23 45 67 12 34 3 90 8 9

b) Numarul de elemente din fisierul date.in care au ultima cifra egala cu 3: 2

c) Numarul elementelor continute de fisierul date.in care au suma cifrelor numar par: 2

d) Fisierul text date.out contine 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 PASCAL

type

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;

begin

trei:=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;

begin

nr:=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;

begin

assign (f,'date.in');

rewrite(f);


for i:=1 to 10 do begin

read(b); write(f,b,' ');

end;

close(f);


reset(f);

for i:=1 to 10 do read(f,a[i]);

close(f);

writeln;

writeln(' numarul de elemente care se termina cu trei ',nrtrei(a,10));


writeln;

writeln(' numarul de elemente cu suma cifrelor para ',cifre(a,10));


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.

Varianta C

#include <fstream.h>

#include <stdlib.h>

int a[10],b;


int nrtrei(int a[50],int k)



int cifre(int a[50], int k)


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

}

return nr;


void main()


f.close();

// b)

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


cout<<endl;


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)


}


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


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

h.close();



Subiectul nr.11


Se citeste de la tastatura un sir de 10 numere intregi mai mici decat 100.

a) Sa se creeze fisierul text date.in care sa contina pe o linie cele 10 valori, separate prin spatiu;

b) Sa se scrie un subprogram care sa returneze suma cifrelor pare ale numerelor din fisierul date.in;

c) Sa se scrie un subprogram care sa determine numarul elementelor prime de doua cifre continute de fisierul date.in;

d) Scrieti in fisierul text date.out sirul dat, ordonat crescator.



Exemplu:

Date de intrare :

7 23 4 17 12 34 5 90 8 9


Date de iesire :

a) Fisierul text date.in contine pe o linie: 7 23 4 17 12 34 5 90 8 9

b) Suma cifrelor pare ale numerelor din fisierul date.in este: 20

c) In fisier sunt 2 numere prime de doua cifre

d) Fisierul text date.out contine 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

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 PASCAL

type

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;

begin

s:=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;

begin

nr:=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;

begin

assign (f,'date.in');

rewrite(f);


for i:=1 to 10 do begin

read(b);write(f,b,' ');

end;

close(f);


reset(f);

for i:=1 to 10 do read(f,a[i]);

close(f);

writeln;

writeln(' suma cifrelor pare ',suma(a,10));


writeln(' numarul de elemente prime ',nrprime(a,10));



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.

Varianta C

#include <fstream.h>

#include <stdlib.h>

int a[50],b;


int suma(int a[50],int k)


return s;


int nrprime(int a[50],int k)


return nr;


void main()

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)

}

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

f.close();

g.close();

h.close();




Subiectul nr.12


Se citeste de la tastatura un sir de 10 numere intregi mai mici decat 100.

a) Sa se creeze fisierul text date.in care sa contina pe o linie cele 10 valori, separate prin spatiu;

b) Sa se scrie un subprogram care sa returneze elementele din fisierul date.in care apartin intervalului [a,b] unde a si b sunt numere intregi mai mici decat 100 citite de la tastatura;

c) Sa se scrie un subprogram care sa determine cel mai mare numar prim din fisierul date.in;

d) Scrieti in fisierul text date.out sirul dat, ordonat descrescator.


Exemplu:

Date de intrare :

37 23 4 77 12 34 5 90 18 19


Date de iesire :

a) Fisierul text date.in contine pe o linie: 37 23 4 77 12 34 5 90 18 19

b) Pentru intervalul [36, 80] elementele din fisierul date.in care apartin intervalului sunt: 37 77

c) Cel mai mare numar prim din fisierul date.in este: 37

d) Fisierul text date.out contine 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 PASCAL

var f,g:text; p:boolean;

i,nr,a,b,contor:integer;

v:array[1..10] of integer; procedure creare;

var i,nr:integer;

begin

assign(f,'date.in'); rewrite(f);

for i:=1 to 10 do begin

read(nr); write(f,nr,' ');end;

close(f);end;

procedure apartine;

begin

write('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;

function maxprim:integer;

var nrdiv,maxp,j:integer;

begin

assign(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


creare;




apartine;


for i:=1 to contor do write(' ',v[i]);


writeln; writeln(' ',maxprim);


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.

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)




int maxprim(int v[10])


return maxp;



void main()


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])   ;

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


h.close();

}


Subiectul nr.13


Se citeste de la tastatura un sir de 10 numere intregi mai mici decat 100.

a) Sa se creeze fisierul text date.in care sa contina pe o linie cele 10 valori, separate prin spatiu;

b) Sa se scrie un subprogram care sa returneze suma cifrelor impare ale numerelor din fisierul date.in;

c) Sa se scrie un subprogram care sa determine cel mai mare numar palindrom din fisierul date.in (numar palindrom este un sir de cel putin doua cifre care citit de la dreapta la stanga este identic cu numarul citit de la stanga la dreapta);

d) Scrieti in fisierul text date.out sirul dat, ordonat crescator.


Exemplu:

Date de intrare:

7 23 4 17 12 33 5 99 8 9


Date de iesire:

a) Fisierul text date.in contine pe o linie: 7 23 4 17 12 33 5 99 8 9

b) Suma cifrelor impare ale numerelor din fisierul date.in: 57

c) Cel mai mare numar palindrom din fisierul date.in este: 99

d) Fisierul text date.out contine 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

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 PASCAL

type 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;

begin

maxp:=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


assign (f,'date.in');rewrite(f);

for i:=1 to 10 do begin

read(a);write(f,a,' ');

end;

close(f);reset(f);


for i:=1 to 10 do

read(f,v[i]);

close(f);writeln;

writeln(' suma este

',suma(v,10));


writeln(' maxim palindrom in

fisier ',maxpalin(v,10));


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.

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)



}

return s;}

int maxpalin(int a[10],int k)


if ((p==a[j])&& (maxp<a[j]))

maxp=a[j];

}

}

return maxp;

}

void main()



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 (i=1;i<=10;i++) h<<v[i]<<' ';

h.close();}



Subiectul Nr.16


Sa se realizeze un program care sa raspunda urmatoarelor solicitari. Sa se creeze fisierul text date.in care sa contina un sir de 10 numere intregi aleatoare mai mici decat 100. Cerinte :

a) Sa se scrie un subprogram care sa returneze cate dintre elementele din fisierul date.in au trei divizori;

b) Sa se scrie un subprogram care sa determine cel mai mare numar neprim din fisierul date.in;

c) Scrieti in fisierul text date.out sirul de mai sus ordonat descrescator.

Am folosit subprogramele:

- CREARE: creaza un fisier cu structura ceruta de date -

- AFISARE: citeste datele din fisierul de intrare si afiseaza pe ecran datele citite din fisier

- NR_A: citeste datele din fisierul de intrare si calculeaza numarul de elemente din fisierul de intrare care au exact 3 divizori, numar pe care il scrie pe ecran;

- MAXIM: citeste datele din fisierul de intrare, afla cel mai mare numar neprim dintre datele citite si il returneaza pentru programul principal; daca nu exista numere neprime, atunci se returneaza o valoare negativa;

- SORTARE: citeste datele din fisierul de intrare si le sorteaza, dupa care le scrie in fisierul de iesire.

Varianta PASCAL

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 nr_a:integer;

var nr,d,i,x:integer;

prim:boolean;

begin

reset(f);

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]

then

begin

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;

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;

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.


Varianta C/C++

#include <iostream.h>

#include <conio.h>

#include <math.h>

#include <stdlib.h>

#include <fstream.h>

int a[20];


void creare()


void afisare()


cout<<endl;

f.close();


int nr_a()


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

if (prim)

nr++;

}

}

f.close();

return nr;



int maxim()


if (a[i]==0 || a[i]==1) prim=0;

if (!prim)

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

}

f.close();

return max;



void sortare()


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

" ';

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



void main()





Subiectul Nr.17



Sa se realizeze un program care sa raspunda urmatoarelor solicitari. Sa se creeze fisierul text date.in care sa contina un sir de 10 numere intregi aleatoare mai mici decat 100. Cerinte :

a) Sa se scrie un subprogram care sa returneze elementele din fisierul date.in care sunt divizibile cu o valoare x citita de la tastatura;

b) Sa se scrie un subprogram care sa insereze intre ultimul si penultimul element al sirului din fisierul date.in media aritmetica a lor;

c) Scrieti in fisierul text date.out sirul de mai sus ordonat descrescator.


Observatii

- datele cerute la cerinta a) au fost afisate pe ecran;

- la punctul b), media aritmetica poate "iesi" din Z si de aceea, am lucrat cu un vector de numere reale


Am folosit subprogramele:

- CREARE: creaza structura ceruta de date

- AFISARE: citeste datele din fisierul de intrare si le afiseaza pe ecran

- DIVIZ: citeste datele din fisierul de intrare, apoi citeste o valoare x si calculeaza numarul de elemente din sirul de intrare care se divid cu x

- INSERARE: citeste datele din fisierul de intrare si realizeaza inserarea ceruta

- SORTARE: citeste datele din fisierul de intrare si le sorteaza, dupa care le scrie in fisierul de iesire


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

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.


#include <iostream.h>

#include <conio.h>

#include <math.h>

#include <stdlib.h>

#include <fstream.h>

int a[20];


void creare()



void afisare()


cout<<endl;

f.close();


void inserare()


void diviz()


if (k==0) cout<<'Nu sunt asemenea numere in sir';

cout<<endl;




void sortare()


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

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


void main()





Subiectul Nr.18



Sa se realizeze un program care sa raspunda urmatoarelor solicitari. Sa se creeze fisierul text date.in care sa contina un sir de 10 numere intregi aleatoare mai mici decat 100. Cerinte:

a) Sa se scrie un subprogram care sa returneze cel mai mare divizor comun al elementelor din fisierul date.in;

b) Sa se scrie un subprogram care sa insereze intre primul si al doilea element al sirului din fisierul date.in o valoare x citita de la tastatura;

c) Scrieti in fisierul text date.out sirul de mai sus ordonat descrescator.


Am folosit subprogramele:

- CREARE: creaz structura ceruta de date

- AFISARE: citeste datele de intrare din fisierul de intrare si le afiseaza pe ecran

- CMMDC: citeste datele din fisierul de intrare si calculeaza cmmdc-ul elementelor din fisier (folosind algoritmul lui Euclid)

- INSERARE: citeste datele din fisierul de intrare si realizeaza inserarea ceruta;

- SORTARE: citeste datele din fisierul de intrare si le sorteaza, dupa care le scrie in fisierul de iesire


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

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;

writeln('a) Cmmdc:

',cmmdc);

inserare;

sortare;

close(f); close(g);

end.


#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <fstream.h>

int a[20];


void creare()


void afisare()


cout<<endl;

f.close();


int cmmdc()


dc=y;

}

return dc;


void inserare()


void sortare()


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

g<<a[i]<<' ';

g.close();



void main()







Subiectul Nr.19


Sa se realizeze un program care sa raspunda urmatoarelor solicitari. Sa se creeze fisierul text date.in care sa contina un sir de 10 numere intregi aleatoare mai mici decat 100. Cerinte

a) Sa se scrie un subprogram care sa returneze cate dintre elementele din fisierul date.in sunt prime cu o valoare x citita de la tastatura;

b) Sa se scrie un subprogram care sa calculeze media aritmetica a numerelor din sir si sa o insereze la jumatatea sirului;

d) Scrieti in fisierul text date.out sirul de mai sus ordonat descrescator.


Observatii

pentru cerinta a) se lucreaza cu un vector de numere reale;


Am folosit subprogramele:

- CREARE: creaza structura ceruta de date

- AFISARE: citeste datele de intrare din fisierul de intrare si afiseaza pe ecran datele citite din fisier

- PRIME: citeste datele din fisierul de intrare si returneaza numarul de elemente din sirul de intrare si care sunt prime cu valoarea x citita de la tastatura, adica (a[i],x)=1;

- INSERARE: citeste datele din fisierul de intrare si realizeaza inserarea dorita (pe pozitia 6) intr-un vector de numere reale;

- SORTARE: citeste datele din fisierul de intrare si le sorteaza, dupa care le scrie in fisierul de iesire


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;


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

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.


#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <fstream.h>

int a[200],x,nr=0;


void creare()


void afisare()


cout<<endl;

f.close();



void prime()


if (q==1)

nr++;

}



void inserare()


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]<<' ';

cout<<endl;



void sortare()


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

g<<a[i]<<' ';

g.close();



void main()





Subiectul Nr.20


Sa se realizeze un program care sa raspunda urmatoarelor solicitari. Sa se creeze fisierul text date.in care sa contina un sir de 10 numere intregi aleatoare mai mici decat 100. Cerinte

a) Sa se scrie un subprogram care sa determine elementul minim si maxim din fisierul date.in si pozitiile pe care le ocupa in sirul numerelor date;

b) Sa se scrie un subprogram care sa determine cate dintre elementele sirului cuprinse intr-un interval citit de la tastatura sunt numere pare;

c) Scrieti in fisierul text date.out sirul de mai sus ordonat crescator.


Am folosit subprogramele:

- CREARE: creaza structura ceruta de date

- AFISARE: citeste datele din fisierul de intrare si le afiseaza pe ecran

- MIN_MAX: citeste datele din fisierul de intrare si afiseaza rezultatele de la cerinta a)

- INTERVAL: citeste datele din fisierul de intrare si (de la tastatura) limitele unui interval; apoi va calcula si va afisa cate dintre elementele din fisierul de intrare sunt pare si in intervalul citit;

- SORTARE: citeste datele din fisierul de intrare si le sorteaza, dupa care le scrie in fisierul de iesire.


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,' ');

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');

write('Sirul generat: ');

afisare;

min_max;

interval;

sortare;

end.


#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <fstream.h>

int a[200];


void creare()



void afisare()


cout<<endl;

f.close();



void min_max()



void interval()



void sortare()


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

g<<a[i]<<' ';

g.close();



void main()






Subiectul Nr.21


Sa se realizeze un program care sa raspunda urmatoarelor solicitari. Sa se creeze fisierul text date.in care sa contina un sir de 10 numere intregi aleatoare mai mici decat 100. Cerinte

a) Sa se scrie un subprogram care sa returneze cel mai mic multiplu comun dintre elementele din fisierul date.in;

b) Sa se scrie un subprogram care sa insereze intre ultimul si penultimul element al sirului din fisierul date.in media aritmetica a lor;

c) Scrieti in fisierul text date.out sirul de mai sus ordonat descrescator.

Observatii

- in fisierul de intrare am generat valori nenule si mici deoarece la cerinta a) avem de calculat cmmmc

- pentru cerinta b) se lucreaza cu un vector de numere reale


Am folosit subprogramele:

- CREARE: acesta creaza structura ceruta de date

- AFISARE: citeste datele din fisierul de intrare si le afiseaza pe ecran

- CMMMC: citeste datele din fisierul de intrare si afiseaza cmmmc al elementelor citite din fisier, dupa formula:

[x; y]=a*b / (a; b), iar (x; y) se afla cu algoritmul lui Euclid;

- INSERARE: citeste datele din fisierul de intrare si realizeaza inserarea ceruta

- SORTARE: citeste datele din fisierul de intrare si le sorteaza, dupa care le scrie in fisierul de iesire


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;


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;

begin

reset(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,' ');

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.


#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <fstream.h>

int a[200];


void creare()



void afisare()


cout<<endl;

f.close();



void cmmmc()


mc=a[i] / y * mc;

}

cout<<"a) Cmmmc='<<mc

<<endl;



void inserare()



void sortare()


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

g<<a[i]<<' ';

g.close();



void main()





Subiectul Nr.22


Sa se realizeze un program care sa raspunda urmatoarelor solicitari. Sa se creeze fisierul text date.in care sa contina o matrice cu numere intregi cu 4 linii si 4 coloane. Cerinte

a) Sa se scrie un subprogram care sa returneze elementul minim al matricei si numarul lui de aparitii;

b) Sa se scrie un subprogram care sa determine numarul elementelor de tip palindrom de sub diagonala principala a matricei (numar palindrom este un sir de cel putin doua cifre care citit de la dreapta la stanga este identic cu numarul citit de la stanga la dreapta);

c) Scrieti in fisierul text date.out elementele de pe prima linie a matricei de mai sus ordonate crescator.



Am folosit subprogramele:

- CREARE: creaza structura ceruta de date

- AFISARE: citeste datele din fisierul de intrare si le afiseaza pe ecran

- MINIM: citeste datele din fisierul de intrare, afla si afiseaza minimul si poziitiile in care acesta apare in matrice;

- PALINDROM: primeste ca parametru numirul natural x; daca x este palindrom, atunci returneaza valoarea logica ADEVARAT, iar in caz contrar, valoarea logica FALS

- NR_PALINDROM: citeste datele din fisierul de intrare, calculeaza si returneaza in programul principal numarul de palindroame de sub diagonala principala;

- SORTARE: citeste datele din fisierul de intrare, depune prima linie a matricei intr-un vector, pe care il sorteaza si il scrie in fisierul de iesire


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

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;

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.


#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <fstream.h>

int a[10][10];


void creare()


f.close();


void afisare()


cout<<endl;

}

cout<<endl;

f.close();


void minim()



int palindrom(int x)


if (x==xr)

return 1;

else return 0;



int nr_palind()



void sortare()


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

g<<v[i]<<' ';

g.close();


void main()



Subiectul Nr.23


Sa se realizeze un program care sa raspunda urmatoarelor solicitari. Sa se creeze fisierul text date.in care sa contina o matrice cu numere intregi cu 4 linii si 4 coloane. Cerinte

a) Sa se scrie un subprogram care sa returneze elementul maxim de sub diagonala secundara a matricei din fisierul date.in;

b) Sa se scrie un subprogram care sa determine cate dintre elementele matricei sunt numere perfecte;

c) Scrieti in fisierul text date.out elementele de pe coloana a doua ale matricei de mai sus ordonate crescator.


Am folosit subprogramele:

- CREARE: creaza structura ceruta de date

- AFISARE: citeste datele din fisierul de intrare si le afiseaza pe ecran

- MAXIM: citeste datele din fisierul de intrare si afiseaza maximul de sub diagonala secundara a matricei

- NR_PERF: citeste datele din fisierul de intrare si numara cate numere perfecte sunt in matrice; utilizeaza subprogramul:

- PERFECT, care primeste un parametru natural x si returneaza valoarea logica ADEVARAT sau FALS, dupa cum x este sau nu un numar perfect;

- SORTARE: citeste datele din fisierul de intrare, selecteaza intr-un vector coloana a doua din matrice, sorteaza vectorul si il scrie in fisierul de iesire


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);

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);

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.

#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <fstream.h>

int a[10][10];


void creare()


f.close();


void afisare()


cout<<endl;


void maxim()



int perfect(int x)



int nr_perf()



void sortare()


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

g.close();



void main()




Subiectul Nr.24


Sa se realizeze un program care sa raspunda urmatoarelor solicitari. Sa se creeze fisierul text date.in care sa contina o matrice cu numere intregi cu 4 linii si 4 coloane. Cerinte

a) Sa se scrie un subprogram care sa returneze suma elementelor pare de pe marginea exterioara a matricei;

b) Sa se scrie un subprogram care sa determine numarul elementelor matricei egale cu o valoare x data de la tastatura;

c) Scrieti in fisierul text date.out elementele de pe linia a doua ale matricei de mai sus ordonate crescator.


Am folosit subprogramele:

- CREARE: creaza structura ceruta de date

- AFISARE: citeste datele de intrare din fisierul de intrare si afiseaza pe ecran datele citite din fisier

- SUMA: citeste datele din fisierul de intrare, calculeaza si returneaza suma elementelor de pe marginile matricei;

- NX: citeste datele din fisierul de intrare si apoi o valoare x, dupa care numara cate elemente egale cu x se gasesc in matrice, numar pe care il returneaza

- SORTARE: citeste datele din fisierul de intrare, depune elementele din linia a doua a matricei intr-un vector pe care il sorteaza si il afiseaza in fisierul de iesire.


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),' ');

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

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;

assign(f,'date.in');

writeln('Matricea generata: ');

afisare;

writeln('a) ',suma);

writeln('b) ',nx);

sortare;

end.


#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <fstream.h>

int a[10][10];


void creare()


f.close();



void afisare()


cout<<endl;

f.close();



int suma()



int nx()



void sortare()


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

g<<v[i]<<' ';

g.close();



void main()




Subiectul Nr.25


Sa se realizeze un program care sa raspunda urmatoarelor solicitari. Sa se creeze fisierul text date.in care sa contina o matrice cu numere intregi cu 4 linii si 4 coloane. Cerinte

a) Sa se scrie un subprogram care sa returneze elementul maxim de pe diagonala principala a matricei din fisierul date.in;

b) Sa se scrie un subprogram care sa determine cate dintre elementele matricei sunt numere perfecte;

c) Scrieti in fisierul text date.out elementele de pe linia a doua ale matricei de mai sus ordonate crescator.


Am folosit subprogramele

- CREARE: creaza structura ceruta de date

- AFISARE: citeste datele din fisierul de intrare si le afiseaza pe ecran

- MAXIM: citeste datele din fisierul de intrare, afla maximul din diagonala principala a matricei, maxim pe care il returneaza;

- NR_PERF: citeste datele din fisierul de intrare si returneaza numarul de numere perfecte din matrice; pentru aceasta, el se foloseste de subprogramul:

- PERFECT, care primeste parametrul natural x si returneaza ADEVARAT sau FALS, dupa cum x este perfect sau nu

- SORTARE: citeste datele din fisierul de intrare, depune linia a doua a matricei intr-un vector pe care il sorteaza, dupa care il scrie in fisierul de iesire.


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);

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;


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.

#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <fstream.h>

int a[10][10];


void creare()


f.close();



void afisare()


cout<<endl;

}

cout<<endl;



int maxim()



int perfect(int x)



int nr_perf()



void sortare()


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

g.close();



void main()





Nu se poate descarca referatul
Acest referat nu se poate descarca

E posibil sa te intereseze alte referate despre:


Copyright © 2024 - Toate drepturile rezervate QReferat.com Folositi referatele, proiectele sau lucrarile afisate ca sursa de inspiratie. Va recomandam sa nu copiati textul, ci sa compuneti propriul referat pe baza referatelor de pe site.
{ Home } { Contact } { Termeni si conditii }