Probleme Rezolvate in C++

48
Structuri de date Forma generala struct nume_structura { tip_membru1 nume_membru1; tip_membru2 nume_membru2; tip_membru3 nume_membru3; ....... } nume_obiect; Exemplu Avem o structura cu numele produs. Ea va contine greutate de tip intreg si pret de tip real. struct produs { int greutate; float pret; }; produs carte, pix; este echivalent cu struct produs { int greutate; float pret; }carte, pix; Functii Forma generala tip_returnat nume (parametru1, parametru2, …, parametruN) { instructiuni; } unde: tip_returnat este un tip de date returnat de functie nume este identificatorul prin care putem apela functia parametrii : Fiecare parametru este format dintr-un specificator al tipului de date urmat de un dentificator ( exact ca la declararea unei 1

Transcript of Probleme Rezolvate in C++

Page 1: Probleme Rezolvate in C++

Structuri de date

Forma generala

struct nume_structura { tip_membru1 nume_membru1; tip_membru2 nume_membru2; tip_membru3 nume_membru3; ....... } nume_obiect;

ExempluAvem o structura cu numele produs. Ea va contine greutate de tip intreg si pret de tip real.

struct produs { int greutate; float pret; }; produs carte, pix;

este echivalent cu

struct produs { int greutate; float pret; }carte, pix;

Functii

Forma generala

tip_returnat nume (parametru1, parametru2, …, parametruN){instructiuni;}unde:tip_returnat este un tip de date returnat de functienume este identificatorul prin care putem apela functiaparametrii : Fiecare parametru este format dintr-un specificator al tipului de date urmat de un dentificator ( exact ca la declararea unei variabile . exemplu int x ). Rolul parametrilor este acela de a transmite argumente functiei atunci cand este apelata.Instructiunile sunt corpul functiei. Este un bloc de instructiuni incercuit de { }.

ExempluAvem nevoie de o functie care calculeaza suma a doua numere.

#include <iostream.h> int a, b; int suma ( int x, int y) {

1

Page 2: Probleme Rezolvate in C++

//instructiunea return returneaza suma dintre //x si y return x+y; } void main() { // citim valorile pentru a si b cout<<"a="; cin>>a; cout<<endl; cout<<"b="; cin>>b; cout<<endl; // afisam suma celor 2 numere cout<<suma(a,b); }

Functii fara tipSa presupunem ca vrem sa facem o functie care afiseaza ceva pe ecran. Aceasta functie nu returneaza nici o valoare. In acest caz vom folosi void in locul tipului de date returnat. void specifica absenta unui tip de date returnat.

#include <iostream.h> void mesaj() { cout<<"Mesaj"; } void main() { mesaj(); }

Tablouri multidimensionale

Citirea si afisarea unui tablou bidimensional

#include <iostream.h> int n,i,j,matrice[100][100]; void main() { // citim n ( numar linii/coloane ) cout<<"N=";cin>>n; cout<<endl; //citim tabloul for (i=0; i<n; i++) for (j=0; j<n; j++) { cout<<"matrice["<<i<<"]["<<j<<"]="; cin>>matrice[i][j]; cout<<endl; } // afisam tabloul for (i=0; i<n; i++ ) for (j=0; j<n; j++)

2

Page 3: Probleme Rezolvate in C++

cout<<a[i][j]; } Tablouri unidimensionale

Initializarea unui tablouCand declaram un tablou avem posibilitatea sa atribuim valori initiale pentru fiecare dintre elementele sale in urmatorul mod:

int valori[5] = { 1, 3, 4, 12, 234 };

Citirea si afisarea unui tablou

#include <iostream.h> int n,i,tablou[10]; void main() { // citim dimensiunea tabloului // n trebuie sa fie mai mic decat numarul //maxim de elemente cout<<"Dimensiunea:"; cin>>n; cout<<endl; //citim tabloul for ( i=0; i<n; i++ ) { cout<<"tablou["<<i<<"]="; cin>>tablou[i]; cout<<endl; } //afisarea tabloului for (i=0; i<n; i++) { cout<<tablou[i]; cout<<endl; } }

Rezolvarea fara functii

#include <iostream> #include <fstream> using namespace std; fstream f; int n,k; int main() { //deschidem fisierul pentru citire f.open("date.txt", ios::in); if(f.is_open()) {//daca fisierule este deschis incepem citirea numerelor while (!f.eof())

3

Page 4: Probleme Rezolvate in C++

