Sunteți pe pagina 1din 12

1.

Scrieţi un program C/C++ care citeşte de la tastatura un număr natural n (2<n<21) si apoi n
linii cu cate n numere întregi de cel mult 7 cifre ce formează un tablou bidimensional a. Sa se
afişeze pe ecran diferenţa dintre suma elementelor de pe diagonala principala si suma
elementelor de pe diagonala secundara a matricei a.

#include<iostream.h>
void main()

{int n,i,j;
long a[20][20],s1=0,s2=0,d;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
{cout<<"a["<<i<<"]["<<j<<"]=";cin>>a[i][j];}}
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
if(i==j)
s1=s1+a[i][j];};
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
if(i+j==n+1)
s2=s2+a[i][j];}
cout<<s1-s2;
}

3.Scrieţi programul C/C++ care citeşte de la tastatura un număr natural n (n<100) si un sir cu
n numere întregi din intervalul [100 ;999] ; programul construieşte un sir de numere rezultat
prin înlocuirea fiecărui număr din şirul citit cu numărul obţinut prin interschimbarea cifrei
unitatilor cu cifra sutelor. Numerele din noul sir se vor afişa pe ecran separate printr-un singur
spaţiu. De exemplu , pentru n=3 si şirul 123 , 904 , 500 , se afişează 321 , 409 , 5.

#include<iostream.h>
void main()
{int n,i,o,v[20],c;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{cout<<"v["<<i<<"]=";cin>>v[i];}
for(i=1;i<=n;i++)
{o=0;
c=v[i]%10;
o=o*10+c;
v[i]=v[i]/10;
c=v[i]%10;
o=o*10+c;
v[i]=v[i]/10;
o=o*10+v[i];
v[i]=o;
cout<<v[i]<<endl;
}
}
4.Doua tablouri unidimensionale a si b , cu elementele a1 , a2 , … , an , respectiv b1 , b2 , …
bn sunt in relaţia a<=b daca : a1<=b1 , a2<=b2 , … , an<=bn. Scrieţi program in limbajul
C/C++ care citeşte doua tablouri unidimensionale a si b cu acelaşi număr de elemente de tip
întreg si verifica daca a<=b sau b<=a afişând un mesaj adecvat.

#include<iostream.h>
void main()
{int a[10],i,n,j,k,aux,min;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{cout<<"a["<<i<<"]=";cin>>a[i];}
for(i=1;i<=n-1;i++)
{min=a[i];
k=i;
for(j=i+1;j<=n;j++)
if(a[j]<min)
{min=a[j];
k=j;}
aux=a[k];
a[k]=a[i];
a[i]=aux;}
for(i=1;i<=n;i++)
cout<<a[i]<<" ";}

8.Scrieţi un program in limbajul C/C++ care afişează toate numerele naturale formate din
cifre identice , mai mari decât 10 si mai mici decât o valoare data n, n<=2.000.000. De
exemplu pentru n=195 , se afişează : 11 , 22 , 33 , 44 , 55 , 66 , 77 , 88 , 99 , 111.

#include<iostream.h>
int n,i;
int identic(int n)
{int d,c;
c=n%10;
while (n>0)
{d=n%10;
if(d==c)
n=n/10;
else
return 0;}
if(n==0)
return 1;}
void main()
{cout<<"n=";cin>>n;
for (i=10;i<=n;i++)
{if(identic(i))
cout<<i<<endl;}}

10.Scrieţi un program C/C++ care citeşte de la tastatura trei numere naturale x, y si k,


(1<x<y<2000000, k<1000) si afişează pe ecran k numere prime din intervalul [x, y]. Daca nu
exista 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 găsit mai puţine numere prime: ” urmat de numărul
acestora. De exemplu, pentru x=3, y=12 si k=5 se vor afişa pe ecran:
3 5 7 11
s-au găsit mai puţine numere prime:4

#include<iostream.h>
void main()
{int x,y,k,n,d,a,p;
cout<<"x=";cin>>x;
cout<<"y=";cin>>y;
cout<<"k=";cin>>k;
a=0;
n=x;
while ((n>=x)&&(n<=y)&&(a<k) )
{d=2;p=1;
while((d<=n/2)&&(p==1))
if(n%d==0)
p=0;
else
d++;
if(p)
{cout<<n<<endl;a++;}
n++;}
if(a<k)
cout<<"au fost gasite mai putine nr prime"<<a;}

