Sunteți pe pagina 1din 61

Probleme atestat

1. Se citesc de la tastatura n numere naturale, cu cel mult 9 cifre fiecare. Scrieti un program care pentru o cifra k citita de la tastatura, afiseaza pe ecran cate numere prime in scrierea carora apare cifra k, se gasesc in sirul dat. Exemplu: pentru n=4 , cifra k=2 si valorile citite 23, 603, 122, 27 se obtine numarul nr = 1, care corespunde valorii 23 . #include <iostream> #include <math.h> using namespace std; int prim(long int x){ if(x<=1) return 0; for(long d=2;d<=sqrt(x);d++) if(x%d==0) return 0; return 1; } int test(long x,int k){ while(x>0){ if(k==x%10) return 1; x/=10;//x=x/10; } return 0; } int main() { long x; int k,nr,n,i; cin>>k>>n; nr=0; for(i=1;i<=n;i++){ cin>>x; if(prim(x) && test(x,k)) nr++; } cout<<nr; return 0; }

2. Se citeste de la tastatura un numar natural n cu cel mult noua cifre. Scrieti un program care verifica daca exista un numar natural k cu proprietatea ca n=1*2*3**k. Daca exista un astfel de numar, programul va afisa mesajul Da si valoarea k , altfel va afisa mesajul Nu.(intensiv: valoarea se determina utilizand o metoda eficienta din punct de vedere al timpului de executie) #include <iostream> using namespace std; int main() { long n,f=1; cin>>n; int k=0; do { k++; f*=k; }while(f<n); if(f==n) cout<<"Da "<<k; else cout<<"Nu"; return 0; }

3. In fisierul valori.txt se gasesc pe prima linie maximum 1000 de numere intregi despartite printr-un spatiu. Scrieti un program care sa determine valoarea maxima si valoarea minima, impreuna cu numarul de aparitii al maximului, respectiv al minimului.(intensiv: folositi o metoda eficienta din punct de vedere al memoriei si al numarului de operatii efectuate si afisati pe ecran valorile obtinute). Exemplu:continutul fisierului valori.txt este : 24 3 89 24 1 3 1 1 89, atunci se vor afisa rezultatele: min = 1 nr_aparitii = 3 max = 89 nr_aparitii = 2 #include <iostream> #include <fstream> using namespace std; int main() { ifstream f("valori.txt");

//fstream f("valori.txt",ios::in); int x,max,min,fmax,fmin; f>>x; max=min=x; fmax=fmin=1; while(f>>x) { if(x<min) { min=x; fmin=1; } else if(min==x) fmin++; if(x>max) { max=x; fmax=1; } else if(max==x) fmax++; } f.close(); cout<<"min = "<<min<<" nr_aparitii = "<<fmin<<endl; cout<<"max = "<<max<<" nr_aparitii = "<<fmax; return 0; }

4.Fisierul unu.in contine pe primul rand valoarea n ( 2=n=1.000.000 ), iar pe a doua linie se gasesc n numere intregi formate din cel mult 9 cifre si despartite prin spatiu. Stiind ca fisierul contine cel putin doua numere distincte printre cele n de pe a doua linie, scrieti un program care sa scrie in fisierul unu.out pe o singura linie si separate printr-un spatiu, in ordine descrescatoate, cele mai mari doua valori distincte din fisierul de intrare. (intensiv :alegeti o metoda eficienta de rezolvare atat ca timp de executare, cat si ca gestionare a memoriei) Exemplu : unu.in unu.out 10 -8 14 8 14 15 9 -7 1 4 10 15 14 #include <iostream> #include <fstream>

using namespace std; int main() { long n,x,maxM,maxm; ifstream f("unu.in"); f>>n>>x; maxM=maxm=x; while(n>1) { f>>x; if(x>maxM) {maxm=maxM; maxM=x;} else//x<=maxM if(maxm<x && x<maxM) maxm=x; n--; } f.close(); ofstream g("unu.out"); g<<maxM<<' '<<maxm; g.close(); return 0; }

5. Fisierul text numere.in contine pe prima linie un numar natural n (0=n=5000), iar pe a doua linie n numere naturale de cel mult 9 cifre fiecare, separate prin cate un spatiu. Sa se scrie un program care citeste n, apoi cele n numere naturale din fisierul numere.in si scrie in fisierul numere.out, pe cate o linie fiecare, numerele de pe a doua linie a fisierului numere.out care sunt palindroame cu exact patru cifre (un numar este palindrom daca este egal cu oglinditul sau). De exemplu daca fisierul numere.in are urmatorul continut : 5 1441 5 14 2552 78 atunci fisierul numere.out va contine : 1441 2552 #include <iostream> #include <fstream> using namespace std; int main() { int n,i;

long nr; ifstream f("numere.in"); ofstream g("numere.out"); f>>n; for(i=1;i<=n;i++){ f>>nr; if(1000<=nr&&nr<=9999&&nr%10==nr/1000&&nr/10%10==nr/100%10) g<<nr<<endl; } f.close(); g.close(); }

6.Se citeste de la tastaturp n, si apoi n perechi de cate doua numere intregi a si b cu ( a < 0 < b) reprezentand capetele intervalului[a, b]. Afisati pe ecran , daca exista, capetele intervalului de intersecsie al celor n intervale citite. in cazul in care nu exista intervalul de intersecsie se afiseaza 0. De exemplu, pentru n=3 si perechile [-1,20], [-4,9], [-7, 12] , obtinem solutia x= 1 si y= 9. #include <iostream> using namespace std; int main() { int n, a, b, amax , bmin; //amax este maximul de valori negative a iar bmin este minimul de valori pozitive b cin>>n; cin>>amax>>bmin; //valorile maxime/minime sunt intializate cu valori din sir for(int i=1;i<=n-1;i++){ cin>>a>>b; if(a>amax) amax=a; if(b<bmin) bmin=b; } cout<<amax<<" "<<bmin; }

7. Se citesc de la tastatura n numere naturale, cu cel mult 9 cifre fiecare. Scrieti un program care afiseaza cifra care apare de cele mai multe ori in numerele citite. Daca exista mai multe astfel de cifre se vor afisa toate.

Exemplu:Pentru n=4 si valorile 23, 431, 154, 452 se afiseaza 3 pentru ca cifra 4 apare de 3 ori in numerele citite. #include <iostream> using namespace std; int v[10]; int main() { int n, i; long val; cin>>n; for (i=1;i<=n;i++) { cin >>val; while (val>0) { v[val%10]++; val/=10; } } int max=v[0]; for (i=1;i<=9;i++) if (max<v[i]) max=v[i]; // am calculat frecventa max a unei cifre; for (i=0;i<=9;i++) if (v[i]==max) cout<<i<<" "; return 0; }

8. Se citeste de la tastatura un numar natural n cu maxim cinci cifre. Afisati cel mai apropiat numar fata de n care are aceeasi suma a cifrelor. #include <iostream> #include <fstream> using namespace std; int sc(long x) { int s=0; while(x) { s+=x%10; x/=10; } return s; } int main() { long x;

ifstream f("date.txt"); f>>x; f.close(); int s=sc(x); long st=x, dr=x; do { st--; } while(sc(st)!=s); do { dr++; } while(sc(dr)!=s); ofstream g("r.txt"); if(x-st<dr-x) g<<st; else if(x-st>dr-x) g<<dr; else g<<st<<' '<<dr; return 0; }

9.Se citesc n numere naturale. Sa se ordoneze numerele crescator dupa numarul de divizori. (intensiv: numarul de divizori se va determina utilizand o metoda eficienta din punct de vedere al timpului de execusie) Exemplu: n=4, numerele 12,4,6,13s 13,4,6,12 . #include <iostream> #include <fstream> using namespace std; int nrd(long x) { int nrdiv=0; for(long int d=1;d<=x/2;d++) if(x%d==0) nrdiv++; return nrdiv+1;} int main() { long x[100]; int n,i; ifstream f("sir.txt"); f>>n;

for(i=0;i<=n-1;i++) f>>x[i]; f.close(); int sortat=0; while(!sortat) { sortat=1; for(i=0;i<=n-2;i++) if(nrd(x[i])>nrd(x[i+1])) { long aux=x[i]; x[i]=x[i+1]; x[i+1]=aux; sortat=0;}} ofstream g("rezultat.txt"); for(i=0;i<=n-1;i++) g<<x[i]<<' '; g.close(); return 0; }

10. Se citeste n numar natural (n<32000) si apoi se introduc pe rand n numere intregi. Sa se afiseze numerele prime si sa se calculeze media lor aritmetica. #include <iostream> #include <fstream> #include <math.h> using namespace std; int prim(long x) { if(x<=1) return 0; for(long d=2;d<=sqrt(x);d++) if(x%d==0) return 0; return 1;} int main() { long x; float s=0; int nrp=0,n,i; ifstream f("date.txt"); ofstream g("out.txt"); f>>n; for(i=1;i<=n;i++) {

f>>x; if(prim(x)) { g<<x<<' '; s+=x; nrp++;}} if(nrp) g<<s/nrp; f.close(); g.close(); return 0;}

11. Se citeste de la tastatura un numar natural n cu cel mult 9 cifre. Sa se afiseze cel mai mare si cel mai mic numar care se poate forma cu cifrele distincte ale numarului. #include <iostream> #include <fstream> using namespace std; int fr[10]; int main() { long n; int i; ifstream f("intrare.txt"); f>>n; f.close(); ofstream g("iesire.txt"); if(n==0) g<<0<<endl<<0; else { while(n) { fr[n%10]++; n/=10; } for(i=9;i>=0;i--) if(fr[i]) g<<i; g<<endl; if(!fr[0]) for(i=0;i<=9;i++) {if(fr[i]) g<<i;}

else { int primnenul=0; for(i=1;i<=9;i++) if(fr[i]) { if(primnenul==0) g<<i<<0; else g<<i; primnenul=1; }} }f.close();g.close(); return 0;} 12. Se citeste din fisierul numar.txt un numar natural n. Sa se verifice daca este putere a lui 2 si sa se calculeze frecvensa de aparisie a fiecarei cifre in scrierea in baza 10 a numarului. #include <iostream> #include <fstream> #include <math.h> using namespace std; int fr[10]; int main() { long n; ifstream f("numar.txt"); f>>n; f.close(); ofstream g("r.txt"); if(n==pow(2,floor(log(n)/log(2)))) g<<"ok\n"; else g<<"eroare\n"; while(n){fr[n%10]++;n/=10;} for(int i=0;i<=9;i++) g<<i<<" :: "<<fr[i]<<endl; g.close(); return 0; }

13. Scrieti un program care afiseaza pe ecran toate numerele naturale cu maxim 9 cifre care sunt rotunde(numerele care convertite in binar au acelasi numar de 0 respectiv de 1). Exemplu: 12=>1100 este rotund; 13 =>1101 nu este rotund ) #include <iostream> #include <fstream> using namespace std; int test(long x) { int nr0=0; int nr1=0; do{ if(x%2==1) nr1++; else nr0++; x/=2; } while(x>0); return nr0==nr1; } int main() { ofstream f("rezultat.txt"); long x; for(x=0;x<=999999999;x++) if(test(x)) f<<x<<endl; f.close(); return 0;}

14. Fisierul text numere.in contine pe prima linie un numar natural n (0<n<1000), iar pe a doua linie n numere naturale cu cel mult 9 cifre fiecare, despartite prin cate un spatiu. Scrieti un program C/C++ care citeste toate numerele din fisier si afiseaza pe ecran, separate prin cate un spatiu, numerele de pe a doua linie a fisierului, care sunt formate din cifre identice. Exemplu: daca fisierul numere.in are continutul: 9 55 107 3 101 99 7 208 2222 80

