Sunteți pe pagina 1din 16

ATESTAT PROGRAMARE 2014

1. Se dă un tablou unidimensional cu n (1<=n<=100) componente naturale. Să se determine


şi să se afişeze numărul cel mai mare care se poate obţine din cifrele elementului minim şi ale
celui maxim din vector.
Datele de intrare se vor citi din fişierul date.in astfel:
- pe prima linie se găsește n;
- pe linia a doua se găsesc elementele tabloului
Datele de ieşire se vor scrie pe ecran.
Exemplu: pentru fişierul de intrare date.in:
6
1275 356 489 156 674 35
Se afişează: 755321

1) #include <iostream>
#include <fstream>
using namespace std;
unsigned v[100],n,i,min1,max1;
ifstream f("date.in");
void citire()
{f>>n;
for(i=1;i<=n;i++) f>>v[i];
}
void minim()
{min1=v[1];
for(i=2;i<=n;i++)
if(min1>v[i]) min1=v[i];
}
void maxim()
{max1=v[1];
for(i=2;i<=n;i++)
if(max1<v[i]) max1=v[i];
}
unsigned long numar()
{unsigned aux,cifre[14],k=0,j;
unsigned long nr=0;
while(min1!=0){k++;
cifre[k]=min1%10;
min1=min1/10;}
while (max1!=0) {k++;
cifre[k]=max1%10;
max1=max1/10;}
for(i=1;i<k;i++)
for(j=i+1;j<=k;j++)
if(cifre[i]<cifre[j]) {aux=cifre[i];
cifre[i]=cifre[j];
cifre[j]=aux;}
for(i=1;i<=k;i++)
nr=nr*10+cifre[i];
return nr;
}
int main()
{citire();
minim();
maxim();
cout<<numar();
return 0;}
2. Se dă un tablou unidimensional cu n (1<=n<=100) componente naturale. Să se afişeze
divizorii elementului maxim din vector, în ordine descrescătoare.
Datele de intrare se vor citi din fişierul date.in astfel:
- pe prima linie se găseste n;
- pe linia a doua se găsesc elementele tabloului
Datele de ieşire se vor scrie pe ecran.
Exemplu: pentru fişierul de intrare date.in:
6
5 10 8 9 12 7
Se afişează: 12 6 4 3 2 1

2) #include <iostream>
#include <fstream>
using namespace std;
unsigned v[100],n,i,maxim,d;
int main()
{ifstream f("date.in");
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
maxim=v[1];
for(i=2;i<=n;i++)
if(maxim<v[i]) maxim=v[i];
for(d=maxim;d>=1;d--)
if(maxim%d==0)
cout<<d<<' ';
return 0;}

3. Se dă un tablou unidimensional cu n (1<=n<=100) componente naturale. Să se afişeze


elementele vectorului până la prima valoare nulă. Dacă nu există nici un 0, se vor afişa toate
numerele şi mesajul „Nici un element nul”.
Datele de intrare se vor citi din fişierul date.in astfel:
- pe prima linie se găseste n;
- pe linia a doua se găsesc elementele tabloului
Datele de ieşire se vor scrie pe ecran.
Exemplu: pentru fişierul de intrare date.in:
6
5 10 8 9 12 7 Se afişează: 5 10 8 9 12 7 Nici un element nul

3) #include <iostream>
#include <fstream>
using namespace std;
int v[100],i,n,k=0;
int main()
{ifstream f("date.in");
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
i=1;
while(i<=n)
{
if(v[i]!=0) cout<<v[i]<<' ';
else break;
i++;
}
if(i==n+1) cout<<"Nici un element nul.";
return 0;}
4. Se dă un tablou bidimensional cu n linii şi n coloane(1<=n<=100). Se cere să se afişeze
câte perechi de numere prime între ele sunt pe digonala secundară a matricei.
Datele de intrare se vor citi din fişierul date.in astfel:
- pe prima linie se găseste n;
- pe următoarele n linii se găsesc elementele matricei
Datele de ieşire se vor scrie pe ecran.
Exemplu: pentru fişierul de intrare date.in:
4
1234
5678
9 10 11 12
13 14 15 16 Se afişează: 5