12.Scrieţi un program C/C++ care citeşte din fişierul text BAC.TXT , cel mult 100 de numere
naturale aflate pe o singura linie, formate din cel mult 9 cifre fiecare, separate prin spatii si
dintre acestea le afişează pe ecran doar pe acelea care au proprietatea de a fi palindrom. Daca
nu se găsesc numere palindrom, se va afişa pe ecran valoarea –1. Un număr are proprietatea
de a fi palindrom daca citit de la dreapta la stânga sau de la stânga la dreapta are aceeaşi
valoare. De exemplu 1221 este palindrom, in timp ce 1210 nu este palindrom.

Exemplu : daca din fişierul BAC.TXT se citesc numerele : 7341 , 8228 , 660 , 2 , 80 , 131 ,
atunci pe ecran se vor afişa : 828 , 2 , 131.

#include<iostream.h>
int palindrom(int n)
{int copie=n,oglindit,c;
oglindit=0;
{while(n!=0)
c=n%10;
oglindit=oglindit*10+c;
n=n/10;}
return (copie==oglindit);}
void main()
{int v[100],n,i,p;
p=0;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{cout<<"v["<<i<<"]=";cin>>v[i];}
for(i=1;i<=n;i++)
if(palindrom(v[i]))
{cout<<v[i];
p=1;}
if(p==0)
cout<<"-1";}

14.Pentru orice număr natural nenul n definim n factorial (notat n!) ca fiind produsul tuturor
numerelor naturale nenule mai mici sau egale cu n (n! = 1*2*3*…*n) De exemplu : 3!
=1*2*3=6 5!=1*2*3*4*5=120 . Scrieţi un program C/C++ care determina numărul de cifre
nule aflate pe ultimele poziţii consecutive ale valorii obţinute in urma evaluării lui n!, n fiind
un număr natural de cel mult 4 cifre. De exemplu daca n=10, n!=3628800 rezultatul va fi 2
deoarece 3628800 are două zerouri la sfârşit.

#include<iostream.h>
void main()

{long int n,x=1,nr=0,c,p=1;


cout<<"n=";cin>>n;
for(int i=1;i<=n;i++)
p=p*i;
while(x==1)
{c=p%10;
if(c==0)
{nr=nr+1;
p=p/10;}
else
x=0;}
cout<<nr;}

15.Scrieţi un program C/C++ care citeşte din fişierul text DATE.IN cel mult 100 de numere
naturale nenule aflate pe o singura linie, formate din cel mult 4 cifre fiecare, separate prin
spatii si scrie in fişierul DATE.OUT numerele, in ordinea inversa fata de cea in care au fost
citite, pe o singura linie separate prin spatii. De exemplu daca din fişierul DATE.IN se citesc
numerele 93 207 15 1982 3762, atunci conţinutul fişierului DATE.OUT va fi 3762 1982 15
207 93.

#include<fstream.h>
void main()
{int n,i,v[100];
fstream f("date.in",ios::in);
fstream g("date.out",ios::out);
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
for(i=n;i>0;i--)
g<<v[i];
f.close();
g.close();}

17.Scrieţi un program C/C++ care citeşte de pe prima linie a fişierului text BAC.TXT trei
numere naturale a, b, c formate din cel mult patru cifre fiecare, separate prin cate un spaţiu si
afişează pe ecran cel mai mare divizor comun al acestora. De exemplu, daca din fişier se
citesc numerele : 9 27 15, atunci se afişează 3.

#include<iostream.h>
int cmmdc (int x,int y)
{while (x!=y)
if(x>y)
else
y=y-x;
return x;}
void main()
{int a,b,c,d;
fstream("bac.txt";ios::in);
f>>a>>b>>c;
f.close;
d=cmmdc(a,b);
cout<<cmmdc(c,d);}

19.Scrieţi un program care verifica daca un număr natural k(1<k<100000) citit de la tastatura
este prim. Programul va afişa pe ecran mesajul DA sau mesajul NU;

#include<iostream.h>
int prim(int n)
{int prim=1;
for(int d=2;d<=n/2;d++)
if(n%d==0)
prim=0;
if(prim)
return 1;
else
return 0;}
void main()
{int n;
cout<<"n=";cin>>n;
if(prim(n))
cout<<"da";
else
cout<<"nu";}

21.Se considera fişierul text date.in care conţine exact 19 numere distincte formate fiecare din
maxim 2 cifre. Sa se afişeze in fişierul text date.out numărul care lipseşte din fişierul date.in.

