Sunteți pe pagina 1din 33

LICEUL TEORETIC ,,GRIGORE MOISIL

Subiectul nr.2
Fiierul numere.in conine, pe prima linie, un numr natural n (2<n<100) iar pe linia a
doua n numere cu cel mult 9 cifre fiecare.
Se consider subprogramul sub care primete prin intermediul parametrului x un numr natural
i returneaz valoarea 1 dac x aparine irului lui Fibonacci i 0 n caz contrar.
Cerine:
a) Scriei definiia complet a subprogramului sub;
b) Scriei un program Pascal/C/C++ care, folosind apeluri utile ale subprogramului sub
citete numrul n i cele n numere, apoi determin toate numerele care aparin irului lui
Fibonacci i le afieaz, separate prin cte un spaiu, pe ecran. Dac niciunul dintre cele n
numere nu aparin irului lui Fibonacci, atunci programul va afia pe ecran mesajul NU EXISTA.
irul lui Fibonacci, legea creterilor organice, se va considera aa cum a fost definit de ctre
Leonardo Fibonacci:1,1,2,3,5,8

6
Exemplu. Dac fiierul numere.in are coninutul 5 20 21 8 13 15
alturat, programul va afia pe ecran:
5 21 8 13

#include <iostream> return 0;


#include <fstream> }
using namespace std; int main()
ifstream f("numere.in"); {
unsigned n,k; f>>n;
unsigned long x; for(int i=1;i<=n;i++
int sub( unsigned long x)
{ {
unsigned long a,b,c; f>>x;
if (x==1) if (sub(x)==1)
return 1; {
a=b=1; cout<<x<<' ';
c=a+b; k++;
while(c<x) }
{ }
a=b; f.close();
b=c; if(k==0)
c=a+b; cout<<"NU EXISTA";
} return 0;
if (c==x) }
return 1;
else

ATESTAT Page 1
LICEUL TEORETIC ,,GRIGORE MOISIL

Subiectul nr.3
Fiierul numere.in conine, pe prima linie, un numr natural n cu cel mult 9 cifre.
Se consider subprogramul sub care primete prin intermediul parametrului x un numr natural
i returneaz cel mai mare termen din irul lui Fibonacci mai mic sau egal cu x.
Cerine:
a) Scriei definiia complet a subprogramului sub;
b) Scriei un program Pascal/C/C++ care, folosind apeluri utile ale subprogramului sub
citete numrul n i afieaz pe ecran, separate prin cte un spaiu, un numr minim de
elemente care aparin irului lui Fibonacci, a cror sum este egal cu numrul n.
irul lui Fibonacci, legea creterilor organice, se va considera aa cum a fost definit de ctre
Leonardo Fibonacci:1,1,2,3,5,8

Exemplu. Dac fiierul numere.in are coninutul 30


alturat, programul va afia pe ecran:
21 8 1

return b;
#include <iostream> }
#include <fstream> int main()
using namespace std; {
ifstream f("numere.in"); f>>n;
unsigned long n,y,s; f.close();
int sub( unsigned long x) y=sub(n);
{ s=y;
unsigned long a,b,c;
if (x==1) while(s<n)
return 1; {
a=b=1; cout<<y<<' ';
c=a+b; y=sub(y-1);
while(c<x) while(s+y>n)
{ y=sub(y-1);
a=b; s=s+y;
b=c; }
c=a+b; cout<<y;
} return 0;
if (c==x) }
return c;
else

ATESTAT Page 2
LICEUL TEORETIC ,,GRIGORE MOISIL

Subiectul nr.4
Fiierul numere.in conine, pe prima linie, un numr natural n (2<n<100) iar pe linia a
doua n numere cu cel mult 9 cifre fiecare.
Se consider subprogramul sub care primete prin intermediul parametrului x un numr natural
i returneaz valoarea 1 dac x este un numr prim i 0 n caz contrar.
Cerine:
a) Scriei definiia complet a subprogramului sub;
b) Scriei un program Pascal/C/C++ care, folosind apeluri utile ale subprogramului sub
citete numrul n i cele n numere, apoi determin toate numerele prime dintre cele citite i le
afieaz, separate prin cte un spaiu, pe ecran. Dac niciunul dintre cele n numere nu este
prim, atunci programul va afia pe ecran mesajul NU EXISTA.

6
Exemplu. Dac fiierul numere.in are coninutul 5 20 21 8 13 15
alturat, programul va afia pe ecran:
5 13
#include <iostream> int main()
#include<fstream> {
using namespace std; f>>n;
ifstream f("numere.in"); for(int i=1;i<=n;i++)
unsigned n,k; {
long x; f>>x;
int sub(long x) if(sub(x)==1)
{ {
if(x<=1) cout<<x<<' ';
return 0; k++;
if(x==2) }
return 1; }
if(x%2==0) if(k==0)
return 0; cout<<"NU EXISTA";
for(long d=3;d*d<=x;d+=2)
if(x%d==0) return 0;
return 0; }
return 1;
}

ATESTAT Page 3
LICEUL TEORETIC ,,GRIGORE MOISIL

Subiectul nr.5
Fiierul numere.in conine, pe prima linie, un numr natural n (2<n<100.
Se consider subprogramul sub care primete prin intermediul parametrului x un numr natural
i returneaz valoarea 1 dac x este un numr prim i 0 n caz contrar.
Cerine:
a) Scriei definiia complet a subprogramului sub;
b) Scriei un program Pascal/C/C++ care, folosind apeluri utile ale subprogramului sub
citete numrul n apoi determin i afieaz primele n numere prime i le afieaz, separate
prin cte un spaiu, pe ecran
5
Exemplu. Dac fiierul numere.in are coninutul
alturat, programul va afia pe ecran:
2 3 5 7 11
#include <iostream> int main()
#include<fstream> {
using namespace std; f>>n;
ifstream f("numere.in"); k=2;
unsigned n,i; while(i<n)
long x,k; {
int sub(long x) if(sub(k)==1)
{ {
if(x<=1) cout<<k<<' ';
return 0; i++;
if(x==2) }
return 1; k++;
if(x%2==0) }
return 0;
for(long d=3;d*d<=x;d+=2)
if(x%d==0) return 0;
return 0; }
return 1;
}

ATESTAT Page 4
LICEUL TEORETIC ,,GRIGORE MOISIL

