Vous êtes sur la page 1sur 40

1. Se citesc din fişierul “numere.

in”, de pe 2 linii consecutive, 2 numere mari scrise în baza 10,


fiecare avâ nd cel mult 50 de cifre. Să se scrie un program care să calculeze suma lor, folosind şiruri
în care se memorează cifrele numerelor. Rezultatul se va afişa în fişierul ”numere.out”.

#include <iostream>
#include<fstream>
#include<string.h>
int a[50],b[50],c[50];
int main()
{int n,m,i,j,k,t;
char s1[50],s2[50];
ifstream f("numere.in");
ofstream g("numere.out");
f>>s1>>s2;
n=strlen(s1);
m=strlen(s2);
k=1;
for(i=n-1;i>=0;i--)
a[k++]=s1[i]-'0';
k=1;
for(i=m-1;i>=0;i--)
b[k++]=s2[i]-'0';
if(n>m)
k=n;
else k=m;
t=0;
for(i=1;i<=k;i++)
{c[i]=a[i]+b[i]+t;
if(c[i]>9)
{c[i]=c[i]%10;
t=1;
}
else
t=0;
}
if(t==1)
g<<t;
for(i=k;i>=1;i--)
g<<c[i];
f.close();
g.close();}

2.Se citesc din fişierul “pol.in”, de pe prima linie, gradele a două polinoame n,m (0≤n,m≤50). De pe
urmă toarele două linii se citesc două şiruri de numere reale care reprezintă coeficienţii celor două
polinoame, în ordinea crescă toare a gradelor. Să se scrie un program care să construiască în
memorie şi să afişeze în fişierul ”pol.out” suma polinoamelor. Coeficienţii sumei se vor afişa cu două
zecimale separaţi printr-un singur spaţiu.

