Sunteți pe pagina 1din 8

Algoritmic i programare Laborator 9

Tablouri bidimensionale(matrici)
Problema 1. S se elaboreze un program care citete de la tastatur dou matrici cu componente ntregi i realizeaz produsul lor. S se verifice, de asemenea, dac este satisfcut condiia ca s se poat realiza produsul acelor matrici. #include<iostream> using namespace std; void main(void){ int a[10][10],b[10][10],c[10][10],i,j,k,m,n1,n2,p; cout<<"Introduceti dimensiunile celor doua matrici si elementele lor"<<endl; cout<<"Matricea A : "<<endl; cout<<"numarul de linii : ";cin>>m; cout<<"numarul de coloane : ";cin>>n1; for(i=0;i<m;i++) for(j=0;j<n1;j++){ cout<<"a["<<i+1<<","<<j+1<<"]="; cin>>a[i][j]; } cout<<"Matricea B : "<<endl; do{ cout<<"numarul de linii : "; cin>>n2; } while(n2!=n1); cout<<"numarul de coloane : ";cin>>p; for(i=0;i<n2;i++) for(j=0;j<p;j++){ cout<<"b["<<i+1<<","<<j+1<<"]="; cin>>b[i][j]; } for(i=0;i<m;i++) for(j=0;j<p;j++) c[i][j]=0; for(i=0;i<m;i++) for(j=0;j<p;j++) for(k=0;k<n1;k++) c[i][j]+=a[i][k]*b[k][j]; cout<<"Matricea produs este :"<<endl; for(i=0;i<m;i++){ for(j=0;j<p;j++) cout<<c[i][j]<<" "; cout<<endl; } cout<<endl; } Problema 2. S se scrie un program care calculeaz minimul i maximul dintr-o matrice cu m linii i n coloane, ale crei elemente sunt citite de la tastatur.

#include <iostream> using namespace std; void main(void){ int n,m,min,i,j,max,a[30][30]; cout<<"Dati dimensiunile matricii"<<endl; cout<<"Dati numarul de linii : ";cin>>n; cout<<"Dati numarul de coloane : ";cin>>m; for(i=0;i<n;i++) for(j=0;j<m;j++){ cout<<"a["<<i+1<<","<<j+1<<"]= "; cin>>a[i][j]; } min=a[0][0];max=a[0][0]; for(j=0;j<m;j++){ if(a[0][j]<min) min=a[0][j]; if(a[0][j]>max) max=a[0][j]; } for(i=1;i<n;i++) for(j=0;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; } Problema 3. S se scrie un program prin care se citete de la tastatur o matrice cu componentele numere ntregi i afieaza transpusa sa. #include <iostream> using namespace std; void main(void){ int n,m,i,j,a[30][30]; cout<<"Dati dimensiunile matricii "<<endl; cout<<"Dati numarul de linii : ";cin>>n; cout<<"Dati numarul de coloane : ";cin>>m; for(i=0;i<n;i++) for(j=0;j<m;j++){ cout<<"a["<<i+1<<","<<j+1<<"]= "; cin>>a[i][j];} cout<<"----------------------"<<endl; cout<<"Elementele matricii A sunt: "<<endl; for(i=0;i<n;i++){ for(j=0;j<m;j++) cout<<a[i][j]<<" "; cout<<endl; } cout<<"----------------------"<<endl; cout<<"Elementele matricii transpuse sunt: "<<endl; for(j=0;j<m;j++){ for(i=0;i<n;i++) cout<<a[i][j]<<" "; cout<<endl; } }

