Differences

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

Link to this comparison view

programare:teme_2016:tema2_2016_cbd_123123abcdabcd [2016/12/09 09:16]
george.pirtoaca [Cerinte]
programare:teme_2016:tema2_2016_cbd_123123abcdabcd [2017/01/15 18:09] (current)
relu.dragan
Line 4: Line 4:
   * [[gpirtoaca@gmail.com|Sebastian Pîrtoacă]]   * [[gpirtoaca@gmail.com|Sebastian Pîrtoacă]]
   * [[draganrelu@gmail.com|Relu Drăgan]]   * [[draganrelu@gmail.com|Relu Drăgan]]
-Termen de predare: **TODO**+ 
 +Termen de predare: **15.01.2017 23:59** 
 + 
 +Pentru fiecare zi (24 de ore) de întârziere,​ se vor scădea 10 puncte din nota acordată. Deadline-ul hard este **18.01.2017 23:59**.
  
 **Actualizări:​** **Actualizări:​**
-  * **[03/12/2016]** adaugat enunt+  * **[16/12/2016]** adaugat enunt
 +  * **[31/​12/​2016]** modificare gresela exemplu task 3 (pixel de valoare 10 inlocuit cu 30).
  
 **Scopul temei:** **Scopul temei:**
Line 167: Line 171:
  
 **3)** Toti pixelii din zona determinata vor avea culoarea pixelului de la pasul **1)** adica $ (R, G, B) $. **3)** Toti pixelii din zona determinata vor avea culoarea pixelului de la pasul **1)** adica $ (R, G, B) $.
 +
 **4)** Dupa deteminarea noii zone se reia algoritmul incepand cu pasul **1)**. **4)** Dupa deteminarea noii zone se reia algoritmul incepand cu pasul **1)**.
  
Line 178: Line 183:
 <pre> <pre>
 (10 10 10) (12 10 13) (10 10 10) (30 30 30) (30 29 31) (10 10 10) (12 10 13) (10 10 10) (30 30 30) (30 29 31)
-(10 10 10) (12 15 10) (10 10 10) (30 28 10) (12 10 13)+(10 10 10) (12 15 10) (10 10 10) (30 28 30) (12 10 13)
 (11 11 11) (11 12 11) (10 10 10) (30 33 30) (12 11 13) (11 11 11) (11 12 11) (10 10 10) (30 33 30) (12 11 13)
 (12 12 12) (12 10 12) (10 10 10) (30 30 31) (12 10 13) (12 12 12) (12 10 12) (10 10 10) (30 30 31) (12 10 13)
Line 189: Line 194:
 <pre> <pre>
 <font color="​red">​ (10 10 10) (12 10 13) (10 10 10)</​font>​ (30 30 30) (30 29 31) <font color="​red">​ (10 10 10) (12 10 13) (10 10 10)</​font>​ (30 30 30) (30 29 31)
-<font color="​red">​ (10 10 10) (12 15 10) (10 10 10)</​font>​ (30 28 10) (12 10 13)+<font color="​red">​ (10 10 10) (12 15 10) (10 10 10)</​font>​ (30 28 30) (12 10 13)
 <font color="​red">​ (11 11 11) (11 12 11) (10 10 10)</​font>​ (30 33 30) (12 11 13) <font color="​red">​ (11 11 11) (11 12 11) (10 10 10)</​font>​ (30 33 30) (12 11 13)
 <font color="​red">​ (12 12 12) (12 10 12) (10 10 10)</​font>​ (30 30 31) (12 10 13) <font color="​red">​ (12 12 12) (12 10 12) (10 10 10)</​font>​ (30 30 31) (12 10 13)
Line 201: Line 206:
 <pre> <pre>
 <font color="​red">​ (10 10 10) (12 10 13) (10 10 10)</​font>​ <font color="​green">​(30 30 30) (30 29 31)</​font>​ <font color="​red">​ (10 10 10) (12 10 13) (10 10 10)</​font>​ <font color="​green">​(30 30 30) (30 29 31)</​font>​
-<font color="​red">​ (10 10 10) (12 15 10) (10 10 10)</​font>​ <font color="​green">​(30 28 10)</​font>​ (12 10 13)+<font color="​red">​ (10 10 10) (12 15 10) (10 10 10)</​font>​ <font color="​green">​(30 28 30)</​font>​ (12 10 13)
 <font color="​red">​ (11 11 11) (11 12 11) (10 10 10)</​font>​ <font color="​green">​(30 33 30)</​font>​ (12 11 13) <font color="​red">​ (11 11 11) (11 12 11) (10 10 10)</​font>​ <font color="​green">​(30 33 30)</​font>​ (12 11 13)
 <font color="​red">​ (12 12 12) (12 10 12) (10 10 10)</​font>​ <font color="​green">​(30 30 31)</​font>​ (12 10 13) <font color="​red">​ (12 12 12) (12 10 12) (10 10 10)</​font>​ <font color="​green">​(30 30 31)</​font>​ (12 10 13)
