Sunteți pe pagina 1din 10

Universitatea Tehnică a Moldovei

Facultatea Calculatoare Informatică și Microelectronică


Departamentul Ingineria Software și Automatică

RAPORT
la lucrarea de laborator nr. 4

la Programarea Calculatoarelor

Tema: Tablouri. Declararea şi iniţializarea tablourilor în limbajul C.

Varianta 5 25

A efectuat: Chiforiuc Adrian

A verificat: Prijivelschi Dumitru

Chişinău 2020
Scopul lucrării

Însuşirea tehnicilor de algoritmizare şi programare cu subprograme în


prelucrareastructurilor complexe în TP şi C.

Obiectivele temei

1.Aprofundarea cunoştinţelor în limbajul şi mediul TurboC şi perfecţionarea


tehnicii de programare în prelucrarea structurilor complexe, analizând soluţiile
stereotipe şi cele eficiente de introducere, afişare şi rearanjări ale tablourilor
bidimensionale etc.
2. Însuşirea tehnicilor eficiente de parcurgere, căutare, schimbare şi ordonare a
matricilor şi calculul conform cunoştinţelor obţinute din matematică şi în baza
ciclurilor încorporate într-un program complex. Subiectele temei şi ordinea
executării
1. Studierea principiilor prelucrării (descrierii, declarării, formării, etc.) tablourilor
bidimensionale .
2. Analiza Testelor: intrebări – răspuns cu afisarea rezultatelor.
3. Însuşirea tehnicilor moderne de elaborare a programelor complexe în C în baza
problemelor din anexă.
4. Elaborarea algoritmilor, programelor şi testelor de depanare a programului prin
diverse moduri în mediul integrat C. Conţinutul raportului (vezi lucr. de laborator
nr.1-3) şi suplimentar: Analiza erorilor admise pe parcursul efectuării lucrării şi
eficienţa algoritmilor elaboraţi.

1. Extras Teoretic

Tabloul bidimensional reprezintă o structură formată din rînduri şicoloane. Fiecare


element al unui tablou bidimensional are 2 coordonate: numarul rîndului şi
numărul coloanei.Deci matricile sunt tablouri bidimensionale şi pot fi asemuite cu
o secvenţa de mai multe şiruri. În C dacă unelement al unui şir se identifică cu
elem[i] unde i reprezintă poziţia acelui element în cadrul şirului, la matrici
unelement se identifica prin elem[i][j], unde i reprezintă poziţia pe coloană
(verticală) a acelui element, iar jreprezintă poziţia pe linie (orizontală) a acelui
element.
Prin definiţieun tablou bidimensional este de fapt un tablou unidimensional ale
carei elemente sunt fiecare in parte câte untablou. Prin urmare, indicii se scriu
astfel a[i][j] in loc de a[i, j] ca in majoritatea limbajelor. In plus un
tabloubidimensional poate fi tratat in mai multe moduri decât in alte limbaje.
Elementele sunt memorate pe linii, ceeace inseamna ca indicele din dreapta variaza
primul in aşa fel incit elementele sunt accesate in ordinea memoriei.

2. Rezolvare
Teste întrebări – răspuns :
1.Ce reprezinta un identificator de tablou?
- Un identificator de tablou, este un pointer a carui valoare este adresa primului element
din tablou.
2. Care este condiţia ca o matrice să fie triunghiulară?
- O matrice este triunghiulară, atunci cînd doar elementele situate de-o parte a diagonalei
principale sunt efectiv utilizate.
3.Ce se întîmplă atunci cînd liniile unei matrici nu au acelaşi număr de elemente?
- Dacă liniile unei matrici nu au acelaşi număr de elemente, atunci:
1. În tablourile predefinite, fiecare linie este de lungime maximă.
2.În tablourile bazate pe clasă tablou<T>, fiecare linie poate fi dimensionată
corespunzător numărului efectiv de elemente.

Răspuns : B

Răspuns : C

Răspuns:A,E
Răspuns: B

Răspuns : A

Răspuns C

Răspuns : A
Răspuns : A

Răspuns : B, C

Răspuns : C

Ex 5

Să se citească de la tastatură o matrice patratica Anxn . Sa se calculeze suma si