Problema 4. Se consider o matrice A de tip n*n, cu componentele numere ntregi. S se calculeze: - suma elementelor de pe diagonala principal; - produsul elmentelor de pe diagonala secundar; - minimul elementelor aflate deasupra, respectiv sub diagonala principal; - maximul elementelor aflate deasupra, respectiv sub diagonala secundar. #include <iostream> using namespace std; void main(void){ int n,i,j,a[30][30],min1,min2,max1,max2,suma,produs; cout<<"Dati dimensiunile matricii "<<endl; cout<<"Dati numarul de linii si de coloane n = ";cin>>n; for(i=0;i<n;i++) for(j=0;j<n;j++){ cout<<"a["<<i+1<<","<<j+1<<"]= "; cin>>a[i][j]; } cout<<"----------------------"<<endl; cout<<"Elementele matricii A sunt: "<<endl; for(i=0;i<n;i++){ for(j=0;j<n;j++) cout<<a[i][j]<<" "; cout<<endl; } cout<<"----------------------"<<endl; // suma elementelor de pe diagonala pricipala suma=0; for(i=0;i<n;i++) suma+=a[i][i]; cout<<"Suma elementelor de pe diagonala principala este "<<suma<<endl; // produsul elementelor de pe diagonala secundara produs=1; for(i=0;i<n;i++) produs*=a[i][n-i-1]; cout<<"Produsul elementelor de pe diagonala secundara este "<<produs<<endl; // minimul elementelor de deasupra diagonalei principale min1=32768; for(i=0;i<n;i++) for(j=0;j<n;j++) if((i<j) && (a[i][j]<min1)) min1=a[i][j]; cout<<"Minimul de deasupra diag. principale este "<<min1<<endl; // minimul elementelor de sub diagonala principala min2=32768; for(i=0;i<n;i++) for(j=0;j<n;j++) if((i>j) && (a[i][j]<min2)) min2=a[i][j]; cout<<"Minimul de sub diag. principala este "<<min2<<endl; // maximul elementelor de deasupra diagonalei principale max1=-32768; for(i=0;i<n;i++) for(j=0;j<n;j++)

if((i<j) && (a[i][j]>max1)) max1=a[i][j]; cout<<"Maximul de deasupra diag. principale este "<<max1<<endl; // maximul elementelor de sub diagonala principala max2=-32768; for(i=0;i<n;i++) for(j=0;j<n;j++) if((i>j) && (max2<a[i][j])) max2=a[i][j]; cout<<"Maximul de sub diag. principala este "<<max2<<endl;

Problema 5. Se consider o matrice de tip n*m, cu componentele numere ntregi. S se determine linia (liniile) din matrice care conine cele mai multe elemente nenule. #include <iostream> using namespace std; 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=0;i<n;i++) for(j=0;j<m;j++){ cout<<"a["<<i+1<<","<<j+1<<"]="; cin>>a[i][j]; } cout<<"----------------------"<<endl; cout<<"Matricea A este"<<endl; for(i=0;i<n;i++){ for(j=0;j<m;j++) cout<<a[i][j]<<" "; cout<<endl; } cout<<"----------------------"<<endl; max=0; for(i=0;i<n;i++){ nr=0; for(j=0;j<m;j++) if(a[i][j]!=0) nr++; if(max<nr) max=nr; } for(i=0;i<n;i++){ nr=0; for(j=0;j<m;j++) if(a[i][j]!=0) nr++; if(max==nr) cout<<"Linia "<<i+1<<" are "<<max<<" elemente nenule"<<endl; } } Problema 6. Se consider o matrice de tip n*m, cu componentele numere ntregi. Se cere s se calculeze suma elementelor de pe marginea matricii.

