This shows you the differences between two versions of the page.
programare:teme_2017:proiect_2017_ca [2017/12/03 18:26] darius.neatu [BONUS] |
programare:teme_2017:proiect_2017_ca [2017/12/18 16:56] (current) darius.neatu [Regulament] |
||
---|---|---|---|
Line 10: | Line 10: | ||
**Autor inițial:** [[stefan.bucur@gmail.com|Ștefan Bucur]] | **Autor inițial:** [[stefan.bucur@gmail.com|Ștefan Bucur]] | ||
- | **Deadline hard:** **15.12.2017** | + | **Deadline hard:** **18.12.2017** |
- | **Actualizari:** | + | ======Actualizări====== |
* **01.12.2017** - Am adaugat cateva clarificari in sectiunea [[https://ocw.cs.pub.ro/courses/programare/teme_2017/proiect_2017_ca#functionarea_programului|Functionarea programului]] referitoare la variabile globale, instructiunea goto, functii permise etc. | * **01.12.2017** - Am adaugat cateva clarificari in sectiunea [[https://ocw.cs.pub.ro/courses/programare/teme_2017/proiect_2017_ca#functionarea_programului|Functionarea programului]] referitoare la variabile globale, instructiunea goto, functii permise etc. | ||
- | * **02.12.2017** - Adaugarea unui schelet de cod in sectiunea [[http://ocw.cs.pub.ro/courses/programare/teme_2017/proiect_2017_ca?&#schelet | Schelet ]]. | + | * **02.12.2017** - Adăugarea unui schelet de cod în sectiunea [[http://ocw.cs.pub.ro/courses/programare/teme_2017/proiect_2017_ca?&#schelet | Schelet ]]. |
- | * **02.12.2017** - Am adaugat sectiunea [[https://ocw.cs.pub.ro/courses/programare/teme_2017/proiect_2017_ca#q_a | Q&A]]. | + | * **02.12.2017** - Am adăugat sectiunea [[https://ocw.cs.pub.ro/courses/programare/teme_2017/proiect_2017_ca#q_a | Q&A]]. |
+ | * **06.12.2017** - Am adăugat un **warning** mare (cu rosu) în secțiunea [[https://ocw.cs.pub.ro/courses/programare/teme_2017/proiect_2017_ca#testare|Testare]]. Acest update este pentru cei care nu au reușit să ruleze checkerul. NU s-a schimbat checkerul, dacă ați reușit să îl folosiți, atunci ignorați acest update. Dacă nu sunteți sigur că ați reușit să îl folosiți, recitiți secțunea menționată. | ||
+ | * **06.12.2017**- Am adăugat în secțiunea [[https://ocw.cs.pub.ro/courses/programare/teme_2017/proiect_2017_ca#q_a | Q&A]] întrebarea "./reference => nu se poate rula" | ||
+ | * **14.12.2017**- Am amânat deadline-ul. Deadline-ul final este pe 18 Decembrie. Decizie finală. ** ATENTIE! Este hard! Nu mai se accepta rezolvari dupa aceasta data. ** | ||
<note warning> | <note warning> | ||
- | Atenție! Proiectul nu are un deadline soft, ci doar unul hard. NU se mai acceptă submisii dupa data de 15.12.2017 ora 23:55. | + | Atenție! Proiectul nu are un deadline soft, ci doar unul hard. NU se mai acceptă submisii dupa data de 18.12.2017 ora 23:55. |
În prima săptămână de după vacanța de iarnă, proiectul se va susține în fața celor doi responsabili. Această dată va fi specificată ulterior în enunț și pe forum. | În prima săptămână de după vacanța de iarnă, proiectul se va susține în fața celor doi responsabili. Această dată va fi specificată ulterior în enunț și pe forum. | ||
Line 31: | Line 34: | ||
Menționăm că pentru testare (pe vmchecker) se folosește o mașină virtuală pe 32 de biți. Arhiva de test folosește un astfel de binar. | Menționăm că pentru testare (pe vmchecker) se folosește o mașină virtuală pe 32 de biți. Arhiva de test folosește un astfel de binar. | ||
În caz că sistemul vostru de operare de pe mașina fizică este pe 64 de biți, sugerăm să faceți testarea finală și pe o mașină (virtuală sau nu) de 32 de biți. | În caz că sistemul vostru de operare de pe mașina fizică este pe 64 de biți, sugerăm să faceți testarea finală și pe o mașină (virtuală sau nu) de 32 de biți. | ||
+ | |||
+ | Sugerăm să citiți cu atenție **TOATĂ** secțiunea [[https://ocw.cs.pub.ro/courses/programare/teme_2017/proiect_2017_ca#testare|Testare]], înainte de a folosi checkerul local. | ||
</note> | </note> | ||
Line 148: | Line 153: | ||
* Pe ultima linie, indiferent de numărul de octeţi din arenă, se va afişa indexul ultimului octet din arenă + 1 (practic, dimensiunea arenei), în format hexazecimal cu 8 cifre hexa majuscule. | * Pe ultima linie, indiferent de numărul de octeţi din arenă, se va afişa indexul ultimului octet din arenă + 1 (practic, dimensiunea arenei), în format hexazecimal cu 8 cifre hexa majuscule. | ||
- **''ALLOC <SIZE>''** | - **''ALLOC <SIZE>''** | ||
- | * Comanda va aloca ''SIZE'' octeţi de memorie din arenă. 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ă. 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 afişa, în format zecimal, indexul de început al blocului alocat în arenă, sau ''0'' dacă nu a fost găsită nici o zonă liberă suficient de mare în arenă. '''Atenţie:''' Va trebui să afişaţi indexul secţiunii de date din noul bloc, şi nu al secţiunii de gestiune. | * Comanda va afişa, în format zecimal, indexul de început al blocului alocat în arenă, sau ''0'' dacă nu a fost găsită nici o zonă liberă suficient de mare în arenă. '''Atenţie:''' Va trebui să afişaţi indexul secţiunii de date din noul bloc, şi nu al secţiunii de gestiune. | ||
- **''FREE <INDEX>''** | - **''FREE <INDEX>''** | ||
Line 354: | Line 359: | ||
Testarea temei se va face folosind un script de evaluare automată, ce poate fi descărcat de [[https://ocw.cs.pub.ro/courses/_media/programare/project-allocator.zip|aici]]. | Testarea temei se va face folosind un script de evaluare automată, ce poate fi descărcat de [[https://ocw.cs.pub.ro/courses/_media/programare/project-allocator.zip|aici]]. | ||
+ | |||
===== Instrucţiuni de utilizare ===== | ===== Instrucţiuni de utilizare ===== | ||
Line 361: | Line 367: | ||
* Arhiva conţine un fişier ''check.sh'', din care se porneşte operaţia de testare (''./check.sh''). | * Arhiva conţine un fişier ''check.sh'', din care se porneşte operaţia de testare (''./check.sh''). | ||
+ | |||
+ | <note warning> | ||
+ | Menționăm că pentru testare (pe vmchecker) se folosește o mașină virtuală pe 32 de biți. Arhiva de test **folosește un astfel de binar (numit ''reference'')**. În caz că sistemul vostru de operare de pe mașina fizică este pe 64 de biți, sugerăm să faceți testarea finală și pe o mașină (virtuală sau nu) de 32 de biți. | ||
+ | |||
+ | ATENTIE! Înainte de a folosi checker-ul trebuie să vă asigurați că îl puteți rula. Deoarece sunt mai multe teste random (variază de la rulare la rulare), **executabilul reference** (programul de referință) este rulat în paralel cu **executabilul allocator** (programul vostru). Fiecare oferă câte un rezultat pentru fiecare test, apoi rezultatele sunt comparate. | ||
+ | De aceea este important sa verificati ca executabilul **reference** se poate rula. | ||
+ | |||
+ | Exemplu de utilizare: | ||
+ | |||
+ | {{programare:teme_2017:project_2017:ref.jpg}} | ||
+ | |||
+ | Dacă ați reușit să rulați ca în exemplu, atunci aveți instalat tot ce este nevoie pentru checker. | ||
+ | Dacă întâmpinați erori (ex. "No such file" - pare absurd, dar așa apare), atunci consulați secțiunea [[https://ocw.cs.pub.ro/courses/programare/teme_2017/proiect_2017_ca#q_a | Q&A]] de la finalul acestei pagini, unde aveti o posibilă soluție. | ||
+ | |||
+ | </note> | ||
+ | |||
* Arhiva conține testele încadrate în categoriile ''basic'', ''advanced'' și ''bonus''. Testele ''random'' vor fi generate ** de fiecare dată ** când se va rula ''check.sh''. | * Arhiva conține testele încadrate în categoriile ''basic'', ''advanced'' și ''bonus''. Testele ''random'' vor fi generate ** de fiecare dată ** când se va rula ''check.sh''. | ||
Line 371: | Line 393: | ||
* Arhiva mai conține un script numit ''cs.py'', care este varianta adaptată pentru C a checkerului de C++ de aici [[https://google.github.io/styleguide/cppguide.html | aici ]]. Checkerul va rula intern acest script. Puteți să îl rulați manual astfel ''python cs.py sursa.c'' sau ''python cs.py antet.h''. | * Arhiva mai conține un script numit ''cs.py'', care este varianta adaptată pentru C a checkerului de C++ de aici [[https://google.github.io/styleguide/cppguide.html | aici ]]. Checkerul va rula intern acest script. Puteți să îl rulați manual astfel ''python cs.py sursa.c'' sau ''python cs.py antet.h''. | ||
+ | |||
+ | |||
===== Barem corectare ===== | ===== Barem corectare ===== | ||
* Criteriile de notare sunt următoarele: | * Criteriile de notare sunt următoarele: | ||
Line 443: | Line 467: | ||
* Proiectul se va implementa DOAR în limbajul **C**. Va fi compilat și testat DOAR într-un mediu **LINUX**. Nerespectarea acestor reguli aduce un punctaj NUL. | * Proiectul se va implementa DOAR în limbajul **C**. Va fi compilat și testat DOAR într-un mediu **LINUX**. Nerespectarea acestor reguli aduce un punctaj NUL. | ||
- | * Proiectuk va fi trimis DOAR pe [[https://elf.cs.pub.ro/vmchecker/|vmchecker]], sub forma unei arhive **ZIP**. Nerespectarea acestei reguli aduce un punctaj NUL pe temă. | + | * Proiectul va fi trimis DOAR pe [[https://elf.cs.pub.ro/vmchecker/|vmchecker]], sub forma unei arhive **ZIP**. Nerespectarea acestei reguli aduce un punctaj NUL pe temă. |
* Fișierele proiectului trebuie OBLIGATORIU împachetate într-o arhiva de tip '.zip', cu numele **Grupa_NumePrenume_Proiect.zip** (exemplu: **316CA_PopescuGigel_Proiect.zip**). | * Fișierele proiectului trebuie OBLIGATORIU împachetate într-o arhiva de tip '.zip', cu numele **Grupa_NumePrenume_Proiect.zip** (exemplu: **316CA_PopescuGigel_Proiect.zip**). | ||
Line 519: | Line 543: | ||
Pentru verificarea memory leaks relevante sunt liniile urmatoare: | Pentru verificarea memory leaks relevante sunt liniile urmatoare: | ||
- | - total heap usage: 31 allocs, 31 frees, 5,253 bytes allocated | + | - **total heap usage: 31 allocs, 31 frees, 5,253 bytes allocated** (mi se confirma ca am facut 31 de alocari si 31 de free-uri) |
- | (mi se confirma ca am facut 31 de alocari si 31 de free-uri) | + | - **All heap blocks were freed -- no leaks are possible** (deoarece numerele sunt egale - am eliberat tot ce am alocat - nu am memory leaks) |
- | + | ||
- | - All heap blocks were freed -- no leaks are possible | + | |
- | (deoarece numerele sunt egale - am eliberat tot ce am alocat - nu am memory leaks) | + | |
P.S. Valgrind poate fi util si pentru alte situatii. Un exemplu foarte util este detectarea acceselor invalide la memorie (daca as fi avut as fi vazut multe mesaje de tip eroare inainte de HEAP SUMMARY). Rezolvarea acestor probleme m-ar putea scuti de situatia neplacuta in care obtin X puncte local si Y puncte pe vmchecker (Y << X). | P.S. Valgrind poate fi util si pentru alte situatii. Un exemplu foarte util este detectarea acceselor invalide la memorie (daca as fi avut as fi vazut multe mesaje de tip eroare inainte de HEAP SUMMARY). Rezolvarea acestor probleme m-ar putea scuti de situatia neplacuta in care obtin X puncte local si Y puncte pe vmchecker (Y << X). | ||
+ | |||
+ | * Q: "./reference => nu se poate rula" | ||
+ | A: | ||
+ | |||
+ | Ce este reference? La ce e util? | ||
+ | Unul dinstre autori a implementat tema, a compilat-o pe OS 32bit (conditiile de pe vmchecker). Dacă lucrați pe 64 de biți, este posibil să nu aveți instalate toate bibliotecile necesare pentru a rula executabile compilate pe 32 de biți. | ||
+ | |||
+ | Încercați să reproduceți exemplul următor (după ce ați dezarhivat arhiva cu checkerul): | ||
+ | |||
+ | {{programare:teme_2017:project_2017:ref.jpg}} | ||
+ | |||
+ | Dacă ați reușit să rulați ca în exemplu, atunci aveți instalat tot ce trebuie pentru checker. | ||
+ | |||
+ | Dacă întâmpinați erori (ex. "No such file" - pare absurd, dar așa apare), atunci încercați una din soluțiile menționate pe acest link: [[https://askubuntu.com/questions/454253/how-to-run-32-bit-app-in-ubuntu-64-bit| How to run 32-bit app in Ubuntu 64-bit? ]]. | ||
+ | |||
+ | * soluție 1 (**recomandată**) | ||
+ | <code bash> | ||
+ | sudo apt-get update | ||
+ | sudo apt-get install multiarch-support | ||
+ | </code> | ||
+ | |||
+ | * soluție 2 | ||
+ | <code bash> | ||
+ | sudo dpkg --add-architecture i386 | ||
+ | sudo apt-get update | ||
+ | sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 | ||
+ | </code> | ||
+ | | ||
+ | Încercați pe rând câte o soluție. După fiecare soluție încercați să rulați **reference** ca în exemplul anterior. | ||
+ | |||
+ | Dacă nu ați reușit cu soluțiile menționate mai sus (sau pe acel link), **postați pe forum un mesaj în care includeți și un printscreen cu terminal când rulați** (pentru a ne da seama mai repede ce problemă aveți). | ||
+ | |||
+ | Otherwise... Google it's your best friend FIXME! (after Gigel 8-) ) | ||
+ | | ||
+ | | ||
+ | |||
+ | |||
+ | |||
+ |