Differences

This shows you the differences between two versions of the page.

Link to this comparison view

programare-cc:laboratoare:08 [2020/11/10 23:32]
bogdan.nutu
programare-cc:laboratoare:08 [2025/11/27 10:36] (current)
carmen.odubasteanu
Line 1: Line 1:
 ===== Laboratorul 08 - Alocare dinamică ===== ===== Laboratorul 08 - Alocare dinamică =====
- 
-**În acest laborator veţi învăţa să:** 
- 
-  * Alocaţi dinamic memorie folosind funcţiile malloc, calloc şi realloc 
-  * Folosiţi funcţia strdup pentru a clona şiruri de caractere 
-  * Eliberaţi memoria alocată folosind funcţia free. 
- 
-Funcţii pentru alocarea memoriei (din **stdlib.h**):​ 
- 
-  * **malloc** 
-<code c>type* ptr = malloc(size_t size);</​code>​ 
-Unde size_t este un tip întreg fără semn (unsigned), dependent de arhitectură (pentru arhitectura 32bit, acesta este unsigned int). 
- 
-Funcţia alocă o zonă continuă de memorie având dimensiunea de size octeţi şi returnează un pointer void* cu adresa de început a zonei de memorie alocată. Pentru a schimba tipul acestui pointer se foloseşte operatorul cast. 
- 
-Exemplu: 
-<code c>int *a = malloc( 100 * sizeof(int) );</​code>​ 
-Am alocat o zonă de memorie de 100 de elemente de tip int. Tipului pointerului returnat de funcţie, void*, i se face cast automat în int*. 
- 
-Funcţia sizeof(type) returnează numărul de octeţi ocupaţi de tipul type. 
- 
-  * **calloc** 
-<code c>type* ptr = calloc(size_t num, size_t size);</​code>​ 
- 
-Funcţia alocă spaţiu de memorie pentru un vector cu num elemente, fiecare element având dimensiunea size de octeţi şi returnează un pointer void* cu adresa de început a zonei de memorie alocată. **Atenţie!** Toţi biţii din această zonă de memorie sunt setaţi pe 0. 
- 
-Exemplu: 
-<code c>int *a = calloc( 100, sizeof(int) );</​code>​ 
-Am alocat o zonă de memorie de 100 de elemente de tip int. Toţi biţii din această zonă de memorie au valoarea 0. 
- 
-  * **realloc** 
-<code c>type* ptr = realloc(void* old_ptr, size_t size);</​code>​ 
- 
-Unde old_ptr este adresa de început a zonei de memorie pe care dorim să o realocăm, size reprezintă noua dimensiune a zonei de memorie (în octeţi), iar ptr este adresa de început a zonei de memorie după realocare. 
- 
-Funcţia realizează modificarea dimensiunii zonei de memorie referite de old_ptr. 
- 
-Exemplu: 
-<code c> 
-int *a = malloc( 100 * sizeof(int) ); 
-a = realloc( a, 200 * sizeof(int) ); 
-</​code>​ 
-Am alocat o zonă de memorie de 100 de elemente de tip int. Am mărit zona de memorie pentru 200 de elemente întregi. Atenţie! După realocare, cele 100 de numere întregi aflate iniţial în vectorul a au rămas nemodificate. 
- 
-  * **free** 
-<code c>void free(void* ptr);</​code>​ 
-Unde ptr reprezintă adresa zonei de memorie pe care dorim să o eliberăm. 
- 
-  * **strdup** 
-<code c>char *strdup( char *s );</​code>​ 
- 
-Unde s reprezintă un string (şir de caractere terminat cu '​\0'​). 
- 
-Funcţia alocă o nouă zonă de memroie la care se copiază octeţii şirului s. Se returnează un pointer către începutul zonei de memorie unde s-a făcut copierea. 
  
 ==== Problemă rezolvată ==== ==== Problemă rezolvată ====
Line 101: Line 47:
 ---- ----
  
