This shows you the differences between two versions of the page.
programare:teme_2021:tema2_2021_cbd [2021/11/25 11:35] andrei.florea0405 [Introducere] |
programare:teme_2021:tema2_2021_cbd [2022/01/03 22:18] (current) vlad_matei.draghici [Trimitere temă] |
||
---|---|---|---|
Line 7: | Line 7: | ||
Termen de predare: | Termen de predare: | ||
- | * Deadline soft: **18.12.2021** | + | * Deadline soft: **10.01.2022** |
- | * Deadline hard: **18.12.2021** | + | * Deadline hard: **10.01.2022** |
Pentru fiecare zi (24 de ore) de întârziere, se vor scădea 10 puncte din nota acordată, până la atingerea deadline-ului hard. | Pentru fiecare zi (24 de ore) de întârziere, se vor scădea 10 puncte din nota acordată, până la atingerea deadline-ului hard. | ||
====Întrebări==== | ====Întrebări==== | ||
- | Dacă aveți nelămuriri, puteți să ne contactați pe forumul dedicat [[https://curs.upb.ro/mod/forum/view.php?id=87347|temei de casă nr. 2]] sau pe canalul Temei 2.\\ | + | Dacă aveți nelămuriri, puteți să ne contactați pe canalul Temei 2.\\ |
La orice întrebare vom răspunde în maxim 24 de ore.\\ | La orice întrebare vom răspunde în maxim 24 de ore.\\ | ||
Nu se acceptă întrebări în ultimele 24 de ore înainte de deadline. | Nu se acceptă întrebări în ultimele 24 de ore înainte de deadline. | ||
Line 27: | Line 27: | ||
Urmăriți indicațiile din fișierele **Task1.c**, **Task2.c**, **Task3.c** și completați funcțiile notate cu **TODO**. În fișierele **Task1.c**, **Task2.c** și **Task3.c** se pot implementa și funcții adiționale și în fișierul **utils.h** se pot declara.</note> | Urmăriți indicațiile din fișierele **Task1.c**, **Task2.c**, **Task3.c** și completați funcțiile notate cu **TODO**. În fișierele **Task1.c**, **Task2.c** și **Task3.c** se pot implementa și funcții adiționale și în fișierul **utils.h** se pot declara.</note> | ||
- | ===== Task 1 - Cuvinte magice (50p) ===== | + | ===== Task 1 - Cuvinte magice (40p) ===== |
Cum intri în templul magic te trezești într-o cameră uriașă sub forma unei matrici de dimensiune N * M. O voce îți spune că te afli în templul lui magic și că pentru a trece la camera următoare trebuie să te miști prin cameră (prin matrice) după un traseu bine stabilit. Pentru a face lucrurile mai interesante, vocea îți spune că traseul necesar trebuie decodificat de către tine apoi îți spune un cod magic. | Cum intri în templul magic te trezești într-o cameră uriașă sub forma unei matrici de dimensiune N * M. O voce îți spune că te afli în templul lui magic și că pentru a trece la camera următoare trebuie să te miști prin cameră (prin matrice) după un traseu bine stabilit. Pentru a face lucrurile mai interesante, vocea îți spune că traseul necesar trebuie decodificat de către tine apoi îți spune un cod magic. | ||
Line 36: | Line 36: | ||
Cuvintele sunt de 3 tipuri: | Cuvintele sunt de 3 tipuri: | ||
- | - Cuvintele care încep cu litera ‘a’ sunt de forma “ax1x2x3x4” unde xi sunt cifre (1<= i <= 4). Fiecare cifră este corespunzatoare unei direcții de mișcare (x1 – dreapta , x2 – sus, x3 – stânga, x4 - jos în matrice). Cifra maximă dictează mișcarea din traseu corespunzătoare. Ex: Codul “a1235” are cifra maximă (5) pe poziția lui x4, deci următoarea mișcare din traseu este în jos. | ||
- | - Cuvintele care încep cu litera ‘b’ sunt de forma “bx1x2…xn” unde xi sunt cifre (1<= i <= n). Considerăm numărul format din cifrele “x1x2…xn” ca un număr K. Fie X numărul format din ultimele 2 cifre ale lui K (xn-1xn). În funcție de proprietățile de palindrom și prim ale lui K respectiv X avem următoarele 4 situații: | + | **1.** Cuvintele care încep cu litera ‘a’ sunt de forma “ax1x2x3x4” unde xi sunt cifre (1<= i <= 4). Fiecare cifră este corespunzătoare unei direcții de mișcare (x1 – dreapta , x2 – sus, x3 – stânga, x4 - jos în matrice). Cifra maximă dictează mișcarea din traseu corespunzătoare. |
+ | |||
+ | Ex: Codul “a1235” are cifra maximă (5) pe poziția lui x4, deci următoarea mișcare din traseu este în jos. | ||
+ | |||
+ | **2.** Cuvintele care încep cu litera ‘b’ sunt de forma “bx1x2…xn” unde xi sunt cifre (1<= i <= n). Considerăm numărul format din cifrele “x1x2…xn” ca un număr K. Fie X numărul format din ultimele 2 cifre ale lui K (xn-1xn). În funcție de proprietățile de palindrom și prim ale lui K, respectiv X avem următoarele 4 situații: | ||
- K palindrom, X prim: stânga | - K palindrom, X prim: stânga | ||
- K palindrom, X NU este prim: dreapta | - K palindrom, X NU este prim: dreapta | ||
Line 45: | Line 48: | ||
Ex: Codul “b121” are K = 121 și X = 21. K este palindrom și X nu este prim => următoarea mișcare din traseu este în dreapta. | Ex: Codul “b121” are K = 121 și X = 21. K este palindrom și X nu este prim => următoarea mișcare din traseu este în dreapta. | ||
- | - Cuvinte care încep cu litera ‘c’ sunt de forma “cnkx1x2…xn” unde n, k, xi sunt cifre. Fie S suma primelor k cifre luate din k în k în mod circular. S = x0 + xk + x2k + … (dacă indicele trece peste n atunci se resetează la 0). În funcție de restul împărțirii lui S la 4 avem următoare situații: | + | **3.** Cuvinte care încep cu litera ‘c’ sunt de forma “cnkx1x2…xn”, unde n, k, xi sunt cifre. Fie S suma primelor k cifre luate din k în k în mod circular. S = x0 + xk + x2k + … (dacă indicele trece peste n atunci se resetează la 0). În funcție de restul împărțirii lui S la 4 avem următoarele situații: |
- S % 4 = 0 => stânga | - S % 4 = 0 => stânga | ||
- S % 4 = 1 => sus | - S % 4 = 1 => sus | ||
- S % 4 = 2 => dreapta | - S % 4 = 2 => dreapta | ||
- S % 4 = 3 => jos | - S % 4 = 3 => jos | ||
- | Ex: Codul “c64123456” are n = 6 (6 cifre), k = 4 și cifrele 123456. Suma dorită este: S = x0 + x4 + x8 % 6 + x12 % 6 = 1 + 4 + 1 + 4 = 10 | + | Ex: Codul “c64123456” are n = 6 (6 cifre), k = 4 și cifrele 123456. Suma dorită este: S = x0 + x4 + x8 % 6 + x12 % 6 = 1 + 5 + 3 + 1 = 10 |
Restul împărțirii este: S % 4 = 10 % 4 = 2 => următoarea mișcare din traseu este în dreapta. | Restul împărțirii este: S % 4 = 10 % 4 = 2 => următoarea mișcare din traseu este în dreapta. | ||
+ | |||
+ | == Task 1.1 - Cuvinte magice tipul 'a' (8p) == | ||
+ | |||
+ | Sa se determine traseul corect pentru cuvinte doar de tipul 'a'. | ||
+ | |||
+ | == Task 1.2 - Cuvinte magice tipul 'b' (8p) == | ||
+ | |||
+ | Sa se determine traseul corect pentru cuvinte doar de tipul 'b'. | ||
+ | |||
+ | == Task 1.3 - Cuvinte magice tipul 'c' (8p) == | ||
+ | |||
+ | Sa se determine traseul corect pentru cuvinte doar de tipul 'c'. | ||
+ | |||
+ | == Task 1.4 - Cuvinte magice de orice tip (16p) == | ||
+ | |||
+ | Sa se determine traseul corect pentru orice tip de cuvinte. | ||
**//Input//** | **//Input//** | ||
Line 161: | Line 180: | ||
<note warning> | <note warning> | ||
- | Numerele vor fi **obligatoriu** stocate sub forma de șiruri de caractere. Nu se vor acorda cele 20 de puncte daca numerele sunt convertite în tipuri numerice. | + | Numerele vor fi **obligatoriu** stocate sub forma de șiruri de caractere. Nu se vor acorda cele 20 de puncte dacă numerele sunt citite/convertite cu totul în tipuri numerice (int, long long, etc.), pentru a efectua simpla adunare a acestora. |
</note> | </note> | ||
Line 213: | Line 232: | ||
Folosirea oricăror structuri de date în afara șirurilor de caractere și vectori va duce la depunctarea totală a cerinței. | Folosirea oricăror structuri de date în afara șirurilor de caractere și vectori va duce la depunctarea totală a cerinței. | ||
</note> | </note> | ||
+ | |||
+ | După ce ai rezolvat și ultima provocare vocea stranie te felicită și îți spune că acum ești pregatit de Tema 2 la PCLP. La auzul acestor cuvinte te trezești. "A fost doar un vis", îți spui și vezi că tocmai s-a postat Tema 2. | ||
==== Trimitere temă ==== | ==== Trimitere temă ==== | ||
Line 227: | Line 248: | ||
<note warning> | <note warning> | ||
- Arhiva trebuie să fie de tipul **zip**. | - Arhiva trebuie să fie de tipul **zip**. | ||
- | - Makefile-ul și testele vor fi cele din aceasta arhiva: {{:programare:teme_2021:tema2_skel.zip|}} | + | - Makefile-ul și testele vor fi cele din aceasta arhiva: {{:programare:teme_2021:templu_skel.zip|}} |
</note> | </note> | ||