#include<fstream.h>
void main()
{int v[100],n,i,j,p;
fstream f("date.in",ios::in);
fstream g("date.out",ios::out);
for(i=1;i<=19;i++)
f>>v[i];
f.close();
for(i=10;i<=99;i++)
{p=1;
for(j=1;j<=19;j++)
if(i==v[j])
p=0;
if(p)
g<<i;}
g.close();}

22.Se citeşte de la tastatura un număr natural nenul n (n<1000). Scrieţi un program C/C++
care construieşte fişierul text bac.txt care sa contina, pe prima linie, toţi divizorii lui n in
ordine strict descrescătoare. Divizorii vor fi separaţi prin spaţiu. De exemplu, daca n=10 ,
atunci fişierul bac.txt va conţine : 10 , 5 , 2 , 1

#include<iostream.h>
#include<fstream.h>
void main()
{int d,n;
cout<<"n=";cin>>n;
fstream g("bac1.txt",ios::out);
for(d=n;d>=1;d--)
if(n%d==0)
g<<d<<" ";
g.close();}

25.Se citeşte de la tastatura un număr natural nenul n care are cel mult 9 cifre. Sa se afişeze in
fişierul Date.out numărul k, natural, astfel încât produsul 1*2*…*(k-1)*k sa aibă o valoare
cat mai apropiata de numărul n. De exemplu, daca se citeşte numărul n=25 fişierul Date.out
are următorul conţinut: 4. iar daca se citeşte numărul n=119 fişierul Date.out are următorul
conţinut: 5

#include<iostream.h>
#include<fstream.h>

void main()
{int k,p,r,n;
cout<<"n=";cin>>n;
k=1;
fstream g("date.out",ios::out);
p=1;
while(p<=n)
{p=p*k;
k++;}
p=p/(k-1);
r=p*k;
if((n-p)<=(r-n))
g<<"numarul k este "<<k-2;
else
g<<"numalul k este "<<k-1;
g.close();
}

27.Scrieţi un program care citeşte un număr natural n>1 cu maximum 9 cifre, si afişează
valoarea celui mai mic divizor prim a lui n, precum si puterea la care acest divizor apare in
descompunerea in factori primi a numărului n.

#include<iostream.h>
int n,p,c;

void cmmd(int n)
{int gasit=0,d=2;
while((d<n/2)&&(gasit==0))
{if(n%d==0)
{c=d;
gasit=1;}
else
d++;}
p=0;
while(n%c==0)
{n=n/c;
p=p+1;}}

void main()
{cout<<"n=";cin>>n;
cmmd(n);
cout<<c<<" la puterea "<<p;
}

28.Să se scrie un program care să calculeze şi să afişeze pe ecran produsul cifrelor pare şi
suma cifrelor impare a unui număr natural n citit de la tastatură.
#include<iostream.h>
unsigned int n, s, p=1, c;
void main()
{
cin>>n;
while(n)
{
c=n%10;
if(c%2==0)
p=p*c;
else
s=s+c;
n=n/10;
}
cout<< p <<" "<< s;
}
29.Sa se verifice daca doua cuvinte introduse de la tastatura (cuvintele având maxim 50 de
caractere fiecare) sunt rime, adică ultimele p caractere ale celor doua cuvinte coincid, unde p
(2<=p<=10) este dat.

#include<iostream.h>
#include<string.h>
char s1[51], s2[51];
int p, x, y, ok=0;
void main()
{
cin>> s1>>s2>>p;
x=strlen(s1)-1;
y= strlen(s2)-1;
for( int i=1;i<=p && ok==0 ;i++)
{
if(s1[x]!=s2[y])
ok=1;
x--;
y--;
}
if(ok)
cout<<"Nu sunt rime";
else
cout<<"Sunt rime";
}

30.Scrieţi un program care construieşte o matrice pătrată de ordin n formată din valorile 1 si 2
astfel încât elementele de pe diagonala principala si secundară sa fie egale cu 1 iar restul
elementelor cu 2. Valoarea lui n se citeşte de la tastatură: n număr natural (2<23), iar matricea
se va afişa pe ecran, cate o linie a matricei pe fiecare rând pe ecran cu spatii intre elementele
fiecărei linii.

Exemplu: Fie n=5. Se va afişa:

12221
21212
22122
21212
12221

#include<iostream.h>
int a[10][10], i, j, n;
void main()
{
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i==j || i+j==n+1)
a[i][j]=1;
else
a[i][j]=2;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<< a[i][j];
cout<< endl;
}
}

31.Scrieţi un program care citeşte de la tastatură un sir de cel mult 50 de caractere si


