Sunteți pe pagina 1din 5

Ministеrul Еducаțiеi, Culturii și Cеrcеtării аl Rеpublicii Mоldоvа

Univеrsitаtеа Tеhnică а Mоldоvеi


Fаcultаtеа Cаlculаtоаrе, Infоrmаtică şi Micrоеlеctrоnică
Dеpаrtаmеntul Ingineria Software și Automatică

RAPORT

Lucrarea de laborator Nr.2


la disciplina Structuri de Date și Algoritmi

VARIANTA 31

A efectuat: st.gr.TI-192
Ciobanu Ecaterina
A verificat: asist.univ.
Cristina Josan

CHIŞINĂU – 2020
Tema: Analiza eficienţei prelucrării structurilor de date cu pointeri

Scopul lucrării: Aprecierea şi evidenţierea nivelului de cunoştinţe a fiecărui student cu privere la


tipuri dinamice de date, pointeri, acumulate în urma lucrării de laborator 1

Obiectivele lucrării
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). Pentru aprofundarea înţelegerii implementarii pointeriilor
in lucrarea de laborator nr. 2 să se dezvolte algoritmii şi programele cu pointeri pentru condiţiile
problemelor din Anexa1a (Anexa2. De elaborat algoritmul și de scris programul cu pointeri

si pointeri la funcții, propuse de profesor) şi să se elaboreze scenariile succinte de soluţionare


prin pointeri cu calculele de verificare şi explicaţii. Rularea programelor în limbajul C cu afişarea tuturor
variabilor de intrare, intermediare şi finale.
3. Î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.

PARTEA TEORETICĂ

Noțiuni principale din teorie. 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.
Variabilele dinamice ocupă un spaţiu de memorie în corespundere cu tipul lor: întreg (int), float
(real), şiruri de caractere (string) etc.

PARTEA PRACTICĂ

Sarcina lucrării: Scrieți un program cu pointeri care calculează anumite numere prime și păstrează
proprietatea de a rămâne prime pentru toate permutărilor cifrelor lo. Ex. 13 și 31; 131, 313, 133 etc. Să se
stabilească un algorit care determină numerele prime permutabile, mai mici decăt numărul dat.

Listing-ul programului:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 10

void print(int *num, int k)


{
int i;
for ( i = 1 ; i <= k ; i++)
printf("%d", num[i]);
printf("\n");
}
int main()
{
int *num[100];

// int *ptr;
int temp;
int i, n, j;
int l, aux=0;
printf("Dati numarul n:");
scanf("%i",&n);

for (i = 2; i <= n / 2; ++i) {


if (n % i == 0) {
aux = 1;
break;
}
}
if(n==1) printf("Numarul %d nu este nici prim nici compus",n);
else {

if (aux == 0)
{printf("%d este un numar prim\n", n);

int k;
k=0;
while(n)
{
num[++k]=n%10;
n=n/10;

}
for(i=1;i<=k;i++)
printf("%d ",num[i]);

printf("\n");
for (j = 0; j <= k; j++) {
for (i = 1; i <= k-1; i++) {
temp = num[i];
num[i] = num[i+1];
num[i+1] = temp;
print(num, k);
}
} } else printf("\n%d nu este un numar prim", n); }

return 0;
}return 0;
}
Rezultatele obținute:

CONCLUZIE
Lucrarea de laborator nnumărul 2 este o verificare a cunoștințelor studenților, acumulate în urma lucrării
de laborator numărul 1. Pentru realizarea sarcinii, trebuia de rulat și analizat codurile din laboratorul 1. În
urma acestei lucrăria fost dovedit că este mai eficientă utilizarea variabilelor dinamice, pointerilor, decât a
variabilelor statice.
BIBLIOGRAFIE

1. Indicațiile metodice
2. L.Negrescu. Limbajele C şi C++ pentru începători, Vol. 1 şi 2. Ed. Microinformatica,Cluj_Napoca,
1994 (reeditare 2000).

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