Differences

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

Link to this comparison view

programare:teme_2023:tema1_2023_cbd [2023/11/27 23:49]
alin_bogdan.popa
programare:teme_2023:tema1_2023_cbd [2023/12/13 00:10] (current)
alin_bogdan.popa [Changelog:]
Line 1: Line 1:
 ====== Tema 1 - Image processor ====== ====== Tema 1 - Image processor ======
 +
 +==== Changelog: ====
 +  * 13 Dec 2023: deadline-ul a fost amanat pentru data de 17 soft si 20 hard
 +  * 12 Dec 2023: update checker - toate imagininile sunt acum semnificativ mai mici
 +  * 30 Nov 2023: update checker sa foloseasca pentru Valgrind inputurile 3-12 in loc de 5-14 pentru ca erau imagini prea mari
 +  * 28 Nov 2023: update schelet ca sa nu dea mai dea erori de cpplint pe bmp.h si imageprocessing.h
  
 ==== Responsabili:​ ==== ==== Responsabili:​ ====
Line 5: Line 11:
  
 Termen de predare: Termen de predare:
-  * Deadline soft: **Marti 12 Decembrie 2023, 23:55** +  * Deadline soft: **Duminica 17 Decembrie 2023, 23:55** 
-  * Deadline hard: **Vineri 15 Decembrie 2023, 23:55**+  * Deadline hard: **Miercuri 20 Decembrie 2023, 23:55**
  
 Pentru fiecare zi (24 de ore) de întârziere,​ se vor scădea 10 puncte din nota acordată, până la atingerea deadline-ului hard. Pentru fiecare zi (24 de ore) de întârziere,​ se vor scădea 10 puncte din nota acordată, până la atingerea deadline-ului hard.
  
 ====Întrebări==== ====Întrebări====