numerele ce se vor afisa sunt: 55 3 99 7 2222 #include <iostream> #include <fstream> using namespace std; int test(long x) { int uc=x%10; while(x) { if(x%10!=uc) return 0; x/=10; } return 1; } int main() { ifstream f("numere.in"); ofstream g("numere.out"); int n; long x; f>>n; for(int i=1;i<=n;i++) { f>>x; if(test(x)) g<<x<<' ';} f.close(); g.close(); return 0;}

15.Fisierul atestat.txt contine pe prima linie un numar natural n (n=100), iar pe a doua linie, separate prin cate un spatiu, n numere naturale nenule, cu cel mult 4 cifre fiecare. Scrieti programul C/C++ care afiseaza pe ecran cifra de control a fiecarui numar (c(4568)=c(4+5+6+8)=c(23)=5). Exemplu: daca fisierul are continutul alaturat, 7 120 346 68 9 32 0 112 atunci se afiseaza 3 4 5 9 5 0 4

#include <fstream> #include <iostream> using namespace std; int cc(unsigned short int n) { unsigned short int sc; while(n>=10) { sc=0; while(n>0) { sc+=n%10; n/=10; } n=sc; } return n;} int main() { ifstream f("atestat.txt"); unsigned short int n,x,i; f>>n; for(i=1;i<=n;i++) { f>>x; cout<<cc(x)<<' '; } f.close(); return 0;}

16. Fisierul numere.in contine pe prima linie mai multe numere naturale in ordine crescatoare dintre care cel pusin o putere a lui 3. Scrieti un algoritm eficient care afiseaza pe ecran numerele din fisier ce sunt puteri ale lui 3.

#include <iostream> #include <fstream> #include <math.h> using namespace std; int main() {

ifstream f("numere.in"); long x; while(f>>x) if(log(x)/log(3)==floor(log(x)/log(3))) cout<<x<<' '; f.close(); return 0;}

17. Dat n natural, sa se descompuna ca suma de puteri distincte ale lui 2. Exemplu : 25=24+23+20. #include <fstream> #include <iostream> #include <math.h> using namespace std; int main() { long x; cin>>x; int e;//exponentul lui 2 while(x) { e=floor(log(x)/log(2)); cout<<"2^"<<e<<endl; x-=pow(2,e);} return 0;}

18. Sa se scrie un program care sa verifice daca suma cifrelor de pe pozitiile impare si suma cifrelor de pe pozitiile pare ale unui numar natural n citit de la tastatura sunt egale. Pozitiile se numara de la dreapta la stanga incepand cu pozitia 1. Se afiseaza sumele si un mesaj corespunzator pe ecran. Exemplu: se citeste: n=12345 si se afiseaza: sp=6 si simp=9 Nu coincid! #include <fstream> #include <iostream> using namespace std; int main() { long int n; int sp=0,simp=0; cin>>n;

int p=1; while(n) { if(p%2) simp+=n%10; else sp+=n%10; n/=10; p++; } if(sp==simp) cout<<"sp="<<sp<<" si simp="<<simp<<" Coincid!"; else cout<<"sp="<<sp<<" si simp="<<simp<<" Nu Coincid!"; return 0; }

19. Sa se afiseze primele n perechi de numere prime gemene, unde n este un numar natural nenul citit de la tastatura. Exemplu: se citeste: n=4 se afiseaza: (3 ; 5) ; (5 ; 7) ; (11 ; 13) ; (17 ; 19)

#include <fstream> #include <iostream> #include <math.h> using namespace std; int prim(int x) { for(int d=2;d<=sqrt(x);d++) if(x%d==0) return 0; return 1;} int main() { int n; cin>>n; int a=3; while(n) { if(prim(a) && prim (a+2)) { cout<<'('<<a<<','<<a+2<<")\n";

n--;} a+=2;} return 0;}

20. Se citesc n numere naturale nenule. Sa se precizeze cu cate zerouri se va termina produsul numerelor fara a calcula efectiv produsul lor. Exemplu: se citeste:n=3 si numerele25, 12, 9 se afiseaza: 2 de zero #include <iostream> #include <fstream> using namespace std; int main() { ifstream f("date.txt"); int n,x,nr2=0,nr5=0; f>>n; while(n) { f>>x; while(x%2==0) { nr2++; x/=2;} while(x%5==0) { nr5++; x/=5;} n--;} ofstream g("rezultat.txt"); if(nr2>nr5) g<<nr5; else g<<nr2; g.close(); return 0; }

21. Se citeste un numar natural n. Sa se afiseze toate numerele prime mai mici decat n astfel incat suma cifrelor a fiecarui numar sa fie mai mica decat un alt numar citit m. Exemplu: se citeste: n= 30 si m=7 se afiseaza: 2, 3, 5, 11, 13, 23

#include <iostream> #include <fstream>

#include <math.h> using namespace std; int prim(int x) { for(int d=2;d<=sqrt(x);d++) if(x%d==0) return 0; return 1;} int suma_cifre(int x) { int s=0; while(x>0) { s+=x%10;x/=10;} return s;} int main() { ifstream f("date.txt"); int n,m; f>>n>>m; f.close(); ofstream g("iesire.txt"); for(int i=2;i<n;i++) if(prim(i)&&suma_cifre(i)<m) g<<i<<' '; g.close(); return 0;} 22. Fisierul matrice.txt contine pe primul rand doua valori naturale m si n (1=n=100, 1=m=100), reprezentand numarul de linii si respectiv de coloane ale unei matrice a, iar pe urmatoarele m linii cate n valori intregi cu maximum 4 cifre fiecare, separate prin cate un spatiu, reprezentand elementele matricei a. Afisati pe ecran un sir de 2*(n+m) 4 numere ordonate crescator, sir format din elementele aflate pe chenarul exterior al matricei a. Chenarul exterior este format din prima si ultima linie, respectiv prima si ultima coloana din matrice. Exemplu: daca matricea data este : 34 1234 5678 9123 se va afisa sirul : 1 1 2 2 3 3 4 5 8 9. #include <iostream> #include <fstream> using namespace std;

void citire(int a[100][100],int &m,int &n) { ifstream f("matrice.txt"); f>>m>>n; for(int i=0;i<=m-1;i++) for(int j=0;j<=n-1;j++) f>>a[i][j]; f.close(); } void Bubble_Sort(int v[400], int n) { int sortat=0; while(!sortat) { sortat=1; for(int i=0;i<=n-2;i++) if(v[i]>v[i+1]) { int aux=v[i]; v[i]=v[i+1]; v[i+1]=aux; sortat=0;}}} void contur(int a[100][100],int m,int n,int v[400]){ int k=0,i; for(i=0;i<=n-1;i++) v[k++]=a[0][i]; for(i=1;i<=m-1;i++) v[k++]=a[i][n-1]; for(i=n-2;i>=0;i--) v[k++]=a[m-1][i]; for(i=m-2;i>=1;i--) v[k++]=a[i][0]; } int main() { int a[100][100],v[400];int m;int n; citire(a,m,n); contur(a,m,n,v); Bubble_Sort(v,2*(m+n)-4); ofstream f("iesire.txt"); for(int i=0;i<=2*(m+n)-4-1;i++) f<<v[i]<<' '; f.close(); return 0; }

23. Se citeste de la tastatura o valoare naturala m (2=m=100). Scrieti programul C/C++/Pascal care construieste in memorie si apoi afiseaza pe ecran matricea a

cu m linii si m coloane de numere intregi, construita dupa urmatoarea regula : elementul de pe linia i si coloana j a matricii ( 1=i , j=m) este : s 1 daca i*i+j*j este patrat perfect s 2 daca i*i+j*j nu este patrat perfect, dar este numar prim mai mare decat 2 s 3 in rest. Exemplu: pentru m = 2, se va afisa matricea : 32 23 #include <fstream> #include <iostream> #include <math.h> using namespace std; int pp(int x) {return sqrt(x)==floor(sqrt(x));} int prim(int x){ if(x<2) return 0; for(int d=2;d<=sqrt(x);d++) if(x%d==0) return 0; return 1;} int main() { int m,t[100][100],i,j; ifstream f("input.txt"); f>>m; f.close(); for(i=1;i<=m;i++) for(j=1;j<=m;j++) if(pp(i*i+j*j)) t[i][j]=1; else if(i*i+j*j>2 && prim(i*i+j*j)) t[i][j]=2; else t[i][j]=3; ofstream g("output.txt"); for(i=1;i<=m;i++){ for(j=1;j<=m;j++) g<<t[i][j]<<' '; g<<endl;} g.close(); return 0;}

24. Se citeste un vector v cu n componente numere naturale. Sa se afiseze cel mai mare numar care se poate forma cu cifra maxima a fiecarui numar din vector. Exemplu: se citeste: n= 5 si v=(29, 171, 0, 2222, 100) se afiseaza: 97210 #include <iostream> #include <fstream> using namespace std; int cmax(long x) { int cm=x%10; x/=10; while(x) { if(x%10>cm) cm=x%10; x/=10; } return cm; } int c[10]; int main() { long v[100]; int n,i; ifstream f("input.txt"); f>>n; for(i=0;i<=n-1;i++) f>>v[i]; f.close(); for(i=0;i<=n-1;i++) c[cmax(v[i])]++; ofstream g("output.txt"); for(i=9;i>=0;i--) for(int j=1;j<=c[i];j++) g<<i; g.close(); return 0; }

25. Se considera o matrice oarecare de dimensiune mxn cu elemente numere naturale. Sa se afiseze numerele cu numar impar de divizori din matrice si sa se indice numarul lor. Exemplu: se citeste: m=2 si n=3 si matricea se afiseaza: 4, 25, 2 numere

#include <fstream> #include <iostream> using namespace std; int nrd(int x) { int nr=0; for(int d=1;d<=x/2;d++) if(x%d==0) nr++; return nr+1; } int main() { int t[100][100],m,n,nr=0,i,j; ifstream f("input.txt"); f>>m>>n; for(i=0;i<=m-1;i++) for(j=0;j<=n-1;j++) f>>t[i][j]; f.close(); ofstream g("output.txt"); for(i=0;i<=m-1;i++) for(j=0;j<=n-1;j++) if(nrd(t[i][j])%2==1) { g<<t[i][j]<<' '; nr++; } g<<endl<<nr; return 0; }

26. Fie un vector v cu n elemente numere intregi citite de la tastatura. Fara a folosi alt vector auxiliar, sa se mute la sfarsitul lui v elementele sale nule, pastrand ordinea celorlalte elemente. Exemplu: se citeste: n=7 si vectorul v=(2,3,0,9,0,0,8) se afiseaza: v=(2,3,9,8,0,0,0) #include <iostream> #include <fstream> using namespace std; int main() { long v[100]; int n,i;

ifstream f("input.txt"); f>>n; for(i=0;i<=n-1;i++) f>>v[i]; f.close(); int test=0; while(!test) { test=1; for(i=0;i<=n-2;i++) if(v[i]==0 && v[i+1]) { int aux=v[i]; v[i]=v[i+1]; v[i+1]=aux; test=0; }} ofstream g("output.txt"); for(i=0;i<=n-1;i++) g<<v[i]<<' '; g.close(); return 0;}

27. Fie a o matrice patratica de dimensiune n. Folosind o functie de ordonare a unui vector de dimensiune k, afisati matricea modificata prin ordonarea crescatoare a liniilor impare.

#include <iostream> #include <fstream> using namespace std; void sortare(long x[100], int n){ int sortat=0; int i; while(!sortat) { sortat=1; for(i=0;i<=n-2;i++) if(x[i]>x[i+1]) { long aux=x[i]; x[i]=x[i+1]; x[i+1]=aux; sortat=0;}} } int main() { long x[100][100],n; ifstream f("date.txt");

