Sunteți pe pagina 1din 10

Probleme rezolvate C++

1.Scriei un program C/C++ care citete de la tastatura un numr 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 afieze pe ecran diferena 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.Scriei programul C/C++ care citete de la tastatura un numr natural n (n<100) si un sir cu n numere ntregi din intervalul [100 ;999] ; programul construiete un sir de numere rezultat prin nlocuirea fiecrui numr din irul citit cu numrul obinut prin interschimbarea cifrei unitatilor cu cifra sutelor. Numerele din noul sir se vor afia pe ecran separate printr-un singur spaiu. De exemplu , pentru n=3 si irul 123 , 904 , 500 , se afieaz 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 relaia a<=b daca : a1<=b1 , a2<=b2 , , an<=bn. Scriei program in limbajul C/C++ care citete doua tablouri unidimensionale a si b cu acelai numr de elemente de tip ntreg si verifica daca a<=b sau b<=a afind 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.Scriei un program in limbajul C/C++ care afieaz toate numerele naturale formate din cifre identice , mai mari dect 10 si mai mici dect o valoare data n, n<=2.000.000. De exemplu pentru n=195 , se afieaz : 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.Scriei un program C/C++ care citete de la tastatura trei numere naturale x, y si k, (1<x<y<2000000, k<1000) si afieaz pe ecran k numere prime din intervalul [x, y]. Daca nu exista k numere prime n intervalul [x,y] se vor afia toate numerele prime gsite iar pe linia urmtoare se va afia mesajul s-au gsit mai puine numere prime: urmat de numrul acestora. De exemplu, pentru x=3, y=12 si k=5 se vor afia pe ecran: 3 5 7 11 s-au gsit mai puine 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.Scriei un program C/C++ care citete din fiierul 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 afieaz pe ecran doar pe acelea care au proprietatea de a fi palindrom. Daca nu se gsesc numere palindrom, se va afia pe ecran valoarea 1. Un numr are proprietatea de a fi palindrom daca citit de la dreapta la stnga sau de la stnga la dreapta are aceeai valoare. De exemplu 1221 este palindrom, in timp ce 1210 nu este palindrom. Exemplu : daca din fiierul BAC.TXT se citesc numerele : 7341 , 8228 , 660 , 2 , 80 , 131 , atunci pe ecran se vor afia : 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 numr 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 . Scriei un program C/C++ care determina numrul de cifre nule aflate pe ultimele poziii consecutive ale valorii obinute in urma evalurii lui n!, n fiind un numr natural de cel mult 4 cifre. De exemplu daca n=10, n!=3628800 rezultatul va fi 2 deoarece 3628800 are dou zerouri la sfrit. #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.Scriei un program C/C++ care citete din fiierul 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 fiierul 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 fiierul DATE.IN se citesc numerele 93 207 15 1982 3762, atunci coninutul fiierului 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.Scriei un program C/C++ care citete de pe prima linie a fiierului text BAC.TXT trei numere naturale a, b, c formate din cel mult patru cifre fiecare, separate prin cate un spaiu si afieaz pe ecran cel mai mare divizor comun al acestora. De exemplu, daca din fiier se citesc numerele : 9 27 15, atunci se afieaz 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.Scriei un program care verifica daca un numr natural k(1<k<100000) citit de la tastatura este prim. Programul va afia 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 fiierul text date.in care conine exact 19 numere distincte formate fiecare din maxim 2 cifre. Sa se afieze in fiierul text date.out numrul care lipsete din fiierul 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 citete de la tastatura un numr natural nenul n (n<1000). Scriei un program C/C++ care construiete fiierul text bac.txt care sa contina, pe prima linie, toi divizorii lui n in ordine strict descresctoare. Divizorii vor fi separai prin spaiu. De exemplu, daca n=10 , atunci fiierul bac.txt va conine : 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 citete de la tastatura un numr natural nenul n care are cel mult 9 cifre. Sa se afieze in fiierul Date.out numrul k, natural, astfel nct produsul 1*2**(k-1)*k sa aib o valoare cat mai apropiata de numrul n. De exemplu, daca se citete numrul n=25 fiierul Date.out are urmtorul coninut: 4. iar daca se citete numrul n=119 fiierul Date.out are urmtorul coninut: 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.Scriei un program care citete un numr natural n>1 cu maximum 9 cifre, si afieaz valoarea celui mai mic divizor prim a lui n, precum si puterea la care acest divizor apare in descompunerea in factori primi a numrului 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 afieze pe ecran produsul cifrelor pare i suma cifrelor impare a unui numr 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 avnd 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.Scriei un program care construiete o matrice ptrat de ordin n format din valorile 1 si 2 astfel nct elementele de pe diagonala principala si secundar sa fie egale cu 1 iar restul elementelor cu 2. Valoarea lui n se citete de la tastatur: n numr natural (2<23), iar matricea se va afia pe ecran, cate o linie a matricei pe fiecare rnd pe ecran cu spatii intre elementele fiecrei linii. Exemplu: Fie n=5. Se va afia: 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.Scriei un program care citete de la tastatur un sir de cel mult 50 de caractere si construiete fiierul atestat.txt ce conine irul si prefixele acestuia de lungime cel puin 1, fiecare pe cate o linie, in ordinea descresctoare a lungimii prefixelor. Exemplu: Daca se citete irul proba atunci atestat.txt va conine:

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 fiierul cuvinte.txt. Textul conine cuvintele separate numai printr-un spaiu, fr semne de punctuaie, singurul semn de punctuaie este . de la sfritul textului. Numrul de cuvinte se va afia pe ecran. Exemplu: Fiierul cuvinte.txt conine textul: Ana are mere. se afieaz: 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.Scriei programul care citete de la tastatur o valoare natural n (2n100), construiete in memorie si apoi afieaz pe ecran o matrice a cu n linii si n coloane, numerotate de la 1 la n, car conine numerele naturale, in ordine cresctoare, de la 1 la n2, dispuse pe coloane, in ordine cresctoare. Astfel coloana 1 va conine 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 aa mai departe, ca in exemplu. Matricea se va afia pe ecran, cate o linie a matricei pe cate o linie a ecranului, elementele fiecrei linii fiind separate intre ele prin cate un spaiu. Exemplu: pentru n = 4 se va afia 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 numr natural. S se afieze cel mai apropiat numr prim fat de n. Programul va conine cel puin un subprogram. Exemplu: n=24 se va afia 23, pentru n=26 se va afia 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 muli divizori. Se va folosi un subprogram pentru citirea vectorului si unul pentru calculul numrului de divizori ai unui numr. #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 poziie apare. n caz contrar se va afia 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; }