Documente Academic
Documente Profesional
Documente Cultură
RAPORT
Lucrarea de laborator nr.5
la Programarea Calculatoarelor
A efectuat:
st. gr. AI-161 P.Trofim
A verificat:
dr., conf.univ. M. Kulev
Chiinu 2016
Lucrarea de laborator nr.5
2
Analiza parametrilor i a funciilor:
1.Funcia ADM2D:
a) parametri de intrare:
n-de tip ntreg,reprezint numrul de elemente pe linie n matrice.
m-de tip ntreg,reprezint numrul de elemente pe coloan n matrice.
b)parametri intermediare:
i-de tip ntreg,reprezint indicele elementului curent n tablou.
c)parametri de ieire:
D-pointer la pointer de tip float,stocheaz adresa vectorului de pointeri care la
rndul lor sunt pointeri de tip float care reprezint adresele fiecrei linii a
tabloului.
2.Funcia ADM1D:
a)parametri de intrare:
n-de tip ntreg,reprezint numrul de elemente pe linie n matrice.
m-de tip ntreg,reprezint numrul de elemente pe coloan n matrice.
c)parametri de ieire:
A- pointer de tip float care reprezint adresa vectorului n care sunt stocate
elementele mai sus de diagonala principal.
3.Funcia citireMatrice:
a)parametri de intrare:
n-de tip ntreg,reprezint numrul de elemente pe linie n matrice.
m-de tip ntreg,reprezint numrul de elemente pe coloan n matrice.
D-pointer la pointer de tip float,stocheaz adresa vectorului de pointeri care la
rndul lor sunt pointeri de tip float care reprezint adresele fiecrei linii a
tabloului.
b)parametri intermediare:
i-de tip ntreg,reprezint indicele elementului curent pe linie n matrice.
j-de tip ntreg,reprezint indicele elementului curent pe coloan n matrice.
4.Funcia afisareMatrice:
a)parametri de intrare:
n-de tip ntreg,reprezint numrul de elemente pe linie n matrice.
m-de tip ntreg,reprezint numrul de elemente pe coloan n matrice.
D-pointer la pointer de tip float,stocheaz adresa vectorului de pointeri care la
rndul lor sunt pointeri de tip float care reprezint adresele fiecrei linii a
tabloului.
3
b)parametri intermediare:
i-de tip ntreg,reprezint indicele elementului curent pe linie n matrice.
j-de tip ntreg,reprezint indicele elementului curent pe coloan n matrice.
5.Funcia aboveDiag:
a)parametri de intrare:
D-pointer la pointer de tip float,stocheaz adresa vectorului de pointeri care la
rndul lor sunt pointeri de tip float care reprezint adresele fiecrei linii a
tabloului.
A- pointer de tip float care reprezint adresa vectorului n care sunt stocate
elementele mai sus de diagonala principal.
n-de tip ntreg,reprezint numrul de elemente pe linie n matrice.
m-de tip ntreg,reprezint numrul de elemente pe coloan n matrice.
b)parametri intermediare:
i-de tip ntreg,reprezint indicele elementului curent pe linie n matrice.
j-de tip ntreg,reprezint indicele elementului curent pe coloan n matrice.
6.Funcia showAboveDiag:
a)parametri de intrare:
A- pointer de tip float care reprezint adresa vectorului n care sunt stocate
elementele mai sus de diagonala principal.
n-de tip ntreg,reprezint numrul de elemente pe linie n matrice.
m-de tip ntreg,reprezint numrul de elemente pe coloan n matrice.
b)parametri intermediare:
i-de tip ntreg,reprezint indicele elementului n tablou.
7.Funcia medAritm:
a)parametri de intrare:
D-pointer la pointer de tip float,stocheaz adresa vectorului de pointeri care la
rndul lor sunt pointeri de tip float care reprezint adresele fiecrei linii a
tabloului.
n-de tip ntreg,reprezint numrul de elemente pe linie n matrice.
m-de tip ntreg,reprezint numrul de elemente pe coloan n matrice.
4
b)parametri intermediare:
i-de tip ntreg,reprezint indicele elementului curent pe linie n matrice.
j-de tip ntreg,reprezint indicele elementului curent pe coloan n matrice.
max-de tip float,n care este stocat valoarea elementului maxim din matrice
min- de tip float,n care este stocat valoarea elementului minim din matrice
med- de tip float,n care este stocat valoarea mediei aritmetice a elementului
minim si maxim din matrice
c)parametri de ieire:
medP-pointer de tip float care reprezint adresa unde este stocat
media aritmetic a elementului minim i maxim din matrice.
8.Funcia sumPare:
a)parametri de intrare:
D-pointer la pointer de tip float,stocheaz adresa vectorului de pointeri care la
rndul lor sunt pointeri de tip float care reprezint adresele fiecrei linii a
tabloului.
n-de tip ntreg,reprezint numrul de elemente pe linie n matrice.
m-de tip ntreg,reprezint numrul de elemente pe coloan n matrice.
b)parametri intermediare:
i-de tip ntreg,reprezint indicele elementului curent pe linie n matrice.
j-de tip ntreg,reprezint indicele elementului curent pe coloan n matrice.
sum-variabil de tip float,n care este stocat suma elementelor de pe rndurile
pare din matrice
c)parametri de ieire:
sumP- pointer de tip float care reprezint adresa unde este stocat suma
elementelor de pe rndurile pare din matrice.
9.Funcia freeADM2D:
a)parametri de intrare:
D-pointer la pointer de tip float,stocheaz adresa vectorului de pointeri care la
rndul lor sunt pointeri de tip float care reprezint adresele fiecrei linii a
tabloului.
n-de tip ntreg,reprezint numrul de elemente pe linie n matrice.
b)parametri intermediare:
i-de tip ntreg,reprezint indicele elementului curent pe linie n matrice.
5
10.Funcia main:
a)parametri de intrare:
n-variabil de tip ntreg,reprezint numrul de elemente pe linie n matrice.
m-variabil de tip ntreg,reprezint numrul de elemente pe coloan n matrice.
b)parametri intermediare:
D-pointer la pointer de tip float,stocheaz adresa vectorului de pointeri care la
rndul lor sunt pointeri de tip float care reprezint adresele fiecrei linii a
tabloului.
C-pointer de tip float care reprezint adresa vectorului n care sunt stocate
elementele mai sus de diagonala principal.
6
Schema logic a algoritmului:
1.Schema logic a funciei care aloc memorie dinamic pentru un tablou bidimensional
cu n linii i m coloane:
Funcia are prototipul: float **ADM2D(int n,int m);
2.Schema logic a funciei care aloc memorie dinamic pentru elementele mai sus de
diagonala principal a tabloului
Funcia are prototipul: float *ADM1D(int n,int m);
7
3.Schema logic a funciei care citete de la tastatur elementele tabloului bidimensional:
Funcia are prototipul: void citireMatrice(float **D,int n,int m);
5.Schema logic a funciei care stabilete elementele mai sus de diagonala principal a
tabloului bidimensional.
Funcia are prototipul: void aboveDiag(float **D,float *A,int n,int m);
8
6.Schema logic a funciei care afieaz la ecran elementele de mai sus de diagonala
principal
Funcia are prototipul: void showAboveDiag(float *A,int n,int m);
9
8.Schema logic a funciei care determin suma elementelor din rndurile pare ale tabloului.
Funcia are prototipul: float *sumPare(float **D,int n,int m);
9.Schema logic a funciei care elibereaz memoria pentru tabloul dimensional introdus.
Funcia are prototipul: void freeADM2D(float **D,int n);
10
10.Schema logic a funciei main:
Funcia are prototipul: int main();
11
Codul (textul) programului in limbajul C:
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
12
for(j=1;j<m;j++){
if(i==j-1){
A[i]=D[i][j];
}
}
}
}
else{
for(i=0;i<n-1;i++){
for(j=1;j<n;j++){
if(i==j-1){
A[i]=D[i][j];
}
}
}
}
}
int main(){
/***********Variabile*********/
float **D;
float *C;
int n,m;
/***********Citire N**********/
puts("Dati N: ");
scanf("%i",&n);
puts("Dati M: ");
scanf("%i",&m);
if(n<1 || m<1){
puts("Numarul de linii si coloane trebuie sa fie mai mare decit 1");
}else{
/***********Alocare dinamica 2D**********/
D=ADM2D(n,m);
/***********Alocare dinamica 1D**********/
C=ADM1D(n,m);
/***********Citire si afisare matrice bidimensionala**********/
citireMatrice(D,n,m);
printf("\n************* Rezultatele obtinute: *************");
printf("\n\nMatricea introdusa:\n");
afisareMatrice(D,n,m);
Atunci cnd este introdus o matrice unde numrul de linii sau numrul de coloane sunt mai
mici dect 2 obinem rezultatul precum c nu se poate de calculat elementele mai sus de
diagonala principal deoarece matricea introdus nu are o diagonal principal:
De asemenea atunci cnd matricea are doar un rnd de elemente obinem mesajul c nu se
poate de calculat suma elementelor din rindurile pare deoarece matricea nu conine rnduri
pare:
15
Pentru n>1 i m>1 obinem:
16
Analiza rezultatelor si concluzii:
1)n urma elaborrii lucrrii de laborator ne-am format deprinderi de lucru cu funcii i
putem observa cu uurin utilitatea acestora atunci cnd avem nevoie de a efectua anumite
instruciuni in mod repetat.
2)Tot odat utiliznd funciile obinem o claritate mai bun a codului i putem apela o
funcie de cte ori dorim i putem s o utilizm i pentru parametri diferite.
3)De asemenea ne-am format deprinderi de lucru n ceea ce privete alocarea dinamic a
memoriei i a pointerilor.
4)Alocnd dinamic memorie putem gestiona mai eficient memoria calculatorului i acest
fapt este uor de observat atunci cnd calculatorul are puin memorie la dispoziie sau
programele sunt voluminoase i necesit cantiti mari de memorie.
5)Programul a fost optimizat pentru cazurile precum:
Introducerea unor numere negative sau egale cu 0 pentru n i m.
Alocarea dinamic corect pentru tabloul unidimensional n dependen de numrul de
elemente de deasupra diagonalei principale.
Afiarea unui aviz n cazul cnd matricea introdus nu are diagonal principal i este
imposibil calcularea elementelor de deasupra diagonalei principale.
Afiarea unui aviz n cazul cnd matricea introdus are doar un rnd de elemente,astfel
nu se poate de calculat suma elementelor din rndurile pare.
17
Bibliografie:
18