Subiectul nr.6
Fiierul numere.in conine, pe prima linie, un numr natural par n, cu cel mult 9 cifre.
Se consider subprogramul sub care primete prin intermediul parametrului x un numr natural
i returneaz valoarea 1 dac x este un numr prim i 0 n caz contrar.
Cerine:
a) Scriei definiia complet a subprogramului sub;
b) Scriei un program Pascal/C/C++ care, folosind apeluri utile ale subprogramului sub,
citete numrul n apoi determin i afieaz toate perechile de numere prime (a,b) (a<b) a
cror sum este egal cu n.
20
Exemplu. Dac fiierul numere.in are coninutul
alturat, programul va afia pe ecran:
(3,17) (7,13)
if(x%d==0)
return 0;
#include <iostream> return 1;
#include<fstream> }
using namespace std; int main()
ifstream f("numere.in"); {
unsigned long n; f>>n;
int sub(unsigned long x) f.close();
{ for(unsigned long i=2;i<=n/2;i++)
if(x<=1) if((sub(i)==1) && (sub(n-i)==1))
return 0; cout<<'('<<i<<','<<n-i<<") ";
if(x==2)
return 1; return 0;
if(x%2==0) }
return 0;
for(long d=3;d*d<=x;d+=2)

ATESTAT Page 5
LICEUL TEORETIC ,,GRIGORE MOISIL

Subiectul nr.7
Fiierul numere.in conine, pe prima linie, un numr natural par n, cu cel mult 9 cifre.
Se consider subprogramul sub care primete prin intermediul parametrului x un numr natural
i returneaz valoarea 1 dac x este un numr prim i 0 n caz contrar.
Cerine:
a) Scriei definiia complet a subprogramului sub;
b) Scriei un program Pascal/C/C++ care, folosind apeluri utile ale subprogramului sub
citete numrul n par (n>2), apoi determin i afieaz o pereche de numere prime (a,b)
(a<n, n<b) cu proprietatea c diferena b-a este minim.
20
Exemplu. Dac fiierul numere.in are coninutul
alturat, programul va afia pe ecran:
(19,23)

#include <iostream>
#include<fstream> while(sub(k)==0)
using namespace std; k++;
ifstream f("numere.in"); cout<<k;
unsigned n,k;
int sub(long x) return 0;
{ }
if(x<=1)
return 0;
if(x==2)
return 1;
if(x%2==0)
return 0;
for(long d=3;d*d<=x;d+=2)
if(x%d==0)
return 0;
return 1;
}
int main()
{
f>>n;
f.close();
k=n-1; /// pt ca n e par caut cel nr
prim mai mic nr prim decat el
incepand cu n-1
while(sub(k)==0)
k--;
cout<<k<<' ';
k=n+1;
ATESTAT Page 6
LICEUL TEORETIC ,,GRIGORE MOISIL

Subiectul nr.8
Fiierul numere.in conine, pe prima linie, un numr natural n(2<n<100) iar pe linia a
doua n numere cu cel mult 9 cifre fiecare.
.
Se consider subprogramul sub care primete prin intermediul parametrului x un numr natural
i returneaz valoarea 1 dac x are prima cifr egal cu ultima cifr i 0 n caz contrar.

Cerine:
a) Scriei definiia complet a subprogramului sub;
b) Scriei un program Pascal/C/C++ care citete numrul n i cele n numere din fiier i
afieaz pe ecran n ordine cresctoare toate numerele ce ncep i se termin cu aceeai cifr.
Numerele se afieaz separate prin cte un spaiu. Programul va utiliza apelui utile ale
subprogramului sub.
6
c) Exemplu. Dac fiierul numere.in are 21 3123 7 11 454 10
coninutul alturat, programul va afia pe ecran:
d) 7 11 454 3123

#include <iostream> aux=v[i];


#include<fstream> v[i]=v[j];
v[j]=aux;
using namespace std; }
}
ifstream f("numere.in");
unsigned n,i,j; int main()
long v[100],x; {
f>>n;
int sub(long x) for(int i=0;i<n;i++)
{ {
int u=x%10; f>>x;
while(x>9) if(sub(x))
x=x/10; v[j++]=x;
return (u==x);
} }
f.close();
void ordonare(long v[100], int n) ordonare(v,j);
{ for(int i=0;i<j;i++)
long aux; cout<<v[i]<<' ';
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++) return 0;
if(v[i]>v[j]) }
{

ATESTAT Page 7
LICEUL TEORETIC ,,GRIGORE MOISIL

Subiectul nr.9
Se consider subprogramul sub care primete prin intermediul parametrului x un numr natural
cu cel mult 9 cifre i returneaz valoarea numrul obinut din x prin permutarea circulara a
cifrelor sale cu o poziie spre stnga.

Cerine:
a) Scriei definiia complet a subprogramului sub;
b) Scriei un program Pascal/C/C++ care citete de la tastatur un numr natural n i scrie
n fiierul numere.out toate numerele ce se pot obine din n prin permutri circulare la stnga
ale cifrelor lui n. Numerele se vor scrie in fiier separate prin cte un spaiu. Programul va utiliza
apelui utile ale subprogramului sub.

Exemplu. Dac de la tastatur se citete numrul 67891235 78912356 89123567


56789123, fiierul numere.out va avea 91235678 12356789 23567891
coninutul alturat: 35678912

#include <iostream> x=(x%a)*10 + p;

#include<fstream> return x;

#include<math.h> }

using namespace std;

int main()

ofstream f("numere.out"); {

unsigned long n; cout<<"Cititi numarul: ";

unsigned long sub(unsigned long x) cin>>n;

{ unsigned long y=sub(n);

int k=0,p; while(n!=y)

unsigned long y=x; {

while (y) f<<y<<' ';

{ y=sub(y);

y/=10; }

k++; f.close();

unsigned long a=powl(10,k-1); return 0;

p=x/a; }

ATESTAT Page 8
LICEUL TEORETIC ,,GRIGORE MOISIL

Subiectul nr.10
Fiierul date.in conine, pe prima linie, un numr natural n (n<100), iar pe fiecare din
urmtoarele n linii este scris cte un cuvnt format din cel mult 20 de caractere.
Se consider subprogramul sub care primete prin intermediul parametrilor a i b dou cuvinte
i returneaz valoarea 1 dac cele dou iruri de caractere sunt unul anagrama celuilalt i
valoarea 0 n caz contrar.
Cerine:
a) Scriei definiia complet a subprogramului sub;
b) Scriei un program principal Pascal/C/C++ care, folosind apeluri utile ale
subprogramului sub citete numrul n i cele n cuvinte, apoi determin toate perechile de
cuvinte care sunt unul anagrama celuilalt, cte o pereche pe o linie a ecranului. Dac nu exist
nicio astfel de pereche de cuvinte, atunci programul va afia pe ecran mesajul NU EXISTA.
6
Exemplu. Dac fiierul date.in are coninutul alturat, rac
programul va afia pe ecran: iarna
rac car car
rac arc primavara
car arc arc
toamna

#include <iostream> if(p)


#include<fstream> strcpy(p,p+1);
#include<string.h> }
using namespace std; return (c[0]==NULL);

