Unelte utilizator

Unelte site


teme2018:tema-1

Diferențe

Aici sunt prezentate diferențele dintre versiunile selectate și versiunea curentă a paginii.

Link către această vizualizare comparativă

Ambele părți revizuirea anterioară Versiuni anterioare
Urmatoarea versiune
Versiuni anterioare
teme2018:tema-1 [2018/03/09 23:29]
david.broscoteanu [Informații]
teme2018:tema-1 [2018/04/02 21:28] (curent)
mihai.iacov [Modificări temă]
Linia 6: Linia 6:
   - Implementarea unei funcționalități practice folosind aceste concepte   - Implementarea unei funcționalități practice folosind aceste concepte
 ===== Informații ===== ===== Informații =====
-  - Deadline soft, **03 aprilie ora 23:59** +  - Deadline hard, **03 aprilie ora 11:59** (termen limită - **nu se obţin puncte** pe soluţiile trimise mai târziu)
-  - Termen final de trimitere d m ora hh:mm (depunctare de 0.5pt/zi, maxim 3p depunctare).+
   - Trimiterea temelor se face pe platforma vmchecker (folosiți credențialele de pe http://acs.curs.pub.ro).   - Trimiterea temelor se face pe platforma vmchecker (folosiți credențialele de pe http://acs.curs.pub.ro).
 +  - Checker-ul offline il puteti descarca de la acesta [[https://drive.google.com/open?id=1Y7SGDeb3cGQslINQns1FfkrNPtUoKDeT|adresa]] 
 +  - Puteţi cere ajutor oricând la această adresă [[sda-ab-tema1@googlegroups.com|email]]
 +
 +===== Modificări temă=====
 +  - 20/03/2018 22:35
 +     * corecturi checker - nume de categorii din seturile de date (afectează t11)
 +     * corecturi checker - date de ieşire pentru cerinţa 3 (afectează t6, t7)
 +     * menţiuni suplimentare pentru cerinţele 3, 4
 +  - 31/03/2018 02:00
 +     * explicaţie checker - t13 - nu se elimină altfel noduri din "lista2" (produse dorite) decât prin condiţia de la C2; la rezolvarea C4, dacă un produs dorit nu există în "lista1" (supermarket), atunci nu putem şti preţul lui, deci nu există conceptul de "cel mai apropiat preţ";
 +  - 02/04/2018 21:30
 +     * prelungire termen limită cu 12 ore (de la 2 aprilie, ora 23:59, la **3 aprilie, ora 11:59**)
 +
  
 ===== Descriere ===== ===== Descriere =====
Linia 23: Linia 35:
 1. "date1.in" 1. "date1.in"
        * pe primul rand se va găsi numărul de produse din supermarket        * pe primul rand se va găsi numărul de produse din supermarket
-       conține informații despre toate produsele din supermarket,acestea fiind ordonate alfabetic după campul "categorie" +       pe următoarele rânduri sunt informații despre toate produsele din supermarket, acestea fiind ordonate alfabetic după câmpul "categorie" 
-       * un produs este descris de: { nume de tip char*; categorie de tip char*; preț de tip int; cantitate de tip int; stoc de tip int;}+       * un produs este descris de următoarea structură:\\ 
 + 
 +<code> 
 +//produs listă supermarket - datele apar pe un rând, în această ordine 
 +    char* nume; 
 +    char* categorie; 
 +    int pret; 
 +    int cantitate; 
 +    int stoc; 
 +</code>
        * campul stoc este 0 sau 1( 1=dacă acel produs ce va trebui cumpărat este în stocul supermarket-ului, 0 în caz contrar )        * campul stoc este 0 sau 1( 1=dacă acel produs ce va trebui cumpărat este în stocul supermarket-ului, 0 în caz contrar )
  
Linia 30: Linia 51:
        * reprezintă lista de cumpărături        * reprezintă lista de cumpărături
        * pe primul rand - numărul de produse ce trebuie achiziționate         * pe primul rand - numărul de produse ce trebuie achiziționate 
-       * pe următoarele linii se găsesc produsele caracterizate de: nume; categorie; cantitate_ceruta;+       * pe următoarele linii se găsesc produsele caracterizate de:\\ 
 + 
 +<code> 
 +//produs cumparat 
 +    char* nume; 
 +    char* categorie; 
 +    int cantitate//ceruta 
 +</code>
  
 3. "cerințe.in" 3. "cerințe.in"
         * pe prima linie conține 6 numere, 1 sau 0,corespunzătoare fiecărei cerințe.         * pe prima linie conține 6 numere, 1 sau 0,corespunzătoare fiecărei cerințe.
-Pentru 1 cerința se va realiza,pentru 0 cerința nu se va realiza.(Exemplu: 0 1 1 0 1 -> se vor realiza doar cerințele 2, 3 și 5 (imposibil, dar e doar un exemplu)). +pentru 1 cerința se va realiza,pentru 0 cerința nu se va realiza (Exemplu: 0 1 1 0 1 -> se vor realiza doar cerințele 2, 3 și 5 (imposibil, dar e doar un exemplu)). 
-          * pe a doua linie bugetul disponibil pentru a realiza cerința a 2-a(se va folosi doar in cadrul celei de-a doua cerințe )+        * pe a doua linie bugetul disponibil pentru a realiza cerința a 3-a (se va folosi doar in cadrul celei de-a treia cerințe)
  
 **Structuri esențiale:**  **Structuri esențiale:** 
-  * o listă, "lista1", cu informațiile din "date1.in" +  * o listă, "lista1", cu informațiile din "date1.in" (sau lista_produse_supermarket) 
-  * o listă, "lista2", cu informațiile din "date2.in"  +  * o listă, "lista2", cu informațiile din "date2.in" (sau lista_cumparaturi) 
-  * o listă, "lista3", cu informațiile produselor achiziționate: {nume; categorie; prețcantitate_cumpărată; +  * o listă, "lista3", cu informațiile produselor achiziționate (sau lista_produse_cumparate), cu structura produselor:\\ 
-  * o stiva(bonus) + 
-  * un arbore (bonus) +<code> 
 +//produs listă cumpărături - datele apar pe un rând, în această ordine 
 +    char* nume; 
 +    char* categorie; 
 +    int cantitate//cumparata 
 +</code> 
 +  * o stiva 
 +  * un arbore
  
  //Numele structurilor utilizate sunt pur orientative.//   //Numele structurilor utilizate sunt pur orientative.// 
Linia 48: Linia 83:
 **Cerințe:** **Cerințe:**
  
-**1.** Adăugarea produselor din "date2.in" in "lista2". Adăugarea trebuie să respecte următoarea regulă: un produs se adaugă numai după un alt produs din aceeași categorieDacă nu se gasește un produs din aceeașcategorie se va adăuga la finalul listei.+**1.** Adăugarea produselor din "date2.in" in "lista2" (de cumpărături)Datele produselor se citesc şprodusele se adăuga, în ordine, la finalul listei.
  
-**2.** Eliminarea din "lista2" a tuturor produselor ce au în "lista1" campul stoc nul.(egal cu 0)+**2.** Eliminarea din "lista2" (de cumpărături) a tuturor produselor ce au în "lista1" (supermarket) campul stoc nul (egal cu 0).
  
-**3.** Realizarea cumpărăturilor cu buget: completarea listei "lista3" cu datele obiectelor achiziționate în limita bugetului disponibil (se cumpara la rand produsele din lista - pana la epuizarea fondului).+**3.** Realizarea cumpărăturilor cu buget: completarea listei "lista3" (produse cumpărate) cu datele obiectelor achiziționate în limita bugetului disponibil (se cumpără, la rând, produsele din listă, în limitele date de buget si de cantităţile cerute/disponibile pentru fiecare produs). 
 +<note>Rezolvarea cerinţei 3 nu produce modificări în "lista2" (de cumpărături). Pentru claritate, nu produce modificări nici în "lista1".</note>
  
-**4.** Realizarea cumpărăturilor cu buget nelimitat și compensare: +**4.** Realizarea cumpărăturilor cu buget nelimitat și compensare (suprascrie "lista3", adică nu ţine cont de rezultatul cerinţei 3):\\ 
    
-  Dacă un produs din "lista2" prezintă un stoc insuficient în "lista1", va fi cumpărat, în completarea cantității cerute de produs, un alt produs din "lista1" ce aparține aceleiași categorii. +  Dacă un produs din "lista2" (de cumpărături) prezintă o cantitate insuficientă în "lista1" (supermarket), va fi cumpărat până la epuizareiar completarea cantității cerute de produs se va face cu alt produs din "lista1" (supermarket) ce aparține aceleiași categorii.
          
 //Condiții pentru cerința 4:// //Condiții pentru cerința 4://
-  * produsul cu care se completează are cel mai apropiat preț de cel dorit inițial  +  * produsul cu care se completează are cel mai apropiat preț de cel dorit inițial (se compară numai produse din aceeaşi categorie);   
-  * dacă cantitatea produsului "cel mai apropiat" este suficient, +  * dacă produsul "cel mai apropiat" există în cantitate suficientă în supermarket
-          * atunci: se cumpără din acesta cat pentru completarea cantității(acest produs are stocul = 0, NU cantitatea) +          * atunci: se cumpără din acesta cât pentru completarea cantității 
-          * altfel: se cumpără din acesta cantitatea maxima (existenta în supermarket)  +          * altfel: se cumpără din acesta cantitatea maximă (existentă în supermarket)  
-   * Lista de cumpărături se va parcurge și se vor cumpără în ordine: +  * Lista de cumpărături se va parcurge și se vor cumpăra în ordine: 
- *produsul curent, compensarea pentru produsul curent, produsul următor, compensarea pentru acest produs și asa mai departe.+   *produsul curent, compensarea pentru produsul curent, produsul următor, compensarea pentru produsul respectiv și asa mai departe.\\ 
 + 
 +<note>Rezolvarea cerinţei 4 produce modificări în "lista2" (de cumpărături). La cumpărarea unui produs dorit (sau compensarea cu alt produs), se scade cantitatea cerută din produsul dorit cu cantitatea cumpărată.</note>
  
 **5.** Arbore: **5.** Arbore:
  
-Se va crea un arbore binar ordonat crescător (la parcurgerea RSD) după cantitate.+Folosind datele din "lista3" (produse cumpărate), se va crea un arbore binar ordonat crescător (la parcurgerea **RSD**) după cantitate.
  
 **6.** Stiva: **6.** Stiva:
  
-Pentru fiecare produs P din lista1, sa se afle numărul de produse de pe poziții consecutive înainte de P care au prețul mai mare decat prețul lui P (numărul de produse la rand mai scumpe, mergand spre anterior) +Pentru fiecare produs P din "lista1" (supermarket), sa se afle numărul de produse de pe poziții consecutive înainte de P care au prețul mai mare decat prețul lui P (numărul de produse la rand mai scumpe decat produsul curent, mergand spre anterior); 
-      * rezultatul se va adăuga într-un vector (poziția 0 pentru primul produs din lista și asa mai departe).+      * rezultatul se va adăuga într-un vector (poziția 0 pentru primul produs, poziţia 1 pentru următorul din listă și asa mai departe).
  
 **Fișiere Output:** **Fișiere Output:**
-  * în fișierul de output "rezultate.out" se cer integral datele din liste și arbore, datele fiecărui nod fiind scrise pe linii diferite+  * Toate cerinţele marcate (în "cerinţe.in") vor fi rezolvate, în ordine, apoi se va trece la afişarea rezultatelor; 
- ce va conține fișierul de output depinde de cerințele rezolvate:  +  * în fișierul de output ("rezultate.out"se vor scrie integral datele produselor din liste, datele unui produs vor fi separate prin spaţiu, după fiecare produs urmează un final de linie
-        * dacă se rezolva cerința 1 sau cerința 2, se va afișa "lista2"  +  după fiecare afişare a unei structuri (listă, arbore, vector) urmează un final de linie; 
-        * dacă se rezolva cerința 3 sau cerința 4, se va afișa "lista3" +  * rezultatele cerinţelor se vor afişa în ordinea următoare:  
-        * dacă se rezolva cerința 5, se va afișa arborele (doar cantitățile RSD) +        * dacă se rezolvă cerința 1 sau cerința 2, se va afișa "lista2" (o singură dată); 
-        * dacă se rezolva cerința 6, se va afișa vectorul cu rezultatele+        * dacă se rezolvă cerința 3 sau cerința 4, se va afișa "lista3" (o singură dată); 
 +        * dacă se rezolvă cerința 5, se va afișa arborele (doar fiecare cantitate, urmată de un spaţiu, prin parcurgerea RSD); 
 +        * dacă se rezolvă cerința 6, se va afișa vectorul cu rezultatele (doar fiecare valoare din vector, urmată de un spaţiu).
  
  
Linia 125: Linia 165:
 <note warning>NU se lasă rând liber pentru Ci == 0.</note> <note warning>NU se lasă rând liber pentru Ci == 0.</note>
  
-Așadar, executabilul obținut în urma compilării va avea numele editor iar regula de rulare va fi:+Așadar, executabilul obținut în urma compilării va avea numele market iar regula de rulare va fi:
 <note tip>**./market date1.in date2.in cerinte.in rezultate.out**</note> <note tip>**./market date1.in date2.in cerinte.in rezultate.out**</note>
  
 ===== Reguli de trimitere ===== ===== Reguli de trimitere =====
  
-*Deadline-ul soft al temei este până pe 3/04iar după această zi se aplică o depunctare de 20 pcte/zi.   +*puteţi încărca mai multe soluţiise va lua în considerare soluţia cu cel mai mare punctaj trimisă până la termenul limită (2 aprilie, ora 23:59); 
-*Arhiva temei va avea numele GrupaSerie_Nume_Prenume_TemaNr.zip și va fi încărcată pe [[https://vmchecker.cs.pub.ro/ui/|vmchecker]] unde vă puteți loga folosind credențialele de pe acs.curs+*Arhiva temei va avea numele GrupaSerie_Nume_Prenume_TemaNr.zip și va fi încărcată pe [[https://vmchecker.cs.pub.ro/ui/|vmchecker]] unde vă puteți loga folosind credențialele de pe acs.curs.
  
 ==== Restricții ==== ==== Restricții ====
-  * Implementarea se va face folosind liste +  * Implementarea se va face folosind liste; 
-  * Nu se acceptă implementări cu tipuri de date statice; lucrăm cu memorie alocată dinamic pentru eficientizare +  * Nu se acceptă implementări cu tipuri de date cu memorie alocată static (se acceptă numai variabile locale de tip buffer pentru stocare temporară înainte de alocare); 
-  * Se va depuncta lucrul nemodularizat, folosind funcții +  * Se va depuncta lucrul nemodularizat (fără funcții); 
-  * Memoria trebuie eliberată. Dacă nu se respectă această cerință depunctarea este de pana la 5/100 pcte+  * Memoria trebuie eliberată. Dacă nu se respectă această cerință depunctarea este de pana la 5/100 pct (pentru mai mult de O(1) memorie alocată fără eliberare)
-  * Ea va conține (direct în rădăcină): +  * Menţineţi cel puţin un nivel minimal de aspect al codului şi evitaţi inconsistenţa (indentare haotică, numeroase combinaţii de caractere de tip "leading/trailing whitespace", numirea variabilelor şi a funcţiilor în ordinea literelor din alfabet); 
-      - Listă ordonată fișierele sursă +  * Arhiva trimisă conține (direct în rădăcină): 
-      - Makefile-ul (cu regulile **make build** și **make clean**). Executabilul generat trebuie să se numească editor +      - Makefile-ul (cu regulile **make build** și **make clean**). Executabilul generat trebuie să se numească market; 
-      - fișierul README în care va fi descrisă soluția problemei +      - fișierul README în care va fi descrisă soluția problemei; 
-  * Dacă soluția voastră nu compilează, dar dacă ideea este bună și trimiteți o încercare de implementare, puteți primi până la 20p +  * Dacă soluția voastră nu compilează, dar ideea este bună și trimiteți o încercare de implementare, puteți primi până la 20/100 pct; 
-  * Temele care vor fi copiate vor primi 0 pcte si studentii implicati mustrari si vor figura pe blacklist-ul cursului de SDA.+  * Temele care vor fi copiate vor primi 0 pct şi studenţii implicaţi mustrări şi vor figura pe blacklist-ul cursului de SDA.
  
  
teme2018/tema-1.1520630966.txt.gz · Ultima modificare: 2018/03/09 23:29 de către david.broscoteanu