{ f>>n; //daca cifrele sunt in ordine descrescatoare afisam numarul, altfel citim un nou numar int ok=1; while((k/10) != 0) { //comparam numerele consecutive si punem conditia a n-a cifra sa fie mai mare sau egala cu a n-1 -a cifra //acesta este conditia opusa relatiei de ordine strict descrescatoare //daca conditia este valida ok devine 0, insemnand ca cifrele nu sunt in ordine strict descrescatoare if ( k%10 >= (k/10)%10 ) ok = 0; k = k/10; } if (ok) cout<<n<<" "; else f>>n; } f.close(); } }

ALGORITMI DE SORTARE:

Formatul general pentru multe functii recursive este:

if ( o conditie pentru care raspunsul este cunoscut ) // cazul de baza declararea solutiei else // cazul general apelul recursiv al functiei

Scrierea unei functii recursive pentru a gasi n factorial

int factorial(int n) { if ( n == 0 ) return 1; else return n * factorial(n-1); }

Exemplu problema recursiva ( sirul lui Fibonacci )

int Fibonacci( int n ) { if (n < 2 ) return n;

4

Page 5: Probleme Rezolvate in C++

else return fib(n-1) + fib(n-2); }

Sortarea rapida ( quicksort )

void quickSort(int vect[], int stanga, int dreapta) { int i = stanga, j = dreapta; int tmp; int pivot = vect[(stanga + dreapta) / 2]; while (i <= j) { while (vect[i] < pivot) i++; while (vect[j] > pivot) j--; if (i <= j) { tmp = vect[i]; vect[i] =vect[j]; vect[j] = tmp; i++; j--; } }; if (stanga < j) quickSort(vect, stanga, j); if (i < dreapta) quickSort(vect, i, dreapta); }

Sortarea prin insertie

void sortareInsertie(int vect[], int lungime) { int i, j, tmp; for (i = 1; i < lungime; i++) { j = i; while (j > 0 && vect[j - 1] > vect[j]) { tmp = vect[j]; vect[j] = vect[j - 1]; vect[j - 1] = tmp; j--; } } }

Sortarea prin selectie

void sortareSelectie(int vect[], int n) { int i, j, minIndex, tmp; for (i = 0; i < n - 1; i++) { minIndex = i;

5

Page 6: Probleme Rezolvate in C++

for (j = i + 1; j < n; j++) if (vect[j] < vect[minIndex]) minIndex = j; if (minIndex != i) { tmp = vect[i]; vect[i] = vect[minIndex]; vect[minIndex] = tmp; } } }

Sortarea prin metoda bulelor ( Bubble sort )

void bubbleSort(int vect[], int n) { bool interschimbat = true; int j = 0; int tmp; while (interschimbat) { interschimbat = false; j++; for (int i = 0; i < n - j; i++) { if (vect[i] > vect[i + 1]) { tmp = vect[i]; vect[i] = vect[i + 1]; vect[i + 1] = tmp; interschimbat = true; } } } }

Probleme rezolvate

1. Sa se determine toti divizorii unui numar intreg citit de la tastatura.

#include <iostream.h> void main(void) { int n,i; cout<<"Dati numarul "; ci n>>n; cout<<"Divizorii numarului "<<n<<" sunt: "; for(i=1;i<=n;i++) if(n%i==0) cout<<" "<<i; }

2. Sa se verifice daca un numar este numar prim sau nu. Spunem ca un numar n este numar prim daca are ca divizori numai valorile 1 si n.

#include <iostream.h> void main(void)

6

Page 7: Probleme Rezolvate in C++

{ int n,i,prim; cout<<"Dati numarul "; ci n>>n; prim=1; for(i=2;i<=n/2;i++) if(n%i==0) prim=0; if(prim==1) cout<<"Numarul "<<n<<" este numar PRIM"; else cout<<"Numarul "<<n<<" NU este numar PRIM"; }

3. Se citesc n numere intregi. Sa se determine minimul si maximul lor.

#include <iostream.h> void main(void) { int n,i,max,min,x; min=32367; max=-32368; cout<<"Dati numarul "; ci n>>n; for(i=1;i<=n;i++) { cout<<"dati numarul "<<i<<" "; cin>>x; if(max<x) max=x; if(min>x) min=x; } cout<<"Maximul este "<<max<<endl; cout<<"Minimul este "<<min; }

4. Sa se calculeze suma cifrelor unui numar intreg.

#include <iostream.h> void main(void) { int n,i,suma=0,r; cout<<"Dati numarul "; ci n>>n; while(n!=0) { r=n%10; suma+=r; n=n/10; } cout<<"Suma este "<<suma<<endl; }

7

Page 8: Probleme Rezolvate in C++

5. Sa se verifice daca un numar este palindrom sau nu. Spunem ca un numa este palindrom daca este egla cu rasturnatul sau (adica numarul format din cifrele de la dreapta la stanga ale numarului initial – exemplu : n = 23732).

#include <iostream.h> void main(void) { int n,r,m=0,x; cout<<"Dati numarul "; cin>>n; x=n; while(n!=0) { r=n%10; m+=r; n=n/10; } if(x==m) cout<<"Numarul "<<x<<" este palindrom"<<endl; else cout<<"Numarul "<<x<<" nu este palindrom"<<endl; }

6. Fie tabloul unidimensional x cu n elemente numere reale si numerele intregi a si b. Sa se calculeze media aritmetica a elementelor din tablou cuprinse intre valorile a si b.

#include<iostream.h> void main(void) { int a,b,i,n,suma=0; float x[50],media; cout<<"Dati numarul de elemente ale tabloului ";cin>>n; for(i=1;i<=n;i++) { cout<<"x[“<<i<<”]= "; cin>>x[i]; } cout<<"Dati numarul a = ";cin>>a; cout<<"Dati numarul b = ";cin>>b; for(i=1;i<=n;i++) if( (a<=x[i]) && (x[i]<=b) ) suma+=x[i]; media=suma/n; cout<<"Media aritmetica a elementelor din tablou, aflate intre “<<a<<” si “<<b<<” este “<<media; }

7. Se da un tablou unidimensional cu n componente numere intregi si un numar intreg A. Sa se numere cate elemente sunt mai mari decat A si sa se construiasca un vector cu aceste elemente.

#include<iostream.h> void main(void)

8

Page 9: Probleme Rezolvate in C++

{ int i,n,j,a; float x[50],y[50]; cout<<"Dati numarul de elemente ale tabloului ";cin>>n; for(i=1;i<=n;i++) { cout<<"x[“<<i<<”]= "; cin>>x[i]; } cout<<"Dati numarul a = ";cin>>a; j=0; for(i=1;i<=n;i++) if (a<=x[i]) { j++;y[j]=x[i]; } cout<<"Sunt “<<j<<” numere mai mari decat "<<a<<endl; cout<<"Elementele sunt: "<<endl; for(i=1;i<=j;i++) cout<<y[i]<<” ”; }

8. Sa se scrie un program in C pentru calcularea sumei patratelor primelor n numere naturale. n se citeste de la tastatura.

#include <iostream.h> void main() { int suma, n, numar; cout<<"n=";cin>>n; if (n >= 0) { suma = 0; numar = 1; while( numar <= n) { suma = suma + numar * numar; numar = numar + 1; } cout<<"suma = "<<suma; } else { cout<<"n nu poate fi negativ"; } }

9. Sa se scrie un program in C++ pentru calcularea combinarilor de n luate cate k unde n si k sunt introduse de la tastatura.

#include <iostream.h> void main() { int a,b,c,n,k,Cnk,i; cout<<"Introduceti n:";cin>>n;

9

Page 10: Probleme Rezolvate in C++

cout<<"Introduceti k:";cin>>k; if (n < k) { cout<<"Calculul nu poate fi efectuat"; } else { a = 1; for (i=2; i<=n; i++) { a = a * i; } b = 1; for (i=2; i<=k; i++) { b = b * i; } c = 1; i = 2; while(i<=(n-k)) { c = c * i; i = i + 1; } Cnk = a / (b * c); cout<<"Combinari de"<<n<<"luate cate"<<k<<"="<<Cnk; } }

10. Se introduce o matrice patratica de ordin n; sa se verifice daca e triunghiulara (toate elementele de sub diagonala principala sunt 0) si daca da, sa se calculeze determinantul (daca matricea e triunghiulara atunci determinantul este egal cu produsul elementelor de pe diagonala principala).

#include<iostream.h> void main () { int A[50][50],n,i,j,diag=1,p=1; while(cout<<”n=”, cin>>n, n<=0| |n>50); for(i=0;i<n;i++) for(j=0;j<n;j++) { cout<<”A[“<<i<<”,”<<j<<”]=”; cin>>A[i][j]; } cout<<”Se da matricea: ”<<endl; for (i=0;i<n;i++) { for (j=0;j<n;j++) cout<<A[i][j]<<” “; cout<<endl; } for (i=0;i<n&&diag;i++) for (j=0;j<i&&diag;j++) if (A[i][j]) diag=0;

10

Page 11: Probleme Rezolvate in C++

if (diag) { for (i=0;i<n;i++) p*=A[i][i]; cout<<”Matricea este triunghiulara. \Determinant = ”< <p<<endl; } else cout <<”Matricea nu este triunghiulara.”<<endl; }

