Sunteți pe pagina 1din 55

Subiectul 1.

Fişierul atestat.in conţine două linii. Pe prima linie este scris un număr natural nenul n,
(5<n<15). Pe cea de-a doua linie a fişierului sunt scrise n numere întregi separate prin câte un
spaţiu, formate fiecare din cel mult 4 cifre, reprezentând un şir de n întregi .
Să se scrie un program în limbajul Pascal/C/C++, care:
a) să afişeze pe prima linie a ecranului, valorile din fişier care sunt numere palindroame. Un
număr este palindrom dacă şi numai dacă este egal cu oglinditul său. Exemplu 1221 este
palindrom.
b) să afişeze pe a doua linie a ecranului separaţi prin câte un spaţiu, numărul de divizori
proprii pentru fiecare număr din şirul din fişier;
c) să scrie în fişierul atestat.out, pe prima linie, toate numerele impare din şir, separate
prin câte un spaţiu.

#include<iostream>
#include<fstream>
using namespace std;

int n, v[20];

ifstream f("atestat.in");
ofstream g("atestat.out");

void citire()
{
int i;
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
}

int palindrom(int x)
{
int og, y;
y=x;
og=0;
while(y!=0)
{
og=og*10+y%10;
y/=10;
}
if(og==x)
return 1;
return 0;
}
void pcta()
{
int i, k;
k=0;
for(i=1;i<=n;i++)
if(palindrom(v[i])==1)
{
cout<<v[i]<<" ";
k++;
}
if(k==0)
cout<<"Fara palindroame in vector.";
cout<<endl;
}

int nrdiv(int x)
{
int d, nr;
nr=0;
for(d=2;d<=x/2;d++)
if(x%d==0)
nr++;
return nr;
}

void pctb()
{
int i;
for(i=1;i<=n;i++)
cout<<nrdiv(v[i])<<" ";
cout<<endl;
}

void pctc()
{
int i, k=0;
for(i=1;i<=n;i++)
if(v[i]%2!=0)
{
g<<v[i]<<" ";
k++;
}
if(k==0)
g<<"Fara numere impare.";
}
int main()
{
citire();
pcta();
pctb();
pctc();
return 0;
}

Subiectul 2.

Fişierul atestat.in conţine două linii. Pe prima linie este scris un număr natural nenul n,
(5<n<30). Pe cea de-a doua linie a fişierului sunt scrise n numere întregi pozitive separate prin
câte un spaţiu, formate fiecare din cel mult 4 cifre. În șirul de valori vor fi cel puţin o valoare
pară şi una impară.
Să se scrie un program în limbajul Pascal/C/C++, care:
a) să afişeze pe prima linie a ecranului, valorile din fişier care sunt numere prime. Un număr
este prim dacă şi numai dacă are exact doi divizori 1 şi numărul însuşi. 1 nu este număr
prim.
b) să afişeze pe a doua linie a ecranului separate prin câte un spaţiu, cea mai mare valoare
pară şi cea mai mică valoare impară care apar în şirul valorilor din fişier;
c) să scrie în fişierul atestat.out, pentru cea mai mare valoare pară, max, determinată
la punctul anterior două valori impare prime care au suma egală cu max.
#include<iostream>
#include<fstream>
using namespace std;

int n, v[20], maxp;

ifstream f("atestat.in");
ofstream g("atestat.out");

void citire()
{
int i;
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
}

int prim(int x)
{
int d;
if(x==1 || x%2==0 && x!=2)
return 0;
for(d=3;d*d<=x;d+=2)
if(x%d==0)
return 0;
return 1;
}

void pcta()
{
int i, k=0;
for(i=1;i<=n;i++)
if(prim(v[i])==1)
{
cout<<v[i]<<" ";
k++;
}
if(k==0)
cout<<"Fara numere prime. ";
cout<<endl;
}

void pctb()
{
int mini, i;
mini=10000;
for(i=1;i<=n;i++)
{
if(v[i]%2==0)
if(v[i]>maxp)
maxp=v[i];
if(v[i]%2!=0)
if(v[i]<mini)
mini=v[i];
}
cout<<maxp<<" "<<mini;
cout<<endl;
}

void pctc()
{
int x;
for(x=3;x<=maxp/2;x+=2)
if(prim(x)==1 && prim(maxp-x)==1)
g<<x<<" "<<maxp-x<<endl;
}

int main()
{
citire();
pcta();
pctb();
pctc();
return 0;
}

Subiectul 3.

Fişierul atestat.in conţine două linii. Pe prima linie este scris un număr natural nenul n,
(5<n<30). Pe cea de-a doua linie a fişierului sunt scrise n numere naturale separate prin câte un
spaţiu, formate fiecare din cel mult 9 cifre, reprezentând un şir de n numere naturale.
Să se scrie un program în limbajul Pascal/C/C++, care:
a) să afişeze pe prima linie a ecranului valorile pare din fişier, separate prin câte un spaţiu;
b) să afişeze pe ecran, pe linii diferite, cel mai mic număr a şi cel mai mare număr b din
şirul dat;
c) să scrie în fişierul atestat.out cel mai mare divizor comun al numerelor a şi b,
determinate la punctul b).

#include<iostream>
#include<fstream>
using namespace std;

int n, v[20],a,b;

ifstream f("atestat.in");
ofstream g("atestat.out");

void citire()
{
int i;
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
}

void pcta()
{
int i,k;
k=0;
for(i=1;i<=n;i++)
if(v[i]%2==0)
{
cout<<v[i]<<" ";
k++;
}
if(k==0)
cout<<"Fara numere pare.";
cout<<endl;
}

void pctb()
{
int i;
a=0; //max
b=1000000000; //minim INT_MAX
// a=b=v[1]
for(i=1;i<=n;i++)
{
if(v[i]>a)
a=v[i];
if(v[i]<b)
b=v[i];
}
cout<<b<<endl<<a<<endl;
}

int cmmdc(int a,int b)


{
while(a!=b)
if(a>b)
a=a-b;
else
b=b-a;
return a;
}

void pctc()
{
g<<cmmdc(a,b);
}

int main()
{
citire();
pcta();
pctb();
pctc();
return 0;
}

Subiectul 4.

Fişierul atestat.in conţine două linii. Pe prima linie este scris un număr natural nenul n,
(5<n<30). Pe cea de-a doua linie a fişierului sunt scrise n numere naturale separate prin câte un
spaţiu, formate fiecare din cel mult 9 cifre, reprezentând un şir de n numere naturale.
Să se scrie un program în limbajul Pascal/C/C++, care:
a) să afişeze pe prima linie a ecranului valorile impare din fişier, separate prin câte un
spaţiu;
b) să afişeze pe a doua linie a ecranului, toate valorile din fişier care sunt formate doar din
cifre pare, dacă nu există astfel de valori se va afişa mesajul: „Nu exista”
c) să scrie în fişierul atestat.out pentru prima valoare din fişierul atestat.in, cel
mai mare şi cel mai mic număr natural care se pot construi din cifrele distincte nenule ale
numărului citit.

#include<iostream>
#include<fstream>
using namespace std;

int n, v[20],a[10];

ifstream f("atestat.in");
ofstream g("atestat.out");

