Differences

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

Link to this comparison view

programare:laboratoare:lab09 [2018/11/13 12:15]
george.muraru [Exemple de programe]
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]] 
 +  * [[murarugeorgec@gmail.com|George Muraru]]
  
  
Line 44: 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 182: 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 270: Line 271:
  
 <code c> <code c>
-// Utilizare "​mystrdup"​ 
 #include <​stdio.h>​ #include <​stdio.h>​
 #include <​string.h>​ #include <​string.h>​
 #include <​stdlib.h>​ #include <​stdlib.h>​
  
 +// Utilizare "​mystrdup"​
 int main(void) int main(void)
 { {
Line 280: Line 281:
  
   do {   do {
-    if (fgets(s, 80, stdin) == 0) {+    if (fgets(s, 80, stdin) == NULL) {
       break;       break;
     }     }
Line 298: Line 299:
 } }
 </​code>​ </​code>​
-Puteti testa codul [[http://​tpcg.io/​6x440f|aici]].+Puteti testa codul [[http://​tpcg.io/​eaSDUd|aici]].
  
 In exemplele urmatoare consideram ca toate alocarile de memorie nu vor esua. In exemplele urmatoare consideram ca toate alocarile de memorie nu vor esua.
Line 461: 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 475: 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 488: Line 490:
  
 **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/​1qB6EZLGVubKbuTXMtMue06egH_8fo25M|Checker laborator 9]]
 +
 <​hidden>​ <​hidden>​
 Link direct către lista completă de probleme: [[https://​docs.google.com/​document/​d/​15IBKbSiFYEJ_9zeuMksWYnFt2WkKgC1EaigCpyFAi6E/​edit|aici]] Link direct către lista completă de probleme: [[https://​docs.google.com/​document/​d/​15IBKbSiFYEJ_9zeuMksWYnFt2WkKgC1EaigCpyFAi6E/​edit|aici]]
Line 508: 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.1542104145.txt.gz · Last modified: 2018/11/13 12:15 by george.muraru
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