11. Doi vectori x si y au n, respectiv m elemente reale disticte (m,n <=10 ). Sa se creeze noul vector z continand elementele celor doi vectori. Elementele comune din cei doi vectori apar in z o singura data (reuniunea elementelor multimilor reprezentate de cei doi vectori ).

#include <iostream.h> void citeste_vector ( float *v, int *n) { int i; cout<<”Numarul de elemente:”; cin>>n; for(i=0;i<*n;i++) { cout<<”v[”<<i<<”]=”; cin>>&v[i]; } } void reuniune(float *x, int n, float *y, int m, float *z, int *k) { int i,j,elemente; int gasit; elemente = 0; //adaug elementele vectorului x for(i=0;i<n;i++) z[elemente++] = x[i]; //adaug elementele vectorului y for (i=0;i<m;i++) { gasit = 0; for (j=0;j<n;j++) //verific daca y[i] este in vectorul x if (x[j] == y[i]) { gasit = 1; break;} if (!gasit) // in caz negativ este adaugat in vectorul z z[elemente++] = y[i]; } *k = elemente; } void afisare (float *z, int k) { int i=0; cout<<”Z= { ”; for (i=0; i<k; i++) cout<<z[i];

11

Page 12: Probleme Rezolvate in C++

cout<<endl; } int main(void) { float x[10] , y[10], z[20]; int n,m,k; citeste_vector(x,&n);//citeste vectorul x citeste_vector(y,&m);//citeste vectorul y reuniune(x,n,y,m,z,&k); afisare(z,k); return 0; }

12. Sa se ordoneze crescator un vector ce contine n numere intregi (n<=100) utilizand metoda contorizarii inversarilor (denumita si metoda bulelor). Atat n cat si numerele vor fi citite de la tastatura.

#include <iostream.h> #define MAX_N 100 void swap ( int i , int j , int* x) { int temp = x[i]; x[i] = x[j]; x[j] = temp; } //sortarea void bule(int n, int* v) { int sortat, i ; do { sortat = 1; for (i=0; i< n-1; i++ ) if (v[i] > v[i+1]) { swap (i, i+1, v); sortat = 0; } } while (!sortat); int main(void) { int n,i; int v[MAX_N]; cout<<”n=”;cin>>n; for(i=0; i<n; i++) { cout<<”v[“<<i<<”]=”;cin>>v[i];} bule(n,v); cout<<”Vectorul sortat : {“; for(i=0;i<n;i++) cout<<v[i]; cout<<"}"<<endl; return 0; }

12

Page 13: Probleme Rezolvate in C++

13. Sa se scrie un program care calculeaza produsul a doua matrici (tablouri bidimensionale)

#include <iostream.h> void main(void) { int n,m,p,i,j,k,a[10][10],b[10][10],c[10][10]; cout<<"Dati dimensiunile matricei "<<endl; cout<<"Dati numarul de linii n = ";cin>>n; cout<<"Dati numarul de coloane m = ";cin>>m; for(i=1;i<=n;i++) for(j=1;j<=m;j++) { cout<<"a["<<i<<","<<j<<"]= "; cin>>a[i][j]; } cout<<"Elementele matricei A sunt: "<<endl; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) cout<<a[i][j]<<" "; cout<<endl; } cout<<"Dati numarul de linii m = ";cin>>m; cout<<"Dati numarul de coloane p = ";cin>>p; for(i=1;i<=m;i++) for(j=1;j<=p;j++) { cout<<"b["<<i<<","<<j<<"]= "; cin>>b[i][j]; } cout<<"Elementele matricei B sunt: "<<endl; for(i=1;i<=m;i++) { for(j=1;j<=p;j++) cout<<b[i][j]<<" "; cout<<endl; } for(i=1;i<=n;i++) for(j=1;j<=p;j++) for(k=1;k<=m;k++) c[i][j]+=a[i][k]*b[k][j]; cout<<"Elementele matricei produs "<<endl; for(i=1;i<=n;i++) { for(j=1;j<=p;j++) cout<<c[i][j]<<" "; cout<<endl; } }

13

Page 14: Probleme Rezolvate in C++

14. Sa se scrie un program care calculeaza minimul si maximul dintr-o matrice cu n linii si m coloane.

#include <iostream.h> void main(void) { int n,m,min,i,j,max,a[30][30]; cout<<"Dati dimensiunile matricei "<<endl; cout<<"Dati numarul de linii n = ";cin>>n; cout<<"Dati numarul de coloane m = ";cin>>m; for(i=1;i<=n;i++) for(j=1;j<=m;j++) { cout<<"a["<<i<<","<<j<<"]= "; cin>>a[i][j]; } cout<<"Elementele matricei A sunt: "<<endl; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) cout<<a[i][j]<<" "; cout<<endl; } min=a[1][1];max=a[1][1]; for(j=1;i<=m;i++) { if(a[1][j]<min) min=a[1][j]; if(a[1][j]>max) max=a[1][j]; } for(i=2;i<=n;i++) for(j=1;j<=m;j++) { if(a[i][j]<min) min=a[i][j]; if(a[i][j]>max) max=a[i][j]; } cout<<"Elementul minim din matrice este "<<min<<endl; cout<<"Elementul maxim din matrice este "<<max<<endl; }

15. Sa se scrie un program care calculeaza transpusa unei matrici.

#include <iostream.h> void main(void) { int n,m,i,j,a[30][30],b[30][30]; cout<<"Dati dimensiunile matricei "<<endl; cout<<"Dati numarul de linii n = ";cin>>n; cout<<"Dati numarul de coloane m = ";cin>>m; for(i=1;i<=n;i++) for(j=1;j<=m;j++)

14

Page 15: Probleme Rezolvate in C++

{ cout<<"a["<<i<<","<<j<<"]= "; cin>>a[i][j]; } cout<<"Elementele matricei A sunt: "<<endl; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) cout<<a[i][j]<<" "; cout<<endl; } for(i=1;i<=n;i++) for(j=1;i<=m;i++) b[j][i]=a[i][j]; cout<<"Matricea transpusa este "<<endl; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) cout<<b[i][j]<<" "; cout<<endl; } }

16. Se considera o matrice. Sa se calculeze:a) suma elementelor de pe diagonala principalab) produsul elmentelor de pe diagonala secundarac) minimele din elementele aflate deasupra, respectiv sub diagonala principalad) maximele din elemenetle aflate deasupra, respectiv sub diagonala secundara

#include <iostream.h> void main(void) { int n,m,i,j,a[30][30],min1,min2,max1,max2,suma,produs; cout<<"Dati dimensiunile matricei "<<endl; cout<<"Dati numarul de linii si de coloane n = ";cin>>n; for(i=1;i<=n;i++) for(j=1;j<=n;j++) { cout<<"a["<<i<<","<<j<<"]= "; cin>>a[i][j]; } cout<<"Elementele matricei A sunt: "<<endl; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) cout<<a[i][j]<<" "; cout<<endl; } // suma elementelor de pe diagonala pricipala suma=0;