-Dacă aveți nelămuriri,​ puteți să ne contactați pe forumul dedicat [[https://​curs.upb.ro/​2023/​mod/​forum/​view.php?​id=57385|temei de casă nr. 0]] sau pe [[https://​teams.microsoft.com/​l/​channel/​19%3a0a648c85e9ed4a2bbb343b5792443551%40thread.tacv2/​Tema%25200?​groupId=1f7c7112-0ea2-4f0b-9131-d5c29590d62c&​tenantId=2d8cc8ba-8dda-4334-9e5c-fac2092e9bac|canalul Temei 0]].\\+Dacă aveți nelămuriri,​ puteți să ne contactați pe forumul dedicat [[https://​curs.upb.ro/​2023/​mod/​forum/​view.php?​id=80135|temei de casă nr. 1]] sau pe [[https://​teams.microsoft.com/​l/​channel/​19%3a0a648c85e9ed4a2bbb343b5792443551%40thread.tacv2/​Tema%25200?​groupId=1f7c7112-0ea2-4f0b-9131-d5c29590d62c&​tenantId=2d8cc8ba-8dda-4334-9e5c-fac2092e9bac|canalul Temei 1]].\\
 La orice întrebare vom răspunde în maxim 24 de ore.\\ La orice întrebare vom răspunde în maxim 24 de ore.\\
 Nu se acceptă întrebări în ultimele 24 de ore înainte de deadline. Nu se acceptă întrebări în ultimele 24 de ore înainte de deadline.
Line 24: Line 30:
 La această temă ne propunem să construim un program de procesare de imagini. Vom reprezenta o imagine sub forma unei matrici de pixeli NxM (N linii, M coloane), unde pentru fiecare pixel avem 3 valori: R (Red), G (Green), B (Blue) reprezentând cele 3 componente de culoare. Astfel, o imagine va fi o matrice NxMx3 (spre exemplu, ''​m[5][100][0]''​ este componenta Red a pixelului de pe linia 5, coloana 100 din imaginea m). Fiecare din cele 3 componente de culoare poate avea doar valori întregi între 0 și 255 inclusiv. Spre exemplu, un pixel cu valorile ''​(0,​0,​0)''​ este negru; unul cu valorile ''​(255,​255,​255)''​ este alb; unul cu valorile ''​(255,​255,​0)''​ este galben etc. La această temă ne propunem să construim un program de procesare de imagini. Vom reprezenta o imagine sub forma unei matrici de pixeli NxM (N linii, M coloane), unde pentru fiecare pixel avem 3 valori: R (Red), G (Green), B (Blue) reprezentând cele 3 componente de culoare. Astfel, o imagine va fi o matrice NxMx3 (spre exemplu, ''​m[5][100][0]''​ este componenta Red a pixelului de pe linia 5, coloana 100 din imaginea m). Fiecare din cele 3 componente de culoare poate avea doar valori întregi între 0 și 255 inclusiv. Spre exemplu, un pixel cu valorile ''​(0,​0,​0)''​ este negru; unul cu valorile ''​(255,​255,​255)''​ este alb; unul cu valorile ''​(255,​255,​0)''​ este galben etc.
  
-Pentru această temă vom considera că o imagine are originea coordonatelor în colțul stânga-sus. De exemplu, rândul 3 reprezintă al treilea rând de pixeli ai imaginii numărat de sus în jos; coloana 3 reprezintă a treia coloană de pixeli numărată de la stânga la dreapta. W (Width) înseamnă dimensiunea imaginii pe orizontală (numărul de coloane); H (Height) înseamnă dimensiunea imaginii pe verticală (numărul de linii). La funcțiile care primesc ca parametri ​o pereche de coordonate ''​(x,​y)'',​ coordonata ''​x''​ este pe orizontală (între 0 și M) iar coordonata ''​y''​ este pe verticală (între 0 și N).+Pentru această temă vom considera că o imagine are originea coordonatelor în colțul stânga-sus. De exemplu, rândul 3 reprezintă al treilea rând de pixeli ai imaginii numărat de sus în jos; coloana 3 reprezintă a treia coloană de pixeli numărată de la stânga la dreapta. W (Width) înseamnă dimensiunea imaginii pe orizontală (numărul de coloane); H (Height) înseamnă dimensiunea imaginii pe verticală (numărul de linii). La funcțiile care primesc ca parametru ​o pereche de coordonate ''​(x,​y)'',​ coordonata ''​x''​ este pe orizontală (între 0 și M) iar coordonata ''​y''​ este pe verticală (între 0 și N).
  
 <note important>​ <note important>​
Line 38: Line 44:
   * Un fișier ''​imageprocessing.c''​ în care voi va trebui să completați implementările funcțiilor pentru taskurile 1-6   * Un fișier ''​imageprocessing.c''​ în care voi va trebui să completați implementările funcțiilor pentru taskurile 1-6
   * Un fișier ''​interactive.c''​ în care voi va trebui să completați implementarea programului pentru taskul 7   * Un fișier ''​interactive.c''​ în care voi va trebui să completați implementarea programului pentru taskul 7
-  * Un fișier ''​main.c''​ care **nu trebuie trimis în arhiva cu tema**, scopul lui este să vă ofere un exemplu pentru rularea funcțiilor din ''​imageprocessing.c'' ​(ca de exemplu, funcțiile ''​read_from_bmp''​ și ''​write_to_bmp''​).+  * Un fișier ''​main.c''​ care **nu trebuie trimis în arhiva cu tema**, scopul lui este să vă ofere un exemplu pentru rularea funcțiilor din celelalte fișiere ​(ca de exemplu, funcțiile ''​read_from_bmp''​ și ''​write_to_bmp''​)
 +  * Un fișier ''​bmp.c''​ ce conține implementările funcțiilor ''​read_from_bmp''​ și ''​write_to_bmp''​ ce trebuie folosite în temă.
  
 <note important>​ <note important>​
Line 44: Line 51:
   * redenumiți fișierele temei (imageprocessing.c și interactive.c)   * redenumiți fișierele temei (imageprocessing.c și interactive.c)
   * schimbați numărul, tipul, sau ordinea parametrilor funcțiilor din imageprocessing.c și imageprocessing.h   * schimbați numărul, tipul, sau ordinea parametrilor funcțiilor din imageprocessing.c și imageprocessing.h
 +  * schimbați sau redenumiți comenzile sau regulile din Makefile
 </​note>​ </​note>​
  
Line 98: Line 106:
 </​code>​ </​code>​
 Funcția trebuie să returneze imaginea obținută prin crop (sub-matrice) care începe (adică colțul stânga-sus al cropului) la coordonatele (x,y), de dimensiune (h,w) (adică sub-matricea rezultată trebuie să aibă h linii, w coloane). Funcția trebuie să returneze imaginea obținută prin crop (sub-matrice) care începe (adică colțul stânga-sus al cropului) la coordonatele (x,y), de dimensiune (h,w) (adică sub-matricea rezultată trebuie să aibă h linii, w coloane).
 +
 +<note important>​
 +Coordonata x este pe orizontală (denotă coloana) iar coordonata y este pe verticală (denotă linia).
 +</​note>​
  
 Exemplu. Dacă imaginea originală avea pixelii: Exemplu. Dacă imaginea originală avea pixelii:
Line 105: Line 117:
 p_{31} & p_{32} & p_{33} & p_{34} p_{31} & p_{32} & p_{33} & p_{34}
 \end{bmatrix} $$ \end{bmatrix} $$
-atunci, după aplicarea unui crop cu x=1, y=2, h=2, w=2, trebuie să obținem:+atunci, după aplicarea unui crop cu x=2, y=1, h=2, w=2, trebuie să obținem:
 $$ A = \begin{bmatrix} $$ A = \begin{bmatrix}
 p_{23} & p_{24} \\ p_{23} & p_{24} \\
Line 137: Line 149:
 int ***paste(int ***image_dst,​ int N_dst, int M_dst, int *** image_src, int N_src, int M_src, int x, int y) int ***paste(int ***image_dst,​ int N_dst, int M_dst, int *** image_src, int N_src, int M_src, int x, int y)
 </​code>​ </​code>​
-Funcția trebuie să facă copy-paste de la imaginea sursă peste imaginea destinație,​ începând de la coordonatele (x,y) ale imaginii destinație. Dacă imaginea sursă este mai mare decât spațiul disponibil (adică ar depăși marginile imaginii destinație),​ atunci pixelii care depășesc trebuie ignorați. Atenție: imaginea sursă nu trebuie modificată și nici dezalocată în această funcție!+Funcția trebuie să facă copy-paste de la imaginea sursă peste imaginea destinație,​ începând de la coordonatele (x,y) ale imaginii destinație. Dacă imaginea sursă este mai mare decât spațiul disponibil (adică ar depăși marginile imaginii destinație),​ atunci pixelii care depășesc trebuie ignorați. Atenție: imaginea sursă nu trebuie modificată și nici dezalocată în această funcție! ​Funcția trebuie să returneze pointer la imaginea destinație. 
 + 
 +<note important>​ 
 +Coordonata x este pe orizontală (denotă coloana) iar coordonata y este pe verticală (denotă linia). 
 +</​note>​
  
 Exemplu. Dacă imaginea destinație avea pixelii: Exemplu. Dacă imaginea destinație avea pixelii:
Line 286: Line 302:
 ==== Trimitere temă ==== ==== Trimitere temă ====
  
-Tema va fi trimisă folosind ​[[https://​curs.upb.ro/​2023/​mod/​assign/​view.php?​id=60408|Moodle]], cursul **Programarea Calculatoarelor (CB & CD)**, activitatea "Tema 1"​. ​\\+Tema va fi trimisă folosind Moodle, cursul **Programarea Calculatoarelor (CB & CD)**, activitatea "Tema 1". 
 + 
 +<note warning>​ 
 +Se va posta un anunț pe forum când se va deschide upload-ul. 
 +</​note>​
  
 Toate temele sunt testate în mod automat pe Moodle. Toate temele sunt testate în mod automat pe Moodle.
Line 299: Line 319:
 Conținutul arhivei trebuie să fie următorul: Conținutul arhivei trebuie să fie următorul:
  - Fișierele **imageprocessing.c**,​ **imageprocessing.h**  - Fișierele **imageprocessing.c**,​ **imageprocessing.h**
 + - Fișierele **bmp.c**, **bmp.h**
  - Fișierul **interactive.c**  - Fișierul **interactive.c**
  - Fișierul **Makefile**  - Fișierul **Makefile**
programare/teme_2023/tema1_2023_cbd.1701121795.txt.gz · Last modified: 2023/11/27 23:49 by alin_bogdan.popa
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