Sunteți pe pagina 1din 6

Universitatea Tehnică a Moldovei

Catedra Automatică și Tehnologii Informaționale

RAPORT
despre lucrarea de laborator nr. 1

la disciplina Structuri de Date si Algoritmi

Tema: Analiza eficientei prelucrarii structurilor de date cu pointeri

Varianta 6

A îndeplinit: studentul grupei TI-172, Parasii Alexandru


A controlat: Motpan Sergiu

CHIȘINĂU
2018
 Scopul lucrării:
Insusira notiunilor despre pointeri si demonstrarea intelegerii operatiilor cu ei.

 Sarcina lucrării:

 De studiat şi însuşit materialul teoretic din lucrarea dată prin însușirea noțiunilor și lansarea exerciţiilor la
execuţie pentru analiza şi evidenţierea esenţialului prelucrării structurilor de date cu pointeri în elaborarea
modelelor soluţiei prin explicaţii, argumentări şi organigrame.
 În partea practică, la prima lucrare, de organizat un program din trei exemple, propuse de profesor, analizând
specificul implementării pointerilor prin simulare numerică și rezultatele obținute.
 În raport să fie expuse toate programele şi calculele efectuate. Să se analizeze tehnica programării eficiente
cu pointeri în baza exerciţiilor şi variantelor problemelor efectuate pentru diverse situaţii cu argumentări.

 Mersul lucrării:
 Program cu pointeri:

#include "stdio.h"
void printare(int *a)
{
int i;
for (i=0;i<5;i++)
{
printf("%d\n",*(a+i));
}
}
int x2(int n)
{
return n+5;
}

int x1(int (*fun)(int),int n)


{
return fun(n)+5;
}
void main()
{
//Ex:1
//Pointer la var.
int x=4,y=1,*px;
px=&x;
printf("Ex:1\ninainte de copiere:: y=%d\n",y);
y=*px;
printf("dupa copiere:::::::: y=%d\n",y);
//Ex.2
//Pointer la tablou
int a[5];
a[0]=2; a[1]=5; a[2]=3; a[3]=6; a[4]=7;
printf("Ex:2\n");
printare(a);

//Ex:3
//Pointer la pointer
int z=1,*p,**pp;
p=&z;
pp=&p;
*p=4;
printf("Ex:3\n**pp=%d, x=%d",**pp,z);

//Ex:4
//Pointer la functie
int n=5;
printf("\nEx:4\nApelarea funtiei x2, din functia x1\nn=%d\n",x1(x2,n));
}

 Laboratorul 5 prin pointeri:

#include "stdio.h"
#include "string.h"
#include "stdlib.h"

void **citire (int n)


{
int i,j;
printf ("Introduceti elementele matricei:\n");
int **a=NULL;
a=malloc(n*sizeof(int *));
for(i=0;i<n;i++)
{
*(a+i)=malloc(n*sizeof(int));
for (j=0;j<n;j++)
{
printf("a[%d][%d]= ",i,j);
scanf ("%d",*(a+i)+j);
}
}
return (a);
}
void media (int n,int **a)
{
int i,j;
float m,s=0,nr=0;

for (i=0;i<n;i++)
for (j=0;j<n;j++)
{
if (*(*(a+i)+j) >0)
{
s+=*(*(a+i)+j);
nr++;
}
}
m=s/nr;
printf("Media elementelor pozitive este %.3f\n",m);
}

void prod_diag (int n, int **a)


{
int i,j,p=1;
for (i=0;i<n;i++)
{ //Diagonala principala
p*=*(*(a+i)+i);
}

for (i=0,j=n-1;i<n;i++)
{ //Diagonala secundara
p*=*(*(a+i)+j);
j--;
}
printf("Produsul de pe diagonale este %d\n",p);
}

void free_matrix(int n,int **a)


{ for (int i=0; i<n; i++)
free(*(a+i));
free(a); }
void main ()
{
int n,**a;
printf ("Introduceti ordinul matricei patratice: ");
scanf ("%d",&n);

a=citire (n);
printf("%d\n",a[1][1] );
media (n,a);
printf("%d\n",a[1][1] );
prod_diag (n,a);
printf("%d\n",a[1][1] );
free_matrix(n,a);
printf("%d\n",*(*(a+1)+1));
return (0);
}
 Schema-bloc:

Start Start
Start Start (media) (prod_diag)
(**citire)

n, **a i,j,m i,j


i,j
s=0, nr=0 p=1
Citire n
**a=NULL
i=0 i=0
i=0
a=citire(n)
((n)
media (n,a) i<n i<n
i<n
prod_diag (n,a) j=0 p*=*(*(a+i)+i)
j=0
i++ i++
free(a)
i++
j<n
STOP j<n
i=0, j=n-1
(*(*(a+i)+j)>
citire *(a+i)+j) 0

i<n
j++
s+=*(*(a+i)+j)
p*=*(*(a+i)+j)
nr++ ;
END j--
j++
i++
m=s/nr

Afisare m Afisare p

END END
 Concluzie:
Utilizarea pointerilor garanteaza o prelucrare sigura a datelor si garanteaza un
rezultat corect, indiferent de operatiile efectuate cu sau fara functii.

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