4) #include <iostream>
#include <fstream>
using namespace std;
int a[100][100],i,n,j,v[100],k;
int cmmdc(int x,int y)
{int r=x%y;
while(r!=0) {x=y;
y=r;
r=x%y;}
return y;}
int main()
{ifstream f("date.in");
f>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
f>>a[i][j];
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(i+j==n+1) v[i]=a[i][j];
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
if(cmmdc(v[i],v[j])==1) k++;
cout<<k;
return 0;}

5. Se dă un tablou bidimensional cu n linii şi m coloane(1<=n,m<=100). Se cere să se


determine şi să se afişeze toate elementele vecine elementului maxim din matrice.
Datele de intrare se vor citi din fişierul date.in astfel:
-pe prima linie se găsesc 2 numere n şi m;
-pe următoarele n linii se găsesc elementele matricei
Datele de ieşire se vor scrie pe ecran.
Exemplu: pentru fişierul de intrare date.in:
43
33 65 125
44 32 25
58 14 48
47 69 74 Se afişează: 65 32 25

5) #include <iostream>
#include <fstream>
using namespace std;
int a[100][100],n,m,i,j,maxim,pozi,pozj;
int main()
{ifstream f("date.in");
f>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++) f>>a[i][j];
maxim=a[1][1];
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(maxim<a[i][j]) {maxim=a[i][j];
pozi=i; pozj=j;}
for(i=pozi-1;i<=pozi+1;i++)
for(j=pozj-1;j<=pozj+1;j++)
if(i!=0 && j!=0 && i!=n+1 && j!=m+1 && !(i==pozi && j==pozj))
cout<<a[i][j]<<" ";
return 0;}

6. Se dă un tablou unidimensional cu n (1<=n<=100) componente naturale. Să se insereze


între ultimul şi penultimul element al tabloului cmmdc al lor. Să se ordoneze descrescător
vectorul obţinut. Să se afişeze vectorul ordonat.
Datele de intrare se vor citi din fişierul date.in astfel:
- pe prima linie se găseste n;
- pe linia a doua se găsesc elementele tabloului
Datele de ieşire se vor scrie pe ecran.
Exemplu: pentru fişierul de intrare date.in:
6
5 10 8 9 12 20 Se afişează: 4 5 8 9 10 12 20

6) #include <iostream>
#include <fstream>
using namespace std;
ifstream fin("date.in");
int main()
{unsigned a[100], n, i, x, y, r;
fin>>n;
for(i=1;i<=n;i++)
fin>>a[i];
x=a[n-1];
y=a[n];
r=x%y;
while(r!=0)
{x=y;
y=r;
r=x%y;
}
a[n+1]=a[n];
a[n]=y;
n++;
for(i=1;i<n;i++)
for(x=i+1;x<=n;x++)
if(a[i]>a[x])
{ y=a[i];
a[i]=a[x];
a[x]=y;
}
for(i=1;i<=n;i++)
cout<<a[i]<<" ";
return 0;}

7. Se dă un tablou bidimensional cu n linii şi m coloane(1<=n<=100). Se cere să se determine


şi să se afişeze cel mai mic element prim de pe liniile impare ale matricei. Dacă nu există
numere prime se va afişa mesaj corespunzător.
Datele de intrare se vor citi din fişierul date.in astfel:
- pe prima linie se găsesc 2 numere n şi m;
- pe următoarele n linii se găsesc elementele matricei
Datele de ieşire se vor scrie pe ecran.
Exemplu: pentru fişierul de intrare date.in:
43
32 6 17
44 32 25
57 11 4
47 61 45 Se afişează: 11

