Documente Academic
Documente Profesional
Documente Cultură
Laborator nr. 5
Crearea tabelelor i operarea datelor
5.1.
Tablouri unidimensionale
Un tablou (array) este un ansamblu de variabile de acelai tip la care se face referire
printr-un nume comun. Valorile individuale sunt identificate prin indexare. Avantajul major al
tablourilor este c ele ofer posibilitatea operrii facile a datelor coninute prin structuri iterative.
Indicii tablourilor unidimensionale (vectorii) sunt precizai n paranteze drepte.
Dimensiunea unui tablou, practic numrul de elemente pe care le poate stoca, trebuie precizat
odat cu declararea variabilei tablou.
Indexarea elementelor ncepe de la 0, pentru primul element; aadar, ultimul element are
indicele cu o unitate mai puin dect dimensiunea.
5.2.
Exemple de probleme
Problema 5.1.
//program de stocare n elementele unui tablou x a valorilor ptratelor primelor 10
//numere naturale
# include <math.h>
void main(void)
{
int i; x[10];
for(i = 0; i < 10; x[i] = pow(++i, 2) );
}
Problema 5.2.
//program de afiare a unui vector
#include<stdio.h>
void afiseaza(int nume[10]);
void main(void)
{
int t[10],i;
for(i=0;i<10;++i)
t[i]=i;
afiseaza(t);
}
void afiseaza(int num[10])
{
int i;
for(i=0;i<10;i++) printf("%d",num[i]);
}
38
MatrixRom 2013
ISBN: 978-973-755-897-8
Problema 5.3.
// produsul numerelor perfecte dintr-un vector cu m elemente ntregi.
#include <stdio.h>;
#include <conio.h>;
int v[10],i,m,p,j,s,nr;
void main()
{
clrscr();
printf("dai dimensiunea vectorului");
scanf("%d",&m);
for (i=1;i<=m;i++)
{
printf("\n dati v[%d]=",i);
scanf("\n %d",&v[i]);
}
p=1;
nr=0;
for (i=1;i<=m;i++)
{
s=1;
for (j=2;j<=v[i]/2;j++)
{
if (v[i]%j==0)
{
s=s+j;
}
if (s==v[i])
{
p=p*v[i];
nr++;
}
}
}
if (nr)
printf("\n produsul elemente perfecte= %d",p);
else
printf("\n nu exist elemente perfecte ");
getch();
}
Problema 5.4.
//s se determine dac doi vectori sunt proporionali .
#include <stdio.h>
#include <conio.h>
int a[10],b[10],i,n,m;
39
MatrixRom 2013
ISBN: 978-973-755-897-8
void main()
{
clrscr();
printf("dai dimensiunea vectorului ");
scanf("%d",&n);
for (i=1;i<=n;i++)
{
printf("dati a[%d]=",i);
scanf("%d",&a[i]);
}
for (i=1;i<=n;i++)
{
printf("dati b[%d]=",i);
scanf("%d",&b[i]);
}
m=0;
for (i=1;i<=n;i++)
{
if (a[i]*b[i-1]==a[i-1]*b[i])
{ m++; }
}
if (m==n)
printf("\n cei doi vectori sunt proporionali");
else
printf("\n cei doi vectori nu sunt proporionali");
getch();
}
Problema 5.5.
// suma elementelor unui vector de pe poziiile impare.
#include <stdio.h>;
#include <conio.h>;
int v[20],i,n,s;
void main()
{
clrscr();
printf("dai dimensiunea vectorului: \n");
scanf("%d",&n);
for (i=1;i<=n;i++)
{
printf("dati v[%d]= \n",i);
scanf("%d",&v[i]);
}
s=v[1];
for (i=3;i<=n;i=i+2)
{
40
MatrixRom 2013
ISBN: 978-973-755-897-8
s=s+v[i];
}
printf("suma de pe pozitiile impare : %d",s);
getch();
}
5.3.
Tablouri multidimensionale
n C se pot declara tablouri cu mai multe dimensiuni. Cel mai des sunt ntlnite tablouri
sunt cele bidimensionale, care pot fi asimilate matricelor sau tabelelor de date.
Ca sintax, fiecare dimensiune i, respectiv, fiecare indice se precizeaz cu ajutorul unei
perechi de paranteze drepte.
5.4.
Exemple de probleme
Problema 5.6.
//programul nr.1 de scriere i afiarea a unei matrice
#include<stdio.h>
void main (void)
{
int t,i,A[5][5];
for (t=1; t<6; t++)
for (i=1; i<6; i++)
A[t][i]=11-t-i;
/*acum scriele*/
for(t=1; t<6; t++)
{
for (i=1; i<6; i++)
printf("%3d", A[t][i]);
printf("\n");
}
}
{
for(i=0; i<4; ++i)
printf("%3d", num[t][i]);
printf("/n");
}
}
Problema 5.7.
//program nr. 2 de afiare a unei matricea
#include<stdio.h>
void main (void)
{
int t, i, num[3][4];
for (t=0; t<3; ++t)
41
MatrixRom 2013
ISBN: 978-973-755-897-8
ISBN: 978-973-755-897-8
Problema 5.10.
//se d o matrice cu m linii i n coloane, s se afieze suma de pe fiecare linie n parte.
#include <stdio.h>;
#include <conio.h>;
int a[10][10],i,j,n,m,s;
void main()
{
clrscr();
printf("dati nr de linii ");
scanf("%d",&m);
printf("dati nr de coloane ");
scanf("%d",&n);
for (i=1;i<=m;i++)
for (j=1;j<=n;j++)
{
printf("a[%d][%d]=",i,j);
scanf("%d",&a[i][j]);
}
for (i=1;i<=m;i++) {
s=0;
for (j=1;j<=n;j++)
s=s+a[i][j];
printf("\n suma pe linia %d este %d",i,s); }
getch();
}
Problema 5.11.
// Se d o matrice ptratic s se calculeze suma elementelor de deasupra diagonalei
principale.
#include <stdio.h>;
#include <conio.h>;
int a[10][10],i,j,m,n,s;
void main()
{
clrscr();
printf("dati nr de linii ");
scanf("%d",&n);
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
{
printf("dati a[%d][%d]=",i,j);
scanf("%d",&a[i][j]);
}
s=0;
for (i=1;i<=n-1;i++)
43
MatrixRom 2013
ISBN: 978-973-755-897-8
for (j=i+1;j<=n;j++)
{
s=s+a[i][j];
}
printf("\n suma elementelor de deasupra diagonalei principale=
%d",s);
getch();
}
Problema 5.12.
// Sa se determine elementul maxim din triunghiul de deasupra diagonalelor unei matrice
ptrate (exclusiv diagonalele).
#include <stdio.h>
#include <conio.h >
int a[10][10],i,j,m,max;
void main()
{
clrscr();
printf("dati m"); scanf("%d",&m);
for (i=0;i<m;i++)
for (j=0;j<m;j++)
{
printf("\n dati a[%d][%d]=",i,j);
scanf("%d",&a[i][j]);
}
max=a[0][1];
for (i=0;i<(m-1)/2;i++)
for (j=i+1;j<m-1-i;j++)
if (a[i][j]>max) max=a[i][j];
printf("maximul este= %d",max);
getch();
}
Problema 5.13.
// Sa se determine elementul minim din triunghiul de sub diagonalele unei matrice patrate
(exclusiv diagonalele).
#include <stdio.h>
#include <conio.h>
int a[10][10],i,j,m,min;
void main()
{
clrscr();
printf("dati m"); scanf("%d",&m);
for (i=0;i<m;i++)
for (j=0;j<m;j++)
{
44
MatrixRom 2013
ISBN: 978-973-755-897-8
45
MatrixRom 2013
ISBN: 978-973-755-897-8
Problema 5.15.
//Fie un masiv tridimensional , sa se calculeze suma elementelor fiecrui plan al
masivului.
#include <stdio.h>
#include <conio.h>
int a[10][10][10],i,j,l,m,n,k,s,v[10],max; //maximul sumei//
void main()
{
clrscr();
printf(" dati m "); scanf("%d",&m);
printf("\n dati n "); scanf("%d",&n);
printf("\n dati k "); scanf("%d",&k);
for (i=0;i<m;i++)
for (j=0;j<n;j++)
for (l=0;l<k;l++)
{
printf("\n dati a[%d][%d][%d]= ",i,j,l);
scanf("%d",&a[i][j][l]);
}
for (i=0;i<m;i++)
{
s=0;
for (j=0;j<n;j++)
for (l=0;l<k;l++)
s+=a[i][j][l];
printf("\n suma de pe planul
%d este %d",i+1,s);
v[i]=s;
}
max=v[0];
for (i=1;i<m;i++)
if (max<v[i]) max=v[i];
printf("\n maximul sumelor este %d",max);
getch();
}
Problema 5.16
//Se considera o matrice ptrat A de nxn sa se sorteze cresctor elementele de pe
diagonala principala.
#include <stdio.h>
#include <conio.h>
int a[10][10],i,j,n,aux;
void main()
{
clrscr();
46
MatrixRom 2013
ISBN: 978-973-755-897-8
printf("dati n=");
scanf("%d",&n);
for (i=0;i<n;i++)
for (j=0;j<n;j++)
{
printf("\n dati a[%d][%d]= ",i,j);
scanf("%d",&a[i][j]);
}
for (i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
if (a[i][i]>a[j][j])
{
aux=a[i][i];
a[i][i]=a[j][j];
a[j][j]=aux;
}
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
getch();
}
Problema 5.17.
//Fie o matrice A de mxn , care reprezint notele obinute de m studeni la n discipline.
Sa se determine:
//a) studenii integraliti(care au toate notele >=5);
//b) studenii bursieri (integralitii cu media >=8.5)
//c) disciplinele la care s-au nregistrat cei mai mulirestanieri
#include <stdio.h>
#include <conio.h>
int a[10][10],i,j,m,n,k,s;
float med;
void main()
{
clrscr();
printf(" dati nr nr de materii= ");
scanf("%d",&n);
printf("\n dati nr de studentii= ");
scanf("%d",&m);
for (i=0;i<m;i++)
for (j=0;j<n;j++)
{
printf("\n dati a[%d][%d]=",i,j);
47
MatrixRom 2013
ISBN: 978-973-755-897-8
scanf("%d",&a[i][j]);
}
for (i=0;i<m;i++)
{
k=0;
s=0;
for (j=0;j<n;j++)
if (a[i][j]>=5)
{
k++;
s+=a[i][j];
if (k==n)
printf("\n studentul %d este
integralist",i+1);
med=float(s)/float(n);
if (med>=8.5) printf("\n
studentul %d este bursier",i+1);
}
}
int v[10],max;
for (j=0;j<n;j++)
{
k=0;
for (i=0;i<m;i++)
if (a[i][j]<5) k++;
v[j]=k;
}
max=v[0];
for (j=0;j<n;j++)
if (v[j]>max) max=v[j];
if (!max) printf("\n nu avem studentipicati");
else
{
for (j=0;j<n;j++)
if (v[j]==max) printf("\n
disciplina %d are cei mai multipicati
",j+1);
}
getch();
}
Problema 5.18.
// programul care efectueaznmulirea dintre un vector si o matrice
#include <stdio.h>
#include <conio.h>
int a[10][10],v[10],b[10],i,j,m,n,k;
48
MatrixRom 2013
ISBN: 978-973-755-897-8
void main()
{
clrscr();
printf("dai nr de elemente ale vectorului");
scanf("%d",&m);
printf("dai nr de coloane");
scanf("%d",&n);
printf("\n elementele vectorului ");
for (i=0;i<m;i++)
{
printf("\n dai v[%d]= ",i);
scanf("%d",&v[i]);
}
printf("\n elementele matriciei");
for (i=0;i<m;i++)
for (j=0;j<n;j++)
{
printf("\n dai a[%d][%d]= ",i,j);
scanf("%d",&a[i][j]);
}
for (j=0;j<n;j++)
{
b[j]=0;
for (i=0;i<m;i++)
b[j]=b[j]+a[i][j]*v[i];
}
for (j=0;j<n;j++)
printf("%4d",b[j]);
getch();
}
5.5.
irurile
5.6.
5.6.1.
5.6.2.
5.6.3.
5.6.4.
Probleme
49
MatrixRom 2013
ISBN: 978-973-755-897-8
1
3 4
6
2
5
2
3
4 5
7
6
4
5 6
8
7
3
6
7
8
9
5
4
10 11 12 13 14 15
11 12 13 14 15 16
5.6.5. Scriei un program, care din matricea de la punctual 5.6.4. realizeaz o alt
matrice de [4] linii i [4] coloane format doar din elementele centrale ale matricei
anterioare.
5.6.6. Scriei un program care s afieze o matrice de forma:
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
5.6.7. Scriei un program care s adune matricele de la punctual 5.6.5. i 5.6.6
5.6.8. Scriei un program care s nmuleasc matricea de la punctual 5.6.7 cu ea nsi.
50
MatrixRom 2013
ISBN: 978-973-755-897-8