Line 214: Line 219:
 <pre> <pre>
 <font color="​red">​ (10 10 10) (12 10 13) (10 10 10)</​font>​ <font color="​green">​(30 30 30) (30 29 31)</​font>​ <font color="​red">​ (10 10 10) (12 10 13) (10 10 10)</​font>​ <font color="​green">​(30 30 30) (30 29 31)</​font>​
-<font color="​red">​ (10 10 10) (12 15 10) (10 10 10)</​font>​ <font color="​green">​(30 28 10)</​font>​ <font color="​blue">​(12 10 13)</​font>​+<font color="​red">​ (10 10 10) (12 15 10) (10 10 10)</​font>​ <font color="​green">​(30 28 30)</​font>​ <font color="​blue">​(12 10 13)</​font>​
 <font color="​red">​ (11 11 11) (11 12 11) (10 10 10)</​font>​ <font color="​green">​(30 33 30)</​font>​ <font color="​blue">​(12 11 13)</​font>​ <font color="​red">​ (11 11 11) (11 12 11) (10 10 10)</​font>​ <font color="​green">​(30 33 30)</​font>​ <font color="​blue">​(12 11 13)</​font>​
 <font color="​red">​ (12 12 12) (12 10 12) (10 10 10)</​font>​ <font color="​green">​(30 30 31)</​font>​ <font color="​blue">​(12 10 13)</​font>​ <font color="​red">​ (12 12 12) (12 10 12) (10 10 10)</​font>​ <font color="​green">​(30 30 31)</​font>​ <font color="​blue">​(12 10 13)</​font>​
Line 236: Line 241:
  
 **2)** Incepand de la valoarea byte-ul de offset din header (adica unde ar fi trebuit sa inceapa matricea de pixeli din fomatul BMP) se for scrie tupluri (nr_linie, nr_coloana, R, G, B) cu urmatoarea semnificatie:​ **2)** Incepand de la valoarea byte-ul de offset din header (adica unde ar fi trebuit sa inceapa matricea de pixeli din fomatul BMP) se for scrie tupluri (nr_linie, nr_coloana, R, G, B) cu urmatoarea semnificatie:​
-        * nr_linie este o valoare be 2 bytes si reprezinta linia la care se gaseste pixelul in imagine; +        * nr_linie este o valoare be 2 bytes si reprezinta linia la care se gaseste pixelul in imagine ​(indexarea incepe de la 1)
-        * nr_coloana este o valoare pe 2 bytes si reprezinta coloana la care se gasete pixelul in imagine;+        * nr_coloana este o valoare pe 2 bytes si reprezinta coloana la care se gasete pixelul in imagine ​(indexarea incepe de la 1);
         * R, G, B sunt 3 valori fiecare pe 1 byte si reprezinta cele trei canale Red, Green si Blue ale pixelului de la linia nr_linie si coloana nr_coloana.         * R, G, B sunt 3 valori fiecare pe 1 byte si reprezinta cele trei canale Red, Green si Blue ale pixelului de la linia nr_linie si coloana nr_coloana.
     In fisier se vor scrie doar pixelii care sunt la granita unei zone cu alta zona. Adica se vor scrie doar pixelii de pe marginea fiecarei zone. Ordinea in care acestia se vor scrie in fisier este crescator pe linii, iar in caz de egalitate crescator pe coloane.     In fisier se vor scrie doar pixelii care sunt la granita unei zone cu alta zona. Adica se vor scrie doar pixelii de pe marginea fiecarei zone. Ordinea in care acestia se vor scrie in fisier este crescator pe linii, iar in caz de egalitate crescator pe coloane.
Line 268: Line 273:
 </​pre>​ </​pre>​
 </​html>​ </​html>​
 +
 +<note warning>​Urmariti cu atentie exemplul si observati ce pixeli nu au fost/au fost scrisi in fisierul binar. </​note>​
  
 Aplicarea algoritmului de compresie se realizeaza pe imaginea al carei nume se gaseste pe primul rand in fisierul **input.txt** (cea pe care am lucrat si la primul task). Valoarea de prag (threshold) care se va utiliza in cadrul algoritmului se va citi de pe linia 2 din fisierul **input.txt**. Datele in format binar, rezultate in urma compresiei, se vor scrie in fisierul **compressed.bin**. Aplicarea algoritmului de compresie se realizeaza pe imaginea al carei nume se gaseste pe primul rand in fisierul **input.txt** (cea pe care am lucrat si la primul task). Valoarea de prag (threshold) care se va utiliza in cadrul algoritmului se va citi de pe linia 2 din fisierul **input.txt**. Datele in format binar, rezultate in urma compresiei, se vor scrie in fisierul **compressed.bin**.