7) #include <fstream>
#include <iostream>
using namespace std;
ifstream f("date.in");
int n,m,i,j,a[100][100],k=0,minim;
int prim(int nr)
{int d;
for(d=2;d<=n/2;d++)
if(nr%d==0) return 0;
return 1;
}
int main()
{
f>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
f>>a[i][j];
for(i=1;i<=n;i=i+2)
for(j=1;j<=m;j++)
if(prim(a[i][j])==1){k++;
if(k==1) minim=a[i][j];
if(k>1 && minim>a[i][j]) minim=a[i][j];}
if(k==0) cout<<"NU EXISTA";
else cout<<minim<<endl;
return 0;}

8. Se dă un graf neorientat cu n noduri prin matricea de adiacenţă. Determinaţi câte noduri au


gradul număr impar şi care este gradul maxim.
Datele de intrare se vor citi din fişierul date.in astfel:
- pe prima linie se găseste n;
- pe următoarele n linii se găsesc elementele matricei
Datele de ieşire se vor scrie pe ecran.
Exemplu: pentru fişierul de intrare date.in:
5
01011
10110
01010
11101
1 0 0 1 0 Se afişează: 2 4

8) #include <fstream>
#include <iostream>
using namespace std;
ifstream f("date.in");
int n,i,j,a[100][100],grade[100],k=0,maxim=-1;
int main()
{f>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
f>>a[i][j];
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
grade[i]=grade[i]+a[i][j];
if(grade[i]%2==1) k++;
if(maxim<grade[i]) maxim=grade[i];
}
cout<<k<<" "<<maxim<<endl;
return 0;}

9. Se dă un graf neorientat cu n noduri prin matricea de adiacenţă. Determinaţi câte noduri


terminale are graful şi care nod are gradul cel mai mare (dacă sunt mai multe noduri cu grad
maxim se vor afişa toate).
Datele de intrare se vor citi din fişierul date.in astfel:
- pe prima linie se găseste n;
- pe următoarele n linii se găsesc elementele matricei
Datele de ieşire se vor scrie pe ecran.
Exemplu: pentru fişierul de intrare date.in:
6
010100
101100
010101
111010
000100
0 0 1 0 0 0 Se afişează: 2 noduri terminale; nodul 4 are grad maxim

9) #include <fstream>
#include <iostream>
using namespace std;
ifstream f("date.in");
int n,i,j,a[100][100],grade[100],k=0,maxim=-1,poz;
int main()
{f>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
f>>a[i][j];
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
grade[i]=grade[i]+a[i][j];
if(grade[i]==1) k++;
if(maxim<grade[i])
{ maxim=grade[i];
poz=i; }
}
cout<<k<<" noduri terminale"<<endl;
cout<<"nodul "<<poz<<" are grad maxim"<<endl;
return 0;}

10. Se dă un tablou bidimensional cu n linii şi n coloane(1<=n<=100). Se cere să se verifice


dacă este pătrat magic sau nu. O matrice este pătrat magic dacă sumele de pe fiecare linie,
coloană şi de pe cel e două diagonale sunt egale.
Datele de intrare se vor citi din fişierul date.in astfel:
- pe prima linie se găseste n;
- pe următoarele n linii se găsesc elementele matricei
Datele de ieşire se vor scrie pe ecran.
Exemplu: pentru fişierul de intrare date.in:
3
438
951
2 7 6 Se afişează: Este pătrat magic

10) #include <fstream>


#include <iostream>
using namespace std;
ifstream f("date.in");
int n,i,j,a[100][100],S=0,s=0,ok=1;
int main()
{f>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
f>>a[i][j];
for(i=1;i<=n;i++) S=S+a[i][i]; //suma pe prima diagonala
for(i=1;i<=n;i++) s=s+a[i][n+1-i]; //suma pe a 2-a diagonala
if(S!=s) ok=0;
for(i=1;i<=n && ok==1;i++)
{s=0;
for(j=1;j<=n;j++) s=s+a[i][j];
if(S!=s) ok=0;
}
for(j=1;j<=n && ok==1;j++)
{s=0;
for(i=1;i<=n;i++) s=s+a[i][j];
if(S!=s) ok=0;
}
if(ok==1)cout<<"Este patrat magic "<<endl;
else cout<<"Nu este patrat magic"<<endl;
return 0;}

