Differences

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

Link to this comparison view

so:teme:tema-1 [2020/02/23 12:35]
gabriel.bercaru
so:teme:tema-1 [2022/11/06 17:50] (current)
ionut.mihalache1506
Line 1: Line 1:
-<ifauth @admin,​gabriel.bercaru,​razvan.crainea,​mbarbulescu,​adrian.sendroiu,​george.muraru,​liza_elena.babu> +<hidden>
 ====== Tema 1 Multi-platform Development ====== ====== Tema 1 Multi-platform Development ======
  
 <note important>​ <note important>​
-  * Dată publicare: **25.02.2020** +  * Dată publicare: **10.03.2022** 
-  * <​html><​b><​span style="​color:​blue;">​Deadline</​span></​b></​html>:​ **10.03.2020, ora 23:55** +  * <​html><​b><​span style="​color:​blue;">​Deadline</​span></​b></​html>:​ **21.03.2022, ora 23:55** 
-  * <​html><​b><​span style="​color:​red;">​Deadline hard</​span></​b></​html>:​ **17.03.2020, ora 23:55**+  * <​html><​b><​span style="​color:​red;">​Deadline hard</​span></​b></​html>:​ **24.03.2022, ora 23:55**
 </​note>​ </​note>​
  
Line 16: Line 15:
     * folosirea pointerilor     * folosirea pointerilor
   * Încapsularea datelor într-o formă abstractă pentru o structură de date   * Încapsularea datelor într-o formă abstractă pentru o structură de date
-  * Folosirea bibliotecilor dinamice (și linkarea cu acestea) 
   * Realizarea unui Makefile pentru platformele Linux (folosind ''​gcc''​) și Windows (folosind ''​cl''​)   * Realizarea unui Makefile pentru platformele Linux (folosind ''​gcc''​) și Windows (folosind ''​cl''​)
  
Line 33: Line 31:
 **Asigurați-vă că responsabilii de teme au drepturi de citire asupra repo-ului vostru**. **Asigurați-vă că responsabilii de teme au drepturi de citire asupra repo-ului vostru**.
  