15

Page 16: Probleme Rezolvate in C++

for(i=1;i<=n;i++) for(j=1;i<=n;i++) if(i==j) suma+=a[i][j]; cout<<"Suma elementelor de pe diagonala pricipala este "<<suma<<endl; // produsul elementelor de pe diagonala secundara produs=1; for(i=1;i<=n;i++) for(j=1;i<=n;i++) if(i+j==n+1) produs*=a[i][j]; cout<<"Produsul elementelor de pe diagonala secundara este "< <produs<<endl; // minimul elementelor de deasupra diagonalei principale min1=32768; for(i=1;i<=n;i++) for(j=1;j<=m;j++) if(i<j) if(min1>a[i][j]) min1=a[i][j]; cout<<"Minimul de deasupra diag. pricipale este "<<min1; // minimul elementelor de sub diagonala principale min2=32768; for(i=1;i<=n;i++) for(j=1;j<=m;j++) if(i>j) if(min2>a[i][j]) min2=a[i][j]; cout<<"Minimul de sub diag. pricipala este "<<min2; // maximul elementelor de deasupra diagonalei principale max1=-32768; for(i=1;i<=n;i++) for(j=1;j<=m;j++) if(max1<a[i][j]) max1=a[i][j]; cout<<"Maximul de deasupra diag. pricipale este "<<max1; // maximul elementelor de sub diagonala principale max2=-32768; for(i=1;i<=n;i++) for(j=1;j<=m;j++) if(max2<a[i][j]) max2=a[i][j]; cout<<"Minimul de sub diag. principala este "<<max2; }

17. Se considera o matrice a cu n x m elemente numere intregi. Sa se determine linia (liniile) din matrice care contine cele mai multe elemente nenule.

#include<iostream.h> void main(void) { int a[30][30],n,m,i,j,max,nr; cout<<"Dati numarul de linii n = ";cin>>n; cout<<"Dati numarul de coloane m = ";cin>>m; for(i=1;i<=n;i++) for(j=1;j<=m;j++)

16

Page 17: Probleme Rezolvate in C++

{ cout<<"a["<<i<<","<<j<<"]= "; cin>>a[i][j]; } cout<<endl<<"Matricea A are elementele:"<<endl; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) cout<<a[i][j]<<" "; cout<<endl; } max=0; for(i=1;i<=n;i++) { nr=0; for(j=1;j<=m;j++) if(a[i][j]!=0) nr++; if(max<nr) max=nr; } for(i=1;i<=n;i++) { nr=0; for(j=1;j<=m;j++) if(a[i][j]!=0) nr++; if(max==nr) cout<<"Linia "<<i<<" are "<<max<<" elemente nenule"<<endl; } }

18. Sa se scrie un program care, primind un sir x de numere întregi cu n elemente, neordonate, si o valoare întreaga v, decide daca v se afla sau nu în sir.In caz afirmativ, tipareste toate pozitiile pe care se afla valoarea v. In caz contrar, tipareste un mesaj corespunzator.

#include<iostream.h> #include<conio.h> int x[100],n,i,v; void cautare_liniara(int *x, int n, int v) { int i,gasit=0; for(i=1;i<=n;i++) if(x[i]==v) gasit=1; if(gasit==1) { cout<<"Valoarea "<<v<<" se gaseste in vector pe urmatoarele pozitii"<<endl; for(i=1;i<=n;i++) if(x[i]==v) cout<<"Valoarea "<<v<<" se gaseste pe pozitia "<<i<<" in vectorul x"; } else cout<<"Valoarea "<<v<<" nu se gaseste in vector"<<endl; return;

17

Page 18: Probleme Rezolvate in C++

} void main(void) { clrscr(); cout<<"Dati numarul de elemente n = "; cin>>n; for(i=1;i<=n;i++) { cout<<"x["<<i<<"]= "; cin>>x[i]; } cout<<"Dati valoarea v = "; cin>>v; cautare_liniara(x,n,v); getch(); }

19. Sa se construiasca o matrice cu n linii si m coloane ce se completeaza cu termenii sirului lui Fibonacci.Completarea se va face pe linii. Nu se vor folosi structuri de date auxiliare.ExempluPentru n=3 si m=31 1 23 5 813 21 34

#include <iostream> using namespace std; int matrice[10][10], m, n , i, j; void fibonacci(int x, int y) { int i,j,a=0,b=0,c=1; for(i=1;i<=x;i++) for(j=1;j<=y;j++) { matrice[i][j] = c; a=b; b=c; c=a+b; } } int main() { //se citeste dimensiunea cout<<"n=";cin>>n; cout<<endl; cout<<"m=";cin>>m; cout<<endl; //apelam procedura care completeaza matricea fibonacci(n,m); //afisam matricea for(i=1;i<=n;i++)

18

Page 19: Probleme Rezolvate in C++

{ for(j=1;j<=m;j++){ cout<<matrice[i][j]<<" "; }cout<<endl; } return 0; }

20. Scrieti un program care citeste de la tastatura doua numere naturale n,m si scrie in fisierul text “DATE.TXT” toate numerele prime din intervalul deschis(n,m).Numerele se scriu in ordine crescatoare, cate 10 numere pe fiecare linie a fisierului, numerele dintr-o linie fiind despartite intre ele prin cate un spatiu.ExempluPentru n=87 si m=241,fisierul DATE.TXT va contine:89 97 101 103 107 109 113 127 131 137139 149 151 157 163 167 173 179 181 191193 197 199 211 223 227 229 233 239

#include <iostream> #include <fstream> using namespace std; int n, m ,i; fstream f; int prim(int x) { int i, ok=1; for(i=2;i<=x/2;i++) { if ( x%i == 0) ok = 0; } return ok; } int main() { //se citeste intervalul cout<<"n=";cin>>n;cout<<endl; cout<<"m=";cin>>m;cout<<endl; //se deschide fisierul f.open("data.txt",ios::out); //se introduc numerele prime in fisier int contor = 0; for(i=n;i<=m;i++) { if(prim(i)) { f<<i<<" "; contor = contor + 1; }

19

Page 20: Probleme Rezolvate in C++

if (contor % 10 == 0) f<<'\n'; } return 0; }

21. :Fisierul text “numere.in” contine,pe mai multe linii,cel mult 30000de nr. naturale nenule mai mici sau egaledecat 500,despartite prin cate un spatiu. Sa se afiseze pe ecran,in ordine crescatoare,toate numerele care au aparutexact o singura data din fisierul de intrare,despartite prin cate un spatiu.

