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/03 16:51]
marius.vintila Modified part one tasks
programare:teme_2019:tema4_2019_cbd [2020/01/04 00:24] (current)
marius.vintila [Task 1 (5p)]
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 însușească cunoștințele necesare pentru examen   * să se însușească cunoștințele necesare pentru examen
-  * sa se înțeleagă si sa se utilizeze operații cu vectori ​de referințe+  * 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   * sa se inteleaga si sa se utilizeze scrierea si citirea din fisiere binare
 ====== Introducere ====== ====== Introducere ======
-Gigel vrea sa se pregătească pentru examenul de la materia Programarea Calculatoarelor așa ca a intrat pe drive-ul seriei ​si si-a ales un subiect de acolo. După ce a citit subiectul, ​si-a dat seama ca ar trebuie sa se încălzească cu niște exerciții mai simple înainte de a trece la rezolvarea lui si treaba voastră este sa-l ajutați ​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.
 ====== Cerința ====== ====== Cerința ======
-<note warning>​**TOATE** modificările de cod se vor realiza **DOAR** in fișiere **project.c** si **project.h**. Modificarea oricărui alt fișier 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.
  
 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>​ 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>​
 ===== Încălzire ===== ===== Încălzire =====
 ==== Task 1 (5p) ==== ==== Task 1 (5p) ====
-Se da un vector cu n elemente numere întregi. ​Intoarceti un nou vector, alocat dinamic, care va avea la pozitia ​i produsul elementelor din vectorul primit, ​mai puțin al elementului de pe poziția i.+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 primit, ​cu excepția elementului de pe poziția i.
 <​note>​Veți completa funcția arrayProduct din fișierul project.c</​note>​ <​note>​Veți completa funcția arrayProduct din fișierul project.c</​note>​
 Exemplu: ​ Exemplu: ​
Line 26: Line 39:
 Input: Input:
 <​code>​ <​code>​
 +4
 1 2 3 4 1 2 3 4
 </​code>​ </​code>​
Line 33: Line 47:
 </​code>​ </​code>​
 ==== Task 2 (5p) ==== ==== Task 2 (5p) ====
-Se da o matrice pătratica ​cu numere întregi. ​Sa se rotească matricea cu 90 grade la stânga ​si sa se întoarcă noua matrice, ​alocata ​dinamic.+Se dă o matrice pătratică ​cu numere întregi. ​Să se rotească matricea cu 90 grade la stânga ​și să se întoarcă noua matrice, ​alocată ​dinamic.
 <​note>​Veți completa funcția rotateMatrix din fișierul project.c</​note>​ <​note>​Veți completa funcția rotateMatrix din fișierul project.c</​note>​
 Exemplu: Exemplu:
Line 39: Line 53:
 Input: Input:
 <​code>​ <​code>​
 +3
 1 2 3 1 2 3
 4 5 6 4 5 6
Line 50: Line 65:
 </​code>​ </​code>​
 ==== Task 3 (5p) ==== ==== Task 3 (5p) ====
-Se da o matrice ​de dimensiune ​si m cu elemente întregi ​si k query-uri de forma <x1, y1, x2, y2>, unde x1, y1, x2, y2 sunt numere întregi, si reprezintă coordonate ale matricei. Se cere calcularea sumei elementelor ​dintre ​cele doua coordonate ​pentru fiecare query, si intoarcerea lor intr-un nou vector alocat dinamic+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>​Veți completa funcția subMatrixesSums din fișierul 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 62: 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 îl alege, are de implementat o parte din sistemul dezvoltat de către 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 următoarele structuri: Pentru a implementa acest sistem, Gigel trebuie sa declare următoarele structuri:
-  * Structura ​Șofer ​ce va avea următoarele câmpuri: +  * Structura ​pentru sofer, ​ce va conține ​următoarele câmpuri: 
-    * nume, reprezentat ca sir de caractere ce va conține maxim 20 de caractere utile; +    * nume, reprezentat ca șir de caractere ce va conține maxim 20 de caractere utile; 
-    * număr mașină, ​sir de caractere format din 8 caractere utile(de forma JJNNNLLL; J - Județ, N - Număr, L - Litera); +    * număr mașină, ​șir de caractere format din 8 caractere utile (de forma JJNNNLLL; J - Județ, N - Număr, L - Litera); 
-    * locația ​curenta ​pe hartasalvata ​ca doua numere reale cu precizie ​dubla;+    * locația ​curentă ​pe hartăsalvată ​ca două numere reale cu precizie ​dublă;
     * numărul de curse efectuate de către șofer, întreg fără semn;     * numărul de curse efectuate de către șofer, întreg fără semn;
-    * informații despre toate cursele efectuate, vector de referințe ​pe structura de mai jos. +    * informații despre toate cursele efectuate, vector de adrese ​pe structura de mai jos. 
-  * Structura ​Curse ce va avea următoarele câmpuri: +  * Structura ​pentru cursa, ​ce va avea următoarele câmpuri: 
-    * locație început 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 desfășurare,​ număr stele(0->​5)+    * starea cursei ​reprezentată ​pe un byte, în care se retine: ​cursă anulatăcursă în desfășurare,​ număr stele (0->5)
 <​note>​Veți completa structurile din fișierul project.h</​note>​ <​note>​Veți completa structurile din fișierul project.h</​note>​
 === Alocarea structurilor === === Alocarea structurilor ===
Line 90: Line 107:
 ==== Task 5 (5p) ==== ==== Task 5 (5p) ====
 === Citirea datelor === === Citirea datelor ===
-Pentru a-si putea pune in practica ​sistemul, Gigel trebuie ​sa citească datele șoferilor, ​însă acestea, din cauza sistemului, ​sunt salvate ​in fișiere binare. Astfel, el are de completat o funcție care primește un fișier binar deja deschis pentru citire ​si trebuie sa citească, ​in ordine: ​+Pentru a-și putea pune în practică ​sistemul, Gigel trebuie ​să citească datele șoferilor, ​ce 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 întreg, reprezentând numărul de șoferi;   * un întreg, reprezentând numărul de șoferi;
-  * un vector de numere întregi, ​de lungimea numărului de șoferireprezentând numărul de curse pentru fiecare șofer;+  * un vector de numere întregi, ​având ​lungimea numărului de șoferi ​și reprezentând numărul de curse pentru fiecare șofer;
   * apoi datele fiecărui șofer:   * apoi datele fiecărui șofer:
     * numele;     * numele;
     * numărul mașinii;     * numărul mașinii;
-    * locația ​curenta ​pe harta+    * locația ​curentă ​pe hartă
-    * si detaliile pentru fiecare ​cursa a acestuia:+    * si detaliile pentru fiecare ​cursă ​a acestuia:
       * locația de start;       * locația de start;
       * starea.       * starea.
 Funcția va returna vectorul de șoferi, iar numărul de șoferi 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.
 === Afișarea datelor === === Afișarea datelor ===
-Din motive de verificare ale datelor, Gigel are de implementat ​si o funcție pentru afișarea unui vector de șoferi. Acesta va trebui ​sa afișeze într-un fișier binar deschis pentru scriere toate datele șoferilor, ​in aceeași ordine ca si citirea:+Din motive de verificare ale datelor, Gigel are de implementat ​și o 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;
   * numărul mașinii;   * numărul mașinii;
-  * locația ​curenta ​pe harta+  * locația ​curentă ​pe hartă
-  * si detaliile pentru fiecare ​cursa a acestuia:+  * si detaliile pentru fiecare ​cursă ​a acestuia:
     * locația de start;     * locația de start;
     * starea.     * starea.
 <​note>​Veți completa funcțiile readDrivers si printDrivers din fișierul 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 puțin curios, dorește ​sa vadă care este angajatul cu cel mai bun rating mediu(suma număr stele / (număr curse total - anulate - in desfășurare). ​Așa ca el are de implementat o funcție care primește vectorul de șoferi ​si întoarce numele șoferului 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>​Veți completa funcția maxRatingDriverName din fișierul 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 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 ca voi îl veți ajuta sa completeze aceasta funcție, care primește vectorul de șoferi, locația de start, si numărul de șoferi care vor fi căutați, 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 șoferi, locația de start și numărul de șoferi care vor fi căutați, prin comparare cu distanța euclidiană.
 <​note>​Veți completa funcția getClosestDrivers din fișierul 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 șoferilor din memorie, astfel încât el are de implementat ​doua funcții: o funcție care eliberează memoria ​ocupata ​de către un șofer, iar alta care eliberează memoria ​ocupata ​de un vector de șoferi.+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>​Veți completa funcțiile freeDriver si freeDrivers din fișierul project.c</​note>​ <​note>​Veți completa funcțiile freeDriver si freeDrivers din fișierul project.c</​note>​
  
programare/teme_2019/tema4_2019_cbd.1572792684.txt.gz · Last modified: 2019/11/03 16:51 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