-Ca să vă creați un repo de gitlab în instanța facultății:​ în repository-ul [[https://​github.com/​systems-cs-pub-ro/​so-assignments|so-assignments]] de pe Github se află un script Bash care vă ajută să vă creați un repository privat pe instanța de Gitlab a facultății,​ unde aveți la dispoziție 5 repository-uri private utile pentru teme. Urmăriți indicațiile din README și de pe [[:​so:​teme:​folosire-gitlab|wiki-ul SO]].+Ca să vă creați un repo de gitlab în instanța facultății:​ în repository-ul [[https://​github.com/​systems-cs-pub-ro/​so/​tree/​master/​assignments|repository-ul ​so, directorul ​assignments]] de pe Github se află un script Bash care vă ajută să vă creați un repository privat pe instanța de Gitlab a facultății,​ unde aveți la dispoziție 5 repository-uri private utile pentru teme. Urmăriți indicațiile din README și de pe [[:​so:​teme:​folosire-gitlab|wiki-ul SO]].
  
 Motivul pentru care încurajăm acest lucru este că responsabilii de teme se pot uita mai rapid pe [[https://​gitlab.cs.pub.ro|Gitlab]] la temele voastre pentru a vă ajuta în cazul în care întâmpinați probleme/​bug-uri. Este mai ușor să primiți suport în rezolvarea problemelor implementării voastre dacă le oferiți responsabililor de teme acces la codul sursă pe [[https://​gitlab.cs.pub.ro|Gitlab]]. Motivul pentru care încurajăm acest lucru este că responsabilii de teme se pot uita mai rapid pe [[https://​gitlab.cs.pub.ro|Gitlab]] la temele voastre pentru a vă ajuta în cazul în care întâmpinați probleme/​bug-uri. Este mai ușor să primiți suport în rezolvarea problemelor implementării voastre dacă le oferiți responsabililor de teme acces la codul sursă pe [[https://​gitlab.cs.pub.ro|Gitlab]].
  
 Crash-course practic de git puteți găsi aici: [[http://​gitimmersion.com/​lab_01.html#​main_content|git-immersion]] Crash-course practic de git puteți găsi aici: [[http://​gitimmersion.com/​lab_01.html#​main_content|git-immersion]]
 +
 </​note>​ </​note>​
  
Line 44: Line 43:
  
 <code bash> <code bash>
-student@so:​~$ git clone https://​github.com/​systems-cs-pub-ro/​so-assignments.git +student@so:​~$ git clone https://​github.com/​systems-cs-pub-ro/​so 
-student@so:​~$ cd so-assignments/​1-multi+student@so:​~$ cd assignments/​1-multi
 </​code>​ </​code>​
- 
  
 În repository-ul de pe Github se vor găsi și scheletele pentru temele viitoare, care vor fi actualizate și se vor putea descărca pe viitor folosind comanda: În repository-ul de pe Github se vor găsi și scheletele pentru temele viitoare, care vor fi actualizate și se vor putea descărca pe viitor folosind comanda:
Line 62: Line 60:
 ===== Enunț ===== ===== Enunț =====
  
-Să se implementeze **în C** un mini preprocesor pentru ​fisiere continand ​cod sursa C. Preprocesorul va analiza ​fisierul (fisierele) ​de intrare, ​continand ​cod sursa C si va scrie, ​intr-un fisier ​de iesire, rezultatul ​preprocesarii fisierelor ​de intrare.+Să se implementeze **în C** un mini preprocesor pentru ​fișiere conținând ​cod sursă ​C. Preprocesarea este o etapă premergătoare compilării efective a fișierului ce conține cod sursă. 
 +Preprocesorul va analiza ​fișierul ​de intrare, ​conținând ​cod sursa C și va scrie, ​la consolă sau într-un fișier ​de iesire, rezultatul ​preprocesării fișierelor ​de intrare.
  
-Programul va primi o serie de argumente din linia de comandă reprezentând fișierul de intrare din care se face citirea. 
-Afișarea se va face intr-un fisier al carui nume este dat ca argument in linia de comanda (al doilea argument, dupa numele fisierului de intrare). 
  
-Rezolvarea temei presupune implementarea unui subset al directivelor de preprocesare specifice limbajului C: ''#​define'',​ ''#​include'',​ ''#​if'',​ ''#​elseif'',​ ''#​else'',​ ''#​endif''​. Sintaxa ​si descrierea acestora ​este prezentata in tabelul de mai jos.+Rezolvarea temei presupune implementarea unui subset al directivelor de preprocesare specifice limbajului C: ''#​define'',​ ''#​include'',​ ''#​if'',​ ''#​elseif'' ​(sub forma ''#​elif''​), ''#​else'',​ ''#​endif'',​ ''#​ifdef'',​ ''#​ifndef'',​ ''#​undef''​. Sintaxa ​și descrierea acestora ​sunt prezentate în tabelul de mai jos.
  
-^ Directiva ​                                      Descrierea directivei ​         +^ Directiva ^ Descrierea directivei ^ 
-| #define <​SYMBOL>​ <​MAPPING> ​                    |  Stocheaza ​o asociere ​intre <​SYMBOL> ​si <​MAPPING>​. ​(Aproape) toate aparitiile ​lui <​SYMBOL> ​in fisierul ​cu codul sursa vor fi inlocuite ​cu <​MAPPING>​ (vezi exemplul de mai jos)    +''​#define <​SYMBOL>​ <​MAPPING>​'' ​ | Stochează ​o asociere ​între ''​<​SYMBOL>​''​ și ''​<​MAPPING>​''​Toate aparițiile ​lui ''​<​SYMBOL>​''​ în fișierul ​cu codul sursă ​vor fi înlocuite ​cu ''​<​MAPPING>​'' ​(vezi exemplul de mai jos).  ​
-| #if <​COND>​ / #elseif ​<​COND>​ / #else / #​endif ​  |  ​Se ​verifica secvential daca <​COND>​ se evalueaza ​la un literal ​intreg nenulIn caz afirmativ, ​in fisierul ​rezultat se vor procesa ​si adauga doar liniile de cod specifice primului bloc a carui conditie ​a fost validata ​                        +''​#if <​COND>​'' ​''​#elif <​COND>​'' ​''​#else'' ​''​#endif'' ​ Se verifică secvențial dacă ''​<​COND>​'' ​se evaluează ​la un literal ​întreg diferit de ''​0''​În caz afirmativ, ​în fișierul ​rezultat se vor procesa ​și adauga doar liniile de cod specifice primului bloc a cărui condiție ​a fost validată. ​
-| #include "​HEADER" ​                             ​| ​ ​Realizeaza preprocesarea fisierului indicat de "​HEADER"​ si adauga liniile de cod preprocesat in fisierul de iesire ​        ​|+''#​ifdef <​SYMBOL>''​ / ''#​ifndef <​SYMBOL>''​ / ''#​else''​ / ''#​endif'' ​ | Se verifică dacă ''<​SYMBOL>''​ a fost sau nu definit anterior. | 
 +| ''​#include "​HEADER"​'' ​ Realizeaza preprocesarea fisierului indicat de "​HEADER"​ si adauga liniile de cod preprocesat in fisierul de iesire|
  
-Exemplu de fisier ​de intrare, ​continand ​cod sursa C:+Executabilul rezultat se va numi ''​so-cpp''​ și va avea următoarea semnătură:​ 
 + 
 +''​so-cpp [-D <​SYMBOL>​[=<​MAPPING>​]] [-I <​DIR>​] [<​INFILE>​] [ [-o] <​OUTFILE>​]''​ 
 + 
 +Semnificația argumentelor este următoarea:​ 
 + 
 +  * ''​-D <​SYMBOL>​[=<​MAPPING>​]''​ sau ''​-D<​SYMBOL>​[=<​MAPPING>​]'':​ va defini simbolul cu numele ''<​SYMBOL>''​ și valoarea ''<​MAPPING>'';​ dacă ''<​MAPPING>''​ lipsește, ''<​SYMBOL>''​ va primi valoarea șirului vid (''""''​). ''<​SYMBOL>''​ poate fi lipit de ''​-D''​ sau nu. 
 +  * ''​-I <​DIR>''​ sau ''​-I<​DIR>'':​ va adăuga un director în care se vor căuta fișiere incluse de codul sursă folosind directive ''#​include''​ 
 +  * ''​-o <​OUTFILE>''​ sau ''​-o<​OUTFILE>'':​ va scrie output-ul preprocesat în fișierul ''<​OUTFILE>''​ 
 +  * ''<​INFILE>'':​ specifică un fișier din care se va citi codul sursă pentru; dacă parametrul lipsește, codul sursă va fi obținut de la consolă (''​stdin''​) 
 + 
 +**Atenție:​** argumentele specificate cu modificatorii ''​-D''​ și ''​-I''​ pot fi folosiți de mai multe ori; de fiecare dată vor adăuga o nouă definiție, respectiv vor apenda un nou path. Fișierele de intrare și de ieșire pot fi definite o singură dată! Pentru mai multe detalii, puteți consulta pagina de manual a [[https://​linux.die.net/​man/​1/​cpp|preprocesorului C]]. 
 + 
 +Exemplu de fișier ​de intrare, ​conținând ​cod sursă ​C:
 <code c> <code c>
 #define VAR0 1 #define VAR0 1
Line 87: Line 98:
 </​code>​ </​code>​
  
-Fisierul preprocesat:+În urma preproceseării se va obține fișierul:
 <code c> <code c>
 int main(int argc, char **argv) int main(int argc, char **argv)
Line 98: Line 109:
 </​code>​ </​code>​
  
-Se observa ca in exemplul de mai sus, nu toate aparitiile sirului ​de caractere ''​VAR0''​ au fost inlocuite ​cu ''​1'': ​aparitiile intr-un context de literal ​sir de caractere ale unui simbol introdus prin directiva ''#​define''​ nu trebuie ​inlocuite.+Se observă că în exemplul de mai sus, nu toate aparițiile șirului ​de caractere ''​VAR0''​ au fost înlocuite ​cu ''​1'': ​aparițiile într-un context de literal ​șir de caractere ale unui simbol introdus prin directiva ''#​define''​ nu trebuie ​înlocuite.
  
-In vederea ​obtinerii functionalitatii ​specifice unui preprocesor, ​trebuie implementata o structura ​de date de tip HashMap. Aceasta va fi folosita ​pentru a stoca asocieri de tipul ''<​stringreplacement_string>''​.+În vederea ​obținerii functionalității ​specifice unui preprocesor, ​se recomandă implementarea unei structuri ​de date de tip HashMap. Aceasta va fi folosită ​pentru a stoca asocieri de tipul ''<​SYMBOLMAPPING>''​.
  
-In urma preprocesarii fisierului ​de intrare, trebuie ca intr-o structura ​de date de tip HashMap ​sa existe o singura ​asociere ​intre doua siruri ​de caractere, anume ''<"​VAR0",​ "​1">''​.+În urma preprocesării fișierului ​de intrare, trebuie ca într-o structură ​de date de 
 + tip HashMap ​să existe o singură ​asociere ​între două șiruri ​de caractere, anume ''<"​VAR0",​ "​1">''​.
  
 ===== Precizări generale ===== ===== Precizări generale =====
Line 108: Line 120:
 <note tip>​[[so:​teme:​general|Indicațiile și precizările generale pentru teme]] sunt valabile și aici. Vă rugăm să le parcurgeți și să țineți cont de ele înainte de a vă apuca de temă și respectiv înainte de submisia finală.</​note>​ <note tip>​[[so:​teme:​general|Indicațiile și precizările generale pentru teme]] sunt valabile și aici. Vă rugăm să le parcurgeți și să țineți cont de ele înainte de a vă apuca de temă și respectiv înainte de submisia finală.</​note>​
  
-  * Directiva ''#​define''​ trebuie ​implementata ​astfel ​incat sa suporte:+  * Directiva ''#​define''​ trebuie ​implementată ​astfel ​încât să suporte:
     * ''#​define''​-uri simple (precum cel din exemplu)     * ''#​define''​-uri simple (precum cel din exemplu)
-    * ''#​define''​-uri care folosesc ​in componenta ​lor alte ''#​define''​-uri +    * ''#​define''​-uri care folosesc ​în componența ​lor alte ''#​define''​-uri 
-    * ''#​define''​-uri de tip multilinie (respectand aceeasi ​sintaxa ca in C) +    * ''#​define''​-uri de tip multilinie (respectând aceeași ​sintaxa ca în C) 
-  * Nu trebuie implementat suport pentru ''#​define''​-uri parametrizate (de tip functie+  * Nu trebuie implementat suport pentru ''#​define''​-uri parametrizate (de tip funcție
-  * Pentru directivele de tip ''#​if <​COND>''​ / ''#​elseif ​<​COND>'',​ **nu** este necesar ​sa existe suport pentru ​operatii ​aritmetice, de tipul ''#​if 2 + 3''​. ​Insa, este necesar sa existe suport pentru utilizarea altor ''#​define''​-uri pe post de ''<​COND>''​. +  * Pentru directivele de tip ''#​if <​COND>''​ / ''#​elif <​COND>'',​ **nu** este necesar ​să existe suport pentru ​operații ​aritmetice, de tipul ''#​if 2 + 3''​. ​Însa, este necesar sa existe suport pentru utilizarea altor ''#​define''​-uri pe post de ''<​COND>''​. 
-  * Directiva ''#​include''​ va suporta doar includerea de fisiere header oferite in scheletul temei. Astfel, nu trebuie implementat suport pentru ​instructiuni ​de tipul ''#​include <​stdio.h>''​ sau ''#​include <​stdlib.h>''​. ​Insa, este necesar sa existe suport pentru includerea recursiva ​de fisiere header)+  * Directiva ''#​include''​ va suporta doar includerea de fisiere header oferite in scheletul temei. Astfel, nu trebuie implementat suport pentru ​includerea fișierelor din sistem ​de tipul ''#​include <​stdio.h>''​ sau ''#​include <​stdlib.h>''​ 
-  * **Pentru ​impartirea unui sir in tokensse va folosi ​delimitatorul oferit in cadrul lib-ului din scheletul de cod** ???.+  * Fișierele header pot fi incluse recursiv (un fișier header poate include alt fișier header) 
 +  * Fișierele importate folosind directive ''#​include''​ trebuiesc căutate în directorul în care se află fișierul de input, sau în directorul curent, în cazul în care codul de input este specificat la consolăDacă nu este găsit în directorul fișieruluiel este căutat în toate directoarele specificate folosind parametrul ''​-I'',​ în ordinea în care acestea au fost specificate în linia de comandă
 +  * În cazul în care un fișier inclus nu este găsit în niciun director, programul va iesi cu eroare. 
 +  ​* Pentru ​a împărți un șir în tokenivă recomandăm să folosiți următoarele delimitatoare:​ ''​\t []{}<>​=+-*/​%!&​|^.,:;​()\''​. 
 +  ​Executabilul generat va purta numele ''​**so-cpp**''​ pe Linux și ''​**so-cpp.exe**''​ pe Windows.
   * Pentru Windows, compilarea se va realiza din PowerShell, iar rularea se va face folosind Cygwin.   * Pentru Windows, compilarea se va realiza din PowerShell, iar rularea se va face folosind Cygwin.
   * Makefile-ul pentru Windows trebuie să compileze sursele utilizând flag-ul **/MD**   * Makefile-ul pentru Windows trebuie să compileze sursele utilizând flag-ul **/MD**
-  * Executabilul generat va purta numele ''​**tema1**''​ pe Linux și ''​**tema1.exe**''​ pe Windows. 
   * Dimensiunea maximă a unei linii din fisierul de cod sursa este de **256** de caractere.   * Dimensiunea maximă a unei linii din fisierul de cod sursa este de **256** de caractere.
-  * Buffer-ul folosit pentru citirea ​comenzilor ​poate fi declarat cu dimensiune statică.+  * Buffer-ul folosit pentru citirea ​liniilor ​poate fi declarat cu dimensiune statică.
   * **Verificați valorile întoarse de funcțiile ''​malloc/​calloc/​realloc''​ (în funcție de implementarea aleasă)**. În cazul în care una dintre aceste funcții eșuează, trebuie întors codul de eroare ''​12''​ (este codul de eroare pentru ''​ENOMEM''​). Acest cod de eroare trebuie propagat și returnat până la ieșirea din program. Valoarea erorii este pozitivă.   * **Verificați valorile întoarse de funcțiile ''​malloc/​calloc/​realloc''​ (în funcție de implementarea aleasă)**. În cazul în care una dintre aceste funcții eșuează, trebuie întors codul de eroare ''​12''​ (este codul de eroare pentru ''​ENOMEM''​). Acest cod de eroare trebuie propagat și returnat până la ieșirea din program. Valoarea erorii este pozitivă.
     * exemplu: din ''​main''​ se apelează ''​f1'',​ iar ''​f1''​ apelează ''​f2'':​ dacă eroarea apare în momentul apelului unui ''​malloc''​ în funcția ''​f2'',​ atunci codul de eroare (valorea ''​12''​) va fi întors în ''​f1'',​ din ''​f1''​ va trebui întors tot ''​12'',​ iar din main se va ieși cu același cod de eroare.     * exemplu: din ''​main''​ se apelează ''​f1'',​ iar ''​f1''​ apelează ''​f2'':​ dacă eroarea apare în momentul apelului unui ''​malloc''​ în funcția ''​f2'',​ atunci codul de eroare (valorea ''​12''​) va fi întors în ''​f1'',​ din ''​f1''​ va trebui întors tot ''​12'',​ iar din main se va ieși cu același cod de eroare.
 +  * **Nu aveți voie să apelați un alt preprocesor (folosind ''​system'',​ ''​exec'',​ sau orice altă metodă)** pentru a implementa functionalitatea cerută.
  
 ===== Precizări VMChecker ===== ===== Precizări VMChecker =====
  
-Arhiva temei va fi încărcată de două ori pe [[https://​vmchecker.cs.pub.ro/​ui/#​SO|vmchecker]] (Linux și Windows). <​html><​span style="​color:​red;">​Arhiva trimisă trebuie să fie aceeași pe ambele platforme</​span></​html>​ (se vor compara cele două arhive trimise).+Arhiva temei va fi încărcată de două ori pe [[https://​vmchecker.cs.pub.ro/​ui/#​SO|vmchecker]] (Linux și Windows). <​html><​span style="​color:​red; font-weight:​900;">​Arhiva trimisă trebuie să fie aceeași pe ambele platforme</​span></​html>​ (se vor compara cele două arhive trimise, <​html><​span style="​font-weight:​900;">​în caz că va exista vreo diferență între cele două încărcări,​ tema va fi punctată cu 0</​span></​html>​).
  
 <note important>​**Insistăm**,​ dacă mesajul cu roșu nu a fost clar: arhiva care se trimite pe vmchecker trebuie să fie **identică** pe ambele platforme. Puteți folosi ''​md5sum''​ sau ''​sha1sum''​ (sau comenzi similare) asupra arhivelor voastre dacă ați dezvoltat în locuri diferite. </​note>​ <note important>​**Insistăm**,​ dacă mesajul cu roșu nu a fost clar: arhiva care se trimite pe vmchecker trebuie să fie **identică** pe ambele platforme. Puteți folosi ''​md5sum''​ sau ''​sha1sum''​ (sau comenzi similare) asupra arhivelor voastre dacă ați dezvoltat în locuri diferite. </​note>​
Line 137: Line 153:
   * **Windows:​** Fișierul Makefile se va numi ''​Makefile''​.   * **Windows:​** Fișierul Makefile se va numi ''​Makefile''​.
   * Regula de ''​build''​ trebuie să fie cea principală (executată atunci când se dă ''​make''​ fără parametrii)   * Regula de ''​build''​ trebuie să fie cea principală (executată atunci când se dă ''​make''​ fără parametrii)
 +  * Pentru a documenta realizarea temei, vă recomandăm să folosiți template-ul de [[https://​github.com/​systems-cs-pub-ro/​so-assignments/​blob/​master/​README.example.md|aici]]
  
-Executabilul rezultat din operația de compilare și linking se va numi ''​tema1''​ pe Linux și ''​tema1.exe''​ pe Windows. +Executabilul rezultat din operația de compilare și linking se va numi ''​so-cpp''​ pe Linux și ''​so-cpp.exe''​ pe Windows.
- +
-Nu e nevoie să includeți bibliotecile dinamice în arhivă.  +
  
 ===== Punctare ===== ===== Punctare =====
-  *Tema va fi punctată cu minimul punctajelor obținute pe cele două platforme. Nu aveți voie să folosiți directive de preprocesare de forma:+  * Tema va fi punctată cu minimul punctajelor obținute pe cele două platforme. Nu aveți voie să folosiți directive de preprocesare de forma:
 <code c> <code c>
 #ifdef __linux__ #ifdef __linux__
Line 156: Line 170:
 Nota mai poate fi modificată prin depunctări suplimentare:​ Nota mai poate fi modificată prin depunctări suplimentare:​
     * [[general|Lista generală de depunctări]]     * [[general|Lista generală de depunctări]]
-    * ''​-2''​ implementare netransparentă a structurii de date de tip HashMap; HashMap-ul ar trebui să fie abstractizat cu un singur obiect (în C: structură de date), iar operațiile pe HashMap trebuie făcute pe obiectul respectiv. Puteți folosi definiții proprii pentru elementele HashMap-ului+    * ''​-2''​ implementare netransparentă a structurii de date de tip HashMap; HashMap-ul ar trebui să fie abstractizat cu un singur obiect (în C: structură de date), iar operațiile pe HashMap trebuie făcute pe obiectul respectiv. Puteți folosi definiții proprii pentru elementele HashMap-ului.
     * ''​-4''​ alocare statică HashMap     * ''​-4''​ alocare statică HashMap
     * se pot scădea oricâte puncte pentru teme care conțin erori grave/​vizibile de coding style sau de funcționare care pot să nu fie pe lista generală de depunctări     * se pot scădea oricâte puncte pentru teme care conțin erori grave/​vizibile de coding style sau de funcționare care pot să nu fie pe lista generală de depunctări
Line 183: Line 197:
 ==== Precizări Makefile ==== ==== Precizări Makefile ====
  
-Makefile-ul trebuie să respecte următoarea structură: pentru fiecare fișier ''​.c''​ generat trebuie să se obțină un fișier obiect. La final trebuie să faceți linkarea între sursa principală (să zicem ''​main.c''​ din care se obține ''​main.o''​)celelalte fișiere obiect obținute din celelalte surse ale voastre ​și biblioteca ''​libcompare.so''​ pe Linux, respectiv ''​compare.dll''​ pe Windows+Makefile-ul trebuie să respecte următoarea structură: pentru fiecare fișier ''​.c''​ generat trebuie să se obțină un fișier obiect. La final trebuie să faceți linkarea între sursa principală (să zicem ''​main.c''​ din care se obține ''​main.o''​) ​și celelalte fișiere obiect obținute din celelalte surse ale voastre.
  
 Porniți de la exemplele de Makefile atât pentru Linux cât și pentru Windows oferite în [[so:​laboratoare:​laborator-01|laboratorul 1]]. Un alt exemplu [[https://​www.gnu.org/​software/​make/​manual/​html_node/​Simple-Makefile.html|puteți găsi aici]]. Porniți de la exemplele de Makefile atât pentru Linux cât și pentru Windows oferite în [[so:​laboratoare:​laborator-01|laboratorul 1]]. Un alt exemplu [[https://​www.gnu.org/​software/​make/​manual/​html_node/​Simple-Makefile.html|puteți găsi aici]].
Line 198: Line 212:
  
 ===== Resurse necesare realizării temei ===== ===== Resurse necesare realizării temei =====
- +<​hidden>​
-**Header cu delimitatori (alte informatii necesare?​)** ? +
- +
- +
-Biblioteca ce conține delimitatorii (pre-compilată pentru mașinile virtuale de Linux-64bit și Windows 7 în format DLL) dar și întregul +
-checker se găsesc pe [[https://​github.com/​systems-cs-pub-ro/​so-assignments/​tree/​master/​1-multi|github-ul SO]] +
 Pentru a clona repo-ul și a accesa resursele temei 1: Pentru a clona repo-ul și a accesa resursele temei 1:
  
Line 212: Line 220:
 student@so-vm:​~/​so-assignments$ cd 1-multi student@so-vm:​~/​so-assignments$ cd 1-multi
 </​code>​ </​code>​
 +</​hidden>​
  
  
Line 243: Line 252:
 ===== Suport, întrebări și clarificări ===== ===== Suport, întrebări și clarificări =====
  
-Pentru întrebări sau nelămuriri legate de temă folosiți [[:​so:​info:​lista-discutii|lista de discuții]] ​sau [[:​so:​info:​documentatie#​social_media|canalul de IRC]].+Pentru întrebări sau nelămuriri legate de temă folosiți ​[[https://​curs.upb.ro/​2021/​mod/​forum/​view.php?​id=183917|forumul temei]]. Recomandăm să căutați eventuale întrebări și în arhiva ​[[:​so:​info:​lista-discutii|listei ​de discuții]], poate veți găsi ceea ce căutați până veți primi un răspuns din partea noastră.
  
 <note important>​ <note important>​
-Orice intrebare pe mailing list e recomandat să aibă subiectul de forma ''​[Tema1][Platforma] Titlul problemei''​Exemple ​de așa da:  +Orice intrebare ​postată ​pe forumul temei e recomandat să conțină o descriere cât mai clară a eventualei problemeÎntrebări ​de forma: "Nu merge X. De ce?" ​ră o descriere mai amănunțită vor primi un răspuns ​mai greu sau vor primi un răspuns sub formă ​de întrebare pentru ​cere lămuriri. 
- +Înainte să postați o întrebare pe forum citiți și celelalte întrebări(dacă există) pentru ​vedea dacă întrebarea voastră a fost deja adresată sub o altă formă(în cazul în care răspunsul din partea echipei vine mai greu este mai rapid să căutați voi deja printre întrebările existente).
-   * [Tema1][Linux] Memory leaks detected, desi am facut free +
-   * [Tema1][Windows] No makefile found +
-   * [Tema1][General] Neclaritate enuntimplementare directiva ​"#define" +
- +
-Exemple de așa nu:  +
- +
-   * Problema la tema 1 +
-   * eroare tema 1 +
-   * eroare la citire +
- +
-Evident, și în cel de-al doilea caz veți primi spunsuri, dar e posibil să le primițmai greu. În conținutul emailului, în caz de probleme mai specifice dați cât mai multe detalii despre ce ați încercat, mesaje de eroare, faceți attach la log-uri de execuție, output-uri de comenzi respectiv ce comenzi ​ați rulat etc+
  
-Revedeți șsecțiunea de [[:​so:​info:​lista-discutii|guidelines pentru lista de discuții SO]]+**ATENȚIE** să nu postați imagini cu părțdin soluția voastră pe forumul pus la dispoziție sau orice alt canal public ​de comunicație. Dacă veți face acest lucru, vă asumați răspunderea dacă veți primi copiat pe temă.
  
 </​note>​ </​note>​
 +</​hidden>​
  
-</​ifauth>​ 
so/teme/tema-1.1582454104.txt.gz · Last modified: 2020/02/23 12:35 by gabriel.bercaru
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