f>>n; int i,j; for(i=0;i<=n-1;i++) for(j=0;j<=n-1;j++) f>>x[i][j]; f.close(); for(i=0;i<=n-1;i+=2) sortare(x[i], n); for(i=0;i<=n-1;i++){ for(j=0;j<=n-1;j++) cout<<x[i][j]<<' '; cout<<endl;} return 0; }

28. Fisierul matrice.in contine pe prima linie un numar natural n (0=n=5000), iar pe urmatoarele 2n linii cate n numere naturale de cel mult 5 cifre fiecare, separate prin cate un spatiu reprezentand elementele a doua matrice a si b cu cate nXn elemente fiecare. Verificati daca b este obtinuta din a prin rotirea spre stanga cu 270 de grade, afisand un mesaj afirmativ sau nu. Exemplu: Daca fisierul matrice.in are urmatorul continut : 3 123 345 567 531 642 753 atunci se va afisa DA

#include <iostream> #include <fstream> using namespace std; int main() { long a[100][100],b[100][100],n; ifstream f("matrice.in"); f>>n; int i,j;

for(i=0;i<=n-1;i++) for(j=0;j<=n-1;j++) f>>a[i][j]; for(i=0;i<=n-1;i++) for(j=0;j<=n-1;j++) f>>b[i][j]; f.close(); //linia i din a trebuie sa coincida cu coloana n-1-i din b int test=1; //test devine 0 in caz de nepotrivire for(i=0;i<=n-1&&test;i++) for(j=0;j<=n-1&&test;j++) if(a[i][j]!=b[j][n-1-i]) test=0; if(test) cout<<"DA"; else cout<<"NU"; return 0; }

29. Data o matrice cu elemente numere intregi de dimensiune nXm sa se determine punctele-sa din matrice, adica elementele care sunt minime pe linia lor si maxime pe coloana lor. in cazul in care nu exista se va afisa mesajul NU. Exemplu=3; 4 36 12 1 4 => numarul 3 este sa. 507 #include <iostream> #include <fstream> using namespace std; int main() { long x[100][100],n,m; ifstream f("matrice.in"); f>>n>>m; int i,j; for(i=1;i<=n;i++) for(j=1;j<=m;j++) f>>x[i][j]; f.close(); //pastram maximul coloanei i in x[0][i] //pastram minimul liniei i in x[i][0] for(i=1;i<=n;i++)

for(j=1;j<=m;j++){ if(x[i][j]>x[0][j]) x[0][j]=x[i][j]; if(x[i][j]<x[i][0]) x[i][0]=x[i][j]; } for(i=1;i<=n;i++) for(j=1;j<=m;j++) if(x[i][j]==x[i][0] && x[i][j]==x[0][j]) cout<<x[i][j]<<' '; return 0; }

30. Fie n si m doua numere naturale citite de la tastatura. Sa se formeze un tablou bidimensional cu n linii si m coloane cu primele nm numere naturale imperfecte. Un numar natural n este perfect daca suma S a divizorilor sai mai mici decat n este egala de numarul n (exceptand numarul insusi ). Exemplu:n=2, m=3 atunci matricea este 123 457 ! 6 este numar perfect 6=1+2+3 #include<iostream.h> #include<conio.h> int n,v[100],i,j; void citire() {cout<<"n="; cin>>n; } int perfect(int a) {int s=1,d; for(d=2;d<=a/2;d++) if(a%d==0) s=s+d; if(s==a) return 1; return 0; } void vector(int n,int v[100]) {int sw=1,t=1,i=1; while(sw!=0){if(perfect(i)==0||i==1) {v[t]=i; if(t==n*n) sw=0; t++; }

i++; } } void afis() {cout<<endl; for(i=1;i<=n*n;i++) if(i%n==0) cout<<v[i]<<endl; else cout<<v[i]<<" "; } void main() {clrscr(); citire(); vector(n,v); afis(); getch(); } 31. Scrieti un program C/C++ care citeste de la tastatura un numar natural n (2<n<20), construieste in memorie si afiseaza pe ecran o matrice cu n linii si n coloane, numerotate de la 1 la n. Fiecare element din matrice aflat pe o linie impara va fi egal cu numarul liniei pe care se afla iar elementele de pe linii pare sa fie completate cu valorile de la n la 1. Elementele matricei vor fi afisate pe ecran, cate o linie a matricei pe cate o linie a ecranului cu cate un spatiu intre elementele fiecarei linii. Exemplu: pentru n=5 se va afisa matricea de mai jos 11111 54321 33333 54321 55555

#include<iostream.h> #include<conio.h> int n,a[20][20],i,j; void citire() {cout<<"n="; cin>>n; } void formare() {for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(i%2==1)a[i][j]=i; else a[i][j]=n-j+1;

} void afis() {for(i=1;i<=n;i++) for(j=1;j<=n;j++){gotoxy(j*3,i+4); cout<<a[i][j]; } } void main() {clrscr(); citire(); formare(); afis(); getch(); }

32. Se dau numarul de n linii si m coloane a unei matrici.Sa se construiasca si sa se afiseze matricea in fisierul matrice.out stiind ca elementul din pozitia i,j este egal cu minimul dintre i si j. Afisarea se realizeaza prin intermediul unui vector construit prin parcurgerea matricei sub forma de L. #include<iostream.h> #include<conio.h> int n,a[20][20],i,j,v[100]; void citire() {cout<<"n="; cin>>n; } void formare() {for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(i>j)a[i][j]=j; else a[i][j]=i; } void afis() {for(i=1;i<=n;i++) for(j=1;j<=n;j++){gotoxy(j*3,i+4); cout<<a[i][j]; } cout<<endl; } void vector() {int t,k=0;

for(t=1;t<=n;t++) {for(j=1;j<=n-t;j++)v[++k]=a[j][t]; for(j=t;j<=n;j++) v[++k]=a[n-t+1][j]; } } void main() {clrscr(); citire(); formare(); afis(); vector(); for(i=1;i<=n*n;i++) cout<<v[i]<<" "; getch(); }

33. Fisierul text NUMERE.IN contine pe prima linie un numar natural nenul n (1=n=100) si pe urmatoarea linie n numere reale pozitive separate prin cate un spatiu. Scrieti un program C/C++ care citeste din fisierul NUMERE.IN numarul natural n, si determina, utilizand un algoritm eficient din punct de vedere al timpului de executare si al memoriei utilizate, pozisia pe care se afla primul si ultimul numar din cele n numere reale care sunt egale cu valoarea minima dintre ele. Exemplu: Daca fisierul NUMERE.IN are continutul: 6 2.8 2.3 5.7 5.7 2.3 6.3 atunci se afiseaza 2 si 5 (valoarea minima este 2.3 si numerele de pe pozitia 2 si 5 sunt egale cu 2.3) #include<iostream.h> #include<conio.h> int n,i; float v[100]; void citire() {cout<<"n="; cin>>n; for(i=1;i<=n;i++) cin>>v[i]; } float minim() {float min; min=v[1]; for(i=2;i<=n;i++) if(min>v[i]) min=v[i];

return min; } void main() {float a; int b; clrscr(); citire(); a=minim(); for(i=1;i<=n;i++)if(v[i]==a){cout<<i<<" "; i=n+1; b=i; } for(i=n;i>=1;i--) if(v[i]==a){if(i!=b)cout<<i; i=0; } getch(); }

34. Scrieti un program C/C++ care citeste de la tastatura un numar natural n (1<=n<=20), elementele unei matrice cu n linii si n coloane, numere intregi din intervalul [-100, 100] si afiseaza pe ecran m1 si m2, unde m1 este media aritmetica a elementelor strict pozitive ale matricei, situate deasupra diagonalei principale, iar m2 este media aritmetica a elementelor strict pozitive ale matricei, situate sub diagonala principala, ca in exemplu. Cele doua medii se considera egale cu 0 daca nu exista valori strict pozitive in zonele corespunzatoare. Exemplu: pentru n=4 si matricea alaturata se afiseaza m1=2.75, calculata din elementele aflate deasupra diagonalei principale, si m2=2.5, calculata din elementele aflate sub diagonala principala. -1 2 -4 5 0631 2420 3 -5 1 -3

#include<iostream.h> #include<conio.h> int a[20][20],n,i,j,k,t; float m1,m2; void citire() {cout<<"n="; cin>>n; for(i=1;i<=n;i++)

for(j=1;j<=n;j++){gotoxy(j*7,i+9); cin>>a[i][j]; } } float sumaunu() {float s=0; for(i=1;i<=n;i++) for(j=i+1;j<=n;j++) if(a[i][j]>0){s=s+a[i][j]; k++; } m1=s/k; return m1; } float sumadoi() {float s=0; for(i=1;i<n;i++) for(j=1;j<i;j++)if(a[i][j]>0){s=s+a[i][j]; t++; } m2=s/t; return m2; } void main() {clrscr(); citire(); cout<<"Media aritmetica a elementelor strict pozitive de deasupra diagonalei principale este "<<sumaunu(); cout<<"Media aritmetica a elementelor strict pozitive de dedesubtul diagonalei principale este "<<sumadoi(); getch(); }

35. Scrieti un program C/C++ care citeste de la tastatura numerele intregi m si n (1<=m<=50, 1<=n<=50) si elementele unui tablou bidimensional cu m linii si n coloane, numere intregi distincte de cel mult 4 cifre fiecare. Programul va afisa pe prima linie a ecranului numarul de elemente prime de pe fiecare coloana a matricii, separate prin cate un spasiu.Definisi o functie care verifica daca un numar intreg este prim si folosii apeluri ale ei pentru rezolvarea cerintei. Exemplu: pentru m=3 si n=4 si tabloul de mai jos

2714 14 6 12 3 9 22 8 5 Pe ecran se va afisa: 311 #include<iostream.h> #include<conio.h> int a[20][20],n,i,j; void citire() {cout<<"n="; cin>>n; for(i=1;i<=n;i++) for(j=1;j<=n;j++){gotoxy(j*7,i+9); cin>>a[i][j]; } } int prim(int a) {int d; for(d=2;d<=a/2;d++) if(a%d==0) return 0; return 1; } void main() {clrscr(); citire(); for(i=1;i<=n;i++) for(j=1;j<=n;j++)if(prim(a[j][i])==1) cout<<a[j][i]<<" "; getch(); }

36. Fie x un vector de numere intregi de lungime n, sa se construiasca un vector y, astfel incat y[i]=numarul de aparitii ale lui x[i] in vectorul x. Exemplu: Pentru x=(1,5,2,1,5,7,2,1,5) se obtine y=(3,3,2,3,3,1,2,3,3). #include<iostream.h> #include<conio.h> int v[50],y[50],n,i,j,k; void citire() {cout<<"n="; cin>>n;

for(i=1;i<=n;i++)cin>>v[i]; } int aparitie(int a) {int s=0; for(i=1;i<=n;i++)if(v[i]==a)s++; return s; } void formare(int n,int v[50],int y[50]) {for(j=1;j<=n;j++){k=aparitie(v[j]); y[j]=k; } } void afis(int n,int x[100]) {for(i=1;i<=n;i++) cout<<x[i]<<" "; cout<<endl; } void main() {clrscr(); citire(); formare(n,v,y); afis(n,v); afis(n,y); getch(); }

37. Scrieti un program care citeste de la tastatura doua numere naturale nenule m si n si care construieste in memorie si apoi afiseaza o matrice A cu m linii si n coloane cu proprietatea ca fiecare element aij memoreaza cea mai mica dintre valorile indicilor i si j. Matricea se va afisa in fisierul matrice.txt, cate o linie a matricei pe cate o linie a ecranului, elementele fiecarei linii fiind separate prin cate un spatiu. Exemplu: Pentru m=4 si n=5 fisierul va consine matricea alaturata #include<iostream.h> #include<conio.h> int a[20][20],n,m,i,j; void citire() {cout<<"n="; cin>>n; cout<<"m="; cin>>m; }