Line 292: Line 299:
  
 Ca output pentru exemplul de mai sus se vor scrie fisierele: image_black_white.bmp, ​ image_f1.bmp,​ image_f2.bmp,​ image_f3.bmp,​ compressed.bin si decompressed.bmp. Ca output pentru exemplul de mai sus se vor scrie fisierele: image_black_white.bmp, ​ image_f1.bmp,​ image_f2.bmp,​ image_f3.bmp,​ compressed.bin si decompressed.bmp.
 +
 +<note warning>​Cand scrieti imagini in format BMP, intre ultimul byte din header si byte-ul la care incepe matricea de pixeli (adica pana la byte-ul de offset) trebuie sa scrieti peste tot byte-ul 0. Aceeasi observatie se aplica si in cazul formatului comprimat. </​note>​
  
 ==== Restrictii si precizari ==== ==== Restrictii si precizari ====
Line 298: Line 307:
      * Atunci cand scrieti o imagine (atat in format .bmp cat si in formatul special de la task-ul 3) **NU** modificati header-ele citite. Cu alte cuvinte ce headere ati citit aceleasi headere veti scrie (deoarece nici unul dintre task-uri nu necesita modificarea header-ului imaginii). In caz contrar, testul se va puncta cu 0;      * Atunci cand scrieti o imagine (atat in format .bmp cat si in formatul special de la task-ul 3) **NU** modificati header-ele citite. Cu alte cuvinte ce headere ati citit aceleasi headere veti scrie (deoarece nici unul dintre task-uri nu necesita modificarea header-ului imaginii). In caz contrar, testul se va puncta cu 0;
      * Exista o limita de timp de **60 de secunde** pentru fiecare test necesara pentru a testa tema pe vmchecker. Scopul cursului de programare nu este de a scrie algoritmi eficienti dar limita de 60 de secunde este de bun simt. In mod normal, o implementare obisnuita ar trebui sa ruleze in mai putin de 5s pe test.      * Exista o limita de timp de **60 de secunde** pentru fiecare test necesara pentru a testa tema pe vmchecker. Scopul cursului de programare nu este de a scrie algoritmi eficienti dar limita de 60 de secunde este de bun simt. In mod normal, o implementare obisnuita ar trebui sa ruleze in mai putin de 5s pe test.
-     * Tema se va trimite pe vmchecker si se va teste local cu ajutorul checker-ului care va fi disponibil **in curand**;+     * Tema se va trimite pe vmchecker si se va testa local cu ajutorul checker-ului care va fi disponibil **in curand**;
      * Pe vmchecker veti uploada o arhiva in format .zip care sa contina:      * Pe vmchecker veti uploada o arhiva in format .zip care sa contina:
           - **Makefile**,​ cu cel puțin 3 targeturi, **build**, **run** și **clean**; Regula **run** trebuie sa ruleze executabilul care a fost obtinut la regula **build**;           - **Makefile**,​ cu cel puțin 3 targeturi, **build**, **run** și **clean**; Regula **run** trebuie sa ruleze executabilul care a fost obtinut la regula **build**;
Line 305: Line 314:
      * Daca rezolvati doar o parte din task-uri asigurati-va ca pe celelalte nu primiti erori la rulare (precum SEGFAULT) sau time limit exceeded, altfel tot testul va fi punctat cu 0. De exemplu, daca task-urile 1 si 2 sunt OK dar task-ul 3               ​primeste SEGFAULT sau dureaza prea mult atunci tot testul se va nota cu 0.  ​      * Daca rezolvati doar o parte din task-uri asigurati-va ca pe celelalte nu primiti erori la rulare (precum SEGFAULT) sau time limit exceeded, altfel tot testul va fi punctat cu 0. De exemplu, daca task-urile 1 si 2 sunt OK dar task-ul 3               ​primeste SEGFAULT sau dureaza prea mult atunci tot testul se va nota cu 0.  ​
  
 +<note warning>​Fiti **foarte** atenti la erori de tipul stack overflow. Pe vmchecker dimensiunea stivei este de 1MB. Daca aveti functii recursive aproximati cata memorie se ocupa pe stiva la un apel al functiei respective. </​note>​
 ==== Resurese si checker-ul local ==== ==== Resurese si checker-ul local ====
  
-Resursele pentru tema se pot descarca de {{:programare:​teme_2015:​checker_tema_3.zip|aici}}. Sunt prezente:+Resursele pentru tema se pot descarca de [[https://​drive.google.com/​file/​d/​0B3lfz66yOkZxZTV5c0drUVd2MG8/​view?​usp=sharing|aici]]. Sunt prezente:
  
   * **bmp_header.h**:​ headerul care contine declaratiile struct-urilor pe care le veti folosi in citirea unui fisier BMP;   * **bmp_header.h**:​ headerul care contine declaratiile struct-urilor pe care le veti folosi in citirea unui fisier BMP;
-  * **TODO**: ​checker-ul pe care il veti putea folosi pentru a va testa tema local.+  * **checker-ul** pe care il veti putea folosi pentru a va testa tema local.
programare/teme_2016/tema2_2016_cbd_123123abcdabcd.1481267787.txt.gz · Last modified: 2016/12/09 09:16 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