construieşte fişierul atestat.txt ce conţine şirul si prefixele acestuia de lungime cel puţin 1,
fiecare pe cate o linie, in ordinea descrescătoare a lungimii prefixelor.

Exemplu: Daca se citeşte şirul ‘proba’ atunci atestat.txt va conţine:

proba
prob
pro
pr
p

#include<fstream.h>
#include<string.h>
char s[51];
int n;
void main()
{
cin>>s;
ofstream f("atestat.txt");
n=strlen(s);
while(n>=0)
{
for(int i=0; i< n; i++)
f << s[i];
f<< endl;
n--;
}
f.close();
}

32.Să se scrie un program care să numere cuvintele dintr-un text citit din fişierul ”cuvinte.txt”.
Textul conţine cuvintele separate numai printr-un spaţiu, fără semne de punctuaţie, singurul
semn de punctuaţie este ‘.’ de la sfârşitul textului. Numărul de cuvinte se va afişa pe ecran.

Exemplu: Fişierul ”cuvinte.txt” conţine textul: Ana are mere. se afişează: 3

#include<fstream.h>
#include<string.h>
void main()
{
ifstream f("cuvinte.txt");
char s[100];
int k=1,n;
f.getline(s,100);n=strlen(s);
for(int i=0;i< n;i++)
if(s[i]==' '&& s[i+1]!=' ')
k++;
cout<< k;
f.close();
}

33.Scrieţi programul care citeşte de la tastatură o valoare naturală n (2≤n≤100), construieşte in


memorie si apoi afişează pe ecran o matrice a cu n linii si n coloane, numerotate de la 1 la n,
car conţine numerele naturale, in ordine crescătoare, de la 1 la n2, dispuse pe coloane, in
ordine crescătoare. Astfel coloana 1 va conţine numerele de la 1 la n, coloana 2 numerele de
la n+1 la 2*n, coloana 3 de la 2*n+1 la 3*n si aşa mai departe, ca in exemplu. Matricea se va
afişa pe ecran, cate o linie a matricei pe cate o linie a ecranului, elementele fiecărei linii fiind
separate intre ele prin cate un spaţiu.

Exemplu: pentru n = 4 se va afişa matricea:

1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16

#include<iostream.h>
int a[10][10], k=1,s,n;
void main()
{
cout<<"n=";
cin>>n;
for(int j=1;j<=n;j++)
for(int i=1;i<=n;i++)
{
a[i][j]=k;
k++;
}
for(int i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<< a[i][j]<<" ";
cout<< endl;
}
}

34.Se dă n număr natural. Să se afişeze cel mai apropiat număr prim fată de n. Programul va
conţine cel puţin un subprogram.
Exemplu: n=24 se va afişa 23, pentru n=26 se va afişa 29

#include<iostream.h>
int prim(int x)
{
if(x==0 || x==1) return 0;
for(int i=2;i<=x/2;i++)
if(x%i==0)
return 0;
return 1;
}
void main()
{
unsigned n, x, y;
cout<< "n=";
cin>>n;
x=n+1;
y=n-1;
while(prim(x)==0) x++;
while(prim(y)==0) y--;
if(x-n>n-y)
cout<< y;
else
cout<< x;
}

35.Se considera un vector cu n (1< n<100) componente numere naturale. Sa se determine


componentele vectorului cu cei mai mulţi divizori. Se va folosi un subprogram pentru citirea
vectorului si unul pentru calculul numărului de divizori ai unui număr.

#include<iostream.h>
int n, a[100];
void citire ()
{ int i;
for(i=1;i<=n;i++)
cin>>a[i];
}
int div(int x)
{ int i, nr=0;
for(i=2;i<=x;i++)
if(x%i==0) nr++;
return nr;
}
void main()
{ int i,max=0;
cin>>n;
citire();
for(i=1;i<=n;i++)
if(div(a[i])>max)
max=div(a[i]);
for(i=1;i<=n;i++)
if(div(a[i])==max)
cout<< a[i]<<" ";
}

36.Se consideră un şir de n numere întregi. Să se verifice dacă o valoare x, citită de la


tastatură, apare sau nu în vector. În caz că se află printre valorile din vector se va preciza şi în
ce poziţie apare. În caz contrar se va afişa mesajul NU.

#include<iostream.h>
void main()
{ int n, v[100], i, x, p=0;
cin>>n>>x;
for(i=1;i<=n;i++)
{ cin>>v[i];
if(v[i]==x)p=i;
}
if(p==0) cout<<"nu";
else
cout<< "Valoarea "<< x<< "apare in pozitia "<< p;
}

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