ifstream f("date.in"); }
int n; int main()
char x[100][21]; {
f>>n;
int sub(char a[21], char b[21]) for(int i=0;i<n;i++)
{ f>>x[i];
char *p,c[21]; f.close();
if (strlen(a)!=strlen(b))
return 0; for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
if(sub(x[i],x[j]))
strcpy(c,b); cout<<x[i]<<' '<<x[j]<<'\n';
for(int i=0;i<strlen(a);i++) return 0;
{ }
p=strchr(c,a[i]);

ATESTAT Page 9
LICEUL TEORETIC ,,GRIGORE MOISIL

Subiectul nr.11
Fiierul date.in conine, prima linie, un numr natural n (n<100), iar pe fiecare din
urmtoarele n linii este scris cte un cuvnt format din cel mult 20 de caractere, doar litere
mici ale alfabetului englez.
Se consider subprogramul sub cu doi parametri s i t, care primete prin parametrul s un
ir cu maximum 20 de caractere, litere mici ale alfabetului englez. Subprogramul returneaz prin
intermediul parametrului t irul obinut din s prin nlocuirea fiecrei vocale cu caracterul *. Se
consider vocale literele: a, e, i, o, u.
Cerine:
a) Scriei definiia complet a subprogramului sub;
b) Scriei un program Pascal/C/care, folosind apeluri utile ale subprogramului sub,
citete numrul n i cele n cuvinte, apoi le modific nlocuind fiecare vocal cu caracterul * .
Programul afieaz pe ecran cuvintele modificate, n linie, separate prin cte un spaiu.
4
Exemplu. Dac fiierul date.in are coninutul alturat, cojoc
programul va afia pe ecran: iarna
c*j*c **rn* *n* *l*v*l* ana
elevele

for(int i=0;i<n;i++)
{
#include <iostream>
f>>s;
#include <fstream>
cout<<s<<' ';
#include <string.h>
sub(s,t);
cout<<t<<'\n';
using namespace std;
}
ifstream f("date.in");
f.close();
int n;
return 0;
char s[21], t[21];
}
void sub(char s[21], char t[21])
{
int i;
for(i=0;i<strlen(s);i++)
if(strchr("aeiou",s[i]))
t[i]='*';
else
t[i]=s[i];
t[i]=NULL;
}

int main()
{
f>>n;

ATESTAT Page 10
LICEUL TEORETIC ,,GRIGORE MOISIL

Subiectul nr.12
Fiierul date.in conine pe prima linie doua numere naturale n(n<100) i k(1<k<=2n)
iar pe urmtoarele n linii cte n numere reale reprezentnd elementele unei matrice ptrate de
dimensiune n.

Subprogramul sub primete prin intermediul parametrului n (0<n<100) dimensiunea unei


matrice ptrate, prin intermediul parametrului a matricea de numere reale (aij cu 1in, 1jn) i
prin intermediul parametrului k un numr natural nenul1<k<=2n). El returneaz prin
intermediul parametrului s suma tuturor elementelor aij cu proprietatea c i+j=k.
Cerine:
a) Scriei definiia complet a subprogramului sub;

b) Scriei un program Pascal/C/C++ care citete din fiier numerele n,k i elementele
matricei i,folosind apeluri utile ale subprogramului sub afieaz suma elementelor din tablou
aflate strict deasupra diagonalei secundare a tabloului.

Exemplu:
date.in se afieaz
4 18
1631
6131
1316
3161
#include <iostream> for(int j=1;j<=n;j++)
#include <fstream> cout<<setw(4)<<a[i][j];
#include <iomanip> cout<<endl;
}
using namespace std; }

ifstream f("date.in"); /// Elementele dintr-o matrice care au suma


int n; indicilor egala cu o valoare data (k) se
float a[100][100],s,S; gasesc pe diagonala secundara
/// si pe diagonalele celelalte paralele cu ea,
void citire(float a[100][100], int &n) deci i+j=k => j=k-i => elementul a[i][k-i]
{
f>>n; void sub(int n, float a[100][100], int k, float
for(int i=1;i<=n;i++) &s)
for(int j=1;j<=n;j++) {
f>>a[i][j]; s=0;
f.close(); for(int i=1;i<=k-1;i++) /// Numarul
} elementelor de pe fiecare diagonala este egal
cu suma indicilor unui element-1
void afisare(float a[100][100], int n) s+=a[i][k-i];
{ }
for(int i=1;i<=n;i++) int main()
{ {

ATESTAT Page 11
LICEUL TEORETIC ,,GRIGORE MOISIL

citire(a,n); //cout<<"Suma pe pe diagonala


afisare(a,n); "<<i<<" = "<<s<<endl;
for(int i=1;i<=n-1;i++) /// Avem n-1 S+=s;
paralele cu diagonala secundara ( le-am }
numerotat de la stanga la dreapta ) cout<<S;
{ return 0;
sub(n,a,i+1,s); /// Suma elementelor }
de pe fiecare paralela la diagonala este egala
cu i+1, deci pe k il inlocuim cu i+1

ATESTAT Page 12
LICEUL TEORETIC ,,GRIGORE MOISIL

Subiectul nr.13

Fiierul date.in conine pe prima linie un ir de caractere format din litere mici ale alfabetului
englez, cifre i spaii.

Se consider subprogramul elimincar care primete prin intermediul parametrului s un ir cu


cel mult 255 de caractere i prin parametrul c un caracter. Subprogramul va transforma irul s
eliminnd din acesta toate apariiile caracterului c.
Cerine:
a) Scriei definiia complet a subprogramului elimincar;
b) Scriei un program Pascal/C/care, citete din fiier irul de caractere i afieaz pe
ecran irul din care au fost eliminate toate vocalele, utiliznd apeluri utile ale subprogramului
elimincar.

Exemplu:
date.in se afieaz
examenul de atestat mai 2016 xmnl d tstt m 2016
#include <iostream> p=strchr(p,c); /// si cautamm in
continuare, incepand cu pozitia de pe care
#include <fstream> am facut stergerea precedenta,

#include <string.h> /// pana cand nu il mai


gasim in si }}
using namespace std;
int main()
ifstream f("date.in");
{
char s[256];
f.get(s,256);
void elimincar(char s[256], char c)
f.close();
{
//cout<<s<<endl;
char *p;
for(int i=0;i<strlen(s);i++)
p=strchr(s,c); /// Cautam prima
aparitie a caracterului c in sirul s if(strchr("aeiou",s[i])) /// Verific
fiecare caracter din sir daca e vocala
while(p) /// Cat timp am gasit
caracterul cautat elimincar(s,s[i]); /// si il sterg cu
ajutorul functiei
{
cout<<s;
strcpy(p,p+1); /// Il stergem din sir
return 0;

ATESTAT Page 13
LICEUL TEORETIC ,,GRIGORE MOISIL

Subiectul nr.14
Fiierul date.in conine, pe prima linie, un ir de caractere format din litere mici ale alfabetului
englez.
Se consider subprogramul elimincar care primete prin intermediul parametrului s un ir cu
cel mult 255 de caractere i prin parametrul c un caracter. Subprogramul va transforma irul s
eliminnd din acesta toate apariiile caracterului c.
irul de caractere s2 este clona irului de caractere s1 dac se poate obine din s1 prin
eliminarea tuturor apariiilor unei singure vocale. Se consider vocal orice liter din mulimea
{a,e,i,o,u}.

Cerine:
a) Scriei definiia complet a subprogramului elimincar;
b) Scriei programul C/C++ care citete din fisier un cuvnt format din cel mult 20 litere mici
ale alfabetului englez i afieaz pe ecran (dac exist), toate clonele acestui cuvnt, fiecare pe
cte o linie a ecranului, utiliznd apeluri utile ale subprogramului elimincar

c) Exemplu:
date.in se afieaz (nu neaparat in aceasta ordine)
examenul xamnul
exmenul
examenl
#include <iostream>
#include <fstream>
#include <string.h>