#include <iostream>
#include<fstream>
int a[50],b[50],c[50];
int main()
{int n,m,i,max,min;
ifstream f("pol.in");
ofstream g("pol.out");
f>>n>>m;
for(i=1;i<=n+1;i++)
f>>a[i];
for(i=1;i<=m+1;i++)
f>>b[i];
if(n>m)
{min=m; max=n;}
else
{min=n; max=m;}
for(i=1;i<=min+1;i++)
c[i]=a[i]+b[i];
if(n!=m)
if(n>m)
for(i=min+2;i<=max+1;i++)
c[i]=a[i];
else
for(i=min+2;i<=max+1;i++)
c[i]=b[i];
g<<max<<endl;
for(i=1;i<=max+1;i++)
g<<c[i]<<" ";

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

3. Se citesc din fişierul “pol.in”, de pe prima linie, gradele a două polinoame n,m (0≤n,m≤50). De pe
urmă toarele două linii se citesc două şiruri de numere reale care reprezintă coeficienţii celor două
polinoame, în ordinea crescă toare a gradelor. Să se scrie un program care să construiască în
memorie şi să afişeze în fişierul ”pol.out” produsul polinoamelor. Coeficienţii produsului se vor
afişa cu două zecimale separaţi printr-un singur spaţiu .

#include <iostream.h>
#include <fstream.h>
float a[100],b[100],c[100];
int main()
{ ifstream f("pol.in");
ofstream g("pol.out");
int n,i,m,max,j;
f>>n>>m;
max=n+m;
for(i=0;i<=n;i++)
f>>a[i];
for(j=0;j<=m;j++)
f>>b[j];
for(i=0;i<=n;i++)
for(j=0;j<=m;j++)
c[i+j]=c[i+j]+a[i]*b[j];
g<<max<<endl;
for(i=0;i<=max;i++)
g<<c[i]<<" ";
f.close();
g.close();
}

4.Se citesc din fişierul “sort.in”, de pe prima linie, 2 numere n şi m (1≤n,m≤50). De pe urmă toarele 2
linii se citesc elementele a două şiruri de lungime n, respectiv m, , numere întregi, de maxim 9 cifre,
care sunt ordonate crescă tor. Să se scrie un program care să construiască în memorie un şir care
conţine rezultatul interclasă rii celor două şiruri. Şirul rezultat se va afişa în fişierul ”sort.out”.

#include <iostream>
#include<fstream>
int main()
{ifstream f("sort.in");
ofstream g("sort.out");
int n,m,a[50],b[50],c[50],i,j,k=0,t;
f>>n>>m;
for(i=1;i<=n;i++)
f>>a[i];
for(i=1;i<=m;i++)
f>>b[i];
i=1; j=1;
while(i<=n && j<=m)
if(a[i]<b[j])
c[++k]=a[i++];
else
c[++k]=b[j++];
if(i<=n)
for(t=i;t<=n;t++)
c[++k]=a[t];
if(j<=m)
for(t=j;t<=m;t++)
c[++k]=b[t];
for(i=1;i<=k;i++)
g<<c[i]<<" ";
f.close();
g.close();

5.Se citesc din fişierul “mult.in”, de pe prima linie, 2 numere n şi m (1≤n,m≤50). De pe urmă toarele
două linii se citesc elementele a două şiruri de lungime n, respectiv m, numere întregi, de maxim 9
cifre. Elementele şirurilor sunt distincte două cate două. Scrieţi un program, care să construiască în
memorie un şir ce va conţine intersecţia celor două şiruri. Rezultatul se va afişa în fişierul
”mult.out”.

#include <iostream>
#include<fstream>

int main()
{ifstream f("mult.in");
ofstream g("mult.out");
int n,m,a[50],b[50],c[50],i,j,k=1;
f>>n>>m;
for(i=1;i<=n;i++)
f>>a[i];
for(j=1;j<=m;j++)
f>>b[j];
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(a[i]==b[j])
c[k++]=a[i];
for(i=1;i<k;i++)
g<<c[i]<<" ";
f.close();
g.close();
}

6.Se citesc din fişierul “mult.in”, de pe prima linie, 2 numere n şi m (1≤n,m≤50). De pe urmă toarele
două linii se citesc elementele a două şiruri de lungime n, respectiv m, numere întregi, de maxim 9
cifre. Elementele şirurilor sunt distincte două cate două. Să se scrie un program care să
construiască în memorie un şir ce va conţine diferenţa dintre primul şir şi cel de-al doilea şir.
Rezultatul se va afişa în fişierul ”mult.out”.

#include <iostream>
#include<fstream>
int main()
{ifstream f("mult.in");
ofstream g("mult.out");
int n,m,a[50],b[50],c[50],i,j,k=1,t=0;
f>>n>>m;
for(i=1;i<=n;i++)
f>>a[i];
for(j=1;j<=m;j++)
f>>b[j];
for(i=1;i<=n;i++)
{t=0;
for(j=1;j<=m;j++)
if(a[i]==b[j])
t=1;
if(t==0)
c[k++]=a[i];}
for(i=1;i<k;i++)
g<<c[i]<<" ";
f.close();
g.close();
}

7.Se citesc din fişierul “mult.in”, de pe prima linie, 2 numere n şi m (1≤n,m≤50). De pe urmă toarele
două linii se citesc elementele a două şiruri de lungime n, respectiv m, numere întregi, de maxim 9
cifre. Elementele şirurilor sunt distincte două cate două. Să se scrie un program, care să
construiască în memorie un şir ce va conţine reuniunea celor două şiruri. Rezultatul se va afişa în
fişierul ”mult.out”.

#include <iostream>
#include<fstream>
int main()
{ifstream f("mult.in");
ofstream g("mult.out");
int n,m,a[50],b[50],c[50],i,j,k=1,t=0;
f>>n>>m;
for(i=1;i<=n;i++)
{f>>a[i];
c[i]=a[i];}
for(j=1;j<=m;j++)
f>>b[j];
k=i;
for(j=1;j<=m;j++)
{t=0;
for(i=1;i<=n;i++)
if(a[i]==b[j])
t=1;
if(t==0)

c[k++]=b[j];

}
for(i=1;i<k-1;i++)
for(j=i+1;j<k;j++)
if(c[i]>c[j])
{t=c[i];
c[i]=c[j];
c[j]=t;
}
for(i=1;i<k;i++)
g<<c[i]<<" ";
f.close();
g.close();
}

8.Se citeşte din fişierul “mult.in”, de pe prima linie, un numă r n (1≤n≤50). De pe urmă toarea linie
se citesc elementele unui şir de lungime n, numere întregi, de maxim 9 cifre. Să se scrie un program
care să verifice dacă şirul citit conţine numai elemente distincte.

#include <iostream>
#include<fstream>
int main()
{ifstream f("mult.in");
int n,a[50],i,j,t=1;
f>>n;
for(i=1;i<=n;i++)
f>>a[i];
for(i=1;i<n;i++)
{for(j=i+1;j<=n;j++)
if(a[i]==a[j])
{t=0;
break;
}
if(t==0)
break;
}
if(t==1)
cout<<"DA";
else
cout<<"NU";
f.close();
}

9.Se citesc din fişierul “mult.in”, de pe prima linie, elementele unui liste simplu înlă nţuite, , numere
întregi, de maxim 9 cifre. Să se scrie un program care să verifice dacă lista citită conţine numai
elemente distincte.

#include <iostream>
#include<fstream>
typedef struct nod{long inf; nod *au;};
nod *p,*u;
void creare()
{ifstream f("mult.in");
int i;
nod *c;
p=new nod;
f>>p->inf;
u=p;
while(!f.eof())
{c=new nod;
f>>c->inf;
u->au=c;
u=c;
}
u->au=NULL;
f.close();
}
int main()
{creare();
nod *c1,*c2;
int t=1;
for(c1=p;c1!=u;c1=c1->au)
{for(c2=c1->au;c2!=NULL;c2=c2->au)
if(c1->inf==c2->inf)
{t=0;
break;
}
if(t==0)
break;
}
if(t==1)
cout<<"da";
else
cout<<"nu";
}

10.Se citesc din fişierul “sort.in”, de pe prima linie, elementele unei liste simplu înlă nţuite, numere
întregi, de maxim 9 cifre. Să se scrie un program care sortează crescă tor elementele listei folosind
metoda bulelor. Rezultatul se va afişa în fişierul ”sort.out”.

#include <iostream>
#include<fstream>
typedef struct nod{long inf;nod *au;};
nod *p,*u;
void creare()
{ifstream f("sort.in");
int i;
nod *c;
p=new nod;
f>>p->inf;
u=p;
while(!f.eof())
{c=new nod;
f>>c->inf;
u->au=c;
u=c;
}
u->au=NULL;
f.close();
}
int main()
{creare();
nod *c,*aux;
int t;
do{t=0;
for(c=p;c!=u;c=c->au)
if(c->inf>c->au->inf)
{aux=c;
c=c->au;
c->au=aux;
t=1;
}
}while(t==1);
ofstream g("sort.out");
for(c=p;c!=NULL;c=c->au)
g<<c->inf<<" ";
g.close();
}

11. Se citeşte din fişierul “sort.in”, de pe prima linie, un numă r n (1≤n≤50). De pe urmă toarea linie
se citesc elementele unui şir de lungime n, numere întregi, de maxim 9 cifre. Să se scrie un program
care să realizeze sortarea crescă toare a elementelor şirului folosind metoda selecţiei. Rezultatul se
va afişa în fişierul ”sort.out”.

#include <iostream>
#include<fstream>
int main()
{int n,i,j,aux;
long a[50];
ifstream f("sort.in");
ofstream g("sort.out");
f>>n;
for(i=1;i<=n;i++)
f>>a[i];
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
if(a[i]>a[j])
{aux=a[i];
a[i]=a[j];
a[j]=aux;
}
for(i=1;i<=n;i++)
g<<a[i]<<" ";
f.close();
g.close();
}

12.Se citeşte din fişierul “sort.in”, de pe prima linie, un numă r n (1≤n≤50). De pe urmă toarea linie se
citesc elementele unui şir de lungime n, numere întregi, de maxim 9 cifre. Să se scrie un program
care să realizeze sortarea crescă toare a elementelor şirului folosind metoda inserţiei. Rezultatul se
va afişa în fişierul ”sort.out”.

#include <iostream>
#include<fstream>
int n;
long a[100];
int main()
{ifstream f("sort.in");
ofstream g("sort.out");
f>>n;
int i,j,aux,k;
for(i=1;i<=n;i++)
f>>a[i];
for(i=2;i<=n;i++)
{j=1;
while(j<i && a[j]<a[i])
j++;
if(a[j]>=a[i])
{aux=a[i];
for(k=i;k>j;k--)
a[k]=a[k-1];
a[j]=aux;

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

13.Se citeşte din fişierul “sort.in”, de pe prima linie, un numă r n (1≤n≤50). De pe urmă toarea linie se
citesc elementele unui şir de lungime n, numere întregi, de maxim 9 cifre. Să se scrie un program
care să realizeze sortarea crescă toare a elementelor şirului folosind metoda numă ră rii. Se va ţine
cont de faptul că în şir poate să apară un element şi de mai multe ori. Rezultatul se va afişa în
fişierul ”sort.out”.

#include <iostream>
#include<fstream>
long a[50],b[50],c[50];
int main()
{ifstream f("sort.in");
ofstream g("sort.out");
int n,i,j;

f>>n;
for(i=1;i<=n;i++)
f>>a[i];
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
if(a[i]<a[j])
b[j]++;
else
b[i]++;
for(i=1;i<=n;i++)
c[b[i]+1]=a[i];
for(i=1;i<=n;i++)
g<<c[i]<<" ";
f.close();
g.close();
}

14.Se citeşte din fişierul “cmmdc.in”, de pe prima linie, un numă r natural n (1≤n≤50). De pe
urmă toarea linie se citesc n numere naturale de maxim 9 cifre.. Să se scrie un program care să
calculeze cel mai mare divizor comun al celor n numere de pe linia a doua a fişierului. Rezultatul se
va afişa în fişierul ”cmmdc.out”.

#include <iostream>
#include<fstream>
long a[50],n;
long div(long a,long b)
{long c;
while(a!=b)
if(a>b)
c=a-b;
else
c=b-a;
return c;
}
int main()
{ifstream f("cmmdc.in");
ofstream g("cmmdc.out");
int i,j,t=1;
long x;
f>>n;
for(i=1;i<=n;i++)
f>>a[i];
for(i=1;i<=n;i++)
cout<<a[i]<<" ";
cout<<div(2,4);
for(i=1;i<n;i++)
{if(x!=div(a[i],a[i+1]))
{t=0; break;}
if(t==0)
break;
}
if(t==1)
g<<x;
f.close();
g.close();
}

15.Se citeşte din fişierul “exista.in”, de pe prima linie, un numă r n (1≤n≤50). De pe urmă toarea linie
se citesc n numere naturale de maxim 9 cifre reprezentâ nd elementele unui şir. Să se scrie un
program care să verifice dacă există în şir trei elemente ală turate care au acelaşi numă r de divizori.

#include <iostream>
#include<fstream>
int nr_div(int a)
{int nr=0,i;
for(i=1;i<=a;i++)
if(a%i==0)
nr++;
return nr;
}
int main()
{ifstream f("exista.in");
long a[50];
int n,i;
f>>n;
for(i=1;i<=n;i++)
f>>a[i];
for(i=1;i<=n-2;i++)
if(nr_div(a[i])==nr_div(a[i+1]) && nr_div(a[i+1])==nr_div(a[i+2]))
cout<<"DA"<<endl;
f.close();
}
16.Se citeşte din fişierul “frecv.in”, de pe prima linie, un numă r n (1≤n ≤50). De pe urmă toarea linie
se citesc elementele unui şir de lungime n, numere întregi, de maxim 9 cifre.. Să se scrie un program
care să introducă într-o listă simplu înlă nţuită elementele distincte ale şirului, împreună cu
frecvenţa lor de apariţie, şi afişează rezultatul în fişierul “frecv.out”.

#include <iostream>
#include <fstream>
typedef struct nod
{
long int inf;
int frec;
nod *au;
};

nod *p,*u;
int main()
{
ifstream f("frecv.in");
ofstream g("frecv.out");
int n,i,j,t;
long int x;
f>>n;
nod *c,*k;
p=new nod;
f>>p->inf;
p->frec=1;
u=p;
u->au=NULL;
for(i=2;i<=n;i++)
{f>>x;t=0;
for(c=p;c!=NULL;c=c->au)
if(c->inf==x)
{c->frec++;
t=1;}
if(t==0)
{k=new nod;
k->inf=x;
k->frec=1;
u->au=k;
u=k;
u->au=NULL;
}}

for(c=p;c!=NULL;c=c->au)
g<<c->inf<<" apare de "<<c->frec<<" ori "<<endl;
}

17.Se citeşte din fişierul “progresie.in”, de pe prima linie, un numă r n (1≤n≤50). De pe urmă toarea
linie se citesc elementele unui şir de lungime n, numere întregi, de maxim 9 cifre.. Să se scrie un
program care să verifice dacă elementele şirului formează o progresie aritmetică sau o progresie
geometrică . În caz afirmativ să se afişeze tipul progresiei şi raţia, iar în caz negativ să se scrie un
mesaj corespunză tor în fişierul ”progresie.out”.

#include <iostream>
#include<fstream>
int main()
{ifstream f("progresie.in");
ofstream g("progresie.out");
int n,a[50],x,t1=1,t2=1,i;
float y;
f>>n;
for(i=1;i<=n;i++)
f>>a[i];
x=a[n]-a[n-1];
y=(float)a[n]/a[n-1];
for(i=n;i>=2;i--)
{if(t1==1)
if(a[i]-a[i-1]!=x)
t1=0;
if(t2==1)
if((float)a[i]/a[i-1]!=y)
t2=0;
}
if(t1==1)
g<<"elementele şirului formează o progresie aritmetica cu raţia "<<x;
if(t2==1)
g<<"elementele şirului formează o progresie geometrică cu raţia "<<y;
f.close();
g.close();
}

18.Se citeşte un text din fişierul ”text.in”. Textul are mai multe linii şi mai multe cuvinte. Pe fiecare
linie cuvintele sunt despă rţite prin câ te un singur spaţiu sau prin semne de punctuaţie. Să se afişeze
în fişierul ”text.out”, pe linii consecutive, toate literele care apar în text, împreună cu frecvenţele lor
de apariţie.

#include <iostream>
#include<fstream>
#include<string.h>
#include<ctype.h>
char a[100];
int n;
int fr(char x)
{int nr=0,i;
for(i=1;i<=n;i++)
if(tolower(a[i])==x)
nr++;
return nr;
}
int main()
{ifstream f("text.in");
ofstream g("text.out");
int i,j,t;
f.get(a,100);
f.get();

n=strlen(a);
for(i=0;i<n;i++)
{t=0;
for(j=0;j<i-1;j++)
if(tolower(a[j])==tolower(a[i]))
{t=1; break;}
if(t==0)
g<<toupper(a[i])'0'<<" - "<<fr(tolower(a[i]))<<endl;
}
f.close();
}

19.Să se afişeze în fişierul “prietene.out” toate perechile de numere prime prietene mai mici decâ t
un numă r natural n citit de la tastatură (1≤n≤30000). Două numere prime se numesc prietene dacă
diferenţa lor în modul este mai mică sau egală cu 2.

#include <iostream>
#include<fstream>
#include<math.h>
int prim(int x)
{int i;
for(i=2;i<=x/2;i++)
if(x%i==0)
return 0;
return 1;
}

int main()
{ofstream g("prietene.out");
int n,a[50],i,j,k=0;
cin>>n;
for(i=2;i<=n;i++)
if(prim(i)==1)
a[++k]=i;
for(i=1;i<=k;i++)
for(j=1;j<i;j++)
if(abs(a[i]-a[j])<=2)
if(i==k)
g<<"("<<a[j]<<" "<<a[i]<<") ";
else
g<<"("<<a[j]<<" "<<a[i]<<"), ";
g.close();
}

20.Se citeşte un numă r natural n de la tastatură (1≤n≤30000). Să se verifice dacă n este numă r
puternic. Un numă r este puternic dacă are mai mulţi divizori decat orice numă r mai mic decâ t el.

#include <iostream>
#include<stdlib.h>
int div(int x)
{int nr=0,i;
for(i=1;i<=x;i++)
if(x%i==0)
nr++;
return nr;
}
int main()
{int n,i;
cin>>n;
for(i=1;i<n;i++)
if(div(i)>=div(n))
{cout<<"NU"; exit(0);}
cout<<"DA";
}
21.Se citeşte de la tastatură un numă r natural k (1≤k≤50). Să se determine cel mai mic numă r
natural care are exact k divizori

#include <iostream>
int div(int x)
{int nr=0,i;
for(i=1;i<=x;i++)
if(x%i==0)
nr++;
return nr;
}
int main()
{int k,i;
cin>>k;
for(i=1;i<=32000;i++)
if(div(i)==k)
{cout<<i; break;}
}
22.Se citeşte din fişierul “mat.in”, de pe prima linie, un numă r natural n (1≤n≤50) şi de pe
urmă toarele n linii o matrice pă tratică de numere întregi, de maxim 9 cifre.. Să se verifice dacă
matricea este pă trat magic (sumele elementelor pe linii, coloane şi de pe cele două diagonale, este
aceeaşi).

#include <iostream>
#include<fstream>
int main()
{long a[50][50],S=0,s=0;
int n,i,j;
ifstream f("mat.in");
f>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
f>>a[i][j];
i=1;
for(j=1;j<=n;j++)
s=s+a[i][j];
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{S=S+2*a[i][j];
if(i+j==n+1)
S=S+a[i][j];
if(i==j)
S=S+a[i][j];
}

if((float)S/(2*n+2)==s)
cout<<"da";
else
cout<<"nu";
f.close();
}
23.Se citeşte din fişierul “mat.in” , de pe prima linie, un numă r natural n (1≤n≤50), şi de pe
urmă toarele n linii o matrice pă tratică ce conţine numere naturale de maxim 4 cifre. Să se numere
elementele cu numă r par de cifre aflate în triunghiul de sub diagonala principală a matricei şi să se
afişeze rezultatul pe ecran

#include <iostream>
#include<fstream>
int main()
{int a[50][50],n,i,j,m,nr=0;
ifstream f("mat.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++)
{m=0;
if(i>j)
{while(a[i][j]!=0)
{a[i][j]=a[i][j]/10;
m++;}
if(m%2==0)
nr++;
}
}
cout<<nr;
f.close();
}
24.Se citeşte din fişierul “mat.in”, de pe prima linie, un numă r natural n (1≤n≤50), şi de pe
urmă toarele n linii o matrice pă tratică ce conţine numere naturale de maxim 4 cifre. Să se calculeze
suma elementelor prime aflate în triunghiul de deasupra diagonalei principale a matricei şi să se
afişeze rezultatul pe ecran

#include <iostream>
#include<fstream>
#include<math.h>
int prim(int x)
{int i;
if(x==2)
return 1;
if(x==1 || x%2==0)
return 0;
for(i=3;i<=sqrt(x);i=i+2)
if(x%i==0)
return 0;
return 1;
}
int main()
{int a[50][50],n,i,j,S=0;
ifstream f("mat.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)
if(prim(a[i][j])==1)
S=S+a[i][j];
cout<<S;

f.close();
}
25.Se citeşte din fişierul “mat.in”, de pe prima linie, un numă r natural n (1≤n≤50), şi de pe
urmă toarele n linii o matrice pă tratică ce conţine numere naturale de maxim 4 cifre. Să se verifice
dacă există elemente cu suma cifrelor pară în triunghiul de sub diagonala secundară a matricei şi să
se afişeze rezultatul pe ecran

#include <iostream>
#include<fstream>
#include<stdlib.h>
int main()
{int a[50][50],n,i,j,nr=0,S;
ifstream f("mat.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++)
{S=0;
if(i+j>n+1)
{while(a[i][j]!=0)
{S=S+a[i][j]%10;
a[i][j]=a[i][j]/10;
}
if(S%2==0)
{cout<<"Da"; exit(0);}
}}
cout<<"NU";
f.close();
}
26.Se citeşte din fişierul “mat.in”, de pe prima linie, un numă r natural n, (1≤n≤50) şi de pe
urmă toarele n linii o matrice pă tratică ce conţine numere naturale de maxim 4 cifre. Să se verifice
dacă toate elementele aflate în triunghiul de deasupra diagonalei secundare a matricei au aceeaşi
paritate şi să se afişeze rezultatul pe ecran.

#include <iostream>
#include<fstream>
int main()
{int a[50][50],n,i,j,t;
ifstream f("mat.in");
f>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
f>>a[i][j];
if(a[1][1]%2==0)
t=0;
else
t=1;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(i+j<n+1)
if(a[i][j]%2!=t)
{cout<<"Nu"; exit(0);}
cout<<"Da";
f.close();
}
27. Se citesc din fişierul “mat1.in” de pe prima linie, două numere naturale n1(1≤n1≤50) şi m1
(1≤m1 ≤50) şi de pe urmă toarele n1 linii o matrice cu n1 linii şi m1 coloane. Analog, se citesc din
fişierul “mat2.in”, de pe prima linie, două numere naturale n2 (1≤n2≤50) şi m2 (1≤n≤50) şi de pe
urmă toarele n2 linii o matrice cu n2 linii şi m2 coloane. Elementele celor 2 matrici sunt numere
reale. Să se scrie un program în care se calculează produsul celor două matrici. Dacă produsul se
poate calcula atunci se va afişa matricea rezultată în fişierul “mat.out”, iar în caz contrar se va afişa
un mesaj corespunză tor

#include <iostream>
#include<fstream>
#include<stdlib.h>
int main()
{ifstream f1("mat1.in");
ifstream f2("mat2.in");
ofstream g("mat.out");
float a[50][50],b[50][50],c[50][50];
int n1,n2,m1,m2,i,j,k=0,S=0;
f1>>n1>>m1;
f2>>n2>>m2;
if(n1!=m2 || m1!=n2)
{g<<"Nu se poate calcula"; exit(0);}
for(i=1;i<=n1;i++)
for(j=1;j<=m1;j++)
f1>>a[i][j];
for(i=1;i<=n2;i++)
for(j=1;j<=m2;j++)
f2>>b[i][j];
for(i=1;i<=n1;i++)
{S=0;
for(j=1;j<=m1;j++)
S=S+a[i][j]*b[j][i];
c[i][++k]=S;
}
for(i=1;i<=n1;i++)
{for(j=1;j<=k;j++)
g<<c[i][j]<<" ";
g<<endl;}
f1.close();
f2.close();
g.close();
}

28.Se citesc din fişierul “mat.in”, de pe prima linie, două numere naturale n şi m (1≤n,m≤50) şi de
pe urmă toarele n linii o matrice cu n linii şi m coloane cu elemente numere întregi, de maxim 9
cifre.. Să se scrie un program care afişează în fişierul “mat.out”, câ te unul pe linie, numerele din
matrice care sunt în acelaşi timp maxime pe linia şi minime pe coloana pe care se află . Dacă nu
există astfel de numere se va afişa un mesaj corespunză tor.

#include <iostream>
#include<fstream>
int main()
{ifstream f("mat.in");
ofstream g("mat.out");
int n,m,i,j,max,min,x,k;
long a[50][50];
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++)
{max=-32000;
min=32000;
for(j=1;j<=m;j++)
if(a[i][j]>max)
{max=a[i][j]; x=j;}
for(k=1;k<=n;k++)
if(a[k][x]<min)
min=a[k][x];
if(min==max)
g<<max<<" ";
}
f.close();
g.close();
}
29.Se citesc din fişierul “mat.in” , de pe prima linie, două numere naturale n şi m (1≤n,m≤50) şi de
pe urmă toarele n linii o matrice cu n linii şi m coloane cu elemente numere naturale, de maxim 9
cifre.. Să se scrie un program care afişează în fişierul “mat.out”, câ te unul pe linie, numerele din
matrice care au numă r maxim de divizori

#include <iostream>
#include<fstream>
int div(int x)
{int nr=0,i;
for(i=1;i<=x;i++)
if(x%i==0)
nr++;
return nr;
}
int main()
{ifstream f("mat.in");
ofstream g("mat.out");
int n,m,i,j,max=0;
long a[50][50];
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++)
for(j=1;j<=m;j++)
if(max<div(a[i][j]))
max=div(a[i][j]);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(div(a[i][j])==max)
g<<a[i][j]<<endl;
f.close();
g.close();
}
30.Se citesc din fişierul “mat.in” , de pe prima linie, patru numere naturale n, m, l şi c (1≤n,m≤50 ,
1≤l ≤n, 1≤c ≤m) şi de pe urmă toarele n linii o matrice cu n linii şi m coloane, cu elemente numere
întregi, de maxim 9 cifre.. Să se scrie un program care să şteargă din matrice linia l şi coloana c şi
afişează matricea rezultată în fişierul “mat.out”.

#include <iostream>
#include<fstream>
int main()
{ifstream f("mat.in");
ofstream g("mat.out");
int n,m,l,c,i,j,k;
long a[50][50];
f>>n>>m>>l>>c;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
f>>a[i][j];
for(j=1;j<=m;j++)
if(j==c)
for(k=1;k<=n;k++)
a[k][j]=a[k][j+1];
for(i=1;i<=n;i++)
if(i==l)
for(k=1;k<=m;k++)
a[i][k]=a[i+1][k];
m=m-1;
n=n-1;
for(i=1;i<=n;i++)
{for(j=1;j<=m;j++)
g<<a[i][j]<<" ";
g<<endl;}
f.close();
g.close();

}
31.Se citeşte un numă r natural n (1≤n≤15). Să se afişeze în fişierul “Pascal.out” trunghiul lui Pascal
care are n + 1 linii şi n + 1 coloane. Regulile după care se construieşte triunghiul lui Pascal sunt:
Pe coloana 0 şi pe diagonala principală se pune 1.
Restul elementelor din triunghi se obţin adunâ nd elemental aflat pe linia anterioară pe aceeaşi
coloană cu el cu elemental aflat pe linia anterioară şi pe coloana anterioară .

#include <iostream>
#include<fstream>
int a[50][50];
int main()
{ofstream g("pascal.out");
int n,i,j;
cin>>n;

for(i=0;i<=n;i++)
for(j=0;j<=i;j++)
{a[i][j]=a[i-1][j]+a[i-1][j-1];
if(j==0 || i==j)
a[i][j]=1;
}
for(i=0;i<=n;i++)
{for(j=0;j<=n;j++)
if(i>=j)
g<<a[i][j]<<" ";
g<<endl;
}
g.close();
}
32.Se citesc de la tastatură numitorii şi numă ră torii (numere întregi de maxim 9 cifre) a două
fracţii. Să se scrie un program care simplifică suma celor două fracţii şi afişează pe ecran numitorul
şi numă ră torul fracţiei rezultate.

#include <iostream>
#include <stdlib.h>
int main()
{long int a,b,c,d,x,y,min;
int i,t;
cout<<"Numaratorii sunt:";
cout<<"a= ";cin>>a;cout<<"c= ";cin>>c;
cout<<"Numitorii sunt:";
cout<<"b= ";cin>>b;cout<<"d= ";cin>>d;

x=(a*d)+(b*c);
y=(b*d);
if(x>y)
min=y;
else
min=x;
t=0;

for(i=min;i>=1;i--)
if(x%i==0 && y%i==0)
{cout<<x/i<<" / "<<y/i;
t=1;
exit(0);
}
if(t==0)
cout<<((a*d)+(b*c))<<" / "<<(b*d);
}
33.Se citesc din fişierul “lista.in” numere
întregi de maxim 9 cifre, pâ nă la întâ lnirea
sfă rşitului de fişier. Să se scrie un program
care pune într-o lista dublu înlă nţuită
elementele nenule şi apoi sterge din listă
elementele pare. Listele rezultate se va afişa u->au=NULL;
în fişierul “lista.out”. f.close();
}
#include <iostream>
#include<fstream> int main()
typedef struct nod{long inf;nod *ai,*au;}; {creare();
nod *p,*u; ofstream g("lista.out");
void creare() nod *c;
{ifstream f("lista.in"); for(c=p;c!=NULL;c=c->au)
nod *c; g<<c->inf<<" ";
p=new nod; g<<endl;
f>>p->inf; while(p->inf%2==0)
while(p->inf==0) {c=p->au;
f>>p->inf; delete p;
p->ai=p->au=NULL; c->ai=NULL;
u=p; p=c;
while(!f.eof()) }
{c=new nod; while(u->inf%2==0)
f>>c->inf; {c=u->ai;
while(c->inf==0) delete u;
f>>c->inf; c->au=NULL;
u->au=c; u=c;
c->ai=u; } for(c=p->au;c->au!=NULL;c=c->au)
u=c;} if(c->inf%2==0)
if(u->inf==0) {c->ai->au=c->au;
u=NULL; c->au->ai=c->ai;
else delete c;}
for(c=p;c!=NULL;c=c->au)
g<<c->inf<<" ";
g.close();

}
34.Se citeşte de la tastatură un numă r natural n (1≤n≤10). Să se afişeze în fişierul “permut.out”, câ te
una pe linie, toate permută rile numerelor de la 1 la n.

#include <iostream>
#include<fstream>
int n,st[50],k;
int valid(int k)
{int i;
for(i=1;i<=k-1;i++)
if(st[k]==st[i])
return 0;
return 1;
}
ofstream g("permut.out");
void back(int k)
{int i;
if(k==n+1)
{
for(i=1;i<=n;i++)
g<<st[i]<<" ";
g<<endl;

}
else
for(i=1;i<=n;i++)
{st[k]=i;
if(valid(k))
back(k+1);
}
}
int main()
{cout<<"n=";cin>>n;
back(1);
g.close();
}
35.Se citesc de la tastatură două numere naturale n şi p (1≤p≤n≤10). Să se afişeze în fişierul
“aranj.out”, câ te una pe linie, toate aranjamentele numerelor de la 1 la n, luate câ te p.

#include <iostream>
#include<fstream>
int n,st[50],k,p;
int valid(int k)
{int i;
for(i=1;i<=k-1;i++)
if(st[k]==st[i])
return 0;
return 1;
}
ofstream g("aranj.out");
void back(int k)
{int i;
if(k==p+1)
{
for(i=1;i<=p;i++)
g<<st[i]<<" ";
g<<endl;

}
else
for(i=1;i<=n;i++)
{st[k]=i;
if(valid(k))
back(k+1);
}
}
int main()
{cin>>n>>p;
back(1);
g.close();
}
36.Se citesc de la tastatură două numere naturale n şi p (1≤p≤n≤10). Să se afişeze în fişierul
“comb.out”, câ te una pe linie, toate combină rile numerelor de la 1 la n, luate câ te p.

#include <iostream>
#include<fstream>
int n,st[50],k,p;
int valid(int k)
{int i;
if(k>1)
if(st[k-1]>st[k])
return 0;
for(i=1;i<=k-1;i++)
if(st[k]==st[i])
return 0;
return 1;
}
ofstream g("comb.out");
void back(int k)
{int i;
if(k==p+1)
{
for(i=1;i<=p;i++)
g<<st[i]<<" ";
g<<endl;

}
else
for(i=1;i<=n;i++)
{st[k]=i;
if(valid(k))
back(k+1);
}
}
int main()
{cin>>n>>p;
back(1);
g.close();
}
37.Se citeşte de la tastatură un numă r natural n (1≤n≤10). Să se afişeze în fişierul “dame.out” toate
posibilită ţile de aşezere a n dame pe tabla de şah, considerată de dimensiune n, astfel încâ t să nu se
atace. Soluţiile vor fi afişate sub forma unor matrici pă tratice de dimensiune n, în care fiecare dama
e reprezentată printr-un ‘D’, iar pe poziţiile neocupate de dame apare caracterul ‘*’

#include <iostream>
#include<fstream>
#include<math.h>
int n,st[50],k,p;
int valid(int k)
{int i;
for(i=1;i<=k-1;i++)
if(st[k]==st[i] || abs(st[k]-st[i])==abs(k-i))
return 0;
return 1;
}
ofstream g("dame.out");
void back(int k)
{int i,j;
if(k==n+1)
{
for(i=1;i<=k;i++)
{for(j=1;j<=k;j++)
if(st[i]==j)
g<<'D'<<" ";
else
g<<'*'<<" ";
g<<endl;
}
g<<endl;
}
else
for(i=1;i<=n;i++)
{st[k]=i;
if(valid(k))
back(k+1);
}
}
int main()
{cin>>n;
back(1);
g.close();
}
38.Se citeşte de la tastatură un numă r natural n (1≤n≤10). Să se afişeze în fişierul “regi.out” toate
posibilită ţile de aşezere a n regi pe tabla de şah, considerată de dimensiune n, astfel încâ t să nu se
atace şi să existe exact câ te un rege pe fiecare linie. Soluţiile vor fi afişate sub forma unor matrici
pă tratice de dimensiune n, în care fiecare rege e reprezentat printr-un ‘R’, iar pe poziţiile neocupate
de regi apare caracterul ‘*’

#include <iostream>
#include<fstream>
#include<math.h>
int n,st[50],k,p;
int valid(int k)
{int i;
if(k>1)
if(st[k]==st[k-1] || abs(st[k]-st[k-1])==1)
return 0;
return 1;
}
ofstream g("regi.out");
void back(int k)
{int i,j;
if(k==n+1)
{
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
if(st[i]==j)
g<<'R'<<" ";
else
g<<'*'<<" ";
g<<endl;
}
g<<endl;
}
else
for(i=1;i<=n;i++)
{st[k]=i;
if(valid(k))
back(k+1);
}
}
int main()
{cin>>n;
back(1);
g.close();
}
39.Se citesc de pe prima linie a fişierului “monede.in” două numere naturale s (de maxim 9 cifre) şi
n (1≤n≤10) şi de pe urmă toarea linie se citeşte un şir de n numere naturale de maxim 5 cifre. Se
cere să se afişeze în fişierul “monede.out” toate posibilită ţile de plată a sumei s folosind n tipuri de
monede ale că ror valori sunt memorate în şirul citit.

#include <iostream>
#include<fstream>
int n,st[50],k,a[50];
long s;
long suma(int k)
{int i,S=0;
for(i=1;i<=k;i++)
S=S+st[i]*a[i];
return S;
}
ofstream g("monede.out");
void back(int k)
{int i,j;
for(i=0;i<=s/a[k];i++)
{st[k]=i;
if(suma(k)==s)
{g<<s<<" = ";
for(j=1;j<k;j++)
if(st[j]!=0)
g<<st[j]<<" de "<<a[j]<<" si ";
g<<st[k]<<" de "<<a[k];
g<<endl; }
else
if(suma(k)<s && k<n)
back(k+1); }
}
int main()
{ifstream f("monede.in");
f>>s>>n;
int i;
for(i=1;i<=n;i++)
f>>a[i];
back(1);
f.close();
g.close();
}
40.Se citesc de la tastatură două cuvinte de maxim 20 de litere. Să se scrie un program care verifică
dacă unul este anagrama celuilalt. Un cuvâ nt este anagramă pentru altul dacă cele două cuvinte
conţin aceleaşi litere de acelaşi numă r de ori, dar nu neapă rat în aceeaşi ordine

#include <iostream>
#include<string.h>
int main()
{char a[50],b[50],aux;
int i,j;
cin>>a>>b;
if(strlen(a)==strlen(b))
{for(i=0;i<strlen(a);i++)
for(j=i+1;j<=strlen(a);j++)
if(a[i]<a[j])
{aux=a[i];
a[i]=a[j];
a[j]=aux;
}
for(i=0;i<strlen(b);i++)
for(j=i+1;j<=strlen(b);j++)
if(b[i]<b[j])
{aux=b[i];
b[i]=b[j];
b[j]=aux;
}
}
if(strcmp(a,b)==0)
cout<<"Da";
else
cout<<"Nu";
}

Vous aimerez peut-être aussi