Differences

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

Link to this comparison view

programare:teme_2017:tema2_2017_cbd [2017/11/21 22:59]
relu.dragan [Actualizari]
programare:teme_2017:tema2_2017_cbd [2017/12/12 15:21] (current)
relu.dragan [Actualizari]
Line 7: Line 7:
 **Autor inițial:** Stefan Bucur **Autor inițial:** Stefan Bucur
  
-**Deadline hard:​** ​11.12.2017 23:55+**Deadline hard:​** ​12.12.2017 23:55
  
 <note warning> <note warning>
Line 21: Line 21:
    * 21.11 17.34 - Modificare enunt, structura unui bloc    * 21.11 17.34 - Modificare enunt, structura unui bloc
    * 21.11 22.58 - Modificare teste, bug in ref-uri la comanda FILL    * 21.11 22.58 - Modificare teste, bug in ref-uri la comanda FILL
 +   * 29.11 00:45 - Modificare testul input/​advanced/​test6.in,​ indexul de la comanda FILL de la linia 9 a fost corectat
 +   * 12.12 15:21 - Prelungire deadline
  
  
Line 63: Line 65:
 Figura de mai jos ilustrează structura detaliată a arenei, în decursul execuţiei programului:​ Figura de mai jos ilustrează structura detaliată a arenei, în decursul execuţiei programului:​
  
-{{:​programare:​teme_2017:​tema2:​arena_detailed.png|}} +{{:​programare:​teme_2017:​tema2:​arena_detailedd.png|}}
 ==== Structura unui bloc ==== ==== Structura unui bloc ====
  
Line 96: Line 97:
 Este de remarcat faptul că lanţul poate fi parcurs în ambele sensuri: dintr-un bloc putem ajunge atât la vecinul din dreapta, cât şi la cel din stânga. Este de remarcat faptul că lanţul poate fi parcurs în ambele sensuri: dintr-un bloc putem ajunge atât la vecinul din dreapta, cât şi la cel din stânga.
  
-De asemenea, atunci când este alocat un bloc nou sau este eliberat ​unui vechi, '''​lanţul de blocuri trebuie modificat'''​. Astfel, la alocarea unui nou bloc de memorie, trebuie să ţineţi cont de următoarele:​+De asemenea, atunci când este alocat un bloc nou sau este eliberat ​unul vechi, '''​lanţul de blocuri trebuie modificat'''​. Astfel, la alocarea unui nou bloc de memorie, trebuie să ţineţi cont de următoarele:​
   * Spaţiul liber în care este alocat noul bloc este mărginit de cel mult două blocuri vecine. Secţiunile de gestiune ale acestor vecini trebuie modificate astfel:   * Spaţiul liber în care este alocat noul bloc este mărginit de cel mult două blocuri vecine. Secţiunile de gestiune ale acestor vecini trebuie modificate astfel:
      * Indexul blocului următor din structura de gestiune a blocului din stânga trebuie să indice către noul bloc. Dacă blocul din stânga nu există, atunci este modificat indicele de start.      * Indexul blocului următor din structura de gestiune a blocului din stânga trebuie să indice către noul bloc. Dacă blocul din stânga nu există, atunci este modificat indicele de start.
Line 125: Line 126:
         * La începutul liniei va fi afişat indicele curent, în format hexazecimal,​ cu 8 cifre hexa majuscule.         * La începutul liniei va fi afişat indicele curent, în format hexazecimal,​ cu 8 cifre hexa majuscule.
         * Apoi este afişat un TAB (''​\t''​) , urmat de 16 octeţi, afişati separaţi printr-un spaţiu şi în format hexazecimal,​ cu 2 cifre hexa majuscule fiecare. Între cel de-al 8-lea şi cel de-al 9-lea octet se va afişa un spaţiu suplimentar.         * Apoi este afişat un TAB (''​\t''​) , urmat de 16 octeţi, afişati separaţi printr-un spaţiu şi în format hexazecimal,​ cu 2 cifre hexa majuscule fiecare. Între cel de-al 8-lea şi cel de-al 9-lea octet se va afişa un spaţiu suplimentar.