11. Scrieţi un program care citeşte de la tastatură trei numere naturale x, y şi k,


(1<x<y<2000000, k<1000) şi afişează pe ecran k numere prime din intervalul [x, y]. Dacă nu
există k numere prime în intervalul [x,y] se vor afişa toate numerele prime găsite iar pe linia
următoare se va afişa mesajul “s-au gasit mai putine numere prime: ” urmat de numărul
acestora.
Exemplu: x=3 y=12 k=5 se va afişa:
3 5 7 11
s-au gasit mai putine numere prime: 4

11) #include <iostream>


using namespace std;
unsigned long x,y;
unsigned k;
int prime(unsigned long nr)
{int d;
for(d=2;d<=nr/2;d++)
if(nr%d==0) return 0;
return 1;
}
int main()
{cin>>x>>y>>k;
unsigned long i;
unsigned n=0;
for(i=x;i<=y && n<=k-1;i++)
if(prime(i)==1)
{n++;
cout<<i<<" ";
}
cout<<endl;
if(n<k) cout<<"s-au gasit mai putine numere prime: "<<n;
return 0;}

12. Scrieţi un program care citeşte din fişierul XII.IN un şir cu cel mult 10000000 numere
naturale din intervalul [100, 999999999], modifică fiecare număr prin interschimbarea cifrei
unităţilor cu cifra sutelor şi le afişează pe ecran separate printr-un spaţiu.
Exemplu: XII.IN se va afişa: 6321 409 5 73624
6123 904 500 73426

12) #include <fstream>


#include <iostream>
using namespace std;
ifstream f("XII.in");
unsigned long x;
int sute,unitati;
int main()
{
while(f>>x)
{
sute=x/100%10;
unitati=x%10;
x=x/10*10+sute;
x=(x/1000*10+unitati)*100+x%100;
cout<<x<<" ";
}
return 0;}

13. Scrieţi un program care citeşte din fişierul text XII.IN, cel mult 10000000 de numere
naturale, formate din cel mult 9 cifre fiecare, separate prin spaţii şi dintre acestea le afişează
pe ecran pe cele care au proprietatea de palindrom. Dacă nu se găsesc numere palindrom, se
va afişa pe ecran valoarea –1.
Exemplu: XII.IN se va afişa: 8228 2 131
7341 8228 660 2 80 131

13) #include <fstream>


#include <iostream>
using namespace std;
ifstream f("XII.in");
unsigned long x;
int palindrom(unsigned long n)
{
unsigned long inv=0,aux=n;
while(n)
{inv=inv*10+n%10;
n=n/10;
}
if(aux==inv)return 1;
else return 0;
}
int main()
{ int ok=-1;
while(f>>x)
if(palindrom(x)==1)
{ cout<<x<<" ";
ok=1; }
if(ok==-1) cout<<ok<<endl;
return 0;}
14. Scrieţi un program care determină şi afişează pe ecran, numărul de cifre nule aflate pe
ultimele poziţii consecutive ale valorii obţinute în urma evaluării lui n!, n fiind un număr natural
de cel mult 9 cifre citit de la tastatură.
Exemplu: n=10 se va afişa: 2

14) #include <iostream>


using namespace std;
unsigned long n;
int main()
{int k=0;
unsigned long p5=5;
cin>>n;
while(n>=p5)
{k=k+n/p5;
p5=p5*5;
}
cout<<k<<" ";
return 0;}