#include <iostream> #include <fstream> using namespace std; int a[500], n, i,j,c, aux[500],p, dim; fstream f; int main() { //initializam toate elementele vectorului cu valoarea 0 for( i = 1; i <= 500; i++ ) a[i] = 0; //deschidem fisierul si incepem sa citim numerele f.open("numere.in", ios::in); if(f.is_open()) { while ( !f.eof()) { f>>n; //pe pozitia n din vector incrementam cu 1 a[n]++; } f.close(); } //am obtinut un vector care pe pozitia i contine numarul de aparitii al lui i //introducem in vectorul aux toate elementele care au aparut exact o singura data dim = 0; for ( i=1; i<= 500; i++) { if (a[i] == 1) aux[dim++] = i; } //acum vectorul aux contine doar elementele care au aparut exact o singura data // pasul urmator este sortarea crescatoare a elementelor vectorului aux for ( i=1;i<=p-1;i++) for (j=i+1;j<=p;j++) {

20

Page 21: Probleme Rezolvate in C++

if (aux[i] > aux[j]) { c = aux[i]; aux[i] = aux[j]; aux[j] = c; } } // acum vectorul este sortat , il afisam for (i=1; i<=p; i++) cout<<aux[i]<<" "; }

22. Fisierul DATE.TXT contine cel mult 10000 de numere naturale de exact 6 cifre fiecare, separate prin cate un spatiu. Scrieti un program C++ care citeste toate numerele din fisier, determina si afiseaza pe ecran cate dintre aceste numere au toate cifrele in ordine strict descrescatoare.

#include <iostream> #include <fstream> using namespace std; fstream f; int n; //functia care verifica ordinea cifrelor int cifre_desc(int k) { //daca ok=1 inseamna ca cifrele sunt in ordine strict descrescatoare int ok=1; while((k/10) != 0) { //comparam numerele consecutive si punem conditia a n-a cifra sa fie mai mare sau egala cu a n-1 -a cifra //acesta este conditia opusa relatiei de ordine strict descrescatoare //daca conditia este valida ok devine 0, insemnand ca cifrele nu sunt in ordine strict descrescatoare if ( k%10 >= (k/10)%10 ) ok = 0; k = k/10; } return ok; } int main() { //deschidem fisierul pentru citire f.open("date.txt", ios::in); if(f.is_open()) {//daca fisierule este deschis incepem citirea numerelor while (!f.eof()) { f>>n; //daca cifrele sunt in ordine descrescatoare afisam numarul, altfel citim un nou numar if (cifre_desc(n)) cout<<n<<" ";

21

Page 22: Probleme Rezolvate in C++

else f>>n; } f.close(); } }

23. Sa se verifice ca o matrice patrata cu n linii si coloane(n se citeste dintr-un fisier text)este matricea0(matricea are toate elementele egale cu 0).

#include <iostream> #include <fstream> using namespace std; int n,matrice[100][100],i,j,ok; fstream f; int main() { //deschidem fisierul si citim n f.open("fisier.txt", ios::in); if(f.is_open()) { f<<n; f.close(); } //parcurgem matricea for (i=1; i<=n; i++) {for ( j=1; j<=n; j++) //citim matricea { cout<<"matrice["<<i<<"]["<<j<<"]="; cin>>matrice[i][j]; cout<<endl; } } //verificam daca toate elementele matricei sunt egale cu 0 //initializam variabila ok cu 1 semnificand ca toate elementele matricei sunt egale cu 0 ok = 1; //parcurgem matricea for (i=1; i<=n; i++) { for ( j=1; j<=n; j++) {//daca exista elemente din matrice diferite de 0 variabila ok ia valoarea 0 if ( matrice[i][j] != 0 ) ok = 0; } } //daca ok este adevarat atunci toate elementele matricei sunt egale cu 0 if (ok) cout<<"Toate elementele matricei sunt egale cu 0."; else //altfel exista elemente care sunt diferite de 0 cout<<"Matricea are elemente care sunt diferite de 0."; }

22

Page 23: Probleme Rezolvate in C++

24. In fisierul numere.txt se afla mai multe nr. naturale din [0,10000] scrise pe un singur rand. Sa se creeze “pare.txt” care sa contina cate una pe linie doar acele valori din fisierul “numere” care au suma cifrelor un nr. par.

#include <iostream> #include <fstream> using namespace std; int n; fstream f,g; int suma_par(int k) { //initializam suma cu 0 int suma=0; while ( k != 0) {//descompunem numarul si facem suma cifrelor suma = suma + k%10; k = k / 10; } if (suma % 2 == 0) //daca suma este para returnam adevarat return 1; else //altfel fals return 0; } int main() { //deschidem fisierul numere.txt pentru citire //deschidem fisierul pare.txt pentru scriere f.open("numere.txt", ios::in); g.open("pare.txt", ios::out); //verificam daca fisierul numere.txt este deschis if (f.is_open()) { //citim numerele din fisierul numere.txt while (!f.eof()) { //citim pe rand fiecare element din fisier f>>n; //verificam daca fisierul pare.txt este deschis if(g.is_open()) { //daca elementul citit verifica conditia ca suma cifrelor este para il scriem in fisierul pare.txt pe o linie if (suma_par(n)) g<<n<<endl; } } //inchidem fisierele f.close();

23

Page 24: Probleme Rezolvate in C++

g.close() ; } }

25. Se citeste de la tastatura un sir de n elemente numere intregi.Scrieti un program care afiseaza elemente cu proprietatea ca suma cifrelor lor este un numar par.

#include <iostream> using namespace std; int n,i,elem; int numar_par(int k) { int cifra,copie, suma=0; copie = k; while ( k != 0) { cifra = k % 10; suma = suma + cifra; k = k / 10; } if (suma % 2 == 0) return copie; else return 0; } int main() { cout<<"Numarul de elemente:"; cin>>n; cout<<endl; for ( i = 1; i<=n; i++ ) { cout<<"Elementul:";cin>>elem; cout<<endl; cout<<numar_par(elem); } }

26. Se considera o matrice. Sa se calculeze:a) suma elementelor de pe diagonala principalab) produsul elmentelor de pe diagonala secundarac) minimele din elementele aflate deasupra, respectiv sub diagonala principalad) maximele din elemenetle aflate deasupra, respectiv sub diagonala secundara

#include <iostream.h> void main(void) { int n,m,i,j,a[30][30],min1,min2,max1,max2,suma,produs; cout<<"Dati dimensiunile matricei "<<endl;

24

Page 25: Probleme Rezolvate in C++

