Sunteți pe pagina 1din 10

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