void formare() {for(i=1;i<=n;i++) for(j=1;j<=m;j++)if(i<j)a[i][j]=i; else a[i][j]=j; } void afis() {for(i=1;i<=n;i++) for(j=1;j<=m;j++){gotoxy(j*3,i+5); cout<<a[i][j]; } } void main() {clrscr(); citire(); formare(); afis(); getch(); }

38. Se citesc de la tastatura doi vectori cu cate n elemente. Afisati ultima cifra a sumei fara a calcula efectiv suma. #include<iostream.h> #include<conio.h> int n,a[100],b[100],i; void citire() {cout<<"Dati numarul de elemente:"; cin>>n; for(i=1;i<=n;i++) {cin>>a[i]; cin>>b[i]; } } int ultimacifra(int n,int a[100],int b[100]) {int s=0; for(i=1;i<=n;i++){s=s+a[i]+b[i]; s=s%10; } return s; } void main() {clrscr();

citire(); cout<<"Suma se termina cu cifra:"<<ultimacifra(n,a,b); getch(); }

39. Scrieti un program care construieste in memorie o matrice patratica de ordin n cu elemente numere naturale astfel incat pe diagonala principala sa existe numai elemente egale cu 1, elementele de pe cele doua semidiagonale paralele cu diagonala principala si alaturate diagonalei principale sa fie toate egale cu 2, elementele de pe urmatoarele doua semidiagonale sa fie egale cu 3,etc. Valoarea lui n se citeste de la tastatura, iar matricea se va afisa pe ecran. Pentru n=4 se va afisa tabloul : 1234 2123 3212 4321 #include<iostream.h> #include<conio.h> int a[20][20],n,m,i,j; void citire() {cout<<"n="; cin>>n; } void formare() {for(i=1;i<=n;i++) for(j=n;j>=i;j--){a[i][j]=j-i+1; a[j][i]=a[i][j]; } } void afis() {for(i=1;i<=n;i++) for(j=1;j<=n;j++){gotoxy(j*3,i+4); cout<<a[i][j]; } } void main() {clrscr();

citire(); formare(); afis(); getch(); }

39. Fie a un vector cu n componente reale (n>=30). Sa se obtina din a vectorul b care sa indeplineasca conditiile : - b[i]>=b[i+1] pentru i=1,2,,k-1 - b[i]<=b[i+1] pentru i=k,k+1, , n-1 - b[k-i]>=b[k+i] pentru i=1,2, , k-1, unde k=n/2 cand n este par si k=(n+1)/2 cand n este impar. #include<iostream.h> #include<conio.h> int v[50],n,b[50],i,j; void citire() {cout<<"n="; cin>>n; for(i=1;i<=n;i++) cin>>v[i]; } void sortare() {int sw,aux; do{sw=1; for(i=1;i<n;i++) if(v[i]<v[i+1]){aux=v[i]; v[i]=v[i+1]; v[i+1]=aux; sw=0; } }while(sw==0); } void formare(int &t,int b[50]) {t=0; for(i=1;i<=n/2;i++)b[++t]=v[i]; for(i=n;i>=n/2;i--)b[++t]=v[i]; } void afis(int m,int x[100]) {for(i=1;i<=m;i++) cout<<x[i]<<" "; cout<<endl; }

void main() {int t; clrscr(); citire(); afis(n,v); sortare(); formare(t,b); afis(n,b); getch(); }

40. Se citeste de la tastatura o matrice a cu m linii si n coloane, ale carei elemente sunt cifre de la 0 la 9 (0<=m,n<=5). Sa se afiseze suma numerelor care se pot forma cu cifrele fiecarei linii (numarul aferent fiecarei linii se va obsine prin citirea cifrelor de pe linia respectiva de la stanga la dreapta, ignorandu-se zerourile de la inceputul liniei). Exemplu : Pentru matricea : 03825 00514 0 7 7 9 3 se va afisa valoarea 12132 reprezentand suma 3825+514+7793. #include<iostream.h> #include<conio.h> int a[20][20],n,m,i,j; void citire() {cout<<"n="; cin>>n; for(i=1;i<=n;i++) for(j=1;j<=n;j++){gotoxy(j*3,i+4); cin>>a[i][j]; } } int numar(int t) {int p=0; for(i=1;i<=n;i++)if(a[t][i]!=0) p=p*10+a[t][i]; else if(p!=0) p=p*10+a[t][i]; return p; } int suma() {int s=0,b; for(j=1;j<=n;j++){b=numar(j); cout<<b<<" ";

s=s+b; } return s; } void main() {clrscr(); citire(); cout<<"Suma obtinuta este "<<suma(); getch(); }

41. Scrieti un program care construieste in memorie o matrice t patratica de ordin n cu elemente numere naturale astfel incat pe ultima coloana si pe ultima linie sa se afle numai elemente egale cu 1, iar oricare alt element al matricei sa fie egal cu suma dintre elementul aflat imediat sub el si elementul aflat imediat in dreapta lui. Exemplu : Pentru n =4 se va afisa tabloul urmator : 20 10 4 1 10 6 3 1 4321 1111 include<iostream.h> #include<conio.h> int a[20][20],n,m,i,j; void citire() {cout<<"n="; cin>>n; for(i=1;i<=n;i++){a[n][i]=1; a[i][n]=1; } } void formare() {for(i=n-1;i>=1;i--) for(j=n-1;j>=1;j--)a[i][j]=a[i+1][j]+a[i][j+1]; } void afis() {for(i=1;i<=n;i++) for(j=1;j<=n;j++){gotoxy(j*3,i+5); cout<<a[i][j]; }

} void main() {clrscr(); citire(); formare(); afis(); getch(); }

42. Scrieti programul C, C++ sau Pascal, care citeste de la tastatura un sir s de cel mult 30 de caractere si un caracter c. Programul determina triplarea fiecarei aparitii a caracterului c in s si scrie noul sir obtinut in fisierul text final.out. (neintensiv: sirul poate fi scris in fisier fara a fi construit efectiv in memorie) De exemplu, daca se citeste sirul : ciocarlie si caracterul c atunci fisierul va contine sirul : ccciocccarlie. #include<iostream.h> #include<string.h> #include<conio.h> void main() {char cuv[100],ch; int i,n,j; clrscr(); cout<<"Dati cuvantul:"<<endl; cin.get(cuv,30); cin.get(); cout<<"Dati caracterul ch:"; cin>>ch; n=strlen(cuv); for(i=0;i<n;i++)if(cuv[i]==ch) {for(j=n;j>i+1;j--)cuv[j]=cuv[j-1]; cuv[i+1]=ch; n++; i++; for(j=n;j>i+1;j--)cuv[j]=cuv[j-1]; n++; cuv[i+1]=ch; i=i+2; }

cuv[n]=NULL; cout<<cuv; getch(); }

43. Fisierul cuv_a.txt contine mai multe cuvinte ordonate alfabetic. Pentru un cuvant c dat de la tastatura generati fisierul cuv_b.txt contine cuvintele din primul fisier si cuvantul c, toate in ordine alfabetica. #include<iostream.h> #include<string.h> #include<conio.h> void main() {char cuv[100][100],ch[100]; int i,n,sw=1,j; clrscr(); cout<<"Dati nr de cuvinte:"; cin>>n; cin.get(); for(i=1;i<=n;i++){cin.get(cuv[i],20); cin.get(); } cin.get(ch,20); if(strcmp(cuv[1],ch)>=0){for(j=n+1;j>=1;j--) strcpy(cuv[j],cuv[j-1]); strcpy(cuv[1],ch); n=n+1; sw=0; } else for(i=2;i<=n;i++)if(strcmp(cuv[i],ch)>=0) {for(j=n+1;j>=i;j--)strcpy(cuv[j],cuv[j-1]); strcpy(cuv[i],ch); n++; sw=0; i=n+3; } if(sw==1){strcpy(cuv[n+1],ch); n++; } for(i=1;i<=n;i++) cout<<cuv[i]<<endl; getch();

44. Definiti structura fractie care memoreaza in campul a al structurii numaratorul, iar in campul b numitorul fracsiei. Citisi numitorul si numaratorul a n fracsii. Pentru fiecare fracsie sa se verifice daca este ireductibila, in caz afirmativ sa se afiseze, iar in caz contrar sa se afiseze numitorul si numaratorul dupa simplificare. #include<iostream.h> #include<conio.h> struct fractie{int a; int b; }; fractie f; void citire() {cout<<"Dati numaratorul fractiei:"; cin>>f.a; cout<<"Dati numitorul fractiei:"; cin>>f.b; } int divizor(int p,int t) {int i; if(p>t)for(i=t;i>1;i--) if(p%i==0&&t%i==0) return i; for(i=p;i>1;i--)if(p%i==0&&t%i==0) return i; return 0; } void main() {clrscr(); citire(); int k; k=divizor(f.a,f.b); if(k!=0) cout<<"Fractia simplificata este "<<f.a/k<<"/"<<f.b/k; else cout<<"Fractia este ireductibila"; getch(); }

45. Se considera un text cu maximum 255 de caractere in care cuvintele sunt separate prin unul sau mai multe spatii. Primul caracter din textul citit este o litera, iar cuvintele sunt formate numai din litere mici ale alfabetului englez. Scrieti un program C/C++ care citeste de la tastatura textul si il transforma inlocuind prima litera a fiecarui cuvant cu litera mare corespunzatoare, restul caracterelor ramanand nemodificate. Textul astfel transformat va fi afisat pe ecran.

Exemplu: daca de la tastatura se introduce textul: clasa elev scoala se va afisa pe ecran: Clasa Elev Scoala #include<iostream.h> #include<string.h> #include<conio.h> #include<ctype.h> void main() {char cuv[100]; int i,n; clrscr(); cin.get(cuv,30); n=strlen(cuv); cuv[0]=toupper(cuv[0]); for(i=1;i<n;i++) if(cuv[i]==' '&&cuv[i+1]!=' ')cuv[i+1]=toupper(cuv[i+1]); cout<<cuv; }

46. Se da o inregistrare cu numele cerc,in care sunt stocate abscisa si ordonata centrului cercului si raza acestuia. Pentru un n numar natural <100, citisi datele caracteristice a n cercuri, sortasi structurile descrescator in funcsie de diametru si afisasi coordonatele centrelor cercurilor in ordinea obsinuta dupa ordonare. #include<iostream.h> #include<conio.h> struct cerc {int x; int y; float r; }; cerc c[100]; int n,i; void citire() {cout<<"Dati numarul de cercuri:"; cin>>n; for(i=1;i<=n;i++){cout<<"Dati abscisa centrului cercului:"; cin>>c[i].x; cout<<"Dati ordonata centrului cercului:"; cin>>c[i].y; cout<<"Dati raza cercului:"; cin>>c[i].r; }

} void ordonare() {int sw,aux1,aux2; float aux3; do{sw=1; for(i=1;i<n;i++) if(2*c[i].r>=2*c[i+1].r){sw=0; aux1=c[i].x; c[i].x=c[i+1].x; c[i+1].x=aux1; aux2=c[i].y; c[i].y=c[i+1].y; c[i+1].y=aux2; aux3=c[i].r; c[i].r=c[i+1].r; c[i+1].r=aux3; } }while(sw==0); } void main() {clrscr(); citire(); ordonare(); for(i=1;i<=n;i++) cout<<"Cercul de centrul("<<c[i].x<<","<<c[i].y<<") si de raza "<<c[i].r<<endl; getch(); }