using namespace std;

ifstream f("date.in");
char s[21],s1[21],x;

void elimincar(char s[256], char c)


{
char *p;
p=strchr(s,c); /// Cautam prima aparitie a caracterului c in sirul s
while(p) /// Cat timp am gasit caracterul cautat
{
strcpy(p,p+1); /// Il stergem din sir
p=strchr(p,c); /// si cautam in continuare, incepand cu pozitia de pe care am facut
stergerea precedenta,
/// pana cand nu il mai gasim in sir
}
}

int main()
{
f>>s;
f.close();

ATESTAT Page 14
LICEUL TEORETIC ,,GRIGORE MOISIL

//cout<<s<<endl;
for(int i=0;i<strlen(s);i++)
if(strchr("aeiou",s[i])) /// Verific fiecare caracter din sir daca e vocala
{
/// Trebuie sa verific daca vocala pe care am gasit-o, nu se mai gaseste in sir
inainte de aceasta aparitie,
/// pt ca aceasta inseamna ca atunci i-am sters deja aparitiile

/*
Pot sa fac si asa, dar e mai elegant cum am facut mai jos!!!
strcpy(s1,s); /// Fac o copie sirului initial
s1[i]=NULL; /// Inchei sirul cu NULL in locul vocalei pe care o verific
if(strchr(s1,s[i])==0) /// Daca vocala pe care o verific nu a mai aparut in sir...
*/

if(strchr(s,s[i])==s+i) /// Daca adresa primei aparitii a vocalei este identica cu


adresa vocalei
/// pe care o verific, atunci inseamna ca am gasit prima ei
aparitie si fac stergerea
{

x=s[i]; /// Salvez caracterul pe care trebuie sa il sterg


strcpy(s1,s); /// Fac o copie sirului initial
while(strchr(s1,x)) /// Sterg toate aparitiile vocalei
elimincar(s1,x);
cout<<s1<<endl; /// Afisez sirul dupa stergere
}
}

return 0;
}

ATESTAT Page 15
LICEUL TEORETIC ,,GRIGORE MOISIL

Subiectul nr.15
n fiierul numere.in se afl pe prima linie maxim un milion de numere naturale de cel mult 2
cifre fiecare. Scriei programul C/C++ care citete numerele din fiierul numere.in i determin
i afieaz pe ecran care dintre numerele citite apare de cele mai multe ori n fiier. Se va utiliza
un algoritm eficient din punct de vedere al spaiului de memorie utilizat i al timpului de
executare.

Exemplu :

numere.in se afieaz
5316313613 3
#include <iostream> /// pe care le citim, pe rand, din fisier si
pentru care elementele vectorului vor
#include <fstream> contoriza de cate ori le-am citit

using namespace std; maxim=v[0];

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

ifstream f("numere.in"); if(v[i]>maxim)

int v[100],x,maxim,i; maxim=v[i]; /// Am aflat de cate


ori poate sa apara cel mai mult un numar

int main()
for(i=0;i<100;i++) /// Am afisat
{ numerele care au aparut de numarul
maxim de ori
while(f>>x)
if(v[i]==maxim)
v[x]++;
cout<<i<<' ';
f.close();

/// Se foloseste VECTORUL


CARACTERISTIC, un vector ale carui return 0;
pozitii, de la 0 la 99, indica nr. naturale de
cel mult doua cifre

ATESTAT Page 16
LICEUL TEORETIC ,,GRIGORE MOISIL

Subiectul nr.16
Din fiierul text mat.in se citesc doua numere naturale n, m (1<n<30, 1<m<30 ) apoi elementele
ntregi ale unei matrici de dimensiune n*m. Scriei un program Pascal/C/C++ care modific
matricea astfel: toate elementele egale cu valoarea maxim din matrice se nlocuiesc cu valoarea
minim de pe coloana lor. Dac s-a fcut mcar o nlocuire, matricea rezultat se va scrie n
fiierul text mat.out, altfel matricea nu se va scrie n fiierul de ieire. Pe ultima linie n fiierul
de ieire se va scrie numrul de substituii efectuate.

Ex:
mat.in mat.out
3 5 2 6 1 3
2 6 7 3 2 1 1 1
7 1 7 1 5 3 1 2
5 3 1 2 3

#include <iostream>

#include <fstream> void afisare(int a[30][30], int n, int m)

#include <iomanip> {for(int i=0;i<n;i++)

using namespace std; {for(int j=0;j<m;j++)

g<<setw(4)<<a[i][j];

ifstream f("mat.in"); g<<endl;}}

ofstream g("mat.out"); int maxim(int a[30][30], int n, int m)

int a[30][30],n,m; {int maxi=a[0][0];

for(int i=0;i<n;i++)

void citire(int a[30][30], int &n, int &m) for(int j=0;j<m;j++)

{ if (a[i][j]>maxi)

f>>n>>m; maxi=a[i][j];

for(int i=0;i<n;i++) return maxi;}

for(int j=0;j<m;j++) void inlocuire (int a[30][30],int n, int m)

f>>a[i][j]; {int i,j,mini,maxi,k=0;

f.close(); maxi=maxim(a,n,m);

} for(j=0;j<m;j++){

ATESTAT Page 17
LICEUL TEORETIC ,,GRIGORE MOISIL

mini=a[0][j]; {

for(i=1;i<n;i++) afisare(a,n,m);

if(a[i][j]<mini) g<<endl<<k;

mini=a[i][j]; }

if(mini!=maxi) g.close();

{ }

for(i=0;i<n;i++)

if(a[i][j]==maxi) int main()

{ {

a[i][j]=mini; citire(a,n,m);

k++; inlocuire(a,n,m);

} return 0;

} }

if(k)

ATESTAT Page 18
LICEUL TEORETIC ,,GRIGORE MOISIL

Subiectul nr.17
Din fiierul text DATE.TXT conine pe prima linie dou numere naturale n i m (0<m<n<5000),
pe cea de a doua linie n numere naturale a1, a2, , an (0 ai9), iar pe cea de a treia linie m numere
naturale b1, b2, , bm (0 bi9).
Scriei programul C/C++ care citete datele din fiier, verific dac irul b se poate obine din
irul a prin eliminri, fr a schimba ordinea elementelor n irul a i afieaz pe ecran un mesaj
corespunztor. Se va utiliza un algoritm eficient din punct de vedere al timpului de executare i
al spaiului de memorie utilizat.
Exemplu:

DATE.TXT se afieaz mesajul


53 b se poate obtine din a"
16313
613
#include <iostream> {

#include <fstream> while (a[i]!=b[j])

using namespace std; i++;

ifstream f("date.txt"); i++;

int n,m,a[5000],b[5000]; }

