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.
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.
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.
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:
myexe
care depinde de fișierul main.c
. Această regulă compilează fișierul main.c
si generează un executabil cu numele myexe
run
care depinde de fișierul myexe
. Această regulă rulează executabilul myexe
clean
care șterge executabilul generat.CFLAGS
care conține string-ul -Wall -Werror
și care este folosită la compilare. În cazul în care dorim să compilăm mai multe fișiere folosind același Makefile
, putem refolosi variabila în loc sa repetăm flag-urile pentru fiecare utilizare gcc
.clean
și run
ca reguli de tip PHONY
. Asta îi spune utilitarului make
că aceste reguli NU au rolul de a genera un fișier cu același nume (clean
și run
). Spre exemplu pentru regula run
, fără mențiunea PHONY
, la apelarea acestei reguli utilitarul make
nu ar mai executa comenzile asociate dacă în același director ar exista un fișier numit run
, deoarece ar considera că rularea regulii nu e necesară întrucât fișierul este deja generat. Dacă folosim PHONY
, acea regulă se va rula mereu, chiar dacă deja există un fișier cu acel nume. Atentie: make
rulează mereu o regulă dacă dependentele ei au fost modificate mai recent decât fișierul produs de către regulă. Exemplu: dacă rulăm regula myexe
, chiar dacă executabilul myexe
este deja generat, dacă fișierul main.c
a fost modificat între timp, make
va rula regula din nou (adică main.c
va fi recompilat și vom obține un nou myexe
, ceea ce este rezultatul dorit).
Pentru rularea unei reguli, scriem în terminal: make [nume-regula]
.
Exemplu:
make run
make myexe
make clean
Scrieți un fișier Makefile
care să conțină următoarele reguli obligatorii:
run-task1
: (re)compilează și rulează codul pentru taskul 1;run-task2
: (re)compilează și rulează codul pentru taskul 2;Scrieți un program care citește de la standard input (tastatură) două numere întregi pozitive, a și b. Programul trebuie să verifice daca numărul a este divizibil cu numărul b. Daca a este divizibil cu b, se va afișa 1. În cazul contrar se va afișa 0.
make clean make run-task1 6 3 1
Scrieți un program care citește de la standard input (tastatură) un număr întreg n. Programul trebuie să afișeze un triunghi format astfel: Pe prima linie se va afișa *
, pe a doua linie * *
, pe a treia linie * * *
etc. și pe a n-a linie caracterul *
de n ori. Pe fiecare linie caracterele *
vor fi separate de cate un spațiu.
make clean make run-task2 3 * * * * * *
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.
Pentru a vă ajuta în dezvoltarea temei, arhiva first.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
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:
Lista nu este exhaustivă.