Documente Academic
Documente Profesional
Documente Cultură
Limbajul C++
Adrian Runceanu
Laborator nr. 6
Tablouri unidimensionale(vectori) si
bidimensionale(matrici)
1. Tablouri unidimensionale(vectori)
Problema 1:
Se considera un tablou unidimensional cu n numere reale si se cere sa
se afiseze cel mai mare si cel mai mic element din tablou.
Solutie:
#include<iostream.h>
int i, n;
float x[50], min, max;
int main(void)
{
cout<<"Dati numarul de elemente ale tabloului ";
cin>>n;
for(i=1;i<=n;i++)
{
cout<<"x[<<i<<]= ";
cin>>x[i];
}
min=x[1];
max=x[1];
for(i=1;i<=n;i++)
if(min>x[i]) min=x[i];
else if(max<x[i]) max=x[i];
cout<<endl<<"Minimul este "<<min;
cout<<endl<<"Maximul este "<<max;
}
Problema 2:
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.
Solutie:
#include<iostream.h>
int a, b, i, n, suma=0;
float x[50], media;
int main(void)
{
cout<<"Dati numarul de elemente ale tabloului ";
cin>>n;
for(i=1;i<=n;i++)
{
1
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;
}
Problema 3:
Se citesc doua tablouri unidimensionale cu componente numere
naturale. Fiecare tablou are elementele sortate crescator. Se cere sa se
construiasca un al treilea tablou care contine elementele celor doua in ordine
crescatoare. (Problema interclasarii)
Solutie:
#include<iostream.h>
int i, j, n, m, k;
float x[50], y[50], z[50];
int main(void)
{
cout<<"Dati numarul de elemente ale tabloului x :";
cin>>n;
for(i=1;i<=n;i++)
{
cout<<"x[<<i<<]= ";
cin>>x[i];
}
cout<<"Dati numarul de elemente ale tabloului y :";
cin>>m;
for(i=1;i<=m;i++)
{
cout<<"y[<<i<<]= ";
cin>>y[i];
}
i=1;j=1;k=0;
while( (i<=n) && (j<=m) )
if(x[i]<y[j]){k++;z[k]=x[i];i++;}
else {k++;z[k]=y[j];j++;}
if(i<=n) for(j=i;j<=n;j++) {k++;z[k]=x[j];}
else for(i=j;i<=m;i++) {k++;z[k]=y[i];}
cout<<endl<<"Vectorul Z cu elementele interclasate este ";
for(i=1;i<=k;i++) cout<<z[i]<< ;
}
Problema 4:
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>
int i, n, j, a;
float x[50], y[50];
int main(void)
{
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<=m;i++) cout<<y[i]<< ;
}
Problema 5:
Se da un tablou unidimensional cu n (1n100) componente numere
naturale. Sa se calculeze suma componentelor divizibile cu a, pentru un
numar a citit de la tastatura.
#include<iostream.h>
int i, n, a, suma=0;
int x[50];
int main(void)
{
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;
for(i=1;i<=n;i++)
if ( x[i]%=a) suma=suma+x[i];
cout<<"Suma elementelor din vector care sunt divizibile cu
<<a<< este egala cu "<<suma<<endl;
}
2. Tablouri bidimensionale(matrici)
Problema 1:
Sa se scrie un program care calculeaza produsul a doua matrici
(tablouri bidimensionale) An*m, Bm*p.
Solutie:
#include <iostream.h>
int n,m,p,i,j,k,a[10][10],b[10][10],c[10][10];
int main(void)
{
cout<<"Dati dimensiunile matricei A"<<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 dimensiunile matricei B"<<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];
Problema 2:
Sa se scrie un program care calculeaza minimul si maximul dintr-o matrice cu
n linii si m coloane (An*m) (1n,m30).
Solutie:
#include <iostream.h>
int n,m,min,i,j,max,a[30][30];
int main(void)
{
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];
6
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;
}
Problema 3:
Sa se scrie un program care calculeaza transpusa unei matrici A n*m
(1n,m30).
Solutie:
#include <iostream.h>
int n,m,i,j,a[30][30],b[30][30];
int main(void)
{
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;
}
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<=m;i++)
7
{
for(j=1;j<=n;j++)
cout<<b[i][j]<<" ";
cout<<endl;
}
}
Problema 4:
Se considera o matrice An*n. Sa se calculeze:
- suma elementelor de pe diagonala principala
- produsul elmentelor de pe diagonala secundara
- minimele din elementele aflate deasupra, respectiv sub diagonala
principala
- maximele din elemenetle aflate deasupra, respectiv sub diagonala
secundara
Solutie:
#include <iostream.h>
int n,m,i,j,a[30][30],min1,min2,max1,max2,suma,produs;
int main(void)
{
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<=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<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
// ===== suma elementelor de pe diagonala principala ======
suma=0;
for(i=1;i<=n;i++)
for(j=1;i<=n;i++)
8
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;
}
Problema 5:
Se considera o matrice An*m (1n,m30) cu elemente numere intregi. Sa se
determine linia (liniile) din matrice care contine cele mai multe elemente
nenule.
Solutie:
#include<iostream.h>
int a[30][30],n,m,i,j,max,nr;
int main(void)
{
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<<"
nenule"<<endl;
}
}
10
are
"<<max<<"
elemente
11
2. Tablouri bidimensionale(matrici)
1. Se considera o matrice An*m (1n,m30) avand componente numere
intregi. Se cere sa se calculeze suma componentelor de pe marginea (rama)
matricei.
1 2 3 4
A 10 11 12 5
9 8 7 6
se va afisa suma 1 + 2
Exemplu: Pentru n = 3 si m = 4 si
+ 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 47.
2. Se considera o matrice An*m (1n,m30) avand componente numere
intregi. Sa se determine maximul fiecarei coloane si minimul fiecarei linii.
3. Sa se construiasca o matrice patratica (n=m) de dimensiune n2 (1n30)
cu primele numere pare incepand cu 2.
4. Se considera o matrice An*m (1n,m30) cu elemente numere reale. Sa se
scrie un program C++ care sa schimbe, in aceasta matrice, prima linie cu
ultima linie. Se va afisa apoi matricea modificata.
5. Se considera o matrice An*m (1n,m30) cu elemente numere reale. Sa se
scrie un program C++ care sa schimbe, in aceasta matrice, prima coloana cu
ultima coloana. Se va afisa apoi matricea modificata.
6. Se considera o matrice An*m (1n,m30) cu elemente numere reale. Sa se
scrie un program C++ care sa determine un vector care sa contina
elementele maxime de pe fiecare linie a matricei, iar apoi sa determine cea
mai mica valoare din vectorul construit anterior.
7. Se considera o matrice An*m (1n,m30) cu elemente numere reale. Sa se
scrie un program C++ care sa determine un vector care sa contina
elementele minime de pe fiecare coloana a matricei, iar apoi sa determine cea
mai mare valoare din vectorul construit anterior.
12