void citire(int &n, int &m, int a[5000], int if (i<=n)


b[5000] )
cout<<"b se poate obtine din a";
{ f>>n>>m;
else
for(int i=0;i<n;i++)
cout<<"b nu se poate obtine din a";
f>>a[i];
}
for(int i=0;i<m;i++)

f>>b[i];
int main()
f.close();}
{
void verificare(int n, int m, int a[5000], int
b[5000] ) citire(n,m,a,b);

{ verificare(n,m,a,b);

int i=0; return 0;

for(int j=0;j<m;j++) }

ATESTAT Page 19
LICEUL TEORETIC ,,GRIGORE MOISIL

Subiectul nr.18

a. Scriei o definiie complet pentru un subprogram suma cu trei parametri:


x, matrice ptratic cu elemente ntregi;
n, numr natural ce reprezint numrul efectiv de linii i coloane ale matricei x,
2n10;
p, numr natural, 1pn.
Subprogramul va returna suma elementelor aflate pe linia p a matricei.
b. Scriei un program care citete din fiierul matrice.in un numr natural n i o matrice cu n
linii i n coloane i afieaz n fiierul matrice.out indicii liniilor din matrice pentru care
suma elementelor este numr par. Se va folosi subprogramul definit la punctul a.

Exemplu:
matrice.in matrice.out
4 1 4
1 2 3 4
1 1 1 2
2 2 41 8
3 3 10 2

#include <iostream> {for(int i=1;i<=n;i++)

#include <fstream> { for(int j=1;j<=n;j++)

#include <iomanip> cout<<setw(4)<<x[i][j];

using namespace std; cout<<endl;}

ifstream f("matrice.in"); int suma(int x[10][10], int n, int p)

ofstream g("matrice.out"); {int s=0;

int x[10][10], n; for (int j=1;j<=n;j++)

void citire(int x[10][10], int &n) s+=x[p][j]; return s;}

{ f>>n; void afisare(int x[10][10], int n)

for(int i=1;i<=n;i++) {

for(int j=1;j<=n;j++) for(int i=1;i<=n;i++)

f>>x[i][j]; if (suma(x,n,i)%2==0)

f.close(); g<<i<<' ';

}void afisare1(int x[10][10], int n) }

ATESTAT Page 20
LICEUL TEORETIC ,,GRIGORE MOISIL

int main() afisare(x,n);

{ return 0;

citire(x,n); }
.
//afisare1(x,n);

Subiectul nr.19

n fiierul text numere.in sunt cel mult 9998 de numere naturale nenule, distincte. Scriei un
program C/C++ eficient din punct de vedere al timpului de execuie, care s scrie n fiierul
numere.out, pe o linie, n ordine descresctoare, separate prin cte un spaiu, numerele
naturale nunule, de cel mult 4 cifre, care nu apar n fiierul numere.in.

Ex:
numere.in numere.out
107 4 5 8 1 6 9 9999 9998 ... 108 106 105 ... 10 7 6 3 2

#include <iostream>
#include <fstream>

using namespace std;

ifstream f("numere.in");
ofstream g("numere.out");
int v[10000],x;

/// Vom folosi un vector caracteristic de 10000 de elemente


// Nu stiu daca e aficient (adica, daca vectorul nu are prea multe elemente), dar nu am
alta idee!!!

int main()
{
while(f>>x)
v[x]=1;
f.close();

for(int i=9999;i>=1;i--)
if(v[i]!=1)
g<<i<<' ';
g.close();

return 0;
}

ATESTAT Page 21
LICEUL TEORETIC ,,GRIGORE MOISIL

Subiectul nr.20

Fiierul date.in conine pe prima linie un text format din cel mult 250 de caractere, scris pe o
singur linie. Cuvintele din text sunt separate prin cte un spaiu, iar fiecare cuvnt este format
din cel mult 20 caractere, doar literele mici ale alfabetului englez. Fiierul conine pe a doua
linie un cuvnt format din cel mult 20 de caractere doar literele mici ale alfabetului englez.
Se consider subprogramul Sub care primete prin intermediul celor doi parametri t1 i t2
dou cuvinte formate fiecare din cel puin dou caractere i returneaz valoarea 1 dac
cuvntul primit prin parametrul t1 reprezint un prefix pentru cuvntul primit prin parametrul t2,
sau valoarea 0 n caz contrar;
Cerine:
a) Scriei definiia complet a subprogramului sub;
b) Scriei un program Pascal/C/C++, care citete din fiierul date.in n variabila s textul
aflat pe prima linie i n variabila x cuvntul aflat pe cea de a doua linie din fiier i folosind
apeluri utile ale subprogramului S1 i afieaz pe ecran fiecare cuvnt din text care are ca
prefix cuvntul x.
Exemplu. Dac fiierul date.in are coninutul urmtor:
ambii copii amestecau ideile si amintirile de peste zi
am
programul va afia pe ecran
ambii amestecau amintirile
while(p)
#include <iostream> {
#include <fstream> if(sub(x,p))
#include <string.h> cout<<p<<' ';
p=strtok(NULL," ");
using namespace std; }

ifstream f("date.in"); return 0;


char s[251],x[21],*p; }

int sub(char t1[21], char t2[21])


{
if(strstr(t2,t1)==t2)
return 1;
else
return 0;
}

int main()
{
f.getline(s,251);
f>>x;
p=strtok(s," ");

ATESTAT Page 22
LICEUL TEORETIC ,,GRIGORE MOISIL

Subiectul nr.21

Fiierul date.in conine pe prima linie un text format din cel mult 250 de caractere, scris pe o
singur linie. Cuvintele din text sunt separate prin cte un spaiu, iar fiecare cuvnt este format
din cel mult 20 caractere, doar literele mici ale alfabetului englez.
Se consider subprogramul:Sub care primeste prin intermediul singurului su parametru t
un cuvnt din text i nlocuiete prima, respectiv ultima liter, cu litera mare corespunztoare i
furnizeaz prin intermediul parametrului t cuvntul obinut. De exemplu, pentru cuvntul
intensitate primit prin intermediul parametrului t, subprogramul returneaz cuvntul:
IntensitatE.
Cerine:
a) Scriei definiia complet a subprogramului Sub;
b)Scriei un program Pascal/C/C++, care citete din fiierul date.in n variabila s textul
aflat pe prima linie i folosind apeluri utile ale subprogramului Sub modific textul memorat
n variabila s prin transformarea n liter mare a primei i ultimei litere din fiecare cuvnt
dint text. Programul scrie noul text n fiierul date.out pe o singur linie.
Exemplu. Dac fiierul date.in are coninutul urmtor:
ambii copii amestecau ideile si amintirile de peste zi
programul va scrie n fiierul date.out textul:
AmbiI CopiI AmestecaU IdeilE SI AmintirilE DE PestE ZI

