Table of Contents

Tema 0 - TrickOrTreat

Changelog:

Responsabili:

Termen de predare:

Aceasta este o temă de “încălzire”. 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 temei de casă nr. 0 sau pe 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.

Atenție:

  • Citiți cu atenție tot enunțul temei.
  • Respectați întocmai regulile de încarcare a arhivei. Dacă uitați să includeți fișierele sursă sau Makefile-ul în arhivă, veți primi 0 pe temă.
  • Respectați întocmai instrucțiunile de scriere a fișierului Makefile. Checkerul folosește acest fișier pentru a vă rula tema. Dacă el nu este scris corect, veți primi 0 pe temă chiar dacă codul sursă este ok.
  • La trimiterea arhivei pe Moodle, tema vă este corectată automat, pe loc. Verificați secțiunea “Feedback” pentru a afla punctajul. Dacă vă apar erori și/sau nu apare punctajul obținut (în format numeric e.g. 85/100) înseamnă că tema voastră nu a fost rulată și veți primi 0 pe temă dacă nu rezolvați eroarea.
  • Puteți retrimite tema de oricate ori vreți înainte de expirarea deadline-ului. Se va lua în considerare numai ultima variantă trimisă.

Intro Makefile

make este un utilitar cu care putem automatiza compilarea de fișiere C, pe baza unui set de reguli descris într-un fișier numit Makefile. Un fișier Makefile este format din linii cu următoarea sintaxă: [nume-regula]: [dependente] urmată de lista de comenzi care se execută când această regulă este apelată. O regulă poate avea unul sau mai multe fișiere ca dependențe. La apelarea unei reguli, utilitarul make verifică automat dacă aceste fișiere există înainte de a executa comenzile din cadrul regulii. Dacă unul din ele nu există, atunci înainte de comenzile asociate regulii apelate se va apela automat regula cu același nume ca fișierul lipsă.

Să analizăm un exemplu de fișier Makefile:

CFLAGS=-Wall -Werror

.PHONY: clean run

run: myexe
	./myexe

myexe: main.c
	gcc main.c $(CFLAGS) -o myexe

clean:
	rm -f myexe

Avem următoarele elemente:

Pentru rularea unei reguli, scriem în terminal: make [nume-regula]. Exemplu:

Cerință

Task0

Scrieți un fișier Makefile care să conțină următoarele reguli obligatorii:

Task1 (20p)

Scrieți un program care citește de la standard input (tastatură) două numere întregi, a și b. Programul trebuie să afișeze suma și produsul numerelor, în următorul format:

Suma este [suma]
Produsul este [produs]

Exemplu utilizare:

make clean
make run-task1
2 3
Suma este 5
Produsul este 6

Task2 (70p)

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 ( ):

Exemplu utilizare:

make clean
make run-task2
11
1 2 3 4 5 6 Trick 8 9 10 Treat

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:

Î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 Cpp Core Guidelines. Acestea sunt verificate în mod automat de către checker.

Validare locală temă

Pentru a vă ajuta în dezvoltarea temei, arhiva 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:

./install-linters.sh

Pentru a rula checkerul local folosiți comanda:

./check.sh

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

Trimitere temă

Tema va fi trimisă folosind Moodle, cursul Programarea Calculatoarelor (CB & CD), activitatea “Tema 0”.

Toate temele sunt testate în mod automat pe Moodle.

Arhiva temei se va încărca folosind formularul de submisie (butonul Add submission.

Rezultatele vor fi disponibile în secțiunea Feedback - nota apare la linia Grade, iar outputul checkerului și erorile apar la sectiunea Feedback comments. Dacă apare un buton albastru în formă de plus, trebuie să dați click pe el pentru a afișa întregul output al checkerului.
Citiți cu atenție informațiile afișate în Feedback pentru a vă asigura că tema a fost rulată cu succes; o eroare comună este dată de faptul că conținutul arhivei nu respectă structura dorită (ex. fișierele sunt într-un alt director).

Punctajul final al temei este afișat la linia Grade și la finalul outputului din checker.

Conținutul arhivei trebuie să fie următorul:

  1. Fișierele .c, .h (dacă este cazul) care conțin implementarea temei.
  2. Fișierul Makefile.
  3. Un fișier README în care descrieți rezolvarea temei.

Arhiva trebuie să fie de tipul zip.

Nu includeti fisierele checkerului in arhiva voastra.

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.

Listă depunctări

Lista nu este exhaustivă.