-        * Nu este necesar sa realizati conversii de la zecimal la hexazecimal,​ puteti folosi ''​printf("​%02X""​)''​ si ''​printf("​%08X"​)''​ pentru afisare.+        ​* Daca dimensiunea arenei nu este multiplu de 16, atunci pe ultima linie se vor afisa ultimii ARENA_SIZE % 16 octeti. 
 +        ​* Nu este necesar sa realizati conversii de la zecimal la hexazecimal,​ puteti folosi ''​printf("​%02X"​)''​ si ''​printf("​%08X"​)''​ pentru afisare.
   - **''​ALLOC <​SIZE>''​**   - **''​ALLOC <​SIZE>''​**
      * Comanda va aloca ''​SIZE''​ octeţi de memorie din arenă, unde ''​SIZE''​ e o valoare strict pozitiva. Ea va trebui să găsească o zonă liberă suficient de mare (care să încapă ''​SIZE''​ octeţi + secţiunea de gestiune), şi să rezerve un bloc '''​la începutul'''​ zonei (nu în mijloc, nu la sfârşit). Va trebui folosită prima zonă liberă validă, într-o căutare de la stânga la dreapta.      * Comanda va aloca ''​SIZE''​ octeţi de memorie din arenă, unde ''​SIZE''​ e o valoare strict pozitiva. Ea va trebui să găsească o zonă liberă suficient de mare (care să încapă ''​SIZE''​ octeţi + secţiunea de gestiune), şi să rezerve un bloc '''​la începutul'''​ zonei (nu în mijloc, nu la sfârşit). Va trebui folosită prima zonă liberă validă, într-o căutare de la stânga la dreapta.
Line 248: Line 250:
      * ''​valgrind --version''​      * ''​valgrind --version''​
      * ''​sudo apt-get install valgrind''​      * ''​sudo apt-get install valgrind''​
 +  * Pentru a rula **valgrind** manual pe un test:
 +     * ''​valgrind --leak-check=full ./alocator < input/​random/​test5.in''​
   * Arhiva contine si un **schelet de cod** in directorul ''​skel/''​ care realizeaza doar parsarea comenzilor.   * Arhiva contine si un **schelet de cod** in directorul ''​skel/''​ care realizeaza doar parsarea comenzilor.
  
Line 279: Line 283:
      * teste **advanced**:​ 18 puncte fiecare test trecut + 2 puncte rezolvare erori valgrind      * teste **advanced**:​ 18 puncte fiecare test trecut + 2 puncte rezolvare erori valgrind
      * teste **random**: 10 puncte fiecare test trecut + 1 punct rezolvare erori valgrind      * teste **random**: 10 puncte fiecare test trecut + 1 punct rezolvare erori valgrind
-     * teste **bonus**: 10 puncte fiecare test trecut + 1 punct rezolvare erori valgrind +     * teste **bonus**: 10 puncte fiecare test trecut + 1 punct rezolvare erori valgrind  ​
-  * cele 100 puncte pentru README și aspectul codului sursă s-au împărțit astfel:+
      * existența unui README relevant: 20 puncte      * existența unui README relevant: 20 puncte
      * claritatea codului sursă: 80 puncte      * claritatea codului sursă: 80 puncte
 +  * cele 80 puncte pentru claritatea codului sursă s-au împărțit astfel:
 +     * am scăzut 30 puncte dacă codul nu este modularizat
 +     * am scăzut 10 puncte dacă codul este modularizat,​ dar folosește funcții foarte lungi
 +     * am scăzut 20 puncte pentru warning-uri de compilare ​    
 +     * am scăzut 20 puncte dacă memoria nu a fost alocată dinamic
  
 ====== FAQ ====== ====== FAQ ======
programare/teme_2017/tema2_2017_cbd.1511297949.txt.gz · Last modified: 2017/11/21 22:59 by relu.dragan
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