Sunteți pe pagina 1din 13

Elemente de baz ale programrii n C - Aplicaii de Laborator

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

Elemente de baz ale programrii n C - Aplicaii de Laborator

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

Elemente de baz ale programrii n C - Aplicaii de Laborator

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

Elemente de baz ale programrii n C - Aplicaii de Laborator

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

Elemente de baz ale programrii n C - Aplicaii de Laborator

for (i=0; i<4; ++i)


num[t][i] = (t*4)+i+1;
/* acum scrie-le */
for(t=0; i<4; ++t)
{
for(i=0; i<4; ++i)
printf("%3d", num[t][i]);
printf("/n");
}
}
Problema 5.8.
//program nr. 3 de afiare a unei matrice
#include<stdio.h>
void main (void)
{
int l,c,A[4][5];
for(l=1;l<=4;++l)
for(c=1;c<=5;++c)
{
l=l;
c=c+1;
A[l][c]=A[l][c];
}
for(l=1;l<=4;++l)
for(c=1;c<=5;++c)
printf("%3d",A[l][c]);
}
Problema 5.9.
//program nr 2 de afiare a unei matrice
#include <stdio.h>
void main(void)
{
int t,i,num[2][2];
for (t=0; t<2; ++t)
for (i=0; i<2; ++i)
num[t][i]=(t*4)+i+1;
/*acum scrie-b*/
for (t=0; t<2; ++t)
{
for(i=0; i=0; ++i)
printf("%3d", num[t][i]);
printf("\n");
}
}
42
MatrixRom 2013

ISBN: 978-973-755-897-8

Elemente de baz ale programrii n C - Aplicaii de Laborator

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

Elemente de baz ale programrii n C - Aplicaii de Laborator

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

Elemente de baz ale programrii n C - Aplicaii de Laborator

printf("\n dati a[%d][%d]=",i,j);


scanf("%d",&a[i][j]);
}
min=a[m-1][1];
for (i=m/2+1;i<m;i++)
for (j=m-i-1;j<i;j++)
if (a[i][j]<min) min=a[i][j];
printf("minimul este %d ",min);
getch();
}
Problema 5.14.
//Pentru fiecare linie a unei matrice A de m linii si n coloane sa se scad din elementele
sale valoarea minima de pe acea linie.
#include <stdio.h>
#include <conio.h>
int a[10][10],i,j,m,n,min;
void main()
{
clrscr();
printf(" dati nr de linii ");
scanf("%d",&m);
printf("\n dati nr de coloane ");
scanf("%d",&n);
for (i=0;i<m;i++)
for (j=0;j<n;j++)
{
printf("\n dati a[%d][%d]= ",i,j);
scanf("%d",&a[i][j]);
}
for (i=0;i<m;i++)
{
min=a[i][0];
for (j=1;j<n;j++)
if (min>a[i][j]) min=a[i][j];
for (j=0;j<n;j++) a[i][j]=a[i][j]-min;
}
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
getch();
}

45
MatrixRom 2013

ISBN: 978-973-755-897-8

Elemente de baz ale programrii n C - Aplicaii de Laborator

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

Elemente de baz ale programrii n C - Aplicaii de Laborator

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

Elemente de baz ale programrii n C - Aplicaii de Laborator

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

Elemente de baz ale programrii n C - Aplicaii de Laborator

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

Sunt o aplicaie a blocurilor unidimensionale, ele sunt tablouri de caractere care se


ncheie prin simbolul 0. Reamintim c acesta se precizeaz printr-un cod backslash,
anume\0. Exist multe funcii destinate operrii irurilor.

5.6.
5.6.1.
5.6.2.
5.6.3.
5.6.4.

Probleme

Ce reprezint un tablou unidimensional?


Dar unul multidimensional?
Scriei un program care s realizeze sumarea a doi vectori de aceeai dimensiune.
Scriei un program care s afieze o matrice ptratic de forma:

49
MatrixRom 2013

ISBN: 978-973-755-897-8

Elemente de baz ale programrii n C - Aplicaii de Laborator

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

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