Differences

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

Link to this comparison view

so:teme:tema-1 [2020/02/28 21:53]
gabriel.bercaru [Enunț]
so:teme:tema-1 [2022/11/06 17:50] (current)
ionut.mihalache1506
Line 1: Line 1:
 +<​hidden>​
 ====== Tema 1 Multi-platform Development ====== ====== Tema 1 Multi-platform Development ======
  
 <note important>​ <note important>​
-  * Dată publicare: **26.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 30: 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 41: 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 68: Line 69:
 | ''#​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).  | | ''#​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>''​ / ''#​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ă. | | ''#​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ă. |
-| ''#​ifdef <​SYMBOL>''​ / ''#​ifndef <​SYMBOL>''​ / ''#​endif'' ​ | Se verifică dacă ''<​SYMBOL>''​ a fost sau nu definit anterior. | +| ''#​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. |+''​#include "​HEADER"​'' ​ | Realizeaza preprocesarea fisierului indicat de "​HEADER"​ si adauga liniile de cod preprocesat in fisierul de iesire. |
  
 Executabilul rezultat se va numi ''​so-cpp''​ și va avea următoarea semnătură:​ Executabilul rezultat se va numi ''​so-cpp''​ și va avea următoarea semnătură:​
Line 78: Line 79:
  
   * ''​-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.   * ''​-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>'':​ va adăuga un director în care se vor căuta fișiere incluse de codul sursă folosind directive ''#​include''​ +  * ''​-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>'':​ va scrie output-ul preprocesat în fișierul ''<​OUTFILE>''​+  * ''​-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''​)   * ''<​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''​)
  
Line 129: Line 130:
   * 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șierului,​ el este căutat în toate directoarele specificate folosind parametrul ''​-I'',​ în ordinea în care acestea au fost specificate în linia de comandă.   * 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șierului,​ el 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.   * Î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 tokeni, vă recomandăm să folosiți următoarele delimitatoare:​ ''​ \t[]{}<>​=+-*/​%!&​|^.,:;​()\''​.+  * Pentru a împărți un șir în tokeni, vă recomandăm să folosiți următoarele delimitatoare:​ ''​\t []{}<>​=+-*/​%!&​|^.,:;​()\''​.
   * Executabilul generat va purta numele ''​**so-cpp**''​ pe Linux și ''​**so-cpp.exe**''​ pe Windows.   * 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**
   * 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.
Line 141: Line 142:
 ===== 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 211: Line 212:
  
 ===== Resurse necesare realizării temei ===== ===== Resurse necesare realizării temei =====
 +<​hidden>​
 Pentru a clona repo-ul și a accesa resursele temei 1: Pentru a clona repo-ul și a accesa resursele temei 1:
  
Line 219: Line 220:
 student@so-vm:​~/​so-assignments$ cd 1-multi student@so-vm:​~/​so-assignments$ cd 1-multi
 </​code>​ </​code>​
 +</​hidden>​
  
  
Line 250: 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 XDe ce?" fă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 +**ATENȚIE** să nu postați imagini cu părți 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ă.
-   [Tema1][Windows] No makefile found +
-   [Tema1][General] Neclaritate enunt: implementare directiva "#​define"​+
  
-Exemple de așa nu: +</​note>​ 
 +</​hidden>​
  
-   * Problema la tema 1 
-   * eroare tema 1 
-   * eroare la citire 
- 
-Evident, și în cel de-al doilea caz veți primi răspunsuri,​ dar e posibil să le primiți 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 și secțiunea de [[:​so:​info:​lista-discutii|guidelines pentru lista de discuții SO]] 
- 
-</​note>​ 
so/teme/tema-1.1582919635.txt.gz · Last modified: 2020/02/28 21:53 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