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];

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

}
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;

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;

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