This shows you the differences between two versions of the page.
programare:teme_2022:tema0_2022_cbd [2022/10/18 14:26] eduard.staniloiu created |
programare:teme_2022:tema0_2022_cbd [2022/10/18 20:24] (current) eduard.staniloiu |
||
---|---|---|---|
Line 2: | Line 2: | ||
==== Responsabili: ==== | ==== Responsabili: ==== | ||
- | * Edi Staniloiu | + | * Edi Stăniloiu |
Termen de predare: | Termen de predare: | ||
- | * Deadline soft: **TBD** | + | * Deadline soft: **26.10.2022 23:55** |
- | * Deadline hard: **TBD** | + | * Deadline hard: **02.11.2022 23:55** |
Aceasta este o temă de "încălzire". | Aceasta este o temă de "încălzire". | ||
Scopul acesteia este să vă obișnuiți cu infrastructura de testare automată a temelor. | Scopul acesteia este să vă obișnuiți cu infrastructura de testare automată a temelor. | ||
+ | Această infrastructură va fi folosită la toate temele ulterioare. | ||
+ | |||
+ | 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==== | ||
+ | Dacă aveți nelămuriri, puteți să ne contactați pe forumul dedicat [[https://curs.upb.ro/2022/mod/forum/view.php?id=59781|temei de casă nr. 0]] sau pe [[https://teams.microsoft.com/l/channel/19%3a72025456beeb4a1492916b8f4b923fc3%40thread.tacv2/Tema%25200?groupId=6105be57-b728-4078-9f4a-00dc43e83e70&tenantId=2d8cc8ba-8dda-4334-9e5c-fac2092e9bac|canalul Temei 0]].\\ | ||
+ | La orice întrebare vom răspunde în maxim 24 de ore.\\ | ||
+ | Nu se acceptă întrebări în ultimele 24 de ore înainte de deadline. | ||
+ | |||
+ | ===== Cerință ===== | ||
+ | |||
+ | Scrieți un program care citește de la standard input (tastatură) un număr natural, **N**. | ||
+ | Pentru toate valorile din intervalul **[1, N]**, programul va afișa, separate printr-un spațiu (** **): | ||
+ | * cuvântul **Trick** dacă valoarea curentă este divizibilă cu **7** | ||
+ | * cuvântul **Treat** dacă valoarea curentă este divizibilă cu **11** | ||
+ | * cuvântul **TrickOrTreat** dacă valoarea curentă este divizibilă cu **7** și cu **11** | ||
+ | * valoarea curentă, atunci când aceasta nu este divizibilă cu **7** sau **11** | ||
+ | |||
+ | <note> | ||
+ | Exemplu utilizare: | ||
+ | <code> | ||
+ | ./tema0 | ||
+ | Introduceti valoarea numarului natural N: | ||
+ | 11 | ||
+ | 1 2 3 4 5 6 Trick 8 9 10 Treat | ||
+ | </code> | ||
+ | </note> | ||
+ | |||
+ | ==== Coding Style ==== | ||
+ | |||
+ | Este foarte important, pentru orice proiect, ca codul sursă să fie ușor de citit. | ||
+ | Astfel, de-a lungul timpului, comunitatea programatorilor a agreat un set de reguli pe care programatorii trebuie să-l respecte atunci când scriu cod. Acest set de reguli poartă numele de **Coding style** și include directive precum: | ||
+ | * utilizarea unor nume descriptive / intuitive pentru variabile care să descrie intenția utilizării variabilei - nu folosim **x**, folosim **num_elems** | ||
+ | * nu utilizăm [[https://en.wikipedia.org/wiki/Magic_number_(programming)|numere magice]]; le ținem într-o variabilă care are un nume descriptiv | ||
+ | * indentăm codul | ||
+ | * etc. | ||
+ | |||
+ | În funcție de echipa / compania / proiectul la care veți lucra, coding style-ul poate diferi, în funcție de ce a fost agreat anterior, și vă veți adapta acelui stil.\\ | ||
+ | În cadrul cursului de programare vom folosi regulile definite de către [[https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines| Cpp Core Guidelines]]. | ||
+ | Acestea sunt verificate în mod automat de către checker. | ||
+ | |||
+ | ==== Validare locală temă ==== | ||
+ | |||
+ | Pentru a vă ajuta în dezvoltarea temei, arhiva {{:programare:teme_2022:trickortreat.zip|}} conține o copie a checkerului. | ||
+ | |||
+ | Pentru a instala dependențele necesare verificării pentru **coding style** utilizați scriptul **install-linters.sh**: | ||
+ | <code> | ||
+ | ./install-linters.sh | ||
+ | </code> | ||
+ | |||
+ | Pentru a rula checkerul local folosiți comanda: | ||
+ | <code> | ||
+ | make run | ||
+ | </code> | ||
+ | |||
+ | <note> | ||
+ | Codul sursă este compilat folosind flagurile **-Wall -Werror**: | ||
+ | * **-Wall** - compilatorul va avertiza (warn) orice operații care pot genera un comportament nedefinit | ||
+ | * **-Werror** - compilatorul va trata warningurile ca pe niște erori de compilare | ||
+ | </note> | ||
+ | ==== Trimitere temă ==== | ||
+ | |||
+ | Tema va fi trimisă folosind [[https://vmchecker.cs.pub.ro/ui/#PCCB|vmchecker]], cursul **Programarea Calculatoarelor (CB & CD)**. \\ | ||
Toate temele sunt testate în mod automat pe [[https://vmchecker.cs.pub.ro/ui/|VMChecker]]. | Toate temele sunt testate în mod automat pe [[https://vmchecker.cs.pub.ro/ui/|VMChecker]]. | ||
Line 24: | Line 87: | ||
**Punctajul final al temei** este afișat la finalul informațiilor afișate în **Rezultate**. | **Punctajul final al temei** este afișat la finalul informațiilor afișate în **Rezultate**. | ||
+ | Conținutul arhivei va fi următorul: | ||
+ | - Fișierele **.c**, **.h** (dacă este cazul) care conține implementarea temei. | ||
+ | - Fișierul **Makefile**. | ||
+ | - Un fișier [[https://en.wikipedia.org/wiki/README|README]] în care descrieți rezolvarea temei. | ||
- | 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. | + | <note warning> |
+ | - Arhiva trebuie să fie de tipul **zip**. | ||
+ | - Makefile-ul și testele vor fi cele din aceasta arhiva: {{:programare:teme_2022:trickortreat.zip|}} | ||
+ | - Puteți utiliza regula **archive** din fișerul **Makefile** pentru a vă genera arhiva zip. Aceasta va adăuga fișierele Makefile, README și orice fișier **.c** și **.h** din directorul curent. | ||
+ | <code> | ||
+ | make archive | ||
+ | </code> | ||
+ | </note> | ||
- | ====Întrebări==== | + | <note warning> |
- | Dacă aveți nelămuriri, puteți să ne contactați pe forumul dedicat [[TODO|temei de casă nr. 0]] sau pe [[TODO|canalul Temei 0]].\\ | + | Nu includeti fisierele checkerului in arhiva voastra. **Nu folositi Makefile.checker** pe post |
- | La orice întrebare vom răspunde în maxim 24 de ore.\\ | + | de Makefile in arhiva voastra: asta va duce la recursivitate infinita pe vmchecker. Puteti sa folositi |
- | Nu se acceptă întrebări în ultimele 24 de ore înainte de deadline. | + | direct makefile-ul prezent in arhiva (**Makefile, nu Makefile.checker**). |
+ | </note> | ||
- | ===== Cerință ===== | + | <note warning> |
+ | In cazul in care testele va trec local, insa pica pe vmchecker cel mai probabil aveti | ||
+ | o sursa de "undefined behavior in cod". Pentru a va asigura ca scapati de aceste probleme, | ||
+ | compilati cu flagul de compilare `-Wall` si rezolvati toate warning-urile. | ||
+ | </note> | ||
+ | |||
+ | === Listă depunctări === | ||
+ | Lista nu este exhaustivă. | ||
+ | * O temă care nu compilează și nu a rulat pe **vmchecker** nu va fi luată în considerare | ||
+ | * O temă care nu rezolvă cerința și trece testele prin alte mijloace nu va fi luată în considerare | ||
+ | * **NU acceptăm teme copiate**. În cazul unei teme copiate se scade punctajul aferent temei din punctajul total. | ||
+ | * [-20.0]: Nerezolvarea tuturor erorilor și warningurilor de coding style | ||
- | Scrieți un program care citește de la standard input (tastatură) un număr natural. | ||