Sunteți pe pagina 1din 9

Lucrare de laborator Nr.

11
Tema: Pointeri şi tablouri.

Scopul lucrării: Analiza funcționării pointelor. Declararea, afișarea, atribuirea valorilor etc.

Obiective:
o apel prin referinţă şi valoare;
o alocarea dinamică a memoriei;
o Operații cu pointeri și particularități lor;
o Relaţii dintre pointeri şi vectori;
o Eliberarea memoriei dinamice.

11.1. Teme pentru studiu prealabil


 Pointerii. Pointeri tipizaţi.
 Pointerii şi tablourile.
 Aritmetica de adresă.
 Atribuirea dinamică a memoriei.

11.2. Sarcina pentru realizare:

Varianta: 4

De realizat sarcina lucrări de laborator nr. 8 cu astfel de condiții adăugătoare:


 mărimea tabloului se determină la începutul execuţiei programului ca număr aleator din domeniul
50-200;
 în textul programului se interzice utilizarea operaţiei de indexare.

Sarcina din lab. 8 : Să se declare un tablou de numere întregi și să se completeze cu valori aleatorii. Mărimea
tabloului – 200 elemente, domeniul de valori – -100 ...+100. În toate consecutivitățile de numere pozitive de
înlocuit valorile elementelor maxime și minime cu valoare medie ale acestor consecutivităţi.

TST-211 4 L L 11
Sch Coala № Document Semnat Data
Executat Fedun Litera Coala Coli
Vladislav
Controlat Meriacri P. 2 9
Pointeri şi tablouri.
UTM FET
TST-211

Coala
TST-211 . 4 LL11 3
Sch Coala № Document Semnat Data
Coala
TST-211 4 LL11 4
S Coala № Document Semnat Data
c
h
Programul
#include<stdio.h>
#include<time.h>
#include<stdlib.h>

int main()
{
int *i, *j, *t, k=-1, n, p;
n=200;

srand(time(NULL));
t=new int[n];
j=new int(0);

printf("Array: \n");
for(i=t;i<n+t;i++)
{
*i=(rand()%111)-10;
printf("% d\t",*i);
}
printf("\n");

printf("\nIndicii initiali si finali fiecareia consecutivitate de numere pozitive mai lungi de 5 elemente: \n");
for(i=t,p=0;i<n+t;i++,p++)
{
if(*i>0)
{
*j+=1;
k=0;
}
else if(k==0&&(*i<=0))
{
printf("de la p.i: %d\n",p-*j);
printf("pina la p.i: %d\n\n",p-1);
*j=0;
k=-1;
}
}
if(*i>0){printf("de la p.i: %d\n",p-*j);printf("pina la p.i: %d\n",p);}

return 0;}

Coala
TST-211 4 LL11 5
Sch Coala № Document Semnat Data
Erori
1. Sintaxa
2. Înțelegerea sarcinii de lucru

Ajustarea programului se realizează conform planului, ce este şi la lucrarea nr.8. Dar, trebuie de
menţionat, că urmărirea valorilor în regimul pas cu pas este ceva mai anevoios, dacă în lucrarea nr.8 noi
aveam posibilitatea să observăm valori inteligibile a indicilor, atunci aici în locul lor noi vom vedea
valorile pointerilor, mai complicate pentru a fi înţelese. Recomandăm să vă bazaţi mai mult pe depistarea
erorilor la analiza rezultatelor programului.

Coala
TST-211 4 LL11 6
Sch Coala № Document Semnat Data
Lucru individual

1. Ce este un pointer? Pentru ce se folosește?


Memoria interna a calculatorului este organizata sub forma unei matrici imense, in care fiecare patratica
reprezinta un loc in care pot fi diferite informatii. Fiecare patrat este numerotat consecutiv in baza 16
incepand de la 0. Acestea numere se numesc adrese de memorie.
Pointerii pot sa pastreze adrese de memorie ale altor variabile (care la randul lor sa contina alte valori). Un
pointer este asociat intotdeauna unui tip de variabila (int, char, bool, s.a.m.d.). Pointerul indica defapt o
zona din memoria calculatorului.

2. Cum se declara variabila de tip pointer?


Pointerii se declara in felul urmator:
tipData * denumire;
De exemplu pentru a declara un pointer pentru o variabila int, vom scrie: int * p;
Aveti grija in schimb, daca scriem int * p1, p2; Doar p1 va fi de tip pointer, p2 va fi de tipul int, exact cum
am invatat pana acum.

int a = 17;
int *p = &a;

Coala
UTM 5 25 . 1 001 00 1 7
Sch Coala № Document Semnat Data
3. De ce la declararea pointerilor este necesar de indicat tipul variabilei la care se face adresarea cu
ajutorul lui?
De fapt, sintaxa declararii unei varaibile imita sintaxa expresiilor in care ar putea sa apara respectiva
variabila. Acest rationament este util in toate cazurile care implica declaratii complicate.

4. Aduceţi exemple de iniţializare a pointerilor cu adresa variabilelor.


int *p1 = &a, *p2 = &b;

5. Care este destinaţia operatorului adresă &?


Se aplica unei variabile si afiseaza adresa de memorie a variabilei.

6. Ce este un tablou dinamic?


Tablou care își poate schimba dimensiunile de la compilare la compilare, respectiv memoria alocată de
către calculator variază de la compilare la compilare, de asemenea are loc schimbarea adreselor pentru
fiecare variabilă.

7. Care este destinația operatorilor new și delete?


New-arată că variabila declarată este dinamică.
Delete-șterge din memorie variabila dinamică inițializată anterior.

Coala
TST-211 4 LL11 8
Sch Coala № Document Semnat Data
Concluzie
Pe baza rezultatelor lucrărilor de laborator nr.11, am observat cum funcționează indicatoarele. În acest caz,
lucram cu un desen unidimensional, repetând o sarcină efectuată anterior în laborator opt.

Coala
TST-211 4 LL11 9
Sch Coala № Document Semnat Data

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