#include <iostream>
#include <fstream> int main()
#include <string.h> {
f.getline(s,251);
using namespace std; p=strtok(s," ");
while(p)
ifstream f("date.in"); {
ofstream g("date.out"); sub(p);
char s[251],*p; g<<p<<' ';
p=strtok(NULL," ");
void sub(char t[21]) }
{
t[0]-=32; return 0;
t[strlen(t)-1]-=32; }
}

ATESTAT Page 23
LICEUL TEORETIC ,,GRIGORE MOISIL

Subiectul nr.22

Prima linie a fiierului BAC.TXT conine dou numere naturale m i n (1<=n,m<=100) iar
urmtoarele m linii cte n numere ntregi cu maxim 9 cifre fiecare, separate prin cte un
spaiu. Spunem c o linie a fiierului este simetric dac elementele egal deprtate de
capetele liniei respective sunt egale (primul element de pe linie este egal cu ultimul element
al liniei, al doilea cu penultimul etc.)

Se consider subprogramul: verif cu trei parametri:


x, matrice cu elemente ntregi;
n, numr natural ce reprezint numrul efectiv de coloane ale matricei x, 2n10;
p, numr natural, 1pm.
Subprogramul va returna valoarea 1 dac elementele egal deprtate de capetele liniei sunt
simetrice i 0 n caz contrar.
Cerine:
a) Scriei definiia complet a subprogramului verif;
b) Scriei un program Pascal/C/C++, care citete din fiierul BAC.TXT m, n i
elementele matricei i afieaz pe ecran cte din cele m linii din fiier sunt simetrice.
De exemplu dac fiierul BAC.TXT are urmtorul coninut
3 5
15 3 0 3 15
5 9 1 9 5
6 8 20 8 3
atunci se va afia pe ecran valoarea 2 (primele dou din cele m linii sunt simetrice).

#include <iostream> f>>x[i][j];


#include <fstream> f.close();
#include <iomanip> }

using namespace std; void afisare(long x[10][10], int m,int


n)
ifstream f("bac.txt"); {
int m,n,k; for(int i=1;i<=m;i++)
long x[10][10]; {
for(int j=1;j<=n;j++)
void citire(long x[10][10], int &m, cout<<setw(4)<<x[i][j];
int &n) cout<<endl;
{ }
f>>m>>n; }
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++) int verif(long x[10][10], int n, int p)
ATESTAT Page 24
LICEUL TEORETIC ,,GRIGORE MOISIL

{ citire(x,m,n);
for(int j=1;j<=n/2;j++) afisare(x,m,n);
if(x[p][j]!=x[p][n-j+1]) for(int i=1;i<=m;i++)
return 0; if(verif(x,n,i))
return 1; k++;
} cout<<k;
return 0;
int main() }
{

Subiectul nr.23

Fiierul date.in conine pe prima linie un cuvnt format din cel mult 50 de caractere, doar
litere mici ale alfabetului englez.
Se consider subprogramul Sub care primeste prin intermediul singurului su parametrul s
un cuvnt (format din cel puin 2 litere) i returneaz cuvntul obinut prin dublarea fiecrei
consoane din cuvntul s. De exemplu, pentru cuvntul abac (primit prin intermediul parametrului
s) subprogramul returneaz cuvntul: abbacc.
Cerine:
a) Scriei definiia complet a subprogramului Sub;
b) Scriei un program Pascal/C/C++, care folosind apeluri utile ale subprogramului Sub,
citete textul din fiierul date.in i scrie pe prima linie a fiierului date.out cuvntul obinut
prin dublarea fiecrei consoane din cuvntul s.
Exemplu. Dac fiierul date.in are coninutul atestat
alturat, programul va scrie n fiierul date.out:

attessttatt

#include <iostream> }
#include <fstream> else
#include <string.h> { t[j]=s[i];
using namespace std; j++;
} t[j]=NULL;
ifstream f("date.in"); return t;}
ofstream g("date.out"); int main()
char s[51],t[101]; {
f>>s;
char* sub(char s[51]) f.close();
{
int j=0; g<<sub(s);
for(int i=0;i<strlen(s);i++) g.close();
if(!strchr("aeiou",s[i]))
{ return 0;
t[j]=t[j+1]=s[i]; }
j+=2;

ATESTAT Page 25
LICEUL TEORETIC ,,GRIGORE MOISIL

Subiectul nr.24

Fiierul date.in conine dou linii. Pe prima linie a fiierului este scris un numr natural n,
(1n100) iar pe urmtoarele n linii sunt scrise cte n numere naturale, formate fiecare din
cel mult n cifre, separate prin cte un spaiu, reprezentnd elementele unei matrice A cu n linii i
n coloane.
Se consider subprogramul: sub cu trei parametri, care primete prin intermediul
parametrilor:
- a,un tablou bidimensional format din cel mult 30 de linii i cel mult 30 de coloane
cu elemente numere ntregi;
- n,(1n100) numrul efectiv de linii i de coloane ale matricei a;
- max, un numr natural nenul.
Subprogramul furnizeaz prin intermediul parametrului max, elementul maxim de pe
diagonala principal a matricei a.
.
Cerine:
a) Scriei definiia complet a subprogramului sub;
b) Scriei un program principal Pasca/C/C++ care, folosind apeluri utile ale
subprogramului sub, s citeasc datele din fiierul date.in i care s scrie pe ecran,
elementul maxim de pe diagonala principal.
4
Exemplu. Dac fiierul date.in are coninutul alturat, 0 2 4 6
programul va afia pe ecran numerele urmtoare: 1 3 5 7
Elementul maxim = 9 6 4 2 8
3 5 7 9
#include <iostream> for(int j=1;j<=n;j++)
#include <fstream> cout<<setw(4)<<a[i][j];
#include <iomanip> cout<<endl;
}
using namespace std; }
ifstream f("date.in");
int n; void sub(long a[30][30], int n, long &maxi)
long a[30][30], maxi; {
maxi=a[1][1];
void citire(long a[30][30],int &n) for(int i=2;i<=n;i++)
{ if(a[i][i]>maxi)
f>>n; maxi=a[i][i];
for(int i=1;i<=n;i++) }
for(int j=1;j<=n;j++) int main()
f>>a[i][j]; {
f.close(); citire(a,n);
} afisare(a,n);
sub(a,n,maxi);
void afisare(long a[30][30], int n) cout<<maxi;
{ return 0;
for(int i=1;i<=n;i++) }
{

ATESTAT Page 26
LICEUL TEORETIC ,,GRIGORE MOISIL

Subiectul nr.25

Fiierul date.in conine dou linii. Pe prima linie a fiierului este scris un numr natural n
(1n100), iar pe urmtoarele n linii sunt scrise cte n numere naturale, formate fiecare din
cel mult 9 cifre, separate prin cte un spaiu, reprezentnd elementele unei matrice A cu n linii i
n coloane.
Se consider subprogramul S cu doi parametri, care primete, prin intermediul parametrilor:
- a,un tablou bidimensional format din cel mult 30 de linii i cel mult 30 de coloane
cu elemente numere ntregi;
- n,numrul efectiv de linii i de coloane ale matricei a.
Subprogramul returneaz suma elementelor situate pe rama matricei, format din elementele
situate pe prima linie, prima coloan, ultima linie i ultima coloan a matricei.
Cerine:
a) Scriei definiia complet a subprogramului S;
b) Scriei un program principal Pasca/C/C++ care, folosind apeluri utile ale
subprogramelor S,s citeasc datele din fiierul date.in i care s scrie pe ecran,
suma elementelor de pe rama matricei.
4
Exemplu. Dac fiierul date.in are coninutul alturat, 0 2 4 6
programul va afia pe ecran numerele urmtoare: 1 3 5 7
Suma = 58 6 4 2 8
3 5 7 9

