Cuprins

Tema 1: Supermarket

Obiective

  1. Înțelegerea conceptului de funcționare și implementarea unor liste simplu/dublu înlănțuite și circulare,stive,cozi si arbori
  2. Operarea cu aceste structuri de date
  3. Implementarea unei funcționalități practice folosind aceste concepte

Informații

  1. Deadline hard, 03 aprilie ora 11:59 (termen limită - nu se obţin puncte pe soluţiile trimise mai târziu)
  2. Trimiterea temelor se face pe platforma vmchecker (folosiți credențialele de pe http://acs.curs.pub.ro).
  3. Checker-ul offline il puteti descarca de la acesta adresa
  4. Puteţi cere ajutor oricând la această adresă email

Modificări temă

  1. 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
  2. 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ţ“;
  3. 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

Dr. Doofus își urmărește în continuare planul de a domina lumea. După zeci de eșecuri în care a fost abrupt întrerupt de imprevizibilul ornitorinc agent Perry sau de frații Phineas și Ferb, el simte că a găsit rețeta succesului. A păzit ingredientele „rețetei succesului“ chiar cu mai multa dedicare decât a dat dovadă când încerca să-i saboteze fiicei lui, Vanessa, prima întalnire cu un băiat.

Foarte încrezător, Dr. Doofus vrea să facă o vizită la supermarket cu o listă în care se află ascuns ingredientul final pentru arma sa secretă. Absolut întamplator, Phineas și Ferb au vizitat supermarketul în ora precedentă pentru a-și procura obiectele necesare pentru o nouă invenție și anumitor obiecte li s-a epuizat stocul. Îngrijorat de cei doi baieți și de ornitorincul buclucaș, Dr. Doofus te roagă pe tine să faci aceste cumpărături pentru el și îți oferă posibilitatea să improvizezi atâta timp cât îi aduci ingredientul cheie.

Poți face față provocării?

Introducere

Următoarea temă are ca principiu realizarea unor cumpărături dintr-un supermarket pe baza unei liste de cumpărături. Lista de cumpărături va fi modificată prin adăugare sau eliminare de produse, iar achizitionarea se va realiza in limita unui buget disponibil (sold).

Cerințe

Fișiere input:

1. „date1.in“

//produs listă supermarket - datele apar pe un rând, în această ordine
    char* nume;
    char* categorie;
    int pret;
    int cantitate;
    int stoc;

2. „date2.in“

//produs cumparat
    char* nume;
    char* categorie;
    int cantitate; //ceruta

3. „cerințe.in“

Structuri esențiale:

//produs listă cumpărături - datele apar pe un rând, în această ordine
    char* nume;
    char* categorie;
    int cantitate; //cumparata

Numele structurilor utilizate sunt pur orientative.

Cerințe:

1. Adăugarea produselor din „date2.in“ in „lista2“ (de cumpărături). Datele produselor se citesc şi produsele se adăuga, în ordine, la finalul listei.

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“ (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).

Rezolvarea cerinţei 3 nu produce modificări în „lista2“ (de cumpărături). Pentru claritate, nu produce modificări nici în „lista1“.

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“ (de cumpărături) prezintă o cantitate insuficientă în „lista1“ (supermarket), va fi cumpărat până la epuizare, iar 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:

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ă.

5. Arbore:

Folosind datele din „lista3“ (produse cumpărate), se va crea un arbore binar ordonat crescător (la parcurgerea RSD) după cantitate.

6. Stiva:

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);

Fișiere Output:

Exemplu

date1.in
6
cascaval branzeturi 10 5 1
telemea branzeturi 10 7 0
varza legume 9 5 1 
parizer mezeluri 9 10 1
carnati mezeluri 10 6 0
crenvusti mezeluri 5 10 1
date2.in
4
cascaval branzeturi 10
varza legume 5
parizer mezeluri 14 
crenvusti mezeluri 7
cerinte.in
1 1 0 1 0 0
300
rezultate.out
cascaval branzeturi 0
varza legume 0
parizer mezeluri 0 
crenvusti mezeluri 0
 
cascaval branzeturi 5
telemea branzeturi 5
varza legume 5
parizer mezeluri 10
carnati mezeluri 4
crenvusti mezeluri 7
NU se lasă rând liber pentru Ci == 0.

Așadar, executabilul obținut în urma compilării va avea numele market iar regula de rulare va fi:

./market date1.in date2.in cerinte.in rezultate.out

Reguli de trimitere

Restricții