15. Fişierul XII.IN conţine cel mult 10000000 numere naturale separate prin câte un spaţiu,
formate fiecare din cel mult 9 cifre. Să se scrie un program care să afişeze pe ecran numărul de
divizori proprii pentru fiecare număr citit.
Exemplu: XII.IN se va afişa: 4 2 0 2 2 0
6 4 7 15 27 5

15) #include <iostream>


#include <fstream>
using namespace std;
ifstream f("XII.IN");
int main()
{unsigned long x,d;
unsigned k;
while(f>>x)
{k=0;
for(d=2;d<=x/2;d++)
if(x%d==0) k++;
cout<<k<<" ";
}
return 0;}

16. Fişierul XII.IN conţine cel mult 10000000 numere naturale separate prin câte un spaţiu,
formate fiecare din cel mult 9 cifre. Să se scrie un program care să afişeze pe ecran toate
numerele din fişier formate numai din cifre pare. Dacă nu există astfel de numere se va afişa
mesajul “NU EXISTĂ”.
Exemplu: XII.IN se va afişa: 22
1233 22 1785 56 15657 457

16) #include <iostream>


#include <fstream>
using namespace std;
unsigned long nr,aux;
int ok=0,pare;
int main()
{ifstream f("XII.IN");
while(f>>nr)
{aux=nr;
pare=1;
while(aux!=0)
{if((aux%10)%2==1)pare=0;
aux=aux/10;
}
if(pare==1) cout<<nr<<" ";
}
return 0;}

17. Fişierul XII.TXT conţine pe prima linie 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, iar pe a doua linie o
literă mare. Fiecare cuvânt este format doar din litere mari ale alfabetului limbii engleze. Să se
scrie un program care să modifice fiecare cuvânt care începe cu litera ‘M’ prin înlocuirea
acesteia cu litera citită şi să scrie în fişierul XII.OUT textul modificat.
Exemplu: XII.TXT
MARIA ARE UN MAR
D
In XII.OUT se va afisa DARIA ARE UN DAR

17) #include <iostream>


#include <fstream>
#include <cstring>
using namespace std;
ifstream f("XII.IN");
ofstream g("XII.OUT");
int main()
{char sir[71],ch;
int i;
f.get(sir,71);
f>>ch;
if(sir[0]=='M') sir[0]=ch;
for(i=1;i<strlen(sir);i++)
if(sir[i]=='M' && sir[i-1]==' ')
sir[i]=ch;
g<<sir;
return 0;}

18. Fişierul XII.TXT conţine 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 din
litere mari şi mici ale alfabetului limbii engleze, sau din cifre. Să se scrie un program care să
afişeze în fişierul XII.OUT numărul cifrelor întâlnite în text.
Exemplu: XII.TXT
In CLASA sunt 25 de elevi din CARE 7 Fete
In XII.OUT se va afisa 3

18) #include <iostream>


#include <fstream>
#include <cstring>
using namespace std;
ifstream f("XII.IN");
ofstream g("XII.OUT");
int main()
{char sir[71];
int k=0, i;
f.get(sir,71);
for(i=0;i<strlen(sir);i++)
if(sir[i]>='0' && sir[i]<='9')
k++;
g<<k;
return 0;}
19. Fişierul XII.TXT conţine un text format din cel mult 70 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 din litere mari şi mici ale alfabetului limbii engleze. Să se scrie un program care să
afişeze în fişierul XII.OUT, separate prin câte un spaţiu, ultimul caracter al fiecărui cuvânt din
textul dat.
Exemplu: XII.TXT XII.OUT
Memoria RAM este volatila
In XII.OUT se va afisa a M e a

19) #include <iostream>


#include <fstream>
#include <cstring>
using namespace std;
ifstream f("XII.IN");
ofstream g("XII.OUT");
int main()
{char sir[71]; int i;
f.get(sir,71);
for(i=0;i<strlen(sir);i++)
if(sir[i]!=' ' && sir[i+1]==' ')
g<<sir[i]<<" ";
g<<sir[strlen(sir)-1];
return 0;}

