Differences

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

Link to this comparison view

programare:teme_2019:tema4_2019_cbd [2019/11/02 22:46]
marius.vintila Added second part of homework; Completed template
programare:teme_2019:tema4_2019_cbd [2020/01/04 00:24] (current)
marius.vintila [Task 1 (5p)]
Line 1: Line 1:
-====== Tema 4 – Pregatire ​Examen ======+====== Tema 4 – Pregătire ​Examen ======
 ====== Responsabili ====== ====== Responsabili ======
   * [[vintila.mariusm@gmail.com|Marius Vintila]]   * [[vintila.mariusm@gmail.com|Marius Vintila]]
Line 5: Line 5:
   * [[murarugeorgec@gmail.com|George Muraru]]   * [[murarugeorgec@gmail.com|George Muraru]]
  
-  * Data publicare: **5 Noiembrie 2019**+  * Data publicare: **5 Noiembrie 2019, ora 22:20**
   * Deadline: **6 Ianuarie 2020, ora 23:55**   * Deadline: **6 Ianuarie 2020, ora 23:55**
 +
 +==Depunctări==
 +Deadline-ul hard coincide cu cel soft. \\
 +În consecință,​ [[http://​ocw.cs.pub.ro/​courses/​programare/​regulament-cb-cd#​temele_de_casa|deadline-ul hard]] este **06.01.2020,​ ora 23:55**.
 +
 +==Întrebări==
 +Dacă aveți nelămuriri,​ puteți să ne contactați pe forumul dedicat [[https://​acs.curs.pub.ro/​2019/​mod/​forum/​view.php?​id=6890|temei de casă nr. 4]].\\
 +La orice întrebare vom răspunde în maxim 24 de ore.\\
 +Nu se acceptă întrebări în ultimele 24 de ore înainte de deadline.
 +
 +==Updates==
 +  * 15.12.2019: Update teste
 +  * 3.1.2020: Update teste v2
 ====== Obiective ====== ====== Obiective ======
-  * să se respecte formate stricte de intrare/ieşire +  * să se respecte formate stricte de intrare/ieșire 
-  * să se insuseasca cunostintele ​necesare pentru examen +  * să se însușească cunoștințele ​necesare pentru examen 
-  * sa se inteleaga ​si sa se utilizeze ​operatii ​cu vectori ​de referinte+  * sa se înțeleagă ​si sa se utilizeze ​operații ​cu array-uri ​de pointeri 
 +  * sa se inteleaga si sa se utilizeze scrierea si citirea din fisiere binare
 ====== Introducere ====== ====== Introducere ======
-Gigel vrea sa sa se pregateasca ​pentru examenul de la materia Programarea Calculatoarelor ​asa ca a intrat pe drive-ul seriei ​si si-a ales un subiect de acolo. ​Dupa ce a citit subiectul, ​si-a dat seama ca ar trebuie sa se incalzeasca ​cu niste exercitii ​mai simple ​inainte ​de a trece la rezolvarea lui si treaba ​voastra ​este sa-l ajutati in rezolvarea ​acestor task-uri+Gigel vrea să se pregătească ​pentru examenul de la materia Programarea Calculatoarelor ​așa că a intrat pe drive-ul seriei ​și a ales un subiect de acolo. ​După ce a citit subiectul, ​și-a dat seama că ar trebui să se încălzească ​cu niște exerciții ​mai simple ​înainte ​de a trece la rezolvarea lui, iar treaba ​voastră ​este -l ajutați în rezolvarea ​acestora
-====== ​Cerinta ​====== +====== ​Cerința ​====== 
-<note warning>​**TOATE** ​modificarile ​de cod se vor realiza **DOAR** in fisiere ​**project.c** si **project.h**. Modificarea ​oricarui ​alt fisier ​nu va fi luata in considerare.+<note warning>​**TOATE** ​modificările ​de cod se vor realiza **DOAR** in fișierele ​**project.c** si **project.h**. Modificarea ​oricărui ​alt fișier ​nu va fi luata in considerare.
  
-Urmariti indicatiile ​din fisierul ​**project.h** si completati functiile ​notate cu **TODO**. In fisierul ​**project.c** se pot implementa si functii aditionale.</​note>​ +Urmăriți indicațiile ​din fișierul ​**project.h** si completați funcțiile ​notate cu **TODO**. In fișierul ​**project.c** se pot implementa si funcții adiționale.</​note>​ 
-===== Incalzire ​=====+===== Încălzire ​=====
 ==== Task 1 (5p) ==== ==== Task 1 (5p) ====
-Se da un vector cu n elemente numere ​intregiAfisati ​produsul elementelor, ​mai putin al elementului de pe pozitia ​i, pe aceeasi linie, separate prin spatiu intr-un fisier text deja deschis pentru scriere. La final, treceti pe urmatorul rand+Se dă un vector cu n elemente numere ​întregi Se cere întoarcerea unui nou vector, alocat dinamic, care să aibă pe poziția i produsul ​tuturor ​elementelor ​din vectorul primitcu excepția ​elementului de pe poziția ​i. 
-<​note>​Veti completa ​functia ​arrayProduct din fisierul ​project.c</​note>​+<​note>​Veți completa ​funcția ​arrayProduct din fișierul ​project.c</​note>​
 Exemplu: ​ Exemplu: ​
  
 Input: Input:
 <​code>​ <​code>​
 +4
 1 2 3 4 1 2 3 4
 </​code>​ </​code>​
Line 32: Line 47:
 </​code>​ </​code>​
 ==== Task 2 (5p) ==== ==== Task 2 (5p) ====
-Se da o matrice ​patratica ​cu numere ​intregiSa se roteasca ​matricea cu 90 grade la stanga si sa se intoarca ​noua matrice. +Se dă o matrice ​pătratică ​cu numere ​întregiSă se rotească ​matricea cu 90 grade la stânga și să se întoarcă ​noua matrice, alocată dinamic
-<​note>​Veti completa ​functia ​rotateMatrix din fisierul ​project.c</​note>​+<​note>​Veți completa ​funcția ​rotateMatrix din fișierul ​project.c</​note>​
 Exemplu: Exemplu:
  
 Input: Input:
 <​code>​ <​code>​
 +3
 1 2 3 1 2 3
 4 5 6 4 5 6
Line 49: Line 65:
 </​code>​ </​code>​
 ==== Task 3 (5p) ==== ==== Task 3 (5p) ====
-Se da o matrice ​de dimensiune ​si m cu elemente ​intregi si k query-uri de forma <x1, y1, x2, y2>, unde x1, y1, x2, y2 sunt numere ​intregi, si reprezinta ​coordonate ale matricii. Se cere calcularea sumei elementelor ​dintre ​cele doua coordonate ​pentru fiecare query, si afisarea lor pe aceeasi linie+Se dă o matrice ​având dimensiunile ​și mcu elemente ​întregi și k query-uri de forma <x1, y1, x2, y2>, unde x1, y1, x2, y2 sunt numere ​întregi ce reprezintă ​coordonate ale matricei. Se cere calcularea sumei elementelor ​din submatricea definita de cele coordonate. 
-<​note>​Veti completa ​functia ​subMatrixesSums din fisierul ​project.c</​note>​+<​note>​Veți completa ​funcția ​subMatrixesSums din fișierul ​project.c
 + 
 +0 <= x1, x2 < nrLinii; 0 <= y1, y2 < nrColoane</​note>​
 Exemplu: Exemplu:
  
Line 61: Line 79:
 3 3
 1 2 2 2 1 2 2 2
-2 2 2+2 2 2 3
 0 0 2 2 0 0 2 2
 </​code>​ </​code>​
 Output: Output:
 <​code>​ <​code>​
-13 33 54+18 23 54
 </​code>​ </​code>​
 ===== Rezolvarea Subiectului ===== ===== Rezolvarea Subiectului =====
-Pentru subiectul pe care Gigel il alege, are de implementat o parte din sistemul dezvoltat de catre compania de transport Uber.+Pentru subiectul pe care l-a alesGigel are de implementat o parte din sistemul dezvoltat de către ​compania de transport Uber.
 ==== Task 4 (5p) ==== ==== Task 4 (5p) ====
 === Structuri === === Structuri ===
-Pentru a implementa acest sistem, Gigel trebuie sa declare ​urmatoarele ​structuri:​ +Pentru a implementa acest sistem, Gigel trebuie sa declare ​următoarele ​structuri:​ 
-  * Structura ​Sofer ce va avea urmatoarele campuri+  * Structura ​pentru sofer, ​ce va conține următoarele câmpuri
-    * nume, reprezentat ca sir de caractere ce va contine ​maxim 20 de caractere utile; +    * nume, reprezentat ca șir de caractere ce va conține ​maxim 20 de caractere utile; 
-    * numar masinasir de caractere format din 8 caractere utile(de forma JJNNNLLL; J - Judet, N - Numar, L - Litera); +    * număr mașinășir de caractere format din 8 caractere utile (de forma JJNNNLLL; J - Județ, N - Număr, L - Litera); 
-    * locatia curenta ​pe hartasalvata ​ca doua numere reale cu precizie ​dubla+    * locația curentă ​pe hartăsalvată ​ca două numere reale cu precizie ​dublă
-    * numarul ​de curse efectuate de catre soferintreg fara semn; +    * numărul ​de curse efectuate de către șoferîntreg fără ​semn; 
-    * informatii ​despre toate cursele efectuate, vector de referinte ​pe structura de mai jos. +    * informații ​despre toate cursele efectuate, vector de adrese ​pe structura de mai jos. 
-  * Structura ​Curse ce va avea urmatoarele campuri+  * Structura ​pentru cursa, ​ce va avea următoarele câmpuri
-    * locatie inceput cursasalvata ​ca doua numere reale cu precizie ​dubla+    * locația de la începutul curseisalvată ​ca două numere reale cu precizie ​dublă
-    * starea cursei ​reprezentata ​pe un byte, in care se retine: ​cursa anulatacursa in desfasurarenumar stele(0->​5) +    * starea cursei ​reprezentată ​pe un byte, în care se retine: ​cursă anulatăcursă în desfășurarenumăr ​stele (0->5) 
-<​note>​Veti completa structurile din fisierul ​project.h</​note>​+<​note>​Veți completa structurile din fișierul ​project.h</​note>​
 === Alocarea structurilor === === Alocarea structurilor ===
-Mai departe, el trebuie sa implementeze doua functii ​pentru alocarea dinamica a structurilor,​ una pentru alocarea unui sofer ce primeste ​un numar de curse, iar cealalta ​pentru alocarea unui vector de soferi ​ce primeste numarul ​de soferi ​si numarul ​de curse pentru fiecare ​sofer intr-un vector. +Mai departe, el trebuie sa implementeze doua funcții ​pentru alocarea dinamica a structurilor,​ una pentru alocarea unui șofer ​ce primește ​un număr ​de curse, iar cealaltă ​pentru alocarea unui vector de șoferi ​ce primește numărul ​de șoferi ​si numărul ​de curse pentru fiecare ​șofer într-un vector. 
-<​note>​Veti completa ​functiile ​allocDriver si allocDrivers din fisierul ​project.c</​note>​ +<​note>​Veți completa ​funcțiile ​allocDriver si allocDrivers din fișierul ​project.c</​note>​ 
-<note warning>​**ATENTIE!** ​Atat vectorul de soferi ​cat si vectorul de curse al fiecarui sofer sunt **vectori de referinte**!!!</​note>​+<note warning>​**ATENTIE!** ​Atât vectorul de șoferi ​cat si vectorul de curse al fiecărui șofer ​sunt **vectori de referințe**!!!</​note>​
 ==== Task 5 (5p) ==== ==== Task 5 (5p) ====
 === Citirea datelor === === Citirea datelor ===
-Pentru a-si putea pune in practica ​sistemul, Gigel trebuie ​sa citeasca ​datele ​soferilor, insa acestea, din cauza sistemului, sunt salvate ​in fisiere ​binare. Astfel, el are de completat o functie ​care primeste ​un fisier ​binar deja deschis pentru citire ​si trebuie sa citeascain ordine:  +Pentru a-și putea pune în practică ​sistemul, Gigel trebuie ​să citească ​datele ​șoferilorce sunt salvate ​în fișiere ​binare. Astfel, el are de completat o funcție ​care primește ​un fișier ​binar deja deschis pentru citire ​și din care trebuie sa citească ​respectând următoarea ​ordine:  
-  * un intregreprezentand numarul ​de soferi+  * un întregreprezentând numărul ​de șoferi
-  * un vector de numere ​intregide lungimea ​numarului ​de soferi, reprezentand numarul ​de curse pentru fiecare ​sofer+  * un vector de numere ​întregiavând ​lungimea ​numărului ​de șoferi și reprezentând numărul ​de curse pentru fiecare ​șofer
-  * apoi datele ​fiecarui sofer:+  * apoi datele ​fiecărui șofer:
     * numele;     * numele;
-    * numarul masinii+    * numărul mașinii
-    * locatia curenta ​pe harta+    * locația curentă ​pe hartă
-    * si detaliile pentru fiecare ​cursa a acestuia: +    * si detaliile pentru fiecare ​cursă ​a acestuia: 
-      * locatia ​de start;+      * locația ​de start;
       * starea.       * starea.
-Functia ​va returna vectorul de soferi, iar numarul ​de soferi ​va fi returnat prin intermediul unui parametru. +Funcția ​va returna vectorul de șoferi, iar numărul ​de șoferi ​va fi returnat prin intermediul unui parametru. 
-=== Afisarea ​datelor === +=== Afișarea ​datelor === 
-Din motive de verificare ale datelor, Gigel are de implementat ​si functie ​pentru ​afisarea ​unui vector de soferi. Acesta va trebui ​sa afiseze intr-un fisier ​binar deschis pentru scriere toate datele ​soferilorin aceeasi ​ordine ca si citirea:+Din motive de verificare ale datelor, Gigel are de implementat ​și funcție ​pentru ​afișarea ​unui vector de șoferi. Acesta va trebui ​să afișeze într-un fișier ​binar deschis pentru scriere toate datele ​șoferilorîn aceeași ​ordine ca și în cazul citirii:
   * numele;   * numele;
-  * numarul masinii+  * numărul mașinii
-  * locatia curenta ​pe harta+  * locația curentă ​pe hartă
-  * si detaliile pentru fiecare ​cursa a acestuia: +  * si detaliile pentru fiecare ​cursă ​a acestuia: 
-    * locatia ​de start;+    * locația ​de start;
     * starea.     * starea.
-<​note>​Veti completa ​functiile ​readDrivers si printDrivers din fisierul ​project.c</​note>​+<​note>​Veți completa ​funcțiile ​readDrivers si printDrivers din fișierul ​project.c</​note>​
 ==== Task 6 (5p) ==== ==== Task 6 (5p) ====
-In acest moment, Gigel, fiind putin curios, ​doreste sa vada care este angajatul cu cel mai bun rating mediu(suma numar stele / (numar curse total - anulate - in desfasurare). Asa ca el are de implementat o functie ​care primeste ​vectorul de soferi si intoarce ​numele ​soferului ​cu cel mai bun rating. +În acest moment, Gigel, fiind puțin ​curios, ​dorește să vadă care este angajatul cu cel mai bun rating mediu (sumă număr ​stele / (număr ​curse total - anulate - în desfășurare)). Pentru acest lucru, ​el are de implementat o funcție ​care primește ​vectorul de șoferi și întoarce ​numele ​șoferului ​cu cel mai bun rating. 
-<​note>​Veti completa ​functia ​maxRatingDriverName din fisierul ​project.c</​note>​+<​note>​Veți completa ​funcția ​maxRatingDriverName din fișierul ​project.c</​note>​
 ==== Task 7 (5p) ==== ==== Task 7 (5p) ====
-In acest moment, lui Gigel ii mai lipseste ​un singur lucru de la solutia ​lui: algoritmul de gasire ​al celor mai apropiati soferi ​de o locatie ​de start, ​asa ca voi il veti ajuta sa completeze aceasta ​functie, care primeste ​vectorul de soferilocatia ​de start, si numarul ​de soferi ​care vor fi cautati, prin comparare cu distanta euclidiana+În acest moment, lui Gigel îi mai lipsește ​un singur lucru de la soluția ​lui:  algoritmul de găsire ​al celor mai apropiați șoferi ​de o locație ​de start, ​așa că voi îl veți ajuta să completeze aceasta ​funcție. Funcția primește ​vectorul de șoferilocația ​de start și numărul ​de șoferi ​care vor fi căutați, prin comparare cu distanța euclidiană
-<​note>​Veti completa ​functia ​getClosestDrivers din fisierul ​project.c</​note>​+<​note>​Veți completa ​funcția ​getClosestDrivers din fișierul ​project.c</​note>​
 ==== Task 8 (5p) ==== ==== Task 8 (5p) ====
-Pentru a-si finaliza acest proiect, Gigel trebuie ​sa elimine datele ​soferilor ​din memorie, astfel ​incat el are de implementat ​doua functii: o functie ​care elibereaza ​memoria ​ocupata ​de catre un sofer, iar alta care elibereaza ​memoria ​ocupata ​de un vector de soferi+Pentru a-și finaliza acest proiect, Gigel trebuie ​să elimine datele ​șoferilor ​din memorie, astfel ​încât ​el are de implementat ​două funcții: o funcție ​care eliberează ​memoria ​ocupată ​de către ​un șofer, iar alta care eliberează ​memoria ​ocupată ​de un vector de șoferi
-<​note>​Veti completa ​functiile ​freeDriver si freeDrivers din fisierul ​project.c</​note>​+<​note>​Veți completa ​funcțiile ​freeDriver si freeDrivers din fișierul ​project.c</​note>​
  
 ====== Punctaj ====== ====== Punctaj ======
Line 131: Line 149:
   * [-1.0]: warning-uri la compilare (este obligatorie folosirea în fișierul **Makefile** a flag-ului de compilare **-Wall** pentru regula **build**)   * [-1.0]: warning-uri la compilare (este obligatorie folosirea în fișierul **Makefile** a flag-ului de compilare **-Wall** pentru regula **build**)
   * [-1.0]: linii mai lungi de 80 de caractere   * [-1.0]: linii mai lungi de 80 de caractere
-  * [-1.0]: ​functii ​mai lungi de 100 de linii+  * [-1.0]: ​funcții ​mai lungi de 100 de linii
   * [-0.5]: folosirea de [[https://​en.wikipedia.org/​wiki/​Magic_number_(programming)|magic numbers]]   * [-0.5]: folosirea de [[https://​en.wikipedia.org/​wiki/​Magic_number_(programming)|magic numbers]]
   * [-0.5]: numele variabilelor nu sunt sugestive   * [-0.5]: numele variabilelor nu sunt sugestive
Line 143: Line 161:
 Găsiți arhiva cu checker-ul si scheletul temei {{:​programare:​teme_2019:​pc_tema_4.zip|aici}}. Găsiți arhiva cu checker-ul si scheletul temei {{:​programare:​teme_2019:​pc_tema_4.zip|aici}}.
  
-Formatul arhivei care va fi incarcata ​pe platforma de testare a temelor va fi următorul:+Formatul arhivei care va fi încărcata ​pe platforma de testare a temelor va fi următorul:
  - fișierele ''​project.c'',​ ''​include/​project.h''​.  - fișierele ''​project.c'',​ ''​include/​project.h''​.
  - Un fișier [[https://​en.wikipedia.org/​wiki/​README|README]] în care vă descrieți rezolvarea fiecărui task.  - Un fișier [[https://​en.wikipedia.org/​wiki/​README|README]] în care vă descrieți rezolvarea fiecărui task.
  
 <note warning> <note warning>
-  - Arhiva trebuie să fie de tipul **ZIP** si sa contina ​toate fisierele mentionate ​**IN RADACINA ARHIVEI**.+  - Arhiva trebuie să fie de tipul **ZIP** si sa conțină ​toate fișierele menționate ​**IN RADACINA ARHIVEI**.
 </​note>​ </​note>​
 +
programare/teme_2019/tema4_2019_cbd.1572727582.txt.gz · Last modified: 2019/11/02 22:46 by marius.vintila
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