This shows you the differences between two versions of the page.
programare:teme_2017:tema2_2017_cbd [2017/11/21 17:36] relu.dragan |
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 18: | Line 18: | ||
====== Actualizari ====== | ====== Actualizari ====== | ||
- | 20.11 11.09 - Modificare enunt, indice de start | + | * 20.11 11.09 - Modificare enunt, indice de start |
- | 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 | ||
+ | * 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 62: | 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 95: | 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 124: | 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 247: | 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 278: | 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 ====== |