20. Fişierul XII.TXT conţine 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 din
litere mari şi mici ale alfabetului limbii engleze. Să se scrie un program care să afişeze în fişierul
XII.OUT numărul de consoane din text.
Exemplu: XII.TXT
Creierul calculatorului este microprocesorul
In XII.OUT se va afisa 22

20) #include <iostream>


#include <fstream>
#include <cstring>
using namespace std;
ifstream f("date.in");
ofstream g("XII.OUT");
int main()
{char sir[71];
int i,k=0;
f.get(sir,71);
for(i=0;i<strlen(sir);i++)
{if((sir[i]>='a' && sir[i]<='z') && !(sir[i]=='a'||sir[i]=='e'||sir[i]=='i'||sir[i]=='o'||sir[i]=='u'))
k++;
if((sir[i]>='A' && sir[i]<='Z') && !(sir[i]=='A'||sir[i]=='E'||sir[i]=='I'||sir[i]=='O'||sir[i]=='U'))
k++;}
g<<k;
return 0;}

21. Se citeşte un şir de numere întregi ce se termină cu zero. Să se creeze un vector ce


cuprinde doar elementele de 3 cifre, apoi să se şteargă din el toate elementele impare. Afişaţi
pe prima linie elementele vectorului format iniţial iar pe a doua linie elementele rămase după
ştergere.
Exemplu:
12 234 8 88 454 75 123 344 2 455 222 0
Pentru datele de mai sus se va afişa:
234 454 123 344 455 222
234 4 344 222
21) #include <iostream>
using namespace std;
int main()
{int i,j,a[100],nr,n;
i=1;
cin>>nr;
while(nr!=0)
{ if(nr>=100 && nr<=999)
{a[i]=nr;
i++;}
cin>>nr;
}
n=i-1;
for(i=1;i<=n;i++)
cout<<a[i]<<" ";
cout<<endl;
for(i=1;i<=n;i++)
if(a[i]%2!=0)
{ for(j=i;j<n;j++) a[j]=a[j+1];
n--;
i--;}
for(i=1;i<=n;i++)
cout<<a[i]<<" ";
return 0;}

22. Se citeşte un vector de n numere naturale. Să se afişeze numerele al căror invers este
divizibil cu suma cifrelor sale. Fiecare linie afişată va conţine numărul, inversul său şi suma
cifrelor sale separate printr-un spaţiu.
Exemplu: pentru n=5
13 12 24 17 68
Se va afişa
12 21 3
24 42 6

22) #include <iostream>


using namespace std;
unsigned i, v[100],n;
unsigned invers(unsigned nr)
{unsigned inv=0;
while(nr!=0)
{inv=inv*10+nr%10;
nr=nr/10;}
return inv;}
unsigned suma(unsigned nr)
{unsigned s=0;
while(nr!=0)
{s=s+nr%10;
nr=nr/10;}
return s;}
int main()
{cout<<"n="; cin>>n;
for(i=1;i<=n;i++) cin>>v[i];
for(i=1;i<=n;i++)
if(invers(v[i])%suma(v[i])==0)
cout<<v[i]<<" "<<invers(v[i])<<" "<<suma(v[i])<<endl;
return 0;}
23. Se consideră un şir de n numere reale. Să se şteargă din şir toate apariţiile celui mai mare
element. Datele vor fi citite din fişierul Intrare.in, ce va conţine pe prima linie valoarea lui n iar
pe următoarea linie cele n valori ale şirului. Se va afişa în fişierul Ieşire.out pe prima linie şirul
iniţial iar pe a doua linie şirul rămas după ştergere.
Exemplu:
7
12.25 -34 24 -4.33 13 24 10
Pentru datele de mai sus se va afişa:
12.25 -34 24 -4.33 13 24 10
24.25 -34 -4.33 13 10

23) #include <iostream>