#include <iostream> cout<<setw(4)<<a[i][j];


#include <fstream> cout<<endl;
#include <iomanip> }
}
using namespace std;
ifstream f("date.in"); long s(long a[30][30], int n)
int n; {
long a[30][30]; long S=0;
for(int j=1;j<=n;j++)
void citire(long a[30][30],int &n) S+=a[1][j]+a[n][j];
{ for(int i=2;i<n;i++)
f>>n; S+=a[i][1]+a[i][n];
for(int i=1;i<=n;i++) return S;
for(int j=1;j<=n;j++) }
f>>a[i][j]; int main()
f.close(); {
} citire(a,n);
afisare(a,n);
void afisare(long a[30][30], int n) cout<<s(a,n);
{ return 0;
for(int i=1;i<=n;i++) }
{
for(int j=1;j<=n;j++)

ATESTAT Page 27
LICEUL TEORETIC ,,GRIGORE MOISIL

Subiectul nr.26

Fiierul date.in conine dou linii. Pe prima linie a fiierului este scris un numr natural n,
(1n100) iar pe urmtoarele n linii sunt scrise cte n numere naturale, formate fiecare din
cel mult 9 cifre, separate prin cte un spaiu, reprezentnd elementele unei matrice A cu n linii i
n coloane.
Se consider subprogramul: maxim cu trei parametri:
x, matrice cu elemente ntregi;
n, numr natural ce reprezint numrul efectiv de coloane ale matricei x, 2n10;
p, numr natural, 1pn.
Subprogramul va returna valoarea maxim de pe linia p a matricei.

Cerine:
a) Scriei definiia complet a subprogramului maxim;
b) Scriei un program principal Pasca/C/C++ care, folosind apeluri utile ale
subprogramului maxim,s citeasc datele din fiierul date.in i care s scrie pe ecran,
separate prin cte un spaiu, elementele maxime de pe fiecare linie a matricei.

4
Exemplu. Dac fiierul date.in are coninutul alturat, 0 2 4 6
programul va afia pe ecran numerele urmtoare: 1 3 5 7
6 7 8 9 6 4 2 8
3 5 7 9

#include <iostream> {
#include <fstream> for(int j=1;j<=n;j++)
#include <iomanip> cout<<setw(4)<<a[i][j];
cout<<endl;
using namespace std; }
ifstream f("date.in"); }
int n;
long x[10][10]; long maxim(long x[10][10], int n, int p)
{
void citire(long a[10][10],int &n) long maxi=x[p][1];
{ for(int j=2;j<=n;j++)
f>>n; if(x[p][j]>maxi)
for(int i=1;i<=n;i++) maxi=x[p][j];
for(int j=1;j<=n;j++) return maxi;
f>>a[i][j]; }
f.close(); int main()
} {
citire(x,n);
void afisare(long a[10][10], int n) afisare(x,n);
{ for(int i=1;i<=n;i++)
for(int i=1;i<=n;i++) cout<<maxim(x,n,i)<<' ';

ATESTAT Page 28
LICEUL TEORETIC ,,GRIGORE MOISIL

return 0; }

Subiectul nr.27
Fiierul numere.in conine, pe prima linie, un numr natural n (2<n<100), iar pe linia a
doua n numere cu cel mult 9 cifre fiecare.
Se consider subprogramul maxim care primete prin intermediul parametrului A un vector cu cel
mult 100 de numere reale i prin intermediul parametrului n numrul de elemente din vector. El
returneaz valoarea celui mai mare element din vector, terge toate apariiile acestui element din vector i
modific corespunztor valoarea lui n.
Cerine:
a) Scriei definiia complet a subprogramului maxim;
b) Scriei un program principal Pasca/C/C++ care s citeasc datele din fiierul date.in
i care, folosind apeluri utile ale subprogramului maxim, s scrie pe ecran, separate prin
cte un spaiu, n ordine strict descresctoare, numerele care apar n vector..
9
Exemplu. Dac fiierul numere.in are coninutul alturat, 2 3 1 1 6 2 7 6 1
programul va afia pe ecran numerele urmtoare:
7 6 3 2 1

#include <iostream> maxi=a[i];


#include <fstream>
for(int i=0;i<n;i++)
using namespace std; if(a[i]==maxi)
{
ifstream f("numere.in"); for(int j=i+1;j<n;j++)
int n; a[j-1]=a[j];
float a[100]; i--;
n--;
void citire(float a[100], int &n) }
{ return maxi;
f>>n; }
for(int i=0;i<n;i++)
f>>a[i]; int main()
f.close(); {
} citire(a,n);
afisare(a,n);
void afisare(float a[100], int n)
{ while(n)
for(int i=0;i<n;i++) cout<<maxim(a,n)<<' ';
cout<<a[i]<<' ';
cout<<endl; /// Pe masura ce se gaseste
} elmentul maxim se afiseaza, apoi
sunt sterse tote aparitiile sale din
float maxim(float a[100], int &n) vector
{ /// pana cand in vector nu mai
float maxi=a[0]; ramane nici un element
for(int i=1;i<n;i++)
if(a[i]>maxi) return 0;

ATESTAT Page 29
LICEUL TEORETIC ,,GRIGORE MOISIL

Subiectul nr.28
Considerm definit un subprogram nrap care are doi parametri: un ir de caractere s de
lungime cel mult 100 i un caracter c. Subprogramul nrap ntoarce numrul apariiilor
caracterului c n irul s.
a) Scriei definiia complet a subprogramului nrap.
b) Scriei un program care citete de la tastatur dou iruri de caractere formate fiecare din cel
mult 100 de litere ale alfabetului englez i, apelnd subprogramul nrap descris mai sus,
verific dac cele dou iruri sunt formate din exact aceleai caractere, eventual n alt ordine.
n caz afirmativ programul va afia pe ecran mesajul "DA", altfel va afia "NU"