47. Scrieti programul C/C++ care citeste de la tastatura un numar de n siruri de cel mult 40 de caractere, formate doar din litere mici ale alfabetului englez. Sa se verifice daca sirul de pe pozitia i se termina cu acelasi caracter cu care incepe sirul de pe pozitia i+1, pentru i de la 1 la n-1. Se va afisa pe ecran mesajul Sirurile citite verifica proprietatea sau Sirurile citite nu verifica proprietatea Exemplu: daca se citeste sirul n=4 si sirurile proba a acoperit tot atunci pe ecran se va afisa: Sirurile citite verifica proprietatea

#include <iostream> #include <string> using namespace std; int main() { char curent[41], anterior[41]; int n; cin>>n; cin.get(); cin.get(curent,41); int test=1; for(int i=1;i<=n-1;i++) { strcpy(anterior,curent); cin.get(); cin.get(curent,41); if(anterior[strlen(anterior)-1]!=curent[0]) test=0; } if(test) cout<<"Sirurile citite verifica proprietatea."; else cout<<"Sirurile citite nu verifica proprietatea."; return 0; }

48. Fisierul text linii.txt este alcatuit din mai multe linii de lungime variabila, pe fiecare linie gasindu-se cate un cuvant. Scrieti un program care afiseaza linia (liniile) de lungime maxima. Exemplu: Pentru fisierul linii.txt: Se va afisa: informatica informatica isoscel programator triunghi trapez programator caiet #include <fstream> #include <iostream>

#include <string> using namespace std; int main() { char cuvant[200]; int max=0; ifstream f("linii.txt"); while(f.getline(cuvant,200)) if(strlen(cuvant)>max) max=strlen(cuvant); f.close(); ifstream g("linii.txt"); while(g.getline(cuvant,200)) if(strlen(cuvant)==max) cout<<cuvant<<endl; g.close(); return 0; } 49. Fie s1 si s2 doua siruri de caractere. Verificati daca s2 este o codificare shift a lui s1(o codificare shift se obtine din s1 prin adagarea la codul ASCII al fiecarui caracter din s1 a unei constante k) afisand in caz afirmativ valoarea lui k sau mesajul NU in caz contar. Ex: Pentru sirurile s1=acdrtu si s2=ceftvx se afiseaza k=2. #include <iostream> using namespace std; int test(char *s1, char *s2) { if(strlen(s1)!=strlen(s2)) return 0; int d=s1[0]-s2[0]; for(int i=1;i<=strlen(s1)-1;i++) if(d!=s1[i]-s2[i]) return 0; return 1; } int main() { char s1[30],s2[30]; cin.get(s1,30); cin.get(); cin.get(s2,30); cout<<test(s1,s2); if(test(s1,s2)) cout<<' '<<s2[0]-s1[0];

return 0; }

50. Scrieti un program care citeste de la tastatura un sir de caractere ce contine litere mici si spatii. Afisati cuvantul cu cele mai multe vocale (daca exista mai multe se va afisa unul singur). Exista cel pusin un cuvant ce consine vocale.

#include <iostream> #include <string> using namespace std; int nrv(char *s) { int k=0; for(int i=0;i<=strlen(s)-1;i++) if(strchr("aeiouAEIOU",s[i])) k++; return k; } int main() { char propozite[1000], *cuvant, cuvant_max[20]; int nrv_max=0; cin.get(propozite,1000); cuvant=strtok(propozite," "); while(cuvant) { int aux=nrv(cuvant); if(aux>nrv_max) { nrv_max=aux; strcpy(cuvant_max,cuvant); } cuvant=strtok(NULL," "); } cout<<cuvant_max; return 0; }

Atestat 2010. Subiecte programare

1. Se citesc de la tastatura n numere naturale, cu cel mult 9 cifre fiecare. Scrieti un program care pentru o cifr k citit de la tastatura, afieaz pe ecrancte numere prime n scrierea crora apare cifra k, se gsesc n irul dat. Exemplu: pentru n=4 , cifra k=2 si valorile citite 23, 603, 122, 27 se obtine numarul nr = 1, care corespunde valorii 23 .#include<fstream.h> #include<conio.h> int n,v[20],i,k; ifstream f("atestat.in"); ofstream g("atestat.out"); void citire() {f>>n; for(i=1;i<=n;i++) f>>v[i]; do{cout<<"k="; cin>>k;} int prim(int a) {for(int d=2;d<=a/2;d++) if(a%d==0) return 0; return 1;} int cifra(int k,int a) {while(a!=0) {if(a%10==k) return 1; a=a/10;}return 0;} void main() {int nr=0; citire(); for(i=1;i<=n;i++) if(prim(v[i])) if(cifra(k,v[i])) {g<<v[i]<<" ";nr++;} g<<nr;} 2. Se citete de la tastatur un numr natural n cu cel mult nou cifre. Scrie iun program care verific dac exist un numr natural k cu proprietatea c n=1*2*3**k. Daca exista un astfel de numar, programul va afisa mesajul Da i valoarea k , altfel va afisa mesajul Nu.(intensiv: valoarea se determin utiliznd o metod eficient din punct de vedere al timpului de execu ie)

#include<fstream.h> #include<conio.h> int n,i,k; void citire() {cout<<"n="; cin>>n;} int factorial(int n) {int sw=1,i=1,p=1; while(sw!=0){p=p*i; i++; if(p==n) return i-1; else if(p>n) return 0;}} void main() {clrscr(); citire(); if(factorial(n)!=0) cout<<"DA "<<factorial(n); else cout<<"NU"; getch();} 2. n fiierul valori.txt se gsesc pe prima linie maximum 1000 de numere ntregi desprite printr-un spaiu. Scriei un program care s determine valoarea maxim i valoarea minim, mpreun cu numrul de apariii al maximului, respectival minimului.(intensiv: folosii o metod eficient din punct de vedere al memoriei i al numrului de operaii efectuate i afiai pe ecran valorile obinute). Exemplu:coninutul fiierului valori.txt este : 24 3 89 24 1 3 1 1 89, atuncise vor afia rezultatele:min = 1 nr_aparitii = 3max = 89 nr_aparitii = 2 #include<iostream.h> #include<conio.h> int n,x[29],i,min,max; void citire() {cout<<"n="; cin>>n; for(i=1;i<=n;i++) cin>>x[i];} void minimax(int &min,int &max){ min=x[1];max=x[1]; for(i=2;i<=n;i++) if(x[i]<min)min=x[i]; else if(x[i]>max) max=x[i];} void frecventa(int max,int min,int &t,int &k) {t=0;k=0;

for(i=1;i<=n;i++) if(x[i]==max)k++; else if(x[i]==min)t++;} void main(){clrscr(); int min,max,t,k; citire(); minimax(min,max); frecventa(max,min,t,k); cout<<"Maximul din vector este "<<max<<" si apare de "<<k<<" ori"; cout<<"Minimul din vector este "<<min<<" si apare de "<<t<<" ori"; getch();} 4.Fiierul unu.in conine pe primul rnd valoarea n ( 2n1.000.000 ), iar pe adoua linie se gsesc n numere ntregi formate din cel mult 9 cifre i despriteprin spaiu. tiind c fiierul conine cel puin dou numere distincte printrecele n de pe a doua linie, scriei un program care s scrie n fiierul unu.outpe o singur linie i separate printr-un spaiu, n ordine descresctoate, celemai mari dou valori distincte din fiierul de intrare. (intensiv :alegei o metod eficient de rezolvare att ca timp de executare, ct i ca gestionare a memoriei) Exemplu :u n u . i n u n u . o u t 10-8 14 8 14 15 9 -7 1 4 10 15 14 #include<iostream.h> #include<conio.h> int n,x[29],i,min,max; void citire(){cout<<"n="; cin>>n;for(i=1;i<=n;i++) cin>>x[i];} void minimax(int n,int &max,int &t) {max=x[1];for(i=2;i<=n;i++) if(x[i]>max) {max=x[i];t=i;}} void main() {clrscr();int max,t,m,aux;citire();minimax(n,max,t);for(i=1;i<=n;i++)if(i==t){aux=x[n];x[n]= x[i];x[i]=aux;}minimax(n-1,m,t);cout<<max<<" "<<m<<endl; getch();} 5. Fiierul text numere.in conine pe prima linie un numr natural n (0n5000),iar pe a doua linie n numere naturale de cel mult 9 cifre fiecare, separate prin cte un spaiu. S se scrie un program care citete n, apoi cele n numere naturale din fiierul numere.in i scrie n fiierul numere.out, pe cte o

linie fiecare, numerele de pe a doua linie a fiierului numere.out care sunt palindroamecu exact patru cifre (un numr este palindrom dac este egal cu oglinditul su).De exemplu dac fiierul numere.in are urmtorul coninut :51441 5 14 2552 78atunci fiierul numere.out va conine :14412552 #include<iostream.h>#include<conio.h>int n,x[29],i,min,max;void citire(){cout<<"n="; cin>>n;for(i=1;i<=n;i++) cin>>x[i];}int palindrom(int a){int p=0,b;b=a;while(a!=0){p=p*10+a%10;a=a/10;}if(p==b) return 1;return 0;}void main(){int nr=0;clrscr();citire();for(i=1;i<=n;i++) if(palindrom(x[i])){cout<<x[i]<<" ";nr++; }cout<<"Nr de numere palindrom="<<nr;getch();} 6.Se citete de la tastaturp n, i apoi n perechi de cte dou numere ntregi ai b cu ( a < 0 < b) reprezentnd capetele intervalului[a, b]. Afisati pe ecran, dac exist, capetele intervalului de intersec ie al celor n intervale citite. n cazul n care nu exist intervalul de intersec ie se afieaz 0.De exemplu, pentru n=3 si perechile [-1,20], [-4,9], [-7, 12] , obtinem solutiax= -1 si y= 9. #include<iostream.h>#include<conio.h>struct interval{int x;int y;};interval a[20];int n,i;void citire(){cout<<"n="; cin>>n;for(i=1;i<=n;i++){cin>>a[i].x;cin>>a[i].y;}}int maxim(interval a[20],int n){int max; max=a[1].x;for(i=2;i<=n;i++) if(a[i].x>max) max=a[i].x;return max;}int minim(interval a[20],int n){int min;min=a[1].y;for(i=2;i<=n;i++) if(min>a[i].x) min=a[i].x;return min;}int verificare(){int max;max=maxim(a,n);for(i=1;i<=n;i++) if(a[i].y<max) return 0;return 1;}void main(){clrscr();citire();int m,t;for(i=1;i<=n;i++) cout<<"["<<a[i].x<<","<<a[i].y<<"]"<<endl;m=maxim(a,n);if(verificare()) t=minim(a,n);else cout<<"intersectia acestor intervale este multimea vida";if(m==t) cout<<"intersectia intervalelor este elementul "<<m;else cout<<"intersectia intervalelor este intervalul ["<<m<<","<<t<<"]"<<endl;getch();} 7. Se citesc de la tastatur n numere naturale, cu cel mult 9 cifre fiecare. Scriei un program care afieaz cifra care apare de cele mai multe ori n numerelecitite. Dac exist mai multe astfel de cifre se vor afia toate.#include<iostream.h>#include<conio.h>int n,x[40],i,j,v[10];void citire() {cout<<"n="; cin>>n;for(i=1;i<=n;i++) cin>>x[i];}void formare(int n,int x[40],int v[10]){int a;for(i=1;i<=n;i++){a=x[i];while(a!=0){v[a%10]=v[a%10]+1;a=a/10;}}}int