#include <fstream>
using namespace std;
float v[100],maxim;
int n,i;
int main()
{ifstream f("Intrare.in");
ofstream g("Iesire.out");
f>>n;
for(i=1;i<=n;i++)
{f>>v[i];
g<<v[i]<<" ";}
g<<endl;
maxim=v[1];
for(i=2;i<=n;i++)
if(maxim<v[i]) maxim=v[i];
for(i=1;i<=n;i++)
if(v[i]!=maxim) g<<v[i]<<" ";
return 0;}

24. Se citesc de la tastatură numere naturale atâta timp cât suma numerelor citite nu
depăşeşte valoarea 150. Să se afişeze cel mai mare divizor comun al numerelor citite.
Exemplu: Se citesc:
30 42 15 33 54
Se va afisa: 3

24) #include <iostream>


using namespace std;
int nr1,nr2,s;
int cmmdc(int x,int y)
{int r=x%y;
while(r!=0) {x=y;
y=r;
r=x%y;}
return y;}
int main()
{cin>>nr1;
s=nr1;
while(s<=150)
{cin>>nr2;
s=s+nr2;
nr1=cmmdc(nr1,nr2);
}
cout<<nr1;
return 0;}
25. Se consideră o matrice A cu n linii si n coloane de numere naturale. Să se afişeze cea mai
mare valoare ce se află pe diagonala paralelă cu diagonala principală situată deasupra acesteia
şi cea mai mică valoare aflată pe diagonala paralelă cu diagonala principală situată sub aceasta.
Exemplu: pentru n=4
1578
1375
4649
3835
Se va afişa: 9 1

25) #include <fstream>


#include <iostream>
using namespace std;
ifstream f("Intrare.in");
unsigned n,i,j,a[100][100],maxim,minim;
int main()
{f>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++) f>>a[i][j];
maxim=a[1][2];
for(i=1;i<n;i++)
if(maxim<a[i][i+1]) maxim=a[i][i+1];
minim=a[2][1];
for(i=2;i<=n;i++)
if(minim>a[i][i-1]) minim=a[i][i-1];
cout<<maxim<<" "<<minim;
return 0;}

26. Se dă o matrice cu n linii şi m coloane, cu elemente reale şi c un vector cu m elemente


numere reale. Datele vor fi citite din fişierul Intrare.in ce va conţine pe prima linie numărul de
linii şi de coloane, pe următoarele n linii elementele matricei, fiecare linie având câte m valori,
iar pe ultima linie din fişier cele m elemente ale vectorului c.
Să se calculeze şi afişeze pentru fiecare coloană j pentru care c[j] este egală cu prima valoare a
coloanei respective, suma modulelor elementelor din coloana j ( Σ| | ) .
Exemplu:
23
2 5 -7
-1 4 -3
1 5 -7
Pentru datele de mai sus se va afişa: 9 10

26) #include <fstream>


#include <iostream>
#include <cmath>
using namespace std;
ifstream f("Intrare.in");
float a[100][100],c[100],s;
int n,m,i,j;
int main()
{f>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++) f>>a[i][j];
for(i=1;i<=m;i++) f>>c[i];
for(j=1;j<=m;j++)
if(c[j]==a[1][j])
{s=0;
for(i=1;i<=n;i++)s=s+fabs(a[i][j]);
cout<<s<<" ";}
return 0;}
27. Se consideră o matrice A cu n linii si n coloane de numere reale. Pentru i=0,1,…..,n-2 se va
căuta în matricea formată din liniile şi coloanele i…….n-1 elementul maxim în valoare absolută
şi acesta va fi adus în poziţia a[i][i]. Elementele matricei vor fi afişate pe ecran, câte o linie a
matricei pe câte o linie a ecranului cu câte un spaţiu între elemente. Citirea se va face din
fişierul intrare.in, pe prima linie aflându-se valoarea lui n, iar pe următoarele n linii elementele
matricei.
Exemplu: pentru datele de mai jos
4
1 5 -7 8
-1 3 7 5
4649
3 -8 -3 5
se va afişa matricea alăturată
9 5 -7 8
-1 -8 7 5
4651
3 3 -3 4