#include <iostream> using namespace std; void main(void){ int a[30][30],n,m,i,j,suma=0; cout<<"Dati numarul de linii n = ";cin>>n; cout<<"Dati numarul de coloane m = ";cin>>m; for(i=0;i<n;i++) for(j=0;j<m;j++){ cout<<"a["<<i+1<<","<<j+1<<"]="; cin>>a[i][j]; } cout<<"----------------------"<<endl; cout<<"Matricea A este"<<endl; for(i=0;i<n;i++){ for(j=0;j<m;j++) cout<<a[i][j]<<" "; cout<<endl; } cout<<"----------------------"<<endl; for(i=0;i<m;i++){ suma+=a[0][i]; suma+=a[n-1][i]; } for(i=1;i<n-1;i++){ suma+=a[i][0]; suma+=a[i][n-1]; } cout<<"Suma elementelor de pe marginea matricii este : "<<suma<<endl; } Problema 7. Se consider o matrice tip n*m, cu componentele numere ntregi. S se determine maximul fiecrei coloane i minimul fiecrei linii. #include<iostream> using namespace std; void main(){ int a[30][30],min,max,n,m,i,j; cout<<"Dati numarul de linii n = ";cin>>n; cout<<"Dati numarul de coloane m = ";cin>>m; for(i=0;i<n;i++) for(j=0;j<m;j++){ cout<<"a["<<i+1<<","<<j+1<<"]="; cin>>a[i][j]; } cout<<"----------------------"<<endl; cout<<"Matricea A este"<<endl; for(i=0;i<n;i++){ for(j=0;j<m;j++) cout<<a[i][j]<<" "; cout<<endl; } cout<<"----------------------"<<endl; cout<<"Minimurile pe linie sunt : "; for(i=0;i<n;i++){ min=a[i][0];

} cout<<endl; cout<<"Maximurile pe coloane sunt : "; for(j=0;j<m;j++){ max=a[0][j]; for(i=1;i<n;i++) if(a[i][j]>max) max=a[i][j]; cout<<max<<" "; } cout<<endl;

for(j=1;j<m;j++) if(a[i][j]<min) min=a[i][j]; cout<<min<<" ";

Problema 8. (Tem) Pentru o matrice A de tip n*m se numete punct a un element a(i0,j0)=min{a(i0,j)| j=0,,m-1}= max{a(i,j0)| i=0,,n-1}. S se determine dac pentru o matrice citit de la tastatur exist punct a sau nu, iar n caz afirmativ s se menioneze coordonatele i valoarea sa. Indicaie: Se folosete problema 7. Problema 9. Se introduce o matrice ptratic de ordin n; s se verifice dac este triunghiular (toate elementele de sub diagonala principal sunt 0) i dac da, s se calculeze determinantul (dac matricea e triunghiular atunci determinantul este egal cu produsul elementelor de pe diagonala principal). #include<iostream> using namespace std; 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+1<<","<<j+1<<"]="; 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; if(diag) { for(i=0;i<n;i++)

} else }

p*=A[i][i]; cout<<"Matricea este triunghiulara. Determinantul este : "<<p<<endl; cout<<"Matricea nu este triunghiulara."<<endl;

Problema 10. S se construiasc o matrice cu n linii i m coloane ce se completeaz cu termenii irului lui Fibonacci. Completarea se va face pe linii. #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=0;i<x;i++) for(j=0;j<y;j++) { matrice[i][j]=c; a=b; b=c; c=a+b; } } int main() { cout<<"Introduceti dimensiunile matricii"<<endl; cout<<"n=";cin>>n; cout<<"m=";cin>>m; fibonacci(n,m); for(i=0;i<n;i++) { for(j=0;j<m;j++) cout<<matrice[i][j]<<" "; cout<<endl; } } Problema 11. Folosind urmtorul program, care calculeaz combinri de n luate cte k (n i k fiind numere naturale ce satisfac kn), s se elaboreze un algoritm care genereaz o matrice A cu m linii i p coloane pentru care, pentru orice i i j, elementul A(i,j) ia valoarea combinri de max{i,j} luate cte min{i,j}. #include<iostream> using namespace std; void main() { int a,b,c,n,k,Cnk,i; cout<<"Introduceti n : ";cin>>n; cout<<"Introduceti k : ";cin>>k; if(n<k) cout<<"Calculul nu poate fi efectuat"<<endl; else { a=1; for(i=2;i<=n;i++) a*=i;

b=1; for(i=2;i<=k;i++) b*=i; c=1; i=2; while(i<=(n-k)) { c*=i; i++; } Cnk=a/(b*c); cout<<"Combinari de "<<n<<" luate cate "<<k<<" : "<<Cnk<<endl;