-Prima linie din fisierul de intrare va contine ​subsirurile s1 si s2 separate de un spatiu.+Prima linie contine ​sirul s.
  
-Pe cea de-a doua linie din fisierul ​de intrare se va gasi sirul s.+Pe cea de-a doua linie sunt date subsirurile s1 si s2 separate ​de un spatiu.
  
 Sirurile sunt de lungime maxim 100. Sirurile sunt de lungime maxim 100.
Line 116: Line 62:
 ---- ----
 ^ Intrare ​     ^ Ieşire ​      ^ ^ Intrare ​     ^ Ieşire ​      ^
-imi nu-mi \\ mie imi plac pointerii | mie nu-mi plac pointerii |+ mie imi plac pointerii ​\\ imi nu-mi           | mie nu-mi plac pointerii |
  
 === Problema 2 === === Problema 2 ===
Line 157: Line 103:
 Să se scrie un program pentru citirea unor cuvinte (de la tastatură) şi afişarea numărului de apariţii ale fiecărui cuvânt. Cuvintele au maxim 19 litere fiecare. Să se scrie un program pentru citirea unor cuvinte (de la tastatură) şi afişarea numărului de apariţii ale fiecărui cuvânt. Cuvintele au maxim 19 litere fiecare.
  
-Se va folosi un vector de pointeri la cuvinte şi un vector de numere întregi. ​Variante+Se va folosi un vector de pointeri la cuvinte şi un vector de numere întregi. ​ 
-  ​Cei doi vectori au o dimensiune maximă şi nu se mai extind. +Se vor implementa ambele variante
-  ​Cei doi se alocă şi se extind dinamic (se realocă dacă este nevoie).+  ​1. Cei doi vectori au o dimensiune maximă şi nu se mai extind. 
 +  ​2. Cei doi se alocă şi se extind dinamic (se realocă dacă este nevoie).
  
 == Date de intrare == == Date de intrare ==
 ---- ----
  
-Pe prima linie din fisierul de intrare ​se va afla un numar natural n ce reprezinta numarul de cuvinte din fisier.+Pe prima linie se va afla un numar natural n ce reprezinta numarul de cuvinte din fisier.
  
 Pe urmatoarele linii se vor afla cele n cuvinte ce urmeaza a fi citite. Pe urmatoarele linii se vor afla cele n cuvinte ce urmeaza a fi citite.
Line 171: Line 118:
 ---- ----
  
-Fisierul de iesire va contine ​pe fiecare linie cate o pereche de forma "​cuvant numar_aparitii"​.+pe fiecare linie cate o pereche de forma "​cuvant numar_aparitii"​.
  
 Cuvintele trebuie afişate în ordinea în care au fost găsite în fişierul de intrare. Cuvintele trebuie afişate în ordinea în care au fost găsite în fişierul de intrare.
Line 211: Line 158:
 ---- ----
  
-Pe prima linie din fisierul de iesire se va afisa valoarea **C(n, k)**.+Se va afisa valoarea **C(n, k)**.
  
  
Line 236: Line 183:
 ---- ----
  
-Pe prima linie din fişierul de intrare ​se va afla un numar natural **n** reprezentand numarul de cuvinte din fisier.+Pe prima linie se va afla un numar natural **n** reprezentand numarul de cuvinte din fisier.
 Pe urmatoarea linie se afla cele **n** cuvinte separate prin cate un spatiu. Pe urmatoarea linie se afla cele **n** cuvinte separate prin cate un spatiu.
  
Line 253: Line 200:
 ---- ----
 ^ Intrare ​     ^ Ieşire ​      ^ ^ Intrare ​     ^ Ieşire ​      ^
-\\ abC def bcFr ty froop | abC-bcfR-froop |+\\ abC def bcFr ty froop | abC-bcfR-froop |
  
programare-cc/laboratoare/08.1605043962.txt.gz · Last modified: 2020/11/10 23:32 by bogdan.nutu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0