27) #include <fstream>


#include <iostream>
#include <cmath>
using namespace std;
ifstream f("intrare.in");
float A[100][100],maxim,aux;
int n,i,j,k,pozj,pozk;
int main()
{f>>n;
for(i=0;i<n;i++)
for(j=0;j<n;j++) f>>A[i][j];
for(i=0;i<n-1;i++)
{maxim=A[i][i];
for(j=i;j<n;j++)
for(k=i;k<n;k++)
if(maxim<fabs(A[j][k])){maxim=fabs(A[j][k]);
pozj=j; pozk=k;}
aux=A[i][i];
A[i][i]=A[pozj][pozk];
A[pozj][pozk]=aux;}
for(i=0;i<n;i++)
{for(j=0;j<n;j++)
cout<<A[i][j]<<" ";
cout<<endl;}
return 0;}

28. Se citeşte din fişierul intrare.in, un text format doar din litere ale alfabetului englez. Să se
determine numărul de apariţii ale fiecărei litere fără a ţine cont dacă este literă mare sau mică.
Se vor afişa doar literele care apar, în ordine alfabetică, însoţite de numărul lor de apariţii.
Exemplu: In intrare.in avem: Ana si Anca au mere
Se va afisa:
Litera a apare de 5 ori. Litera c apare de 1 ori. Litera e apare de 2 ori. Litera i apare de 1 ori.
Litera m apare de 1 ori. Litera n apare de 2 ori. Litera r apare de 1 ori. Litera s apare de 1 ori.
Litera u apare de 1 ori.

28) #include <iostream>


#include <fstream>
#include <cstring>
using namespace std;
ifstream f("intrare.in");
int i,ap[26];
int main()
{char sir[101];
f.get(sir,101);
for(i=0;i<strlen(sir);i++)
{ap[sir[i]-'a']++;
ap[sir[i]-'A']++;}
for(i=0;i<26;i++)
if(ap[i]!=0)cout<<"Litera "<<char('A'+i)<<" apare de "<<ap[i]<<" ori"<<endl;
return 0;}

29. Se citeşte din fişierul intrare.in, un text format doar din litere ale alfabetului englez. Să se
determine care sunt literele ce nu apar în sir. Afişaţi aceste litere în ordine alfabetică.
Exemplu: In intrare.in avem: Ana si Bianca sunt fete cuminti
Se va afisa:
Literele care nu apar in sir sunt : d, g, h, j, k, l, o, p, q, r, v, w, x, y, z

29) #include <iostream>


#include <fstream>
#include <cstring>
using namespace std;
ifstream f("intrare.in");
int i,ap[26];
int main()
{char sir[101];
f.get(sir,101);
for(i=0;i<strlen(sir);i++)
{ap[sir[i]-'a']++;
ap[sir[i]-'A']++;}
cout<<"Literele care nu apar in sir sunt ";
for(i=0;i<26;i++)
if(ap[i]==0) cout<<char('A'+i)<<", ";
return 0;}

30. Se citeşte de la tastatură un text de cel mult de 70 de caractere, text format din mai multe
cuvinte separate prin spaţii, virgulă şi punct. Căutaţi şi afişaţi doar cuvintele care încep cu o
vocală.

30) #include <iostream>


#include <fstream>
#include <cstring>
using namespace std;
ifstream f("intrare.in");
int i,ap[26];
int main()
{char sir[71], *p, sep[4]=" ,.";
f.get(sir,71);
p=strtok(sir,sep);
while (p!=NULL)
{if(p[0]=='a' || p[0]=='e' || p[0]=='i' || p[0]=='o' || p[0]=='u')
cout<<p<<" ";
p=strtok (NULL,sep);
}
return 0;}

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