#include <iostream> {
#include <string.h> cout<<"Primul sir: ";
cin.getline(s,101);
using namespace std; cout<<"Al doi-lea sir: ";
cin.getline(t,101);
char s[101], t[101];
bool ok; if (strlen(s)!=strlen(t))
cout<<"NU";
int nrap(char s[101], char c) else
{ {
int k=0; ok=true;
char *p; for(int i=0;(i<strlen(s)) &&
(ok==true);i++)
p=strchr(s,c); if (nrap(s,s[i])!=nrap(t,s[i]))
while(p) ok=false;
{
k++; if (ok==true)
p=strchr(p+1,c); cout<<"DA";
} else
cout<<"NU";
return k; }
} return 0;
}
int main()

ATESTAT Page 30
LICEUL TEORETIC ,,GRIGORE MOISIL

Subiectul nr.29
Fiierul date.in conine pe prima linie dou numere naturale nenule m i n (1m30,
1n30), iar pe urmtoarele m linii cte n numere ntregi, cu cel mult 9 cifre fiecare, separate
prin cte un spaiu, reprezentnd elementele unei matrice A cu m linii i n coloane.
Se consider subprogramul sub, care primete prin intermediul parametrilor:
- A, o matrice cu cel mult 30 de linii i cel mult 30 de coloane, i elemente numere ntregi
formate din cel mult 4 cifre fiecare;
- n, un numr natural reprezentnd numrul efectiv de coloane ale matricei A, 1n30.
- k, un numr natural , 1<km
Subprogramul furnizeaz suma elementelor situate pe linia k n matricea A.
Cerine:
a) Scriei definiia complet a subprogramului sub.
b) Scriei un program principal Pascal/C/C++ care, citete matricea A din fiierul
date.in, calculeaz, folosind apeluri utile ale subprogramului sub, pentru fiecare linie a
matricei suma elementelor corespunztoare i afieaz pe ecran indicele primei linii din matrice
de sum maxim, precum i valoarea acestei sume. Cele dou numere sunt afiate pe aceeai
linie, separate printr-un spaiu.
Exemplu. Dac fiierul date.in are coninutul alturat, 6 7
programul va scrie pe ecran: 4 39 (indicii liniilor de suma maxim 4 3 8 5 8 0 2
sunt: 4 i 6). 5 1 3 5 9 6 8
6 7 4 9 3 2 1
3 8 1 9 7 8 3
1 2 1 3 5 2 9
4 7 9 9 3 4 3

#include <iostream> f.close();


#include <fstream> }
#include <iomanip>
void afisare(long a[30][30], int m,
using namespace std; int n)
{
ifstream f("date.in"); for(int i=1;i<=m;i++)
int m,n,k; {
long a[30][30], s_max; for(int j=1;j<=n;j++)
cout<<setw(4)<<a[i][j];
void citire(long a[30][30], int &m, cout<<endl;
int &n) }
{ }
f>>m>>n;
for(int i=1;i<=m;i++) long sub(long a[30][30], int n, int
for(int j=1;j<=n;j++) k)
f>>a[i][j]; {

ATESTAT Page 31
LICEUL TEORETIC ,,GRIGORE MOISIL

long s=0; for(int i=2;i<=m;i++)


for(int j=1;j<=n;j++) if(sub(a,n,i)>s_max)
s+=a[k][j]; {
return s; s_max=sub(a,n,i);
} k=i;
int main() }
{
citire(a,m,n); cout<<k<<' '<<s_max;
afisare(a,m,n);
return 0;
s_max=sub(a,n,1); }
k=1;

Subiectul nr.30
Fiierul date.in conine cel mult 100 de numere naturale, fiecare numr fiind format din cel 9
cifre, numerele fiind scrise pe o singur linie, separate prin cte un spaiu.

Se consider subprogramele:
prim cu un singur parametru, x, prin intermediul cruia primete un numr natural nenul
format din cel mult patru cifre i care returneaz valoarea 1 dac valoarea parametrului x
este un numr prim i 0 n caz contrar.
Sort cu doi parametri, care primete prin intermediul parametrilor:
- n, un numr natural, 0<n100;
- v,un ir de n numere naturale, fiecare numr avnd cel mult patru cifre.
Subprogramul furnizeaz prin parametrul v irul ordonat cresctor.
Cerine:
a) Scriei definiia complet a subprogramelor prim i sort.
b) Scriei un program Pascal/C/C++, care citete din fiierul date.in toate numerele i,
folosind apeluri utile ale subprogramelor prim i sort, scrie n fiierul date.out, pe o singur
linie, separate printr-un spaiu, dou numere naturale reprezentnd cel mai mic numr prim,
respectiv cel mai mare numr prim din fiierul date.in. Dac niciun numr din fiierul
date.in nu este numr prim, atunci pe prima linie a fiierului date.out se va scrie mesajul
NU EXISTA.
Exemplu. Dac fiierul date.in are coninutul alturat, 3 11 7 13 56 732 99
atunci fiierul date.out va avea urmtorul coninut:
3 13
#include <iostream> void citire(long v[100], int &n)
#include <fstream> {
long x;
using namespace std; while(f>>x)
v[n++]=x;
ifstream f ("date.in"); f.close();
ofstream g ("date.out"); }
long v[100];
int n,i,j,k; void afisare(long v[100], int n)
{
ATESTAT Page 32
LICEUL TEORETIC ,,GRIGORE MOISIL

for(int i=0;i<n;i++) {
cout<<v[i]<<' '; g<<v[i]<<' ';
cout<<endl; k=1;
}
int prim (long x) j=n-1;
{ while((j>i)&&(!prim(v[j])))
if(x<=1) j--;
return 0; if(j>i)
else g<<v[j];
if (x==2) }
return 1;
else if(k==0)
if(x%2==0) g<<"NU EXISTA";
return 0;
else g.close();
for(long d=3;d*d<=x;d+=2)
if(x%d==0) return 0;
return 0; }
return 1;
}

void sort(int n, long v[100])


{
long aux;
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
if(v[i]>v[j])
{
aux=v[i];
v[i]=v[j];
v[j]=aux;

}
}
int main()
{
citire(v,n);
/* afisare(v,n);
sort(n,v);
afisare(v,n); */

k=0;
i=0;
while((i<n)&&(!prim(v[i])))
i++;
if(i<n)

ATESTAT Page 33

S-ar putea să vă placă și