maxim(int v[10]){int max=0;for(i=0;i<=9;i++)if(v[i]>max) max=v[i];return max;}void main(){clrscr();int max;citire();formare(n,x,v);for(i=0;i<=9;i++) if(v[i]==max) cout<<i<<endl;getch();} Exemplu:Pentru n=4 i valorile 23, 431, 154, 452 se afieaz 3 pentru c cifra 4apare de 3 ori n numerele citite. 8. Se citete de la tastatur un numr natural n cu maxim cinci cifre. Afiai cel mai apropiat numr fa de n care are aceeai sum a cifrelor.#include<iostream.h>#include<conio.h>int n;void citire(){cout<<"n="; cin>>n;}int suma(int a){int s=0;while(a!=0){s=s+a%10;a=a/10;}return s;}int maimare(){int t,sw=1,i;t=suma(n);i=n+1;while(sw!=0)if(suma(i)==t){sw=0;return i;}else i++;}int maimic(){int t,i;t=suma(n);for(i=n-1;i>=1;i--)if(suma(i)==t)return i;return 0;}void main(){int m,p;clrscr();citire(); m=maimic();p=maimare();if((n-m)>(p-n)) cout<<p;else if((n-m)<(p-n)) cout<<m;else cout<<p<<","<<m;getch();} 9.Se citesc n numere naturale. S se ordoneze numerele cresctor dup numarul dedivizori. (intensiv: numrul de divizori se va determina utiliznd o metod eficient din punct de vedere al timpului de execu ie)Exemplu: n=4, numerele 12,4,6,13 13,4,6,12 . #include<iostream.h>#include<conio.h>int n,i,x[30],d[30];void citire(){cout<<"n=";cin>>n;for(i=1;i<=n;i++) cin>>x[i];}void vector(int n,int x[30],int d[30]){int p=0;for(i=1;i<=n;i++)if(x[i]==1) d[i]=1;else if(x[i]==0) d[i]=0;else {for(p=2;p<=x[i]/2;p++) if(x[i]%p==0)d[i]++;d[i]=d[i]+2;}}void sortare(int n,int d[30]){int sw,aux1,aux2;do{sw=1;for(i=1;i<=n-1;i++) if(d[i]>d[i+1]){aux1=x[i];x[i]=x[i+1];x[i+1]=aux1;aux2=d[i];d[i]=d[i+1];d[i+1]= aux2;sw=0;}}while(sw==0);}void main(){clrscr();citire();vector(n,x,d);sortare(n,d);for(i=1;i<=n;i++) cout<<x[i]<<" ";getch();} 10. Se citete n numr natural (n<32000) i apoi se introduc pe rnd n numere ntregi. S se afieze numerele prime i s se calculeze media lor aritmetic.#include<iostream.h>#include<conio.h>int n,x[50],i;void citire(){cout<<"n="; cin>>n; for(i=1;i<=n;i++) cin>>x[i];}int prim(int a){for(int d=2;d<=a/2;d++) if(a%d==0) return 0;return 1;}void main(){clrscr();int

s=0,k=0;citire();for(i=1;i<=n;i++)if(prim(x[i])){cout<<x[i]<<" ";s=s+x[i];k++;}cout<<"Media aritmetica este "<<s/k;getch();} 12. Se citete din fiierul numar.txt un numr natural n. S se verifice dac este putere a lui 2 i s se calculeze frecven a de apari ie a fiecarei cifre n scrierea n baza 10 a numrului. #include<iostream.h> #include<conio.h>int i,a[10];long n;void citire(){cout<<"n="; cin>>n;}void formare(long n,int a[10]){while(n!=0){a[n%10]=a[n%10]+1;n=n/10;}}int putere(long n){while(n%2==0)n=n/2;if(n==1) return 1;return 0;}void main(){clrscr();citire();if(putere(n)==1) cout<<"Numarul "<<n<<" este putere a lui 2 "<<endl;else cout<<"Numarul "<<n<<" nu este putere a lui 2 "<<endl;formare(n,a);for(i=1;i<=9;i++) if(a[i]!=0) cout<<"Cifra "<<i<<" apare in numarul "<<n<<" de "<<a[i]<<" ori "<<endl;getch();} 13. Scrieti un program care afieaz pe ecran toate numerele naturale cu maxim 9cifre care sunt rotunde(numerele care convertite in binar au acelasi numar de 0respectiv de 1).Exemplu: 12=>1100 este rotund; 13 =>1101 nu este rotund )#include<iostream.h>#include<conio.h>int n;void citire(){cout<<"n=";cin>>n; }int rotund(int n){int p=0,t=0;while(n!=0){if(n%2==0)p++;else t++;n=n/2;}if(p==t) return 1;return 0;}void main(){clrscr();citire();if(rotund(n)==1) cout<<"Numarul "<<n<<" este round ";else cout<<"Numarul "<<n<<" nu este round ";getch();} 14. Fiierul text numere.in conine pe prima linie un numr natural n (0<n<1000), iar pe a doua linie n numere naturale cu cel mult 9 cifre fiecare, despriteprin cte un spaiu. Scriei un program C/C++ care citete toate numerele din fiier i afieaz pe ecran, separate prin cte un spaiu, numerele de pe a doua linie a fiierului, care sunt formate din cifre identice.Exemplu: dac fiierul numere.in are coninutul:955 107 3 101 99 7 208 2222 80numerele ce se vor afia s unt:55 3 99 7 2222#include<iostream.h>#include<conio.h>int n,i,x[100];void citire(){cout<<"n="; cin>>n;for(i=1;i<=n;i++) cin>>x[i];}int identic(int t){int p;p=t%10;t=t/10;while(t!=0){if(t%10!=p)return 0;t=t/10;}return 1;}void main(){clrscr();citire();for(i=1;i<=n;i++) if(identic(x[i])) cout<<x[i]<<" ";getch();} 15.Fiierul atestat.txt conine pe prima linie un numr natural n (n100), iar pe a doua linie, separate prin cte un spaiu, n numere naturale nenule, cu cel mult 4 cifre fiecare. Scriei programul C/C++ care afiseaza pe ecran cifra de control a

fiecrui numr (c(4568)=c(4+5+6+8)=c(23)=5).Exemplu: dac fiierul are coninutul alturat,7120 346 68 9 32 0 112atunci se afieaz 3 4 5 9 5 0 4#include<iostream.h> #include<conio.h>int n;void citire(){cout<<"n="; cin>>n;}int suma(int n){int s=0;while(n!=0){s=s+n%10;n=n/10;}return s;}void main(){int p;clrscr();citire();p=suma(n);while(p>9)p=suma(p);cout<<"Cifra de control a numarului "<<n<<" este "<<p;getch();} 16. Fiierul numere.in conine pe prima linie mai multe numere naturale n ordine cresctoare dintre care cel putin o putere a lui 3. Scriei un algoritm eficient care afieaz pe ecran numerele din fiier ce sunt puteri ale lui 3.#include<iostream.h>#include<conio.h>int n,i,x[100];void citire(){cout<<"n="; cin>>n;for(i=1;i<=n;i++) cin>>x[i];}int putere(int t){while(t%3==0) t=t/3;if(t==1) return 1;return 0;}void main(){clrscr();citire();for(i=1;i<=n;i++)if(putere(x[i])==1) cout<<x[i]<<" ";getch();} 18. S se scrie un program care s verifice dac suma cifrelor de pe poziiile impare i suma cifrelor de pe poziiile pare ale unui numr natural n citit de latastatur sunt egale. Poziiile se numr de la dreapta la stnga ncepnd cu poziia 1. Se afieaz sumele i un mesaj corespunztor pe ecran.Exemplu: se citete: n=12345 ise afieaz: sp=6 i simp=9 Nu coincid! #include<iostream.h> #include<conio.h> #include<math.h>int n;void citire(){cout<<"n="; cin>>n;}int sume(int n){int s=0,p=0,nr=0; while(n!=0){nr++;if(nr%2==0) s=s+n%10;else p=p+n%10;n=n/10;}if(p==s) return 1;return 0;}void main(){clrscr();citire();if(sume(n)==1) cout<<"Suma cifrelor de pe pozitiile pare este egala cu suma cifrelor de pe pozitiile impare ";else cout<<"Suma cifrelor de pe pozitiile pare nu este egala cu suma cifrelor de pe pozitiile impare";getch();} 20. Se citesc n numere naturale nenule. S se precizeze cu cte zerouri se va termina produsul numerelor fr a calcula efectiv produsul lor.Exemplu: se citete:n=3 i numerele25, 12, 9se afieaz: 2 de zero#include<iostream.h>#include<conio.h>int n,i,x[30];void citire(){cout<<"n=";cin>>n;for(i=1;i<=n;i++) cin>>x[i];}void zerouri(int n,int x[30],int &c,int &d){int p;for(i=1;i<=n;i++){p=x[i];while(p%5==0){c++;p=p/5;}while(p%2==0){d++;p= p/2;}}}void main(){clrscr();int c,d;citire();zerouri(n,x,c,d);if(c<=d) cout<<"Produsul numerelor are "<<c<<" zerouri ";else cout<<"Produsul numerelor are "<<d<<" zerouri ";getch();}

21. Se citete un numr natural n. S se afieze toate numerele prime mai mici dect n astfel nct suma cifrelor a fiecrui numr s fie mai mic dect un altnumr citit m.Exemplu: se citete: n= 30 i m=7se afieaz: 2, 3, 5, 11, 13, 23#include<iostream.h>#include<conio.h>int n,i,x[30],m; void citire(){cout<<"n=";cin>>n;cout<<"m=";cin>>m;}int suma(int t){int s=0;while(t!=0){s=s+t%10;t=t/10;}return s;}int prim(int t){for(int d=2;d<=t/2;d++) if(t%d==0) return 0;return 1;}void main(){int i;clrscr();citire();for(i=2;i<=n;i++)if(prim(i)==1) if(suma(i)<=m)cout<<i<<" , ";getch();} 22. Fiierul matrice.txt conine pe primul rnd dou valori naturale m i n (1n100, 1m100), reprezentnd numrul de linii i respectiv de coloane ale uneimatrice a, iar pe urmtoarele m linii cte n valori ntregi cu maximum 4 cifrefiecare, separate prin cte un spaiu, reprezentnd elementele matricei a. Afiai pe ecran un ir de 2*(n+m) 4 numere ordonate cresctor, ir format din elementele aflate pe chenarul exterior al matricei a. Chenarul exterior este formatdin prima i ultima linie, respectiv prima i ultima coloan din matrice.Exemplu: dac matricea dat este :3 41 2 3 45 6 7 89 1 2 3se va afia irul : 1 1 2 2 3 3 4 5 8 9.#include<iostream.h>#include<conio.h>int n,m,i,j ,a[30][30],t,x[100];void citire(){cout<<"n=";cin>>n;cout<<"m=";cin>>m;for(i=1;i<=n;i++)for(j=1;j<=m; j++){gotoxy(j*3,i+5);cin>>a[i][j];}}void formare(int n,int m,int a[30][30],int &t,int x[100]){for(i=1;i<=n;i++)x[++t]=a[1][i];for(i=1;i<=n;i++)x[++t]=a[n][i];for(i=2; i<m;i++) x[++t]=a[i][1];for(i=2;i<m;i++) x[++t]=a[i][n];} void sortare(int t,int x[100]){ int sw,aux;do{sw=1;for(i=1;i<t;i++) if(x[i]>x[i+1]){aux=x[i];x[i]=x[i+1];x[i+1]=aux;sw=0;}}while(sw==0);}void afis(int k,int v[100]){for(i=1;i<=k;i++) cout<<v[i]<<" ";cout<<endl;}void main(){clrscr();citire();formare(n,m,a,t,x);cout<<endl<<"elementele din chenarul exterior nesortate sunt "<<endl;afis(t,x);sortare(t,x);cout<<endl<<"elementele din chenarul exterior sortate sunt "<<endl;afis(t,x);getch();} 23. Se citete de la tastatur o valoare natural m (2m100). Scriei programulC/C++/Pascal care construiete n memorie i apoi afieaz pe ecran matricea acu m linii i m coloane de numere ntregi, construit dup urmtoarea regul :elementul de pe linia i i coloana j a matricii ( 1i , jm) este : 1 dac i*i+j*j este ptrat perfect 2 dac i*i+j*j nu este ptrat perfect, dar este numr prim mai mare dect 2