produsul elementelor de pediagonala principala si de pe diagonala secundara
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int i,j, m, m2, r, c;
int sum = 0, sum2=0, prod=1, prod2=1;
printf("\nDati numarul randurilor matricii\n\n");
scanf("%d", &r);
printf("\nDati numarul maxim generat\n\n");
scanf("%d", &m);
printf("\n\n");
c=r;
int A[r][c];
srand(time(NULL));
m2 = m*2;
for(i=0; i<r; i++)
{
for (j=0; j<c; j++)
{
A[i][j]=((rand()%m2)-m);
}
}
for(i=0; i<r; i++)
{
for(j=0; j<c; j++)
{
printf(" %d\t ", A[i][j]);
}
printf("\n");
}
j=0;
for(i=0; i<r; i++)
{
sum = sum + A[i][j];
prod= prod * A[i][j];
j++;
}
printf("\nSuma elementelor diagonalei principale este: %d\nProdusul elementelor diagonalei
principale este: %d\n", sum, prod);

j= c-1;
for(i=0; i<r; i++)
{
sum2 = sum2 + A[i][j];
prod2= prod2 * A[i][j];
j--;
}
printf("\nSuma elementelor diagonalei secundare este: %d\nProdusul elementelor diagonalei
secundare este: %d\n", sum2, prod2);
return 0;
}
Ex 25

Este data 1 matrice A={ai,j},delimitate în 4 sectoare (vezi Fig.2.). . Calculaţi


pentru matrice următoarele: valoarea minimă a sectorului 1; -- valoarea
maximă a sectorului 2; produsul elementelor a sectorului 3;. suma
elementelor sectorului 4.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <malloc.h>
int main()
{
int i,j, m, m2, r, c, v2=0;
printf("\nDati numarul randurilor matricii(nu mai mult de 15)\n\n");
scanf("%d", &r);
if(r>15 || r<2)
{
printf("Eroare, dati un numar care sa respecte conditia 1<n<15");
return 0;
}
c=r;
printf("\nDati numarul maxim generat\n\n");
scanf("%d", &m);
printf("\n\n");
int A[r][c];
srand(time(NULL));
m2 = m*2;
for(i=0; i<r; i++)
{
for (j=0; j<c; j++)
{
A[i][j]=((rand()%m2)-m);
}
}
for(i=0; i<r; i++)
{
for(j=0; j<c; j++)
{
printf(" %d\t ", A[i][j]);
}
printf("\n");
}
//1
printf("\n\nConditia 1;\n\n");
int unu[100];
int q=1,x=0;

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


{
unu[i]=A[0][i];
x++;
}
int w;
w=r-1;
j=0;
while(w>0)
{
j++;
for(i=q; i<w; i++)
{
unu[x]= A[j][i];
x++;
}
w--;
q++;
}
printf("\n\n");
for(i=0; i<x; i++)
{
printf("%d\t",unu[i]);
}
int check1=0;
for(i=0; i<x; i++)
{
if(check1>unu[i])
{
check1=unu[i];
}
}
printf("\n\nValoarea minima in cadranul 1 este : %d\n", check1);
//2
printf("\n\n Conditia 2; \n");
int y[100];
int n=1, z=0;
for(i=0; i<r; i++)
{
y[i]=A[i][0];
z++;
}
int l;
l=c-1;
j=0;
while(l>0)
{
j++;
for(i=n; i<l; i++)
{
y[z] = A[i][j];
z++;
}
l--;
n++;
}
printf("\n\n");
for(i=0; i<z; i++)
{
printf("%d\t",y[i]);
}
int check2=0;
for (i=0; i<z; i++)
{
if(y[i]>check2)
{
check2 = y[i];
}
}
printf("\n\nValoarea maxima in cadranul 2 este : %d\n", check2);
printf("Conditia 3;\n");
//3
int k[100];
int e1=1,o1=0;
for(i=0; i<r; i++)
{
k[i]= A[i][c-1];
o1++;
}
int p1;
p1=r-1;
long long int n2=1;
j=p1;
while(p1>0)
{
j--;
for(i=e1; i<p1; i++)
{
k[o1]=A[i][j];
o1++;
}
e1++;
p1--;
}
printf("\n\n");
for(i=0; i<o1; i++)
{
printf("\t%d",k[i]);
}
for(i=0; i<o1; i++)
{
n2 *=k[i];
}
printf("\n");
printf("Produsul tuturor elementelor este : %lld\n", n2);
//4
int u[100];
int e=1,o=0;
for(i=0; i<c; i++)
{
u[i]= A[r-1][i];
o++;
}
int p;
p=c-1;
int n1=0;
j=p;
while(p>0)
{
j--;
for(i=e; i<p; i++)
{
u[o]=A[j][i];
o++;
}
e++;
p--;
}
printf("\n\n");
for(i=0; i<o; i++)
{
printf("\t%d",u[i]);
}
for(i=0; i<o; i++)
{
n1 +=u[i];
}
printf("\n");
printf("Suma tuturor elementelor este : %d", n1);
}

Concluzie

În concluzie pot spune că în aceasta lucrare de laborator ne-am


aprofundat în limbajul și mediul C, și ne-am perfecționat tehnicile
de programare în prelucrarea structurilor complexe, analizând
soluțiile stereotipe și cele eficiente de introducere, afișare și
rearanjări ale tablourilor bidimensionale. De asemenea, ne-am
familiarizat cu principiile de solutionare a problemelor si
prelucrarii elementelor tablourilor bidimensionale, care cu
siguranță vor fi folosinte în studierea ulterioară a acestor tipuri de
tablouri și soluționarea problemelor în ceea ce privește lucrul cu
tablouri în limbajul de programare C.

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