cout<<"Dati numarul de linii si de coloane n = ";cin>>n; for(i=1;i<=n;i++) for(j=1;j<=n;j++) { cout<<"a["<<i<<","<<j<<"]= "; cin>>a[i][j]; } cout<<"Elementele matricei A sunt: "<<endl; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) cout<<a[i][j]<<" "; cout<<endl; } // suma elementelor de pe diagonala pricipala suma=0; for(i=1;i<=n;i++) for(j=1;i<=n;i++) if(i==j) suma+=a[i][j]; cout<<"Suma elementelor de pe diagonala pricipala este "<<suma<<endl; // produsul elementelor de pe diagonala secundara produs=1; for(i=1;i<=n;i++) for(j=1;i<=n;i++) if(i+j==n+1) produs*=a[i][j]; cout<<"Produsul elementelor de pe diagonala secundara este "< <produs<<endl; // minimul elementelor de deasupra diagonalei principale min1=32768; for(i=1;i<=n;i++) for(j=1;j<=m;j++) if(i<j) if(min1>a[i][j]) min1=a[i][j]; cout<<"Minimul de deasupra diag. pricipale este "<<min1; // minimul elementelor de sub diagonala principale min2=32768; for(i=1;i<=n;i++) for(j=1;j<=m;j++) if(i>j) if(min2>a[i][j]) min2=a[i][j]; cout<<"Minimul de sub diag. pricipala este "<<min2; // maximul elementelor de deasupra diagonalei principale max1=-32768; for(i=1;i<=n;i++) for(j=1;j<=m;j++) if(max1<a[i][j]) max1=a[i][j]; cout<<"Maximul de deasupra diag. pricipale este "<<max1; // maximul elementelor de sub diagonala principale max2=-32768; for(i=1;i<=n;i++)

25

Page 26: Probleme Rezolvate in C++

for(j=1;j<=m;j++) if(max2<a[i][j]) max2=a[i][j]; cout<<"Minimul de sub diag. principala este "<<max2; }

27. Fie tabloul unidimensional x cu n elemente numere reale si numerele intregi a si b. Sa se calculeze media aritmetica a elementelor din tablou cuprinse intre valorile a si b.

#include<iostream.h> void main(void) { int a,b,i,n,suma=0; float x[50],media; cout<<"Dati numarul de elemente ale tabloului ";cin>>n; for(i=1;i<=n;i++) { cout<<"x[“<<i<<”]= "; cin>>x[i]; } cout<<"Dati numarul a = ";cin>>a; cout<<"Dati numarul b = ";cin>>b; for(i=1;i<=n;i++) if( (a<=x[i]) && (x[i]<=b) ) suma+=x[i]; media=suma/n; cout<<"Media aritmetica a elementelor din tablou, aflate intre “<<a<<” si “<<b<<” este “<<media; }

28. Sa se scrie un program in C pentru calcularea sumei patratelor primelor n numere naturale. n se citeste de la tastatura.

#include <iostream.h> void main() { int suma, n, numar; cout<<"n=";cin>>n; if (n >= 0) { suma = 0; numar = 1; while( numar <= n) { suma = suma + numar * numar; numar = numar + 1; } cout<<"suma = "<<suma; } else { cout<<"n nu poate fi negativ"; } }

26

Page 27: Probleme Rezolvate in C++

29. Se considera o matrice a cu n x m elemente numere intregi. Sa se determine linia (liniile) din matrice care contine cele mai multe elemente nenule.

#include<iostream.h> void main(void) { int a[30][30],n,m,i,j,max,nr; cout<<"Dati numarul de linii n = ";cin>>n; cout<<"Dati numarul de coloane m = ";cin>>m; for(i=1;i<=n;i++) for(j=1;j<=m;j++) { cout<<"a["<<i<<","<<j<<"]= "; cin>>a[i][j]; } cout<<endl<<"Matricea A are elementele:"<<endl; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) cout<<a[i][j]<<" "; cout<<endl; } max=0; for(i=1;i<=n;i++) { nr=0; for(j=1;j<=m;j++) if(a[i][j]!=0) nr++; if(max<nr) max=nr; } for(i=1;i<=n;i++) { nr=0; for(j=1;j<=m;j++) if(a[i][j]!=0) nr++; if(max==nr) cout<<"Linia "<<i<<" are "<<max<<" elemente nenule"<<endl; } }

30. Se citeste de la tastatura un sir de n elemente numere intregi.Scrieti un program care afiseaza elemente cu proprietatea ca suma cifrelor lor este un numar par.

#include <iostream> using namespace std; int n,i,elem; int numar_par(int k) { int cifra,copie, suma=0; copie = k;

27

Page 28: Probleme Rezolvate in C++

while ( k != 0) { cifra = k % 10; suma = suma + cifra; k = k / 10; } if (suma % 2 == 0) return copie; else return 0; } int main() { cout<<"Numarul de elemente:"; cin>>n; cout<<endl; for ( i = 1; i<=n; i++ ) { cout<<"Elementul:";cin>>elem; cout<<endl; cout<<numar_par(elem); } }

31. Se citeste de la tastatura un numar natural n, iar apoi se citesc n numere. Sa se verifice daca exista cel putin un numar care sa aiba exact 3 cifre de 0.

#include<iostream.h> #include<conio.h> nenule(int numar){ int nr_nenule=0; while(numar > 0){ if((numar % 10)>0) nr_nenule = nr_nenule + 1; numar = numar / 10; } return nr_nenule;} main(){ int n, numar, i=1; bool exista = false; cout<<"Introduceti n: ";cin>>n; while(i<=n){ cout<<"Citeste numar: ";cin>>numar; if(nenule(numar)==3) exista = true; i=i+1; } if(exista == true)

28

Page 29: Probleme Rezolvate in C++

cout<<"Exista un numar cu exact 3 cifre nenule!"; else cout<<"Nu exista un numar cu exact 3 cifre nenule!"; getch();}

32. Se citeste de la tastatura un numar natural. Se cere sa se calculeze suma cifrelor acestuia pana cand se va ajunge la o singura cifra.

#include<iostream.h> #include<conio.h> sumacifre(long numar){ int suma=0; while(numar > 0){ suma = suma + numar % 10; numar = numar / 10;} return suma; } main(){ long numar; cout<<"Introduceti un numar natural: ";cin>>numar; while (numar > 9){ numar = sumacifre(numar);} cout<<"Cifra este:"<<numar; getch(); }

33. Se citeste de la tastatura un numar natural. Descompunand numarul, se cere sa se afle cifra minima si cifra maxima prezente in numar.

#include<iostream.h> #include<conio.h> main(){ long numar, cifra; int minim=9, maxim=0, cout<<"Introduceti un numar: "; cin>>numar; do{ if(numar == 0){ goto end; } cifra = numar % 10; if (cifra > maxim){ maxim = cifra; } if(cifra < minim){ minim = cifra; } numar = numar / 10; } while (1); end:

29

Page 30: Probleme Rezolvate in C++

cout<<"Cifra maxima este "<<maxim; cout<<endl; cout<<"Cifra minima este "<<minim; getch(); }

34. Se citeste un numar natural n, si apoi o succesiune de n numere naturale. Sa se calculeze si sa se afiseze cel mai mare divizor comun al acestora.

