45 3 144KB
Universitatea Tehnică a Moldovei Facultatea Calculatoare Informatică și Microelectronică Departamentul Ingineria Software și Automatică
RAPORT la lucrarea de laborator nr. 1
la Structuri de Date și Algoritmi Tema: Analiza eficienței prelucrării structurilor de date cu pointeri
Varianta 3 72
A efectuat:
Chiforiuc Adrian
A verificat:
Prijilevschi Dumitru
Chişinău 2020
Scopul lucrării 1. Verificarea corectitudinii scrierii programelor în limbajul de programare C. 2. Corectarea și explicarea erorilor apărute în urma compilării și lansării programului.
Obiectivele temei 1. De studiat şi însuşit materialul teoretic din lucrarea dată si prin 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. 2. In baza materialului teoretic la prima lucrare de laborator efectuati cate 2 exerciţii (unul de la inceput si altul de la alt capat ) şi să se analizeze algoritmii şi si specificul organizarii programelor cu si fără pointeri (declarări şi parcurgeri cu pointeri).
Extras Teoretic Orice program care realizează un produs are nevoie de eficacitate fără să mai vorbim de driverele la care se lucrează continuu pentru câteva procente de viteză în plus. Poate că raportată la explozia calculatoarelor, a programelor prietenoase, a bazelor de date, a paginilor Web, pare în scădere, însă de fapt nevoia de viteză este din ce în ce mai mare şi mult timp această nevoie nu va dispărea. Variabilele pot fi statice sau dinamice. Cele statice au o zonă de memorie bine definită. Structura, locul, tipul acestei zone nu poate fi schimbată în procesul execuţiei programului. Accesul la variabilele statice se face direct, după nume. Structurile statice de date au un număr fix de elemente, care nu poate fi modificat. Alocarea memoriei se face într-un spaţiu strict determinat al memoriei, care permite adresarea directă. O altă categorie de variabile, accesibile în limbaje este cea dinamică. Pentru acest tip de variabile poate fi modificat volumul de memorie rezervat, ceea ce face mai flexibilă alocarea memoriei în procesul de lucru al programului. Structurile dinamice pot acumula elemente în procesul de funcţionare al programului, sau pot lichida elementele ce au devenit neutilizabile. Accesul la aceste variabile şi declararea lor se face în mod diferit de cel al variabilelor statice. Accesarea (definirea) este indirectă, prin intermediul unui tip mediator de variabile – tipul referinţă. Variabile de tip referinţă conţin referiri (adresări indirecte) la variabilele dinamice. Referirea se realizează prin memorarea în variabila referinţă a adresei unde e stocată variabila dinamică.Pentru variabilele tip referinţă se alocă un spaţiu de memorie de 4 octeţi, care conţin adresa variabilei dinamice. Memoria pentru variabilele dinamice se alocă dintr-o zonă specială, care foloseşte adresarea indirectă, numită heap. Această zonă este diferită de zona pentru variabilele statice.
Rezolvare Ex 3 # include “ studio.h” main ( ) {
int i, *pi, **ppi;
/* se declara un intreg , un pointer la int. si un pointer la pointer la
int. */ pi = & i ;
/* initializarea pointerului pi cu adresa lui i */
ppi = & pi;
/* initializarea lui ppi cu adresa lui pi */
printf ( “ pi = %p ppi = %p \ n” , pi, ppi) ; *pi = 7;
/*Echivalent cu i = 7 */
printf (“ i = %d \ n “, i ); i = *pi – 3 ;
/ * Echivalent cu i = i - 3 ;
*/
printf ( “ i = % d \ n “, i) ; *pi = **ppi*2;
/* Echivalent cu i = i* 2 ;
*/
printf ( “ i = % d \ n “, i) ; }
Erori:
Funcția main nu contine tipul in fața denumirii. Funcțiile „printf” nu lucreaza deoarece nu a fost încărcată corect bibliuteca Erori cauzate din cauza unor greseli sintactice a programului
Programul corectat : #include int main (void) { la int. */
int i, *pi, **ppi; /*se declara un intreg, un pointer la int. si un pointer la pointer pi= &i ;
/* initializarea pointerului pi cu adresa lui i */
ppi= π
/* initializarea lui ppi cu adresa lui pi */
printf ("pi = %p ppi = %p \n" , pi, ppi) ; *pi = 7;
/*Echivalent cu i = 7
*/
printf ("i = %d \n", i ); i = *pi-3 ;
/* Echivalent i = i - 3 ;
*/
printf ("i = % d \n", i) ; *pi = **ppi*2;
/* Echivalent cu i = i* 2 ;
*/
printf ("i = % d \n", i) ; }
Ex 72 #include ; #include ; #include ; void main() { int *p,*a,i,j,n,k,s,l; char ch; //clrscr(); printf("Indicati dimensiunea matricei:"); scanf("%d",&n); a=(int *) malloc(n*n); for(i=0;i