3 n rest.Exemplu: pentru m = 2, se va afia matricea :3 22 3#include<iostream.h>#include<conio.h>int m,i,j ,a[30][30];void citire(){cout<<"m=";cin>>m;}int patrat(int t){for(int d=1;d<=t/2;d++)if(d*d==t) return 1;return 0;}int prim(int t){for(int d=2;d<=t/2;d++) if(t%d==0) return 0;return 1;}void main(){clrscr();citire();for(i=1;i<=m;i++)for(j=1;j<=m;j++)if(patrat(i*i+j*j)==1) a[i][j]=1;else if(i*i+j*j>2&&prim(i*i+j*j)==1) a[i][j]=2;else a[i][j]=3;for(i=1;i<=m;i++)for(j=1;j<=m;j++){gotoxy(j*3,i+5); cout<<a[i][j];}getch();} 24. Se citete un vector v cu n componente numere naturale. S se afieze cel mai mare numr care se poate forma cu cifra maxim a fiecrui numr din vector.Exemplu: se citete: n= 5 i v=(29, 171, 0, 2222, 100)se afieaz: 97210#include<iostream.h>#include<conio.h>int m,x[100],i,j,a[10];void citire(){cout<<"m=";cin>>m;for(i=1;i<=m;i++) cin>>x[i];}int cifmaxima(int t){int max;max=t%10;t=t/10;while(t!=0){if(t%10>max)max=t%10;t=t/10;}return max;}void formare(int a[10]){int t;for(i=1;i<=m;i++){t=cifmaxima(x[i]);a[t]=a[t]+1;}}long numar(int a[10]){int p=0;for(i=9;i>=0;i--)if(a[i]!=0)if(a[i]>1) while(a[i]!=0){p=p*10+i;a[i]=a[i]1;}else p=p*10+i;return p;}void main(){clrscr();citire();formare(a);cout<<"Cel mai mare numar care se poate forma cu cifra maxima a fiecarui elementdin vector este "<<numar(a);getch();} 25. Se consider o matrice oarecare de dimensiune mxn cu elemente numere naturale. S se afieze numerele cu numr impar de divizori din matrice i s se indice numrul lor.Exemplu: se citete: m=2 i n=3 i matricease afieaz: 4, 25,2 numere#include<iostream.h>#include<conio.h>int m,n,i,j,a[10][10];void citire() {cout<<"m=";cin>>m;for(i=1;i<=m;i++)for(j=1;j<=m;j++){gotoxy(j*3,i+5);cin> >a[i][j];}}int divizor(int t){int s=2;for(int d=2;d<=t/2;d++) if(t%d==0)s++;return s;}void main(){clrscr();int nr;citire();for(i=1;i<=m;i++)for(j=1;j<=m;j++)if(a[i][j]!=1){n=divizor(a[i][j]);if( n%2==1){cout<<a[i][j]<<" ";nr++;}}else {cout<<a[i][j]<<" ";nr++;}cout<<"nr de elemente din matrice care au un numar impar de divizori este "<<nr;getch();} 26. Fie un vector v cu n elemente numere ntregi citite de la tastatur. Fr afolosi alt vector auxiliar, s se mute la sfritul lui v elementele sale nule,pstrnd ordinea celorlalte elemente.Exemplu: se citete: n=7 i vectorul v=(2,3,0,9,0,0,8)se afieaz: v=(2,3,9,8,0,0,0)#include<iostream.h>#include<conio.h>int v[50],n,i,j,sw,aux;void citire(){cout<<"n="; cin>>n;for(i=1;i<=n;i++) {cin>>v[i];if(v[i]==0)sw++;}}void schimb(int i,int m){aux=v[i];v[i]=v[m];v[m]=aux;}void zero(int n,int v[50]){for(int

t=1;t<=sw;t++)for(i=1;i<=n;i++) if(v[i]==0)schimb(i,n+1-t);}void afis(int n,int v[50]){for(i=1;i<=n;i++) cout<<v[i]<<" ";cout<<endl;}void main(){clrscr();citire(); afis(n,v);zero(n,v);afis(n,v);getch();} 31. Scriei un program C/C++ care citete de la tastatur un numr natural n (2<n<20), construiete n memorie i afieaz pe ecran o matrice cu n linii i n coloane, numerotate de la 1 la n. Fiecare element din matrice aflat pe o linie impar va fi egal cu numrul liniei pe care se afl iar elementele de pe linii pares fie completate cu valorile de la n la 1. Elementele matricei vor fi afiatepe ecran, cte o linie a matricei pe cte o linie a ecranului cu cte un spaiuntre elementele fiecrei linii.Exemplu: pentru n=5 se va afia matricea de mai jos1 1 1 1 15 4 3 2 13 3 3 3 35 4 3 2 15 5 5 5 5#include<iostream.h>#include<conio.h>int n,a[20][20],i,j;void citire(){cout<<"n="; cin>>n;}void formare(){for(i=1;i<=n;i++)for(j=1;j<=n;j++) if(i%2==1)a[i][j]=i;else a[i][j]=nj+1;}void afis(){for(i=1;i<=n;i++)for(j=1;j<=n;j++){gotoxy(j*3,i+4);cout<<a[i][j];}}void main(){clrscr();citire();formare();afis();getch();} 33. Fiierul text NUMERE.IN conine pe prima linie un numr natural nenul n (1n100) i pe urmtoarea linie n numere reale pozitive separate prin cte un spaiu. Scriei un program C/C++ care citete din fiierul NUMERE.IN numrul naturaln, i determin, utiliznd un algoritm eficient din punct de vedere al timpuluide executare i al memoriei utilizate, pozi ia pe care se afl primul i ultimulnumr din cele n numere reale care sunt egale cu valoarea minim dintre ele.Exemplu: Dac fiierul NUMERE.IN are coninutul:62.8 2.3 5.7 5.7 2.3 6.3atunci se afieaz 2 si 5 (valoarea minim este 2.3 i numerele de pe poziia 2si 5 sunt egale cu 2.3) #include<iostream.h>#include<conio.h>int n,i;float v[100];void citire() {cout<<"n="; cin>>n;for(i=1;i<=n;i++) cin>>v[i];}float minim(){float min;min=v[1];for(i=2;i<=n;i++) if(min>v[i]) min=v[i];return min;}void main(){float a; int b;clrscr();citire();a=minim();for(i=1;i<=n;i++)if(v[i]==a){cout<<i<<" ";i=n+1;b=i;}for(i=n;i>=1;i--) if(v[i]==a){if(i!=b)cout<<i;i=0;}getch();} 34. Scriei un program C/C++ care citete de la tastatur un numr natural n (1<=n<=20), elementele unei matrice cu n linii i n coloane, numere ntregi din intervalul [-100, 100] i afieaz pe ecran m1 i m2, unde m1 este media aritmetic a elementelor strict pozitive ale matricei, situate deasupra diagonalei principale, iar m2 este media aritmetic a elementelor strict pozitive ale matricei, situate sub diagonala principal, ca n exemplu. Cele dou medii se consider

egale cu 0 dac nu exist valori strict pozitive n zonele corespunztoare.Exemplu: pentru n=4 i matricea alturat se afieazm1=2.75, calculat din elementele aflate deasupra diagonaleiprincipale, i m2=2.5, calculat din elementele aflate sub diagonala principal.-1 2 -4 50 6 3 12 4 2 03 5 1 -3#include<iostream.h>#include<conio.h>int a[20][20],n,i,j,k,t;float m1,m2;void citire(){cout<<"n="; cin>>n;for(i=1;i<=n;i++)for(j=1;j<=n;j++){gotoxy(j*7,i+9);cin>>a[i][j];}}float sumaunu(){float s=0;for(i=1;i<=n;i++)for(j=i+1;j<=n;j++) if(a[i][j]>0){s=s+a[i][j];k++;}m1=s/k;return m1; }float sumadoi(){float s=0;for(i=1;i<n;i++)for(j=1;j<i;j++)if(a[i][j]>0){s=s+a[i][j];t++;}m2=s/t;return m2;}void main(){clrscr();citire();cout<<"Media aritmetica a elementelor strict pozitive de deasupra diagonalei principale este "<<sumaunu();cout<<"Media aritmetica a elementelor strict pozitive de dedesubtul diagonalei principale este "<<sumadoi();getch();} 35. Scriei un program C/C++ care citete de la tastatur numerele ntregi m in (1<=m<=50, 1<=n<=50) i elementele unui tablou bidimensional cu m linii i n coloane, numere ntregi distincte de cel mult 4 cifre fiecare. Programul va afiape prima linie a ecranului numrul de elemente prime de pe fiecare coloana a matricii, separate prin cte un spa iu.Defini i o funcie care verific dac un numr ntreg este prim i folosii apeluri ale ei pentru rezolvarea cerinei.Exemplu: pentru m=3 i n=4 i tabloul de mai jos2 7 1 414 6 12 39 22 8 5Pe ecran se va afia:3 1 1#include<iostream.h>#include<conio.h>int a[20][20],n,i,j;void citire(){cout<<"n="; cin>>n;for(i=1;i<=n;i++)for(j=1;j<=n;j++){gotoxy(j*7,i+9);cin>>a[i][j];}}int prim(int a){int d;for(d=2;d<=a/2;d++) if(a%d==0) return 0;return 1;}void main(){clrscr();citire();for(i=1;i<=n;i++)for(j=1;j<=n;j++)if(prim(a[j][i])==1) cout<<a[j][i]<<" ";getch();} 36. Fie x un vector de numere ntregi de lungime n, s se construiasc un vectory, astfel nct y[i]=numrul de apariii ale lui x[i] n vectorul x.Exemplu: Pentru x=(1,5,2,1,5,7,2,1,5) se obine y=(3,3,2,3,3,1,2,3,3).#include<iostream.h>#include<conio.h>int v[50],y[50],n,i,j,k;void citire(){cout<<"n="; cin>>n;for(i=1;i<=n;i++)cin>>v[i];}int aparitie(int a){int s=0;for(i=1;i<=n;i++)if(v[i]==a)s++;return s;}void formare(int n,int v[50],int

