Differences

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

Link to this comparison view

programare:laboratoare:lab09 [2018/11/26 14:32]
george.pirtoaca [Alocarea dinamică a memoriei. Aplicaţii folosind tablouri şi matrice.]
programare:laboratoare:lab09 [2023/12/15 15:53] (current)
oana.balan [Bonus]
Line 1: Line 1:
 ===== Alocarea dinamică a memoriei. Aplicaţii folosind tablouri şi matrice. ===== ===== Alocarea dinamică a memoriei. Aplicaţii folosind tablouri şi matrice. =====
  
-**Responsabil:** +**Responsabili:** 
-  *[[laura.vasilescu@cti.pub.ro|Laura Vasilescu]] +  * [[neatudarius@gmail.com|Darius Neațu (CA 2019-2020)]] 
-  *[[murarugeorgec@gmail.com|George Muraru]] +  * [[ion_dorinel.filip@cti.pub.ro|Dorinel Filip (CA 2019-2020)]] 
- +  * [[laura.vasilescu@cti.pub.ro|Laura Vasilescu]] 
-[[https://​we.tl/​t-0YqXd5EtQ4|Probleme]]+  * [[murarugeorgec@gmail.com|George Muraru]]
  
  
Line 45: Line 45:
 <code c> <code c>
 int i; int i;
-int *a = malloc(n * sizeof(int);​+int *a = malloc(n * sizeof(int));
 for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
     a[i] = 0;     a[i] = 0;
Line 183: Line 183:
   a = malloc(nl * sizeof(int *));   // Alocare pentru vector de pointeri   a = malloc(nl * sizeof(int *));   // Alocare pentru vector de pointeri
  
-  for (i = 0; i < n; i++) {+  for (i = 0; i < nl; i++) {
     a[i] = calloc(nc, sizeof(int));​ // Alocare pentru o linie si initializare la zero     a[i] = calloc(nc, sizeof(int));​ // Alocare pentru o linie si initializare la zero
   }   }
Line 462: Line 462:
   * Nu uitaţi să eliberaţi memoria alocată dinamic, folosind funcţia ''​free()''​. Memoria rămasă neeliberată încetineşte performanţele sistemului şi poate conduce la erori (bug-uri) greu de depistat.   * Nu uitaţi să eliberaţi memoria alocată dinamic, folosind funcţia ''​free()''​. Memoria rămasă neeliberată încetineşte performanţele sistemului şi poate conduce la erori (bug-uri) greu de depistat.
  
-===== Anexă: Clase de stocare ​=====+===== Studiu ​de caz =====
  
 +<spoiler Clase de stocare>
 <​note>​Această secţiune este opţională şi nu este necesară pentru rezolvarea exerciţiilor de laborator, însă ajută la înţelegerea aprofundată a modului în care limbajul C lucrează cu variabilele.</​note>​ <​note>​Această secţiune este opţională şi nu este necesară pentru rezolvarea exerciţiilor de laborator, însă ajută la înţelegerea aprofundată a modului în care limbajul C lucrează cu variabilele.</​note>​
  
Line 476: Line 477:
  
 
Memoria neocupată de datele statice şi de instrucţiunile unui program este împărţită între stivă şi heap. Consumul de memorie pe stivă este mai mare în programele cu funcţii recursive şi număr mare de apeluri recursive, iar consumul de memorie heap este mare în programele cu vectori şi matrice alocate (şi realocate) dinamic. 
Memoria neocupată de datele statice şi de instrucţiunile unui program este împărţită între stivă şi heap. Consumul de memorie pe stivă este mai mare în programele cu funcţii recursive şi număr mare de apeluri recursive, iar consumul de memorie heap este mare în programele cu vectori şi matrice alocate (şi realocate) dinamic.
 +</​spoiler>​
 ===== Exercitii laborator CB/CD ===== ===== Exercitii laborator CB/CD =====
 Codul sursa se gaseste [[http://​swarm.cs.pub.ro/​~gmuraru/​PC/​ex.c|aici]] Codul sursa se gaseste [[http://​swarm.cs.pub.ro/​~gmuraru/​PC/​ex.c|aici]]
Line 490: Line 491:
 **Următoarele două probleme vă vor fi date de asistent în cadrul laboratorului.** **Următoarele două probleme vă vor fi date de asistent în cadrul laboratorului.**
  
-[[https://​drive.google.com/​drive/​folders/​0BworQDqcRK0yd205cE1qamZ5bEU|Checker laborator 9]]+[[https://​drive.google.com/​drive/​folders/​1qB6EZLGVubKbuTXMtMue06egH_8fo25M|Checker laborator 9]]
  
 <​hidden>​ <​hidden>​
Line 512: Line 513:
       * **[1p]** b) Scrieţi un program care calculează factorialul numerelor de la 1 la 50, afişând câte un număr pe fiecare linie.       * **[1p]** b) Scrieţi un program care calculează factorialul numerelor de la 1 la 50, afişând câte un număr pe fiecare linie.
   - **[2p]** Se consideră un paralelipiped tridimensional cu dimensiunile citite de la tastatură, pentru care va trebui să alocaţi memorie. De asemenea, se citeşte apoi un număr pozitiv N, ce reprezintă un număr de bombe care vor fi plasate în paralelipiped. Apoi se citesc N triplete ce reprezintă coordonatele bombelor. Valorile citite vor trebui validate astfel încât să nu depăşească dimensiunile paralelipipedului. Pentru fiecare cub liber se va calcula numărul de bombe din cei maxim 26 de vecini ai săi, şi aceste numere vor fi afişate pe ecran, alături de coordonatele corespunzătoare. La sfârşitul execuţiei programului,​ memoria alocată va trebui eliberată.   - **[2p]** Se consideră un paralelipiped tridimensional cu dimensiunile citite de la tastatură, pentru care va trebui să alocaţi memorie. De asemenea, se citeşte apoi un număr pozitiv N, ce reprezintă un număr de bombe care vor fi plasate în paralelipiped. Apoi se citesc N triplete ce reprezintă coordonatele bombelor. Valorile citite vor trebui validate astfel încât să nu depăşească dimensiunile paralelipipedului. Pentru fiecare cub liber se va calcula numărul de bombe din cei maxim 26 de vecini ai săi, şi aceste numere vor fi afişate pe ecran, alături de coordonatele corespunzătoare. La sfârşitul execuţiei programului,​ memoria alocată va trebui eliberată.
 +
 +
programare/laboratoare/lab09.1543235574.txt.gz · Last modified: 2018/11/26 14:32 by george.pirtoaca
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