void citire()
{
int i;
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
}
void pcta()
{
int i,k;
k=0;
for(i=1;i<=n;i++)
if(v[i]%2==1)
{
k++;
cout<<v[i]<<' ';
}
if(k==0)
cout<<"Fara numere impare \n";
cout<<'\n';
}
int cifre_pare(int x)
{
while(x%10%2==0 && x!=0)
x/=10;
if(x!=0)
return 0;
else
return 1;
}
void pctb()
{
int i, k;
k=0;
for(i=1;i<=n;i++)
if(cifre_pare(v[i])==1)
{
k++;
cout<<v[i]<<' ';
}
if(k==0)
cout<<"Nu exista numere compuse doar din cifre pare";
cout<<'\n';

}
void pctc()
{
int aux,i;
aux=v[1];
while(aux!=0)
{
a[aux%10]++;
aux/=10;
}
for(i=9;i>=1;i--)
if(a[i]!=0)
g<<i;
g<<' ';
for(i=1;i<=9;i++)
if(a[i]!=0)
g<<i;
g<<'\n';
}
int main()
{
citire();
pcta();
pctb();
pctc();
return 0;
}

Subiectul 5.

Fişierul atestat.in conţine două linii. Pe prima linie este scris un număr natural nenul n,
(5<n<30). Pe cea de-a doua linie a fişierului sunt scrise n numere naturale separate prin câte un
spaţiu, formate fiecare din cel mult 4 cifre, reprezentând un şir de n numere naturale.
Să se scrie un program în limbajul Pascal/C/C++, care:
a) să afişeze pe prima linie a ecranului valorile pare din fişier, separate prin câte un spaţiu;
b) să afişeze pe a doua a ecranului, toate valorile din fişier care sunt formate doar din cifre
impare, dacă nu există astfel de valori se va afişa mesajul: „Nu exista”
c) să scrie în fişierul atestat.out toate numerele care au un număr k de divizori primi;
numărul natural k se va citi de la tastatură.

#include<iostream>
#include<fstream>

using namespace std;

int n, v[20],a[10];

ifstream f("atestat.in");
ofstream g("atestat.out");

void citire()
{
int i;
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
}

void pcta()
{
int i,k;
k=0;
for(i=1;i<=n;i++)
if(v[i]%2==0)
{
k++;
cout<<v[i]<<' ';
}
if(k==0)
cout<<"Fara numere pare ";
cout<<'\n';
}
int cifre_impare(int x)
{
while(x%10%2==1)
x/=10;
if(x==0)
return 1;
else
return 0;
}
void pctb()
{
int i,k;
k=0;
for(i=1;i<=n;i++)
if(cifre_impare(v[i])==1)
{
k++;
cout<<v[i]<<' ';
}
if(k==0)
cout<<"Nu exista numere formate doar din cifre impare ";
cout<<'\n';
}
int nr_div_prim(int x)
{
int nr,d;
nr=0;
d=2;
while(x!=1)
{
if(x%d==0)
{
nr++;
while(x%d==0)
x/=d;
}
d++;
}
return nr;
}
void pctc()
{
int i,k,con;
do
{
cout<<"k= ";
cin>>k;
}while(k<=0);

con=0;
for(i=1;i<=n;i++)
if(nr_div_prim(v[i])==k)
{
con++;
g<<v[i]<<' ';
}
if(con==0)
g<<"Fara numere cu "<<k<<" divizori primi \n";
}
int main()
{
citire();
pcta();
pctb();
pctc();
return 0;
}

Subiectul 6.

Fişierul atestat.in conţine două linii. Pe prima linie este scris un număr natural nenul n,
(5<n<30). Pe cea de-a doua linie a fişierului sunt scrise n numere reale separate prin câte un
spaţiu, reprezentând un şir de n numere reale.
Să se scrie un program în limbajul Pascal/C/C++, care:
a) să afişeze pe ecran, pe prima linie, toate numerele din fişier, separate prin câte un spaţiu;
b) să afişeze pe următoarea linie a ecranului, media aritmetică a numerelor negative din şir,
cu o precizie de 2 zecimale (dacă şirul nu conţine numere negative se va afişa 0);
c) să citească de la tastatură două numere naturale nenule p1 şi p2 (1<p1<p2<n), să
ordoneze crescător numerele din fişier situate între poziţiile p1 şi p2, inclusiv, şi să scrie
noul şir în fişierul atestat.out, pe o linie, numerele separându-se prin câte un spaţiu.
#include<iostream>
#include<fstream>
#include<iomanip>

using namespace std;

int n;
float v[30];
ifstream f("atestat.in");
ofstream g("atestat.out");

void citire()
{
int i;
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
}
void pcta()
{
int i;
for(i=1;i<=n;i++)
cout<<v[i]<<' ';
cout<<'\n';
}
void pctb()
{
int i, nr;
float ma;
nr=0;
ma=0;
for(i=1;i<=n;i++)
if(v[i]<0)
{
nr++;
ma+=v[i];
}
if(nr==0)
cout<<"0 \n";
else
cout<<fixed<<setprecision(2)<<ma/nr<<'\n';
}
void pctc()
{
int p1,p2,i,j;
float aux;

do
{
cout<<"p1 = ";
cin>>p1;
}while(p1<=0 || p1>=n-1);
do
{
cout<<"p2 = ";
cin>>p2;
}while(p2<=p1 || p2>=n);

for(i=p1;i<p2;i++)
for(j=i+1;j<=p2;j++)
if(v[i]>v[j])
{
aux=v[i];
v[i]=v[j];
v[j]=aux;
}
for(i=1;i<=n;i++)
g<<v[i]<<' ';
g<<'\n';
}
int main()
{
citire();
pcta();
pctb();
pctc();
return 0;
}

Subiectul 7.

Fişierul atestat.in conţine două linii. Pe prima linie este scris un număr natural nenul n,
(5<n<30). Pe cea de-a doua linie a fişierului sunt scrise n numere naturale separate prin câte un
spaţiu, formate fiecare din cel mult 4 cifre, reprezentând un şir de n numere naturale. Şirul
conţine cel puţin două numere impare.
Să se scrie un program în limbajul Pascal/C/C++, care:
a) să afişeze pe prima linie a ecranului, în ordinea inversă citirii, toate numerele din fişier,
separate prin câte un spaţiu;
b) să afişeze pe a doua linie a ecranului, numărul de cifre din care este format fiecare număr
din şirul iniţial, numerele din linie separându-se prin câte un spaţiu;
c) să scrie în fişierul atestat.out, pe prima linie, suma tuturor numerelor impare din şir.
#include<iostream>
#include<fstream>

using namespace std;

int n,v[30];
ifstream f("atestat.in");
ofstream g("atestat.out");

void citire()
{
int i;
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
}
void pcta()
{
int i;
for(i=n;i>=1;i--)
cout<<v[i]<<' ';
cout<<'\n';
}
int nr_cif(int x)
{
int nr=0;
while(x!=0)
{
nr++;
x/=10;
}
return nr;
}
void pctb()
{
int i;
for(i=1;i<=n;i++)
cout<<nr_cif(v[i])<<' ';
cout<<'\n';
}
void pctc()
{
int sum,i;
sum=0;
for(i=1;i<=n;i++)
if(v[i]%2==1)
sum+=v[i];
if(sum==0)
cout<<"Fara nr. impare \n";
else
g<<sum<<'\n';
}
int main()
{
citire();
pcta();
pctb();
pctc();
return 0;
}