y[50]){for(j=1;j<=n;j++){k=aparitie(v[j]);y[j]=k;}}void afis(int n,int x[100]){for(i=1;i<=n;i++) cout<<x[i]<<" ";cout<<endl;}void main(){clrscr();citire();formare(n,v,y);afis(n,v);afis(n,y);getch();} 37. Scriei un program care citete de la tastatur dou numere naturale nenulem i n i care construiete n memorie i apoi afieaz o matrice A cu m linii i n coloane cu proprietatea c fiecare element aij memoreaz cea mai mic dintrevalorile indicilor i i j. Matricea se va afia n fiierul matrice.txt, cte olinie a matricei pe cte o linie a ecranului, elementele fiecrei linii fiind separate prin cte un spaiu.Exemplu: Pentru m=4 i n=5 fiierul va con ine matricea alturat #include<iostream.h>#include<conio.h>int a[20][20],n,m,i,j;void citire(){cout<<"n="; cin>>n;cout<<"m="; cin>>m;}void formare(){for(i=1;i<=n;i++)for(j=1;j<=m;j++)if(i<j)a[i][j]=i;else a[i][j]=j;}void afis(){for(i=1;i<=n;i++)for(j=1;j<=m;j++){gotoxy(j*3,i+5); cout<<a[i][j];}}void main(){clrscr();citire();formare();afis();getch();} 38. Se citesc de la tastatur doi vectori cu cte n elemente. Afiai ultima cifr a sumei fr a calcula efectiv suma.#include<iostream.h>#include<conio.h>int n,a[100],b[100],i;void citire(){cout<<"Dati numarul de elemente:"; cin>>n;for(i=1;i<=n;i++) {cin>>a[i];cin>>b[i];}}int ultimacifra(int n,int a[100],int b[100]){int s=0;for(i=1;i<=n;i++){s=s+a[i]+b[i];s=s%10;}return s;}void main(){clrscr();citire();cout<<"Suma se termina cu cifra:"<<ultimacifra(n,a,b);getch();} 39. Scrie i un program care construiete n memorie o matrice ptratic de ordinn cu elemente numere naturale astfel nct pe diagonala principal s existe numai elemente egale cu 1, elementele de pe cele dou semidiagonale paralele cu diagonala principal i alturate diagonalei principale s fie toate egale cu2, elementele de pe urmatoarele dou semidiagonale s fie egale cu 3,etc.Valoarea lui n se citeste de la tastatur, iar matricea se va afia pe ecran.Pentru n=4 se va afia tabloul :1 2 3 42 1 2 33 2 1 24 3 2 1#include<iostream.h>#include<conio.h>int a[20][20],n,m,i,j;void citire(){cout<<"n="; cin>>n;}void formare(){for(i=1;i<=n;i++)for(j=n;j>=i;j-){a[i][j]=j-i+1;a[j][i]=a[i][j];}}void afis() {for(i=1;i<=n;i++)for(j=1;j<=n;j++){gotoxy(j*3,i+4);cout<<a[i][j];}}void main(){clrscr();citire();formare();afis();getch();}

39. Fie a un vector cu n componente reale (n>=30). S se obtin din a vectorul bcare s indeplineasc condi iile :- b[i]>=b[i+1] pentru i=1,2,,k-1- b[i]<=b[i+1] pentru i=k,k+1, , n-1- b[ki]>=b[k+i] pentru i=1,2, , k-1, unde k=n/2 cand n este par si k=(n+1)/2 cand n este impar.#include<iostream.h>#include<conio.h>int v[50],n,b[50],i,j;void citire(){cout<<"n="; cin>>n;for(i=1;i<=n;i++) cin>>v[i];}void sortare(){int sw,aux;do{sw=1;for(i=1;i<n;i++) if(v[i]<v[i+1]){aux=v[i];v[i]=v[i+1];v[i+1]=aux;sw=0;}}while(sw==0);}void formare(int &t,int b[50]){t=0;for(i=1;i<=n/2;i++)b[++t]=v[i];for(i=n;i>=n/2;i-)b[++t]=v[i];}void afis(int m,int x[100]){for(i=1;i<=m;i++) cout<<x[i]<<" ";cout<<endl;}void main(){int t;clrscr();citire();afis(n,v);sortare();formare(t,b);afis(n,b);getch();} 40. Se citete de la tastatur o matrice a cu m linii i n coloane, ale crei elemente sunt cifre de la 0 la 9 (0<=m,n<=5). S se afieze suma numerelor care sepot forma cu cifrele fiecrei linii (numrul aferent fiecrei linii se va ob in e prin citirea cifrelor de pe linia respectiv de la stnga la dreapta, ignorndu-se zerourile de la inceputul liniei).Exemplu : Pentru matricea :0 3 8 2 50 0 5 1 40 7 7 9 3 se va afia valoarea 12132 reprezentnd suma 3825+514+7793.#include<iostream.h>#include<conio.h>int a[20][20],n,m,i,j;void citire(){cout<<"n="; cin>>n;for(i=1;i<=n;i++)for(j=1;j<=n;j++){gotoxy(j*3,i+4);cin>>a[i][j];}}int numar(int t){int p=0;for(i=1;i<=n;i++)if(a[t][i]!=0) p=p*10+a[t][i];else if(p!=0) p=p*10+a[t][i];return p;}int suma(){int s=0,b;for(j=1;j<=n;j++){b=numar(j);cout<<b<<" ";s=s+b;}return s;}void main(){clrscr();citire();cout<<"Suma obtinuta este "<<suma();getch();} 41. Scrie i un program care construiete n memorie o matrice t ptratic de ordin n cu elemente numere naturale astfel nct pe ultima coloan i pe ultima linie s se afle numai elemente egale cu 1, iar oricare alt element al matricei sfie egal cu suma dintre elementul aflat imediat sub el i elementul aflat imediat n dreapta lui.Exemplu : Pentru n =4 se va afisa tabloul urmator :20 10 4 110 6 3 14 3 2 11 1 1 1#include<iostream.h>#include<conio.h>int a[20][20],n,m,i,j;void citire(){cout<<"n="; cin>>n;for(i=1;i<=n;i++){a[n][i]=1;a[i][n]=1;}}void formare(){for(i=n-1;i>=1;i--)for(j=n-1;j>=1;j--)a[i][j]=a[i+1][j]+a[i][j+1];

}void afis(){for(i=1;i<=n;i++)for(j=1;j<=n;j++){gotoxy(j*3,i+5);cout<<a[i][j];}}void main(){clrscr();citire();formare();afis();getch();} 42. Scriei programul C, C++ sau Pascal, care citete de la tastatur un ir s de cel mult 30 de caractere i un caracter c. Programul determin triplarea fiecrei apariii a caracterului c n s i scrie noul ir obinut n fiierul text final.out. (neintensiv: irul poate fi scris n fiier fr a fi construit efectivn memorie)De exemplu, dac se citete irul : ciocarlie i caracterul c atunci fiierul vaconine irul : ccciocccarlie. #include<iostream.h>#include<string.h>#include<conio.h>void main(){char cuv[100],ch;int i,n,j;clrscr();cout<<"Dati cuvantul:"<<endl;cin.get(cuv,30); cin.get();cout<<"Dati caracterul ch:"; cin>>ch;n=strlen(cuv);for(i=0;i<n;i++)if(cuv[i]==ch){for(j=n;j>i+1;j-)cuv[j]=cuv[j-1];cuv[i+1]=ch;n++;i++;for(j=n;j>i+1;j--)cuv[j]=cuv[j1];n++;cuv[i+1]=ch;i=i+2;}cuv[n]=NULL;cout<<cuv;getch();} 44. Defini i structura frac ie care memoreaz n cmpul a al structurii numrtorul, iar n cmpul b numitorul frac iei. Citi i numitorul i numrtorul a n frac ii. Pentru fiecare frac ie s se verifice dac este ireductibila, n caz afirmativ s se afieze, iar n caz contrar s se afieze numitorul i numrtorul dup simplificare.#include<iostream.h>#include<conio.h>struct fractie{int a;int b;}; fractie f;void citire(){cout<<"Dati numaratorul fractiei:"; cin>>f.a;cout<<"Dati numitorul fractiei:"; cin>>f.b;}int divizor(int p,int t){int i;if(p>t)for(i=t;i>1;i--) if(p%i==0&&t%i==0) return i;for(i=p;i>1;i--)if(p%i==0&&t%i==0) return i;return 0;}void main(){clrscr();citire(); int k;k=divizor(f.a,f.b);if(k!=0) cout<<"Fractia simplificata este "<<f.a/k<<"/"<<f.b/k;else cout<<"Fractia este ireductibila";getch();} 45. Se consider un text cu maximum 255 de caractere n care cuvintele sunt separate prin unul sau mai multe spaii. Primul caracter din textul citit este o

liter, iar cuvintele sunt formate numai din litere mici ale alfabetului englez. Scriei un program C/C++ care citete de la tastatur textul i l transform nlocuind prima liter a fiecrui cuvnt cu litera mare corespunztoare, restul caracterelor rmnnd nemodificate. Textul astfel transformat va fi afiat pe ecran. #include<iostream.h>#include<string.h>#include<conio.h>#include<ctype.h>voi d main(){char cuv[100];int i,n;clrscr();cin.get(cuv,30);n=strlen(cuv);cuv[0]=toupper(cuv[0]);for(i=1;i<n;i++) if(cuv[i]==' '&&cuv[i+1]!=' ')cuv[i+1]=toupper(cuv[i+1]);cout<<cuv;}Exemplu: dac de la tastatur se introduce textul: clas elev coal se va afiape ecran: Clas Elev coal 46. Se d o nregistrare cu numele cerc,n care sunt stocate abscisa i ordonata centrului cercului i raza acestuia. Pentru un n numr natural <100, citi i datele caracteristice a n cercuri, sorta i structurile descresctor n func ie dediametru i afia i coordonatele centrelor cercurilor n ordinea ob inut dup ordonare. #include<iostream.h>#include<conio.h>struct cerc{int x;int y;float r;};cerc c[100];int n,i;void citire(){cout<<"Dati numarul de cercuri:"; cin>>n;for(i=1;i<=n;i++){cout<<"Dati abscisa centrului cercului:"; cin>>c[i].x;cout<<"Dati ordonata centrului cercului:";cin>>c[i].y;cout<<"Dati raza cercului:";cin>>c[i].r;}}void ordonare(){int sw,aux1,aux2;float aux3;do{sw=1;for(i=1;i<n;i++) if(2*c[i].r>=2*c[i+1].r){sw=0;aux1=c[i].x;c[i].x=c[i+1].x;c[i+1].x=aux1;aux2=c[ i].y;c[i].y=c[i+1].y;c[i+1].y=aux2;aux3=c[i].i+1].r=aux3;}}while(sw==0);}void main(){clrscr();citire();ordonare();for(i=1;i<=n;i++)cout<<"Cercul de centrul("<<c[i].x<<","<<c[i].y<<") si de raza "<<c[i].r<<endl;getch(); 49. Fie s1 i s2 dou iruri de caractere. Verificai dac s2 este o codificareshift a lui s1(o codificare shift se obine din s1 prin adgarea la codul ASCII al fiecrui caracter din s1 a unei constante k) afind n caz afirmativ valoarea lui k sau mesajul NU n caz contar.Ex: Pentru irurile s1=acdrtu i s2=ceftvx se afieaz k=2.#include<string.h>#include<stdlib.h>#include<iostream.h>#include<conio.h

>int n,i;char s[100],c[100],cuv[100];void citire(){cin.getline(s,30);cin.get(c,30);}void main(){int t,k=0;clrscr();citire();t=c[0]-s[0];for(i=0;i<strlen(s)1;i++)cuv[i]=s[i]+t;cout<<cuv;if(strcmp(cuv,c)==0) cout<<"Da"<<t;else cout<<"Nu";getch();} 51. Scriei programul C/C++ care citete de la tastatur un cuvnt de cel mult15 litere mici ale alfabetului englez i care afieaz pe ecran, pe linii distincte, cuvintele ob inute prin tergerea succesiv a vocalelor din cuvntul citit, de la stnga la dreapta, ca n exemplu de mai jos:Exemplu: Dac se citete cuvntul examen se afieaz:xamenxmenxmn#include<iostream.h> #include<conio.h> #include<string.h> void main() {clrscr(); char cuv[100],voc[]="a,e,i,o,u"; int i,n,j; cout<<"Dati cuvantul"<<endl;cin.get(cuv,30);n=strlen(cuv);for(i=0;i<n;i++)if(strchr(voc,cuv[i ])){for(j=i;j<n;j++)cuv[j]=cuv[j+1];cuv[n-1]=NULL;cout<<cuv<<endl;n--;i-;}getch();}

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