#include<iostream.h> #include<conio.h> cmmdc(int n1, int n2){ int i = n1, cmmdc; if(n1 > n2)i=n2; while(i>=1){ if (n1 % i == 0 && n2 % i == 0){ cmmdc = i; goto end;} i=i-1;} end: return cmmdc; } main(){ int n, v_cmmdc, numar, i=2; cout<<"Introduceti n: ";cin>>n; cout<<"Introduceti primul numar ";cin>>v_cmmdc; while(i<=n){ i=i+1; cout<<"Introduceti numarul "<<(i-1)<<" ";cin>>numar; v_cmmdc = cmmdc(v_cmmdc, numar); } cout<<"Cel mai mare divizor comun al numerelor este "<<v_cmmdc; getch(); }

35. Se citeste de la tastatura un numar natural n. Se cere sa se verifice daca numarul este multiplu de 7.

#include<iostream.h> #include<conio.h> main(){ int n; cout<<"Introduceti numarul: ";cin>>n; if(n%7 == 0) cout<<"Numarul "<<n<<" este multiplu de 7 ."; else cout<<"Numarul "<<n<<" nu este multiplu de 7 ."; getch(); }

30

Page 31: Probleme Rezolvate in C++

36. Se citesc de la tastatura 3 numere naturale reprezentand lungimea celor 3 laturi ale unui triunghi. Se cere sa se verifice daca triunghiul este dreptunghic.

#include<iostream.h> #include<conio.h> main(){ int a,b,c; cout<<"Prima latura: ";cin>>a; cout<<"A doua latura: ";cin>>b; cout<<"A treia latura: ";cin>>c; if((a*a + b*b == c*c) || (a*a + c*c == b * b) || (b*b + c*c == a*a)) cout<<"Triunghiul este dreptunghic."; else cout<<"Triunghiul nu este dreptunghic."; getch(); }

37. Se citesc de la tastatura 2 numere naturale, a si b si un numar natural k.Se cere sa se verifice daca fractia a/b poate fi simplificata prin k.

#include<iostream.h> #include<conio.h> main(){ int a,b,k; cout<<"Primul numar: ";cin>>a; cout<<"Al doilea numar: ";cin>>b; cout<<"Introduceti k : ";cin>>k; if(a%k == 0 && b%k==0){ cout<<"Fractia se poate simplifica prin numarul "<<k;} else{ cout<<"Fractia nu se poate simplifica prin numarul "<<k;} getch(); }

38. Se citeste de la tastatura un numar n, iar apoi se citesc n numere de la tastatura. Se cere sa se afiseze valoarea minima si cea maxima.

#include<iostream.h> #include<conio.h> max(int numar, int max){ if(numar>max)max=numar; return max; } min(int numar, int min){ if(numar < min)min=numar; return min; } main(){ unsigned int n, numar, maxim=0, minim=30000,i=1;

31

Page 32: Probleme Rezolvate in C++

cout<<"Introduceti numarul de valori ce vor fi citite : ";cin>>n; while(i<=n){ cout<<"Introduceti un numar: ";cin>>numar; maxim = max(numar, maxim); if(i==1) minim=maxim; minim = min(numar, minim); i++;} cout<<"Numarul maxim introdus este "<<maxim<<endl; cout<<"Numarul minim introdus este "<<minim<<endl; getch(); }

39. Se citeste de la tastatura un numar. Se cere sa se afiseze rasturnatul acestuia.

#include<iostream.h> #include<conio.h> main(){ unsigned long numar, rasturnat=0; int cifra; cout<<"introduceti un numar: ";cin>>numar; while(numar>0){ cifra = numar % 10; rasturnat = rasturnat * 10 + cifra; numar = numar / 10;} cout<<rasturnat; getch(); }

40. Se citeste de la tastatura un numar. Sa se verifice daca este sau nu palindrom (numarul este egal cu rasturnatul lui).

#include<iostream.h> #include<conio.h> main() { long numar, numar_invers, numar_salvat; cout<<"Dati numarul: ";cin>>numar; numar_salvat = numar; while(numar>0){ numar_invers = numar_invers * 10 + numar % 10; numar = numar / 10;} if(numar_salvat==numar_invers){ cout<<"Numarul este palidrom!"; } else cout<<"Numarul nu este palidrom!"; getch(); }

32

Page 33: Probleme Rezolvate in C++

41. Se citeste de la tastatura o succesiune de valori pana la intalnirea valorii -1. Se cere sa se afiseze de cate ori a aparut cifra 0 in scrierea numerelor date.

#include<iostream.h> #include<conio.h> main(){ int numar, iesire=0; while(1){ cout<<"Introduceti un numar: ";cin>>numar; if(numar==-1) goto end; if(numar>=0){ while(numar > 0) { if(numar%10==0) iesire=iesire+1; numar=numar/10; } }} end: cout<<"Cifra 0 a aparut de "<<iesire<<"ori"; getch(); }

42. Sa se afiseze primele 10 perechi de numere prietene. 2 numere sunt prietene <=> primul e egal cu suma divizorilor celui de-al doilea, si al doilea este egal cu suma divizorilor primului.

#include<iostream.h> #include<conio.h> suma_div(int numar){ int s_div=0,i=0; while(i<=numar/2+1){ i=i+1; if(numar%i==0)s_div=s_div + i; } return s_div; } main(){ int numar1, numar2, i=1, vmax=0; while(vmax<10){ numar2 = i; numar1 = suma_div(numar2); if(numar2 == suma_div(numar1)){ cout<<"("<<numar1<<","<<numar2<<")"<<endl; vmax=vmax+1;} i=i+1; } getch(); }

33

Page 34: Probleme Rezolvate in C++

43. Se citeste un numar natural n de la tastatura, si apoi n numere intregi. Sa se afiseze numarul de numere prime citite si sa se verifice daca acesta e numar prim.

#include<iostream.h> #include<conio.h> eprim(long nr){ long v_ciclare; bool raspuns = true; for(v_ciclare=2; v_ciclare<=nr/2+1; v_ciclare++) { if(nr%v_ciclare == 0)raspuns = false;} return raspuns; } main() { int n, nr, i, total = 0; cout<<"Introduceti numarul de numere: ";cin>>n; for(i=1;i<=n;i++) { cout<<"Introduceti un numar: ";cin>>nr; if(eprim(nr)==true)total++; } if(eprim(total)==true){ cout<<"Numarul de numere prime este "<<total; cout<<endl; cout<<"Este un numar prim!"; } else { cout<<"Numarul de numere prime este "<<total; cout<<endl; cout<<" Nu este un numar prim!"; } getch(); }

44. Se citeste un numar de la tastatura. Se cere sa se afiseze toate patratele perfecte mai mici sau egale cu el.#include<iostream.h> #include<conio.h> #include <math.h> main(){ unsigned long numar, patrat, i=1; cout<<"introduceti un numar natural: ";cin>>numar; numar = sqrt(numar); while(i<=numar){ patrat=i*i; i=i+1; cout< <patrat<<endl;} getch(); }

34

Page 35: Probleme Rezolvate in C++

45. Se da un tablou bidimensional a de dimensiune m * n (m,n<=50) cu componente intregi. Sa se determine numarul de linii cu componentele strict crescatoare din a.ExempluPentru m=4 si n=51 2 3 3 43 5 7 9 111 4 2 5 82 3 7 8 9Se va afisa : 2Rezolvare:

#include <iostream.h> #include <conio.h> main() { int a[50][50],i,j,n,m,contor,control; clrscr(); //se citeste dimensiunea tabloului cout<<”n=”;cin>>n;cout<<endl; cout<<”m=”;cin>>m;cout<<endl; //se citeste tabloul for(i=1;i<=m;i++) for(j=1;j<=n;j++) {cout<<”a[ ”<<i<<”][”<<j<<”]=”;cin>>a[i][j]; cout<<endl;} //initializam variabila contor cu 0 contor = 0; //parcurgem fiecare linie si verificam daca este strict crescatoare for(i=1;i<=m;i++) { //initializam o variabila de control cu 1 // daca la final variabila este 1 //linia este strict crescatoare control = 1; for(j=1;j<=n-1;j++) { if (a[i][j] > a[i][j+1]) control = 0; } //daca variabila control este 1 inseamna ca linia //este strict crescatoare si marim cu 1 variabila contor if (control == 1) contor++; } //afisam variabila contor cout<<contor; getch(); }

35

Page 36: Probleme Rezolvate in C++

46. Se considera un tablou bidimensional a cu m linii si n coloane (1<=m,n<=50) cu componente intregi. Sa se determine maximul fiecarei coloane si maximul lui a.ExempluPentru m=4 si n=53 5 2 9 01 2 3 4 54 3 3 3 32 0 1 6 2Se va afisa:Maxim coloana 1 = 4Maxim coloana 2 = 5Maxim coloana 3 = 3Maxim coloana 4 = 9Maximul tabloului = 9Rezolvare

#include <iostream.h> #include <conio.h> int a[50][50],m,n,i,j,max_tablou,max_coloana; main() { clrscr(); //citim dimensiunea tabloului cout<<”m=”;cin>>m;cout<<endl; cout<<”n=”;cin>>n;cout<<endl; //initalizam variabila max_tablou max_tablou = 0; //citim elementele tabloului si cautam maximul for(i=1;i<=m;i++) for(j=1;j<=n;j++) { {cout<<”a[ ”<<i<<”][”<<j<<”]=”; cin>>a[i][j]; cout<<endl; if (max_tablou < a[i][j] ) max_tablou = a[i][j]; } //parcurgem fiecare coloana si cautam valoarea maxima for(j=1;j<=n;j++) { //initializam max_coloana cu 0 max_coloana = 0; for(i=1;i<=m;i++) { if (max_coloana < a[i][j]) max_coloana = a[i][j]; } cout<<”Maximul pe coloana :”<<j<<”este:”; cout<<max_coloana; }

36

Page 37: Probleme Rezolvate in C++

getch(); }

47. Sa se calculeze si sa se afiseze valoarea distantei intre doua puncte, dandu-secoordonatele acestora: A(x1, y1) si B(x2, y2).

#include<iostream.h> #include <math.h> void main(void) { int x1,y1,x2,y2; float d; cout<<"dati x1= ";cin>>x1; cout<<"dati y1= ";cin>>y1; cout<<"dati x2= ";cin>>x2; cout<<"dati y2= ";cin>>y2; d=sqrt( (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) ); cout<<"Distanta intre "<<x1<<","<<y1<<" si "<<x2<<","<<y2<<" este = "<<d; }

48. Se citesc de la tastatura trei valori a, b, c. Sa se afiseze, in ordine crescatoare,valorile variabilelor, fara modificarea continutului acestora.In functie de valorile citite se va afisa una din situatiile:a b ca c bc a bc b ab a cb c a

#include<iostream.h> void main(void) { int a,b,c; cout<<"Dati primul numar = ";cin>>a; cout<<"Dati al doilea numar = ";cin>>b; cout<<"Dati al treilea numar = ";cin>>c; if (a<b) if(b<c) cout<<a<<","<<b<<","<<c; else if(a<c) cout<<a<<","<<c<<","<<b; else cout<<c<<","<<a<<","<<b; else if(a<c) cout<<b<<","<<a<<","<<c; else if(b<c) cout<<b<<","<<c<<","<<a; else cout<<c<<","<<b<<","<<a; }

37

Page 38: Probleme Rezolvate in C++

49. Sa se scrie un program care sa rezolve ecuatia de grad II: ax2+bx+c=0, undea, b, c numere reale. Se vor lua in discutie toate cazurile.

#include<iostream.h> #include <math.h> void main(void) { int a,b,c; float x1,x2,delta,preal,pimag; cout<<"Dati valoarea lui a = "; cin>>a; cout<<"Dati valoarea lui b = "; cin>>b; cout<<"Dati valoarea lui c = "; cin>>c; if(a==0) cout<<"Ecuatie de gradul I"<<"\n"; else { delta=b*b-4*a*c; if(delta >= 0) { cout<<"Radacini reale: "; x1=(-b+sqrt(delta))/(2*a); x2=(-b-sqrt(delta))/(2*a); cout<<"x1 = "<<x1<<" x2 = "<<x2; } else { cout<<"Radacini complexe :"; delta=-delta; preal=-b/(2*a); pimag=sqrt(delta)/(2*a); cout<<"x1 = "< <preal<<" + i*"<<pimag<<"\n"; cout<<"x2 = "<<preal<<" - i*"<<pimag; } } }

50. Sa se determine cel mai mare divizor comun (c.m.m.d.c.) si cel mai mic multiplucomun (c.m.m.m.c.) a doua numere intregi citite de tastatura.

#include <iostream.h> void main(void) { int a,b,x,y,r,cmmdc1,cmmdc2,cmmmc; cout<<"Dati primul numar " ;c in>>a; cout<<"Dati al doilea numar ";cin>>b;

38

Page 39: Probleme Rezolvate in C++

// calculam c.m.m.d.c. folosind algoritmul lui Euclid x=a;y=b; r=a%b; while(r!=0) { a=b; b=r; r=a%b; } cmmdc1=b; cout<<"Cmmdc este "<<cmmdc1<<endl; // calculam c.m.m.d.c. while(a!=b) if(a>b) a=a-b; else if(a<b) b=b-a; cmmdc2=a; cout<<"Cmmdc este "<<cmmdc2<<endl; cmmmc=(x*y)/cmmdc1; cout<<"Cmmmc este "<<cmmmc<<endl; }

51. de la tastatura se introduc 2 numere intregi a si b (a<b). de afisat la ecran toate numerele pare dintre a si b.

#include <iostream> using namespace std; int a,b,i; int main() { //citim a si b cout<<"a=";cin>>a;cout<<endl; cout<<"b=";cin>>b;cout<<endl; //verificam daca a este numar par if ( a%2 == 0) { for ( i = a; i<=b; i+2) cout<<i<<" "; } else { for ( i = a+1; i<=b; i+2) cout<<i<<" "; } }

39