Documente Academic
Documente Profesional
Documente Cultură
RAPORT
Lucrarea de laborator nr.6
la Programarea Calculatoarelor
A efectuat:
st. gr. TI-000
A verificat:
dr., conf.univ.
M. Kulev
Chiinu -2015
Funcia este utilizat pentru a afia rezultatul obinut.n cazul n care nu se depisteaz elemente
negative n tablou, este afiat mesajul: Tabloul nu are elemente negative. Funcia nu returneaz
valori.
n caz contrar, afieaz denumirea tabloului i rezultatul.
Parametrii:
value - variabil simpl de tip float. Conine produsul elementelor negative a tabloului
unidimensional.
status variabil simpl de tip integer. Utilizat de funcie pentru a decide dac s afieze
mesajul aferent tabloului A sau B.
neg1 variabil simpl de tip integer. Reprezint numrul de elemente negative din tabloul
unidimensional. Este utilizat de funcie pentru a decide dac s afieze sau nu mesajul aferent
lipsei de numere negative.
float ** allocate_barray(int elements):
Aceast funcie are scopul de a aloca spaiu pentru tabloul bidimensional, returnnd un pointer la
pointer la float. n cazul n care spaiul nu este alocat, funcia afieaz un mesaj ctre utilizator i
efectueaz ieirea din program prin funcia exit.
Parametrii funciei:
elements variabil simpl de tip integer. Conine numrul de rnduri i coloane a matricii
ptratice.
Variabile locale:
i - variabil local simpl de tip integer, se utilizeaz pentru a itera prin tabloul de pointeri.
array variabil de tip pointer la pointer la float. Conine adresa nceputului tabloului de
pointeri. Reprezint valoarea returnabil a funciei.
void read_barray(float**array, int elements):
Acest funcie este utilizat pentru ca utilizatorul s introduc valori n tabloul bidimensional
pentru care s-a alocat memorie. Funcia nu are valoare returnabil.
Parametri:
array - variabil de tip pointer la pointer la float. Conine adresa nceputului tabloului de
pointeri.
elements variabil simpl de tip integer. Conine numrul de rnduri i coloane a matricii
ptratice.
i - variabil local simpl de tip integer, se utilizeaz pentru a itera prin rndurile tabloului
bidimensional.
j - variabil local simpl de tip integer, se utilizeaz pentru a itera prin coloanele tabloului
bidimensional.
void show_barray(float **array, int elements):
Aceast funcie afieaz elementele tabloului bidimensional. Funcia nu are valoare returnabil.
Parametrii funciei:
array variabil simpl de tip pointer la nceputul tabloului de pointeri.
elements variabil simpl de tip integer, conine numrul de rnduri i coloane a matricii
ptratice.
Variabile locale:
i variabil local simpl de tip integer, se utilizeaz pentru a itera prin rndurile tabloului
bidimensional.
j - variabil local simpl de tip integer, se utilizeaz pentru a itera prin coloanele tabloului
bidimensional
void make_uniarray(float ** barray, float * array,int elements, int * index):
Aceast funcie este utilizat pentru a da valori tabloului unidimensional. Acestea includ
elementele mai mari ca 0 i mai mici ca 4 n tabloul bidimensional. Nu are valori returnabile.
Parametrii funciei:
barray variabil simpl de tip pointer la nceputul tabloului de pointeri.
array - variabil simpl de tip pointer la nceputul tabloului unidimensional de tip float.
3
elements - variabil simpl de tip integer, conine numrul de rnduri i coloane a matricii
ptratice.
index variabil simpl de tip pointer. Prin dereferenierea acestuia, putem accesa variabila
prevzut pentru pstrarea numrului de elemente a tabloului unidimensional. Variabila la care
pointeaz acesta este incrementat la adugarea fiecrui element n tabloul unidimensional.
Variabile locale:
i variabil local simpl de tip integer, se utilizeaz pentru a itera prin rndurile tabloului
bidimensional.
j - variabil local simpl de tip integer, se utilizeaz pentru a itera prin coloanele tabloului
bidimensional
float sum_elements(float * array,int elements):
Aceast funcie determin suma elementelor din tabloul unidimensional. Returneaz valoarea
acesteia, de tip float.
Parametrii funciei :
array - variabil simpl de tip pointer la nceputul tabloului unidimensional de tip float.
elements variabil simpl de tip integer, conine numrul de elemente a tabloului
unidimensional.
Variabile locale:
i - variabil local simpl de tip integer, se utilizeaz pentru a itera prin tabloul unidimensional.
sum- variabil simpl de tip float. Este variabila returnabil a funciei. Conine suma
elementelor tabloului unidimensional.
Schema logic:
Funcia main():
Funcia allocate_uniarray():
Funcia fill_1D():
Funcia
show_uniarray():
Funcia product_negative():
Funcia print_result():
Funcia allocate_barray():
Funcia read_barray:
Funcia show_barray:
Funcia make_uniarray:
Funcia sum_elements():
if(array == NULL)
{puts("Memoria nu a fost alocata");exit(1);}
else
{return array;}}
void print_result(float value, int status,int neg1)
{
if (neg1 == 0)
{if(status == 0)
{printf("Tabloul A nu are elemente negative\n");}
else
{printf("Tabloul B nu are elemente negative\n");}}
else
{if (status == 0)
{printf("Pentru tabloul A, produsul elementelor negative este: %.3f\n", value);}
else
{printf("Pentru tabloul B, produsul elementelor negative este: %.3f", value); }
}
return;}
float product_negative(float *array, int elements, int*present)
{
float product = 1;
*present = 0;
int i;
for(i = 0;i<elements;i++)
{if (array[i]<0)
{product *= array[i];
*present+=1;}}
return product;}
void show_uniarray(float * array,int elements,int status)
{
int i;
if (status == 0)
{puts("Elementele tabloului unidimensional sunt: ");}
else
{puts("Diagonala secundara a tabloului este");}
for(i = 0;i < elements;i ++)
{printf("\t%.3f",array[i]);}
puts("");}
void fill_1D(float*uni,int elements, int status)
{
int i;
float value;
for(i= 0 ; i < elements; i++)
{
if (status == 0)
{printf("A[%d]= ", i+1);}
else
{printf("B[%d]= ", i+1);}
10
scanf("%f", &uni[i]);}
return;}
float* allocate_uniarray(int elements)
{
float *array = (float*) malloc(sizeof(float)*elements);
if(array == NULL)
{puts("Memoria nu a fost alocata"); exit(1);}
else {return array;}}
int main()
{
int n;
float productA, productB;
int neg1=0;
puts("Introduceti numarul de elemente a tabloului A");
scanf("%d",&n);
float* A = allocate_uniarray(n);
puts("Introduceti elementele tabloului A");
fill_1D(A,n,0);
show_uniarray(A,n,0);
productA = product_negative(A,n,&neg1);
print_result(productA,0,neg1);
free(A);
puts("Introduceti numarul de elemente a tabloului B");
scanf("%d",&n);
float* B = allocate_uniarray(n);
puts("Introduceti elementele tabloului B");
fill_1D(B,n,1);
show_uniarray(B,n,0);
productB = product_negative(B,n,&neg1);
print_result(productB,1,neg1);
free(B);
int M=0;
float sum;
puts("\nDati numarul de linii a matricii patrate");
scanf("%d", &n);
float ** BTable = allocate_barray(n);
read_barray(BTable,n);
show_barray(BTable,n);
float *Q = allocate_uniarray(n);
make_uniarray(BTable,Q,n,&M);
show_uniarray(Q,M,1);
sum = sum_elements(Q,M);
if (sum == 0)
{puts("In diagonala principala nu sunt elemente mai mari ca 0 si mai mici ca 4");}
else
{printf("Suma elementelor mai mari ca 0 si mai mici ca 4 =%3.f",sum);}
free(Q);
getch();
return 0;}
11
2. Pentru tabloul A s-a dat un numr negativ de elemente, pentru a verfica func ia de
alocare. Mesajul de nealocare a fost afiat. Programul s-a terminat imediat dup acest
mesaj.
( )
12
3.A =
( )
4.A =
( )
, unde unele elemente sunt mai mari, altele mai mici dect 4.
9 8 7
5 5 9
7 8 3
corespunztor.
6 7 2
3 9 8
5 9 0
2. Funciile create pot fi reutilizate prin apelarea repetat a acestora, ceea ce economise te
destul de mult timp ce ar fi utilizat la scrierea funciilor separate pentru fiecare sarcin.
3. Variabilele de tip pointer sunt destul de utile pentru accesarea valorilor variabilelor
declarate n alte funcii. Pentru acest scop pot fi utilizate variabilele globale (declarate n
afara funciilor), ns acest lucru nu este recomandabil.
4. Prin utilizarea funciilor malloc, realloc, calloc din biblioteca stdlib, memoria poate fi
alocat n mod dinamic, conform cerinelor utilizatorului. Astfel se evit alocarea unei
poriuni prea mari de memorie, atunci cnd utilizatorul introduce o matrice mic, i se evit
depirea memoriei atunci cnd utilizatorul are nevoie s prelucreze un tablou, ce ocup mai
mult memorie dect a fost prevzut de programator.
Bibliografie:
1. Carcea L.,Vlas S., Bobicev V. Informatica:Sarcini pentru lucrri de laborator. Chi inu:
UTM, 2005. - 19p.
2.Conspectul prelegerilor cursului Programarea Calculatoarelor pentru studen i gr. TI-154,
SI-151. Lector: dr., conf. univ. M.Kulev. Chiinu, UTM, 2015.
3.Multi-dimensional arrays in C,
http://www.tutorialspoint.com/
14