Subiectul 8.

Fişierul atestat.in conţine două linii. Pe prima linie este scris un număr natural nenul n,
(5<n<30). Pe cea de-a doua linie a fişierului sunt scrise n numere întregi separate prin câte un
spaţiu, formate fiecare din cel mult 4 cifre, reprezentând un şir de n numere întregi. Şirul
valorilor este ordonat descrescător.
Să se scrie un program în limbajul Pascal/C/C++, care:
d) să afişeze pe prima linie a ecranului, în ordinea inversă citirii, toate numerele din fişier,
separate prin câte un spaţiu;
e) să afişeze pe a doua linie a ecranului, mesajul “DA” sau “NU” în funcţie de rezultatul
căutării valorii x, citită de la tastatură, în şirul de valori din fişier;
f) să scrie în fişierul atestat.out, pe prima linie, suma tuturor numerelor pozitive din
şir.

#include<iostream>
#include<fstream>

using namespace std;

int n,v[30];

ifstream f("atestat.in");
ofstream g("atestat.out");

void citire()
{
int i;
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
}

void pcta()
{
int i;
for(i=n;i>=1;i--)
cout<<v[i]<<' ';
cout<<'\n';
}

int cautare_binara(int st, int dr, int x)


{
int mij;
if(st>dr)
return 0;
else
{
mij=(st+dr)/2;
if(x==v[mij])
return 1;
if(x<v[mij])
return cautare_binara(mij+1,dr,x);
if(x>v[mij])
return cautare_binara(st,mij-1,x);
}

}
void pctb()
{
int x,poz;
cout<<"x= ";
cin>>x;
poz=cautare_binara(1,n,x);
if(poz==1)
cout<<"DA \n";
else
cout<<"NU \n";
}
void pctc()
{
int i,s;
s=0;
for(i=1;i<=n;i++)
if(v[i]>0)
s+=v[i];
g<<s<<'\n';
}
int main()
{
citire();
pcta();
pctb();
pctc();
return 0;
}

Subiectul 9.

Fişierul atestat.in conţine pe prima linie numărul n, natural nenul (2<n<20), ce


reprezintă numărul de linii şi coloane ale unei matrice pătratice A. Pe fiecare din următoarele n
linii, sunt scrise câte n numere naturale, formate din exact 2 cifre fiecare, separate prin câte un
spaţiu, reprezentând valorile elementelor matricei pătratice A.
Să se scrie un program, în limbajul Pascal/C/C++, care:
a) să afişeze pe ecran elementele matricei A, linie cu linie, elementele de pe aceeaşi linie
fiind separate prin câte un spaţiu;
b) să modifice matricea A astfel încât toate elementele situate pe diagonala secundară să
aibă valoarea k , k citit de la tastatură, şi să se afişeze matricea rezultată pe ecran;
c) să scrie în fişierul atestat.out, pe prima linie, separate prin câte un spaţiu, toate
toate numerele prime din matricea modificată. Dacă nu există se va scrie pe prima linie a
fişierului mesajul “NU”.

#include<iostream>
#include<fstream>

using namespace std;

int n,a[20][20];

ifstream f("atestat.in");
ofstream g("atestat.out");

void citire()
{
int i,j;
f>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
f>>a[i][j];
}
void pcta()
{
int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<' ';
cout<<'\n';
}
}
void pctb()
{
int i,j,k;

cout<<"k= ";
cin>>k;

for(i=1;i<=n;i++)
a[i][n-i+1]=k;
pcta();
}
int prim(int x)
{
int d;
if(x==1 || x%2==0 && x!=2)
return 0;
for(d=3;d*d<=x;d+=2)
if(x%d==0)
return 0;
return 1;
}
void pctc()
{
int k,i,j;
k=0;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(prim(a[i][j])==1)
{
k++;
g<<a[i][j]<<' ';
}
if(k==0)
g<<"NU";
g<<'\n';
}
int main()
{
citire();
pcta();
pctb();
pctc();
return 0;
}

Subiectul 10.
Fişierul atestat.in conţine pe prima linie două valori n şi m, numere naturale nenule
(2<n, m<20), ce reprezintă numărul de linii respectiv coloane ale unei matrice A. Pe fiecare din
următoarele n linii, sunt scrise câte m numere naturale, separate prin câte un spaţiu, reprezentând
valorile elementelor matricei A. Pe ultima linie a fişierului este o valoare k.
Să se scrie un program, în limbajul Pascal/C/C++, care:
a) să afişeze pe ecran elementele matricei A, linie cu linie, elementele de pe aceeaşi linie
fiind separate prin câte un spaţiu;
b) să afişeze liniile din matrice care au k elemente nule, dacă nu există astfel de linii se va
afişa mesajul “Nu există”;
c) să scrie în fişierul atestat.out, pe prima linie, separate prin câte un spaţiu, toate
toate numerele impare de pe coloana c a matricei, c va fi citit de la tastatură. Dacă nu
există valori se va scrie pe prima linie a fişierului mesajul “NU”.

#include<iostream>
#include<fstream>

using namespace std;

int n,a[20][20],m;

ifstream f("atestat.in");
ofstream g("atestat.out");

void citire()
{
int i,j;
f>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
f>>a[i][j];
}

void pcta()
{
int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
cout<<a[i][j]<<' ';
cout<<'\n';
}
}
void pctb()
{
int i,j,k,nr,ok=0;
f>>k;
for(i=1;i<=n;i++)
{
nr=0;
for(j=1;j<=m;j++)
if(a[i][j]==0)
nr++;
if(nr==k)
{
ok=1;
cout<<i<<' ';
}

}
if(ok==0)
cout<<"Nu exista ";
cout<<'\n';
}
void pctc()
{
int i,c,ok=0;
do
{
cout<<"c= ";
cin>>c;
}while(c<1 || c>m);
for(i=1;i<=n;i++)
if(a[i][c]%2==1)
{
g<<a[i][c]<<' ';
ok++;
}
if(ok==0)
g<<"NU";
g<<'\n';
}
int main()
{
citire();
pcta();
pctb();
pctc();
return 0;
}

Subiectul 11.
Fişierul atestat.in conţine pe prima linie numărul n, natural nenul (2<n<20), ce
reprezintă numărul de linii şi coloane ale unei matrice pătratice A. Pe fiecare din următoarele n
linii, sunt scrise câte n numere naturale, separate prin câte un spaţiu, reprezentând valorile
elementelor matricei pătratice A.
Să se scrie un program, în limbajul Pascal/C/C++, care:
a) să afişeze pe ecran elementele matricei A, linie cu linie, elementele de pe aceeaşi linie
fiind separate prin câte un spaţiu;
b) să afişeze pe următoarea linie a ecranului, ultima cifră a produsului tuturor elementelor
matricei A situate sub diagonala principală;
c) să scrie în fişierul atestat.out, pe prima linie, separate prin câte un spaţiu, toate
numerele de tip palindrom din matricea A. Un număr este palindrom dacă numărul citit
de la stânga la dreapta este egal cu numărul citit de la dreapta la stânga, de exemplu: 11,
22, 33. Dacă nu există astfel de numere se va scrie pe prima linie a fişierului mesajul “Nu
exista”.

#include<iostream>
#include<fstream>

using namespace std;

int n, a[20][20];

ifstream f("atestat.in");
ofstream g("atestat.out");

void citire()
{
int i,j;
f>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
f>>a[i][j];
}
void pcta()
{
int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<' ';
cout<<'\n';
}
}
void pctb()
{
int i,j,p=1;
for(i=2;i<=n;i++)
for(j=1;j<=i;j++)
p=(p*a[i][j])%10;
cout<<p<<'\n';
}
int palindrom(int x)
{
int og=0,aux;
aux=x;
while(x!=0)
{
og=og*10+x%10;
x/=10;
}
if(aux==og)
return 1;
return 0;
}
void pctc()
{
int i,j,ok=0;

for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(palindrom(a[i][j])==1)
{
g<<a[i][j]<<' ';
ok++;
}
if(ok==0)
g<<"Nu exista ";
g<<'\n';
}
int main()
{
citire();
pcta();
pctb();
pctc();
return 0;
}

Subiectul 12.
Fişierul atestat.in conţine pe prima linie numărul n, natural nenul (2<n<20), ce reprezintă
numărul de linii şi coloane ale unei matrice pătratice A. Pe fiecare din următoarele n linii, sunt
scrise câte n numere naturale, formate din cel mult 4 cifre fiecare, separate prin câte un spaţiu,
reprezentând valorile elementelor matricei pătratice A.
Să se scrie un program, în limbajul Pascal/C/C++, care:
a) să afişeze pe ecran elementele matricei A, linie cu linie, elementele de pe aceeaşi linie
fiind separate prin câte un spaţiu;
b) să afişeze pe următoarea linie a ecranului suma elementelor matricei A situate pe
diagonala secundară;
c) să scrie în fişierul atestat.out, pe prima linie, separate prin câte un spaţiu, minimele
de pe fiecare linie a matricei.

#include<iostream>
#include<fstream>

using namespace std;

int n, a[20][20];

ifstream f("atestat.in");
ofstream g("atestat.out");

void citire()
{
int i,j;
f>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
f>>a[i][j];
}
void pcta()
{
int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<' ';
cout<<'\n';
}
}

void pctb()
{
int i,sum=0;
for(i=1;i<=n;i++)
sum+=a[i][n-i+1];
cout<<sum<<'\n';
}

void pctc()
{
int minl,i,j;
for(i=1;i<=n;i++)
{
minl=a[i][1];
for(j=2;j<=n;j++)
if(a[i][j]<minl)
minl=a[i][j];
g<<minl<<' ';
}
g<<'\n';
}
int main()
{
citire();
pcta();
pctb();
pctc();
return 0;
}

Subiectul 13.
Fişierul atestat.in conţine pe prima linie numărul n, natural nenul (2<n<10), ce reprezintă
numărul de linii şi coloane ale unei matrice pătratice A. Pe fiecare din următoarele n linii, sunt
scrise câte n numere întregi, formate din cel mult 9 cifre fiecare, separate prin câte un spaţiu,
reprezentând valorile elementelor matricei pătratice A.
Să se scrie un program, în limbajul Pascal/C/C++, care:
a) să afişeze pe ecran elementele matricei A, linie cu linie, elementele de pe aceeaşi linie
fiind separate prin câte un spaţiu;
b) să citească de la tastatură un număr natural k de cel mult 9 cifre şi să verifice dacă
acesta se găseşte în matricea A, afişându–se pe ecran un mesaj corespunzător;
c) să modifice matricea A prin atribuirea valorii 0 tuturor elementelor situate pe ultima
linie a matricei şi apoi să se scrie în fişierul atestat.out matricea rezultată, linie cu
linie, elementele de pe aceeaşi linie fiind separate prin câte un spaţiu.
#include<iostream>
#include<fstream>

using namespace std;

int n, a[20][20];
ifstream f("atestat.in");
ofstream g("atestat.out");

void citire()
{
int i,j;
f>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
f>>a[i][j];
}
void pcta()
{
int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<' ';
cout<<'\n';
}
}
void pctb()
{
int k,i,j,ok=0;
do
{
cout<<"k= ";
cin>>k;
}while(k<0 || k>=100000000);

for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(a[i][j]==k && ok==0)
{
ok=1;
cout<<"Valoarea "<<k<<" se gaseste in matrice.\n";
}
if(ok==0)
cout<<"Valoarea "<<k<<" NU se gaseste in matrice.\n";
}

void pctc()
{
int j,i;
for(j=1;j<=n;j++)
a[n][j]=0;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
g<<a[i][j]<<' ';
g<<'\n';
}

}
int main()
{
citire();
pcta();
pctb();
pctc();
return 0;
}

Subiectul 14.
Fişierul atestat.in conţine pe prima linie numărul n, natural nenul (2<n<10), ce reprezintă
numărul de linii şi de coloane ale unei matrice, iar pe următoarele n linii câte n numere reale
separate prin câte un spaţiu, reprezentând elementele matricei.
Să se scrie un program, în limbajul Pascal/C/C++, care:
a) să afişeze pe ecran elementele matricei A, linie cu linie, elementele de pe aceeaşi linie
fiind separate prin câte un spaţiu;
b) să afişeze pe următoarea linie a ecranului, media aritmetică a elementelor de pe
diagonala principală;
c) să determine suma elementelor matricei situate pe linia k, unde k (0<kn) este un
număr natural citit de la tastatură şi să scrie pe prima linie a fişierului
atestat.out valoarea acestei sume.
#include<iostream>
#include<fstream>

using namespace std;

int n;
float a[20][20];

ifstream f("atestat.in");
ofstream g("atestat.out");

void citire()
{
int i,j;
f>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
f>>a[i][j];
}

void pcta()
{
int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<' ';
cout<<'\n';
}
}
void pctb()
{
int i;
float sum;
for(i=1;i<=n;i++)
sum+=a[i][i];
cout<<sum/n<<'\n';
}
void pctc()
{
int i,k;
float sum=0;
do
{
cout<<"k= ";
cin>>k;
}while(k<1 || k>n);
for(i=1;i<=n;i++)
sum=sum+a[k][i];
g<<sum<<'\n';
}
int main()
{
citire();
pcta();
pctb();
pctc();
return 0;
}

Subiectul 15.
Fişierul atestat.in conţine o singură linie pe care se află scris un text format din cel mult
250 de caractere, primul caracter fiind literă, iar cuvintele din text sunt separate prin câte un
spaţiu. Fiecare cuvânt este format doar din litere mari sau mici ale alfabetului limbii engleze.
Să se scrie un program în limbajul Pascal/C/C++, care:
a) să afişeze textul pe o singură linie a ecranului, numai cu litere mari;
b) să afişeze pe următoarea linie a ecranului numărul de consoane din text;
c) să scrie în fişierul atestat.out, pe prima linie, numărul cuvintelor din text.
#include<iostream>
#include<fstream>
#include<cstring>

using namespace std;

char s[251];

ifstream f("atestat.in");
ofstream g("atestat.out");

void pcta()
{
size_t i;
for(i=0;i<strlen(s);i++)
cout<<(char)toupper(s[i]);
cout<<'\n';
}
void pctb()
{
char voc[6]="aeiou";
int nr=0;
size_t i;
for(i=0;i<strlen(s);i++)
if(!strchr(voc,s[i]) && isalpha(s[i]))
nr++;
cout<<nr<<'\n';
}

void pctc()
{
size_t i;
int cuv=1;
for(i=0;i<strlen(s);i++)
if(isspace(s[i]))
cuv++;
g<<cuv<<'\n';
}
int main()
{
f.get(s,251);
pcta();
pctb();
pctc();
return 0;
}

Subiectul 16.
Fişierul atestat.in conţine o singură linie pe care se află scris un text format din cel mult
100 de caractere, primul caracter fiind literă, iar cuvintele din text sunt separate prin câte un
spaţiu. Fiecare cuvânt este format doar din litere mari sau mici ale alfabetului limbii engleze.
Să se scrie un program, în limbajul Pascal/C/C++, care:
a) să afişeze textul pe o singură linie a ecranului, numai cu litere mari;
b) să afişeze pe următoarea linie a ecranului numărul de vocale din text;
c) să scrie în fişierul atestat.out, pe prima linie, numărul de cuvinte din textul iniţial
care au primul caracter ’a’.
#include<iostream>
#include<fstream>
#include<cstring>

using namespace std;

char s[100];

ifstream f("atestat.in");
ofstream g("atestat.out");

void pcta()
{
size_t i;
for(i=0;i<strlen(s);i++)
cout<<(char)toupper(s[i]);
cout<<'\n';
}

void pctb()
{
char voc[6]="aeiou";
int nr=0;
size_t i;
for(i=0;i<strlen(s);i++)
if(strchr(voc,s[i]) && isalpha(s[i]))
nr++;
cout<<nr<<'\n';
}
void pctc()
{
int nr=0;
size_t i;
if(s[0]=='a')
nr++;
for(i=2;i<strlen(s);i++)
if(isspace(s[i-1]) && s[i]=='a')
nr++;
g<<nr<<'\n';
}
int main()
{
f.get(s,100);
pcta();
pctb();
pctc();
return 0;

Subiectul 17.
Fişierul atestat.in conţine o singură linie pe care se află scris un text format din cel mult 70
de caractere, primul caracter fiind literă, iar cuvintele din text sunt separate prin câte un spaţiu.
Fiecare cuvânt este format doar din litere mari ale alfabetului limbii engleze.
Să se scrie un program în limbajul Pascal/C/C++, care:
a) să afişeze textul pe o singură linie a ecranului, numai cu litere mici;
b) să afişeze pe următoarea linie a ecranului, numărul de cuvinte din care este format textul;
c) să citească de la tastatură o literă, să modifice fiecare cuvânt care începe cu litera ‘M’
prin înlocuirea acesteia cu litera citită de la tastatură şi să scrie în fişierul
atestat.out, pe prima linie, textul modificat.
#include<iostream>
#include<fstream>
#include<cstring>

using namespace std;

char s[70];

ifstream f("atestat.in");
ofstream g("atestat.out");

void pcta()
{
size_t i;
for(i=0;i<strlen(s);i++)
cout<<(char)tolower(s[i]);
cout<<'\n';
}
void pctb()
{
size_t i;
int cuv=1;
for(i=0;i<strlen(s);i++)
if(isspace(s[i]))
cuv++;
cout<<cuv<<'\n';
}
void pctc()
{
size_t i;
char lit;

cout<<"Dati litera: ";


cin>> lit;

if(s[0]=='M')
s[0]=lit;
for(i=2;i<strlen(s);i++)
if(isspace(s[i-1]) && s[i]=='M')
s[i]=lit;
g<<s<<'\n';
}
int main()
{
f.get(s,70);
pcta();
pctb();
pctc();
return 0;
}
Subiectul 18.
Fişierul atestat.in conţine o singură linie pe care se află scris un text format din cel mult
100 de caractere, primul caracter fiind literă, iar cuvintele din text sunt separate prin câte un
spaţiu. Fiecare cuvânt este format din litere mari sau mici ale alfabetului limbii engleze, sau din
cifre.
Să se scrie un program în limbajul Pascal/C/C++, care:
a) să afişeze textul pe prima linie a ecranului, numai cu litere mici;
b) să afişeze pe ecran, pe linii separate, toate cuvintele din textul iniţial;
c) să scrie pe prima linie a fişierului atestat.out numărul cifrelor întâlnite în text.
#include<iostream>
#include<fstream>
#include<cstring>

using namespace std;

char s[100];

ifstream f("atestat.in");
ofstream g("atestat.out");

void pcta()
{
size_t i;
for(i=0;i<strlen(s);i++)
cout<<(char)tolower(s[i]);
cout<<'\n';
}
void pctb()
{
size_t i;
for(i=0;i<strlen(s);i++)
{
if(isspace(s[i]))
cout<<'\n';
else
cout<<s[i];
}
/*
char *p;
for(p=strtok(s," ");p!=NULL;p=strtok(NULL," "))
cout<<p<<'\n';
*/
}
void pctc()
{
size_t i;
int nr=0;
for(i=0;i<strlen(s);i++)
if(isdigit(s[i]))
nr++;
g<<nr<<' ';
}
int main()
{
f.get(s,100);
pcta();
pctb();
pctc();
return 0;
}
Subiectul 19.

Fişierul atestat.in conţine o singură linie pe care se află scris un text format din cel mult
50 de caractere, primul şi ultimul caracter fiind litere, iar cuvintele din text sunt separate prin
câte un spaţiu. Fiecare cuvânt este format doar din litere mari sau mici ale alfabetului limbii
engleze.
Să se scrie un program, în limbajul Pascal/C/C++, care:
a) să afişeze textul pe ecran, pe o singură linie, numai cu litere mari;
b) să afişeze pe următoarea linie a ecranului textul iniţial, fără spaţii între cuvinte;
c) să scrie în fişierului atestat.out, sub formă de triunghi toate secvenţele mediane ale
primului cuvânt din textul citit, pornind de la întregul cuvânt, până la secvenţa alcătuită
din caracterul (sau cele 2 caractere) din mijloc.
#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;

char s[50];
ifstream f("atestat.in");
ofstream g("atestat.out");

void citire()
{
f.get(s,50);
}

void pct_a()
{
char aux[50];
strcpy(aux,s);
strupr(aux);
cout<<aux<<endl;
}

void pct_b()
{
char aux[50];
strcpy(aux,s);
size_t i;
for(i=0;i<strlen(aux);i++)
if(aux[i]==' ')
{
strcpy(aux+i,aux+i+1);
i--;
}
cout<<aux<<endl;
}

void pct_c()
{
size_t i,j,k;
char a[20];
cout<<s<<endl;
for(i=0;i<strlen(s);i++)
if(s[i]==' ')
break;
strncpy(a,s,i);
a[i]='\0';
i=0;
j=strlen(a)-1;
while(i<=j)
{
for(k=1;k<=i;k++)
g<<' ';
for(k=i;k<=j;k++)
g<<a[k];
g<<endl;
i++;
j--;
}
}

int main()
{
citire();
pct_a();
pct_b();
pct_c();
return 0;
}

Subiectul 20.
Fişierul atestat.in conţine o singură linie pe care se află scris un text format din cel mult
100 de caractere, primul şi ultimul caracter sunt litere, iar cuvintele din text sunt separate prin
câte un spaţiu. Fiecare cuvânt este format doar din litere mari sau mici ale alfabetului limbii
engleze.
Să se scrie un program, în limbajul Pascal/C/C++, care:
a) să afişeze textul pe ecran, pe o singură linie, numai cu litere mari;
b) să afişeze pe următoarea linie a ecranului textul iniţial, fără spaţii între cuvinte;
c) să scrie în fişierului atestat.out, perechile de cuvinte care sunt anagrame. Două
cuvinte sunt anagrame dacă au lungime egală și sunt formate din aceleași litere eventual
în altă ordine. Comparația celor două cuvinte se realizează fără a ține cont de litere mari
sau mici ale alfabetului.
#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;

char s[50];
ifstream f("atestat.in");
ofstream g("atestat.out");

void citire()
{
f.get(s,50);
}

void pct_a()
{
char aux[50];
strcpy(aux,s);
strupr(aux);
cout<<aux<<endl;
}

void pct_b()
{
char aux[50];
strcpy(aux,s);
size_t i;
for(i=0;i<strlen(aux);i++)
if(aux[i]==' ')
{
strcpy(aux+i,aux+i+1);
i--;
}
cout<<aux<<endl;
}
int anagrame1(char x[], char y[])
{
size_t i;
if(strlen(x) != strlen(y))
return 0;
while(strlen(x) > 0)
{
for(i = 0; i < strlen(y); i++)
if(y[i] == x[0])
break;
if(i >= strlen(y))
return 0;
strcpy(x, x+1);
strcpy(y+i, y+i+1);
}

return 1;
}

int anagrame2(char x[], char y[])


{
if(strlen(x) != strlen(y))
return 0;
size_t ax[26], ay[26], i;
for(i = 0; i < 26; i++)
ax[i] = ay[i] = 0;
for(i = 0; i < strlen(x); i++)
{
ax[x[i] - 'a'] ++;
ay[y[i] - 'a'] ++;
}
for(i = 0; i < 26; i++)
if(ax[i] != ay[i])
return 0;

return 1;
}

void ordonare(char x[])


{
size_t i, j;
char aux;
for(i = 0; i < strlen(x)-1; i++)
for(j = i + 1; j < strlen(x); j++)
if(x[i] < x[j])
{
aux = x[i];
x[i] = x[j];
x[j] = aux;
}
}

int anagrame3(char x[], char y[])


{
if(strlen(x) != strlen(y))
return 0;
ordonare(x);
ordonare(y);
if(strcmp(x, y) == 0)
return 1;
else return 0;
}

void pct_c()
{
char c[50][20], x[20], y[20], *p;
size_t i, j, n, k;
n = 0;
for(p = strtok(s, " "); p != 0; p = strtok(NULL, " "))
{
strcpy(c[n], p);
n++;
}

k = 0;
g<<"Anagramele din text: "<<endl;
for(i = 0; i < n-1; i++)
for(j = i + 1; j < n; j++)
{
strcpy(x, c[i]);
strcpy(y, c[j]);
strlwr(x);
strlwr(y);
if(anagrame3(x, y) == 1)
{
k++;
g<<c[i]<<" "<<c[j]<<endl;
}
}
if(k == 0)
g<<"Fara anagrame.";
}

int main()
{
citire();
pct_a();
pct_b();
pct_c();
return 0;
}

Subiectul 21.

Fişierul atestat.in conţine o singură linie pe care se află scris un text format din cel mult
100 de caractere, primul şi ultimul caracter sunt litere, iar cuvintele din text sunt separate prin
câte un spaţiu. Fiecare cuvânt este format doar din litere mari sau mici ale alfabetului limbii
engleze.
Să se scrie un program, în limbajul Pascal/C/C++, care:
d) să afişeze textul pe ecran, pe o singură linie, numai cu litere mici;
e) să afişeze pe următoarea linie a ecranului textul iniţial, fără spaţii între cuvinte;
f) să scrie în fişierului atestat.out, cuvintele care au proprietatea de palindrom. Un
cuvânt este palindrom dacă citit de la stânga spre dreapta se obține același rezultat ca și
citit de la dreapta spre stânga. Nu se face distincție între literele mari și mici.

#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;

char s[50];
ifstream f("atestat.in");
ofstream g("atestat.out");

void citire()
{
f.get(s,50);
}

void pct_a()
{
char aux[50];
strcpy(aux,s);
strlwr(aux);
cout<<aux<<endl;
}

void pct_b()
{
char aux[50];
strcpy(aux,s);
size_t i;
for(i=0;i<strlen(aux);i++)
if(aux[i]==' ')
{
strcpy(aux+i,aux+i+1);
i--;
}
cout<<aux<<endl;
}

void pct_c()
{
char *p, aux1[100], aux2[100];
size_t i, j, n, k;
n = 0;
for(p = strtok(s, " "); p != 0; p = strtok(NULL, " "))
{
strcpy(aux1,p);
strcpy(aux2,p);

strlwr(aux1);
strlwr(aux2);

strrev(aux1);

if(!strcmp(aux1,aux2))
g<<p<<endl;
}
}

int main()
{
citire();
pct_a();
pct_b();
pct_c();
return 0;
}

Subiectul 22.

Fişierul atestat.in conţine pe prima linie numărul natural nenul n (2<n<10). Pe


următoarele n linii sunt scrise câte două numere naturale nenule a şi b, reprezentând numărătorul
(a) şi numitorul (b) unei fracţii algebrice. Cele două numere sunt separate printr-un spaţiu.
Să se scrie un program, în limbajul Pascal/C/C++, care:
a) să afişeze pe ecran, pe aceeaşi linie, separate prin câte un spaţiu, cele n fracţii sub forma
a/b (numărător/numitor);
b) să afişeze pe următoarea linie a ecranului prima fracţie cu numărătorul maxim;
c) să scrie pe prima linie a fişierului atestat.out, separate prin spaţiu, toate fracţiile
ireductibile începând din a doua linie a fişierului atestat.in, sub forma a/b.
#include<iostream>
#include<fstream>

using namespace std;

ifstream f("atestat.in");
ofstream g("atestat.out");

struct fractie{
int a, b;
}v[11];

int n;

void citire()
{
int i;

f>>n;

for(i=1;i<=n;i++)
f>>v[i].a>>v[i].b;
}

void pct_a()
{
int i;

for(i=1;i<=n;i++)
cout<<v[i].a<<"/"<<v[i].b<<" ";
cout<<endl;
}

void pct_b()
{
int i, a, b;
a=v[1].a;
b=v[1].b;
for(i=2;i<=n;i++)
if(v[i].a>a)
a=v[i].a,b=v[i].b;
cout<<a<<"/"<<b<<endl;
}

int cmmdc(int a, int b)


{
while(a!=b)
if(a>b)
a-=b;
else
b-=a;
return a;
}

void pct_c()
{
int i;
for(i=1;i<=n;i++)
if(cmmdc(v[i].a,v[i].b)==1)
g<<v[i].a<<"/"<<v[i].b<<" ";
}

int main()
{
citire();
pct_a();
pct_b();
pct_c();
return 0;
}

Subiectul 23.
Fişierul atestat.in conţine pe prima linie numărul natural nenul n (2<n<10). Pe fiecare
dintre următoarele n linii sunt scrise câte două numere naturale x şi y, separate printr-un spaţiu,
reprezentând coordonatele unui punct din planul xOy.
Să se scrie un program, în limbajul Pascal/C/C++, care:
a) să afişeze pe ecran punctele din planul xOy, câte unul pe linie, sub forma (x,y);
b) să afişeze pe următoarea linie a ecranului numărul punctelor care sunt situate pe axa Ox;
c) să scrie în fişierul atestat.out, pe linii distincte, toate punctele din fişierul
atestat.in care au ambele coordonate pare, sub forma (x,y).
#include<iostream>
#include<fstream>

using namespace std;


ifstream f("atestat.in");
ofstream g("atestat.out");

struct punct{
int x, y;
}v[11];

int n;

void citire()
{
int i;

f>>n;

for(i=1;i<=n;i++)
f>>v[i].x>>v[i].y;
}

void pct_a()
{
int i;

for(i=1;i<=n;i++)
cout<<"( "<<v[i].x<<" , "<<v[i].y<<" )"<<endl;
}

void pct_b()
{
int i, nr=0;
for(i=1;i<=n;i++)
if(v[i].y==0)
nr++;
cout<<"Numarul punctelor situate pe axa Ox este "<<nr<<endl;
}

void pct_c()
{
int i;

for(i=1;i<=n;i++)
if(v[i].x%2==0&&v[i].y%2==0)
g<<"( "<<v[i].x<<" , "<<v[i].y<<" )"<<endl;
}

int main()
{
citire();
pct_a();
pct_b();
pct_c();
return 0;
}
Subiectul 24.

Fişierul atestat.in conţine pe prima linie o valoare n număr natural (1<n<10) iar pe
următoarele n linii câte un cuvânt, fiecare cuvânt fiind format din litere mari ale alfabetului
englez.
Să se scrie un program în limbajul Pascal/C/C++, care:
a) să afişeze pe prima linie a ecranului, cuvintele numai cu litere mici;
b) să afişeze pe ecran, cuvântul cu lungime maximă dintre cuvintele ințiale citite în fișier;
c) să scrie pe prima linie a fişierului atestat.out, n+1 caractere formate după regula:
primul caracter din şir este prima literă din primul cuvânt, al doilea caracter din şir este a
doua literă din al doilea cuvânt, al treilea caracter din şir este a treia literă din al treilea
cuvânt, etc. Ultimul caracter va fi ’.’ (punct). Dacă unul dintre cuvinte nu are suficiente
litere, şirul rezultat va conţine pe poziţia corespunzătoare un spaţiu.
#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;

char a[15][15];

int n;

ifstream f("atestat.in");
ofstream g("atestat.out");

void citire()
{
f>>n;
int i;
for(i=1;i<=n;i++)
f>>a[i];
}

void pct_a()
{
int i;
char aux[15];
for(i=1;i<=n;i++)
{
strcpy(aux,a[i]);
strlwr(aux);
cout<<aux<<" ";
}
cout<<endl;
}

void pct_b()
{
char maxv[20];
size_t i;
strcpy(maxv,a[1]);
for(i=2;i<=n;i++)
if(strlen(a[i])>strlen(maxv))
strcpy(maxv,a[i]);
for(i=1;i<=n;i++)
if(strlen(maxv)==strlen(a[i]))
cout<<a[i]<<" ";
cout<<endl;
}

void pct_c()
{
size_t i, j;
for(i=1;i<=n;i++)
if(isalpha(a[i][i-1]))
g<<a[i][i-1];
else
g<<" ";
g<<".";
}

int main()
{
citire();
pct_a();
pct_b();
pct_c();
return 0;
}
Subiectul 25.
Fişierul atestat.in conţine pe prima linie numărul n, natural nenul (2<n<10), ce reprezintă
numărul de noduri ale unui graf neorientat. Pe următoarele linii până la sfârșitul fișierului sunt
perechi de valori x y cu semnificația nodul x este legat printr-o muchie de nodul y.
Să se scrie un program, în limbajul Pascal/C/C++, care:
a) să afişeze pe ecran elementele matricei de adiacență atașată grafului citit;
b) să citească de la tastatură un număr natural v reprezentând valoarea unui nod al grafului,
și să afișeze pe ecran gradul nodului v;
c) să modifice matricea A astfel încât graful să devină complet și să afișeze în fișierul
atestat.out matricea rezultată, linie cu linie, elementele de pe aceeaşi linie fiind
separate prin câte un spaţiu.

#include<iostream>
#include<fstream>
using namespace std;

ifstream f("atestat.in");
ofstream g("atestat.out");

int a[11][11], n;

void citire()
{
f>>n;
int i, x, y;
for(i=1;i<=n;i++)
{
f>>x>>y;
a[x][y]=a[y][x]=1;
}
}

void pct_a()
{
int i, j;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
}

void pct_b()
{
int v, i, grad;
cout<<"Dati v: ";
cin>>v;
for(i=1;i<=n;i++)
grad+=a[v][i];
cout<<grad<<endl;
}

void pct_c()
{
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(i!=j)
a[i][j]=1;
else
a[i][j]=0;

for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
g<<a[i][j]<<" ";
g<<endl;
}
}

int main()
{
citire();
pct_a();
pct_b();
pct_c();
return 0;
}
Subiectul 26.
Fişierul atestat.in conţine pe prima linie numărul n, natural nenul (2<n<10), ce reprezintă
numărul de noduri ale unui graf orientat. Pe următoarele linii până la sfârșitul fișierului sunt
perechi de valori x y cu semnificația arcul (x, y) aparține grafului.
Să se scrie un program, în limbajul Pascal/C/C++, care:
a) să afişeze pe ecran elementele matricei de adiacență atașată grafului citit;
b) să citească de la tastatură un număr natural v reprezentând valoarea unui nod al grafului,
și să afișeze pe ecran gradul interior și gradul exterior al nodului v;
c) să afișeze în fișierul atestat.out, dacă există, toate drumurile de lungime 2 care
pleacă din vârful v, v citit de la tastatură.

#include<iostream>
#include<fstream>

using namespace std;


int a[11][11], n;

ifstream f("atestat.in");
ofstream g("atestat.out");

void citire()
{
int x, y;
f>>n;
while(f>>x>>y)
a[x][y]=1;
}

void pct_a()
{
int i, j;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
}

void pct_b()
{
int v, i, gi=0, ge=0;
cin>>v;
for(i=1;i<=n;i++)
gi+=a[i][v],ge+=a[v][i];
cout<<gi<<" "<<ge<<endl;
}

void pct_c()
{
int i,j,v;
cout<<"Dati: ";
cin>>v;
for(i=1;i<=n;i++)
if(a[v][i]==1)
for(j=1;j<=n;j++)
if(a[i][j]==1)
g<<v<<" "<<i<<" "<<j<<endl;
}

int main()
{
citire();
pct_a();
pct_b();
pct_c();
return 0;
}

Subiectul 27.
Fişierul atestat.in conţine pe prima linie numărul n, natural nenul (2<n<10), ce reprezintă
numărul de noduri ale unui graf neorientat. Pe următoarele linii până la sfârșitul fișierului sunt
perechi de valori x y cu semnificația nodul x este legat printr-o muchie de nodul y.
Să se scrie un program, în limbajul Pascal/C/C++, care:
a) să afişeze pe ecran elementele matricei de adiacență atașată grafului citit;
b) să afișeze pe ecran, dacă există, nodurile izolate ale grafului;
c) să modifice matricea A astfel încât nodul v, valoarea v va fi citită de la tastatură, să fie
adiacent cu toate celelalte noduri, iar matricea astfel modificată să o afișeze în fișierul
atestat.out.
#include<iostream>
#include<fstream>

using namespace std;


ifstream f("atestat.in");
ofstream g("atestat.out");

int a[10][10],n;

void citire()
{
int x,y;
f>>n;
while(f>>x>>y)
a[x][y]=a[y][x]=1;
}
void pct_a()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<a[i][j]<<' ';
cout<<'\n';
}
cout<<'\n';
}
void pct_b()
{
int i,j,iz,ok=0;
for(i=1;i<=n;i++)
{
iz=0;
for(j=1;j<=n;j++)
{
if(a[i][j]!=0)
{
iz=0;
break;
}
iz=1;
}
if(iz==1)
{
ok=1;
cout<<i<<' ';
}
}
if(ok==0)
cout<<"Nu exista noduri izolate.";
cout<<'\n';
}
void pct_c()
{
int v,i,j;
cout<<"v=";
cin>>v;
for(i=1;i<=n;i++)
if(i!=v)
a[v][i]=a[i][v]=1;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
g<<a[i][j]<<' ';
g<<'\n';
}
g<<'\n';
}
int main()
{
citire();
pct_a();
pct_b();
pct_c();
return 0;
}

Subiectul 28.
Fişierul atestat.in conţine pe prima linie numărul n, natural nenul (2<n<10), ce reprezintă
numărul de noduri ale unui graf neorientat. Pe următoarele linii până la sfârșitul fișierului sunt
perechi de valori x y cu semnificația nodul x este legat printr-o muchie de nodul y.
Să se scrie un program, în limbajul Pascal/C/C++, care:
a) să afişeze pe ecran elementele matricei de adiacență atașată grafului citit;
b) să afișeze pe ecran, nodul sau nodurile care au gradul maxim;
c) să modifice matricea A astfel încât nodul v, valoarea v va fi citită de la tastatură, să
devină nod izolat, iar matricea astfel modificată să o afișeze în fișierul atestat.out.

#include<iostream>
#include<fstream>

using namespace std;


ifstream f("atestat.in");
ofstream g("atestat.out");

int a[10][10],n;

void citire()
{
f>>n;
int x,y;
while(f>>x>>y)
a[x][y]=a[y][x]=1;
}
void pct_a()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<a[i][j]<<' ';
cout<<'\n';
}
cout<<'\n';
}
void pct_b()
{
int grad,gradm=0,i,j;
for(i=1;i<=n;i++)
{
grad=0;
for(j=1;j<=n;j++)
grad+=a[i][j];
a[i][0]=grad;
if(grad>gradm)
gradm=grad;
}
for(i=1;i<=n;i++)
if(a[i][0]==gradm)
cout<<i<<' ';
cout<<'\n';
}
void pct_c()
{
int v,i,j;
cout<<"v=";
cin>>v;
for(i=1;i<=n;i++)
a[v][i]=a[i][v]=0;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
g<<a[i][j]<<' ';
g<<'\n';
}
g<<'\n';
}
int main()
{
citire();
pct_a();
pct_b();
pct_c();
return 0;
}

Subiectul 29.
Fişierul atestat.in conţine pe prima linie numărul n, natural nenul (2<n<10), ce reprezintă
numărul de noduri ale unui graf neorientat. Pe următoarele linii până la sfârșitul fișierului sunt
perechi de valori x y cu semnificația nodul x este legat printr-o muchie de nodul y.
Să se scrie un program, în limbajul Pascal/C/C++, care:
a) să afişeze pe ecran elementele matricei de adiacență atașată grafului citit;
b) să citească de la tastatură o secvență de noduri și să afișeze mesajul ”DA” dacă secvența
de noduri este lanț în graf și ”NU” în caz contrar;
c) să citească de la tastatură valoarea unui nod v și să afișeze în fișierul atestat.out
care este lista de adiacență a nodului citit.
#include<iostream>
#include<fstream>

using namespace std;

ifstream f("atestat.in");
ofstream g("atestat.out");

int a[10][10],n;

void citire()
{
f>>n;
int x,y;
while(f>>x>>y)
a[x][y]=a[y][x]=1;
}
void pct_a()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<a[i][j]<<' ';
cout<<'\n';
}
cout<<'\n';
}
void pct_b()
{
int v[25],k,i,ok;
cout<<"Numarul de noduri: ";
cin>>k;
cout<<"Dati nodurile: ";
for(i=1;i<=k;i++)
cin>>v[i];
ok=1;
for(i=1;i<k;i++)
if(a[v[i]][v[i+1]]==0)
ok=0;
if(ok==1)
cout<<"DA";
else
cout<<"NU";
cout<<'\n';
}
void pct_c()
{
int v,i,k=0;
cout<<"v=";
do
cin>>v;
while(v<1 || v>n);
for(i=1;i<=n;i++)
if(a[v][i]==1)
{
g<<i<<' ';
k++;
}
if(k==0)
g<<"Nod izolat.";
g<<'\n';
}
int main()
{
citire();
pct_a();
pct_b();
pct_c();
return 0;
}
Subiectul 30.
Fişierul atestat.in conţine pe prima linie numărul n, natural nenul (2<n<10), ce reprezintă
numărul de noduri ale unui graf orientat. Pe următoarele linii până la sfârșitul fișierului sunt
perechi de valori x y cu semnificația arcul (x, y) aparține grafului.
Să se scrie un program, în limbajul Pascal/C/C++, care:
a) să afişeze pe ecran elementele matricei de adiacență atașată grafului citit;
b) să afișeze pe ecran toate nodurile care au proprietatea că numărul arcelor ce pleacă din
nodul respectiv este egal cu numărul arcelor care intră în nodul respectiv. (nodurile cu
gradul exterior egal cu cel interior)
c) să citească de la tastatură o secvență de noduri ale grafului și să afișeze în fișierul
atestat.out, mesajul ”DA” dacă secvența este drum în graful citit și ”NU” în caz
contrar.

#include<iostream>
#include<fstream>

using namespace std;

ifstream f("atestat.in");
ofstream g("atestat.out");
int a[10][10],n;

void citire()
{
f>>n;
int x,y;
while(f>>x>>y)
a[x][y]=1;
}
void pct_a()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<a[i][j]<<' ';
cout<<'\n';
}
cout<<'\n';
}
void pct_b()
{
int gi,ge,k=0,i,j;
cout<<"Nodurile cu ge=gi: ";
for(i=1;i<=n;i++)
{
gi=ge=0;
for(j=1;j<=n;j++)
{
ge+=a[i][j];
gi+=a[j][i];
}
if(ge==gi)
{
k++;
cout<<i<<' ';
}
}
if(k==0)
cout<<"nu exista.";
cout<<'\n';
}
void pct_c()
{
int v[25],k,i,ok=1;
cout<<"Lungimea secventei: ";
cin>>k;
cout<<"Nodurile din secventa: ";
for(i=1;i<=k;i++)
cin>>v[i];
for(i=1;i<k;i++)
if(a[v[i]][v[i+1]]==0)
ok=0;
if(ok==1)
cout<<"DA";
else
cout<<"NU";
cout<<'\n';
}
int main()
{
citire();
pct_a();
pct_b();
pct_c();
return 0;
}

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