Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
pp:2026:scala:t01 [2026/03/27 18:55] ldaniel |
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_v2.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! | ||