Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
pp:2026:scala:t01 [2026/03/26 21:08]
ana.ailiesei
pp:2026:scala:t01 [2026/04/03 23:01] (current)
ldaniel explicatie lista de cumparaturi
Line 3: Line 3:
 Deadline: ''​17 aprilie 2026''​ Deadline: ''​17 aprilie 2026''​
  
-Schelet de cod: {{:​pp:​2026:​scala:​tema1_pp_2026_skel_v1.zip|}}+Schelet de cod: {{:​pp:​2026:​scala:​tema1_pp_2026_skel_v3.zip|}} ​(actualizat 30 martie, 20:13)
  
 +Punctajul maxim este de 200 de puncte. Acesta este impartit astfel (puteti vedea in fisierele de test cat valoreaza fiecare test):
 +| **Modul** | **Sursa** | **Punctaj** |
 +| decoder | Decoder.scala | 100p |
 +| database | Table.scala | 25p |
 +| database | FilterCond.scala | 25p |
 +| database | PP_SQL.scala | 30p |
 +| shop | Commands.scala | 20p |
 <note warning>​După deadline fiecare student va prezenta tema la laborator, explicând în detaliu implementarea.</​note>​ <note warning>​După deadline fiecare student va prezenta tema la laborator, explicând în detaliu implementarea.</​note>​
  
Line 453: Line 460:
 </​hidden> ​ </​hidden> ​
  
-==== Clasa Table ====+==== 2.1. Clasa Table (25p) ====
  
 Vom defini un tabel ca o clasa care are ca atribute numele tabelei ''​tableName''​ si datele ''​tableData''​. Vom defini un tabel ca o clasa care are ca atribute numele tabelei ''​tableName''​ si datele ''​tableData''​.
Line 475: Line 482:
 </​code>​ </​code>​
  
-**2.1.3** Definiti operatia de inserare a unei linii in tabel.+**2.1.3** Definiti operatia de inserare a unei linii in tabel. Nu vom insera linia daca exista o linie identica ​in tabel.
 <code scala> <code scala>
 def insert(row: Row): Table = ??? def insert(row: Row): Table = ???
Line 497: Line 504:
  
  
-==== Filtre peste Tabele ====+==== 2.2. Filtre peste Tabele ​(25p) ====
  
 <​code>​ <​filter>​ ::=  <​code>​ <​filter>​ ::= 
Line 580: Line 587:
 </​code>​ </​code>​
  
-==== Query Language ====+==== 2.3. Query Language ​(30p) ====
  
 Vom dezvolta un limbaj de interogare, care va servi ca API pentru o gama variata de transformari de tabele, anterior implementate sub forma de functii. Acest limbaj de query va permite secvente sau combinatii ale acestor transformari. Vom dezvolta un limbaj de interogare, care va servi ca API pentru o gama variata de transformari de tabele, anterior implementate sub forma de functii. Acest limbaj de query va permite secvente sau combinatii ale acestor transformari.
Line 654: Line 661:
  
 ===== 3. Casa de Marcat ===== ===== 3. Casa de Marcat =====
-Vrem sa simulam operatii elementare pe care le-am folosi la o casa de marcat de tip self checkout. Va veti folosi de **productsTable**,​ un tabel intitulat "​Products"​ ce contine coloeanele "​Barcode",​ "​Name"​ si "​Price"​. 
  
 +Vrem sa simulam operatii elementare pe care le-am folosi la o casa de marcat de tip self checkout. Va veti folosi de **productsTable**,​ un tabel intitulat "​Products"​ ce contine coloeanele "​Barcode",​ "​Name"​ si "​Price"​. **Veti construi un nou tabel pentru lista de cumparaturi,​ care va avea coloanele name, quantity si price.
 +**
 Pentru urmatoarele cerinte trebuie sa va folositi de implementarile de la 2.3.2. Va oferim un exemplu de utilizare al **queryT**, in care selectam(cu FILTER) acele randuri care pe coloana "​Name"​ contin cuvantul "​lapte":​ Pentru urmatoarele cerinte trebuie sa va folositi de implementarile de la 2.3.2. Va oferim un exemplu de utilizare al **queryT**, in care selectam(cu FILTER) acele randuri care pe coloana "​Name"​ contin cuvantul "​lapte":​
 <code scala> <code scala>
 queryT(Some(productsTable),​ "​FILTER",​ Field("​Name",​ _.contains("​lapte"​))) queryT(Some(productsTable),​ "​FILTER",​ Field("​Name",​ _.contains("​lapte"​)))
 </​code>​ </​code>​
 +
 +==== 3.1. Operatii elementare (20p) ==== 
 +In fisierul Commands.scala din modulul shop, implementati urmatoarele functii: ​
  
 **3.1.1** Definiti operatia de initializare a unui nou cos de cumparaturi (tabela goala). **3.1.1** Definiti operatia de initializare a unui nou cos de cumparaturi (tabela goala).
Line 705: Line 716:
 ===== Cum rulez pe propriile exemple? ===== ===== Cum rulez pe propriile exemple? =====
  
-Găsiți fișierul ​''​MyBarcodes.scala'' ​care poate fi rulat din IDE. Funcția ''​readBarcodes''​ primește numele unui folder de input și a unui folder de output. În cel de input puteți pune propriile imagini cu coduri de bare în format **.ppm**. Decupați doar codul de bare din imagini și aveți grijă ca acestea să fie suficient de clare, altfel algoritmul nu va funcționa. Puteți converti imagini în formatul **.ppm** pe https://​convertio.co/​. În folderul de output puteți vedea aceleași imagini **.ppm**, dar în format alb-negru (adică **.pbm**). +Folositi fisierul ​''​Main.scala'' ​ca exemplu. Funcția ''​readBarcodes''​ primește numele unui folder de input și a unui folder de output. În cel de input puteți pune propriile imagini cu coduri de bare în format **.ppm**. Decupați doar codul de bare din imagini și aveți grijă ca acestea să fie suficient de clare, altfel algoritmul nu va funcționa. Puteți converti imagini în formatul **.ppm** pe https://​convertio.co/​. În folderul de output puteți vedea aceleași imagini **.ppm**, dar în format alb-negru (adică **.pbm**). ​Daca doriti sa simulati intreaga functionare a unui magazin, si nu doar recunoasterea codului de bare, adaugati in fisierul csv si detalii despre produsul din imaginea voastra. Have fun!
 ===== Aplicatie a codurilor de bare ===== ===== Aplicatie a codurilor de bare =====
  
 Puteti verifica ce contine mancarea folosind site-ul https://​world.openfoodfacts.org/​. Codul de bare pentru fiecare produs este unic la nivel global. Have fun! Puteti verifica ce contine mancarea folosind site-ul https://​world.openfoodfacts.org/​. Codul de bare pentru fiecare produs este unic la nivel global. Have fun!