This shows you the differences between two versions of the page.
|
programare:teme_2018:tema2_2018_ca [2018/11/05 04:18] darius.neatu |
programare:teme_2018:tema2_2018_ca [2018/11/18 14:56] (current) darius.neatu |
||
|---|---|---|---|
| Line 4: | Line 4: | ||
| * [[darius.neatu@cti.pub.ro|Darius Neațu]] | * [[darius.neatu@cti.pub.ro|Darius Neațu]] | ||
| - | **Deadline:** **23.11.2018 23:55** | + | **Deadline:** **26.11.2018 23:55** |
| ======Actualizări====== | ======Actualizări====== | ||
| + | * **06.11.2018 23:35** - Actualizare arhivă [[https://ocw.cs.pub.ro/courses/_media/programare/teme_2018/check_gigel.zip|check_gigel.zip]]. Vă rugăm să descarcați din nou arhiva. În unele fișiere caracterul apostrof(') era înlocuit cu altceva. | ||
| + | * **06.11.2018 22:33** - Adăugare precizări suplimentare la task 2 despre modul de câștigare a macroboard-ului. | ||
| * **06.11.2018 00:00** - **NU** există actualizări. | * **06.11.2018 00:00** - **NU** există actualizări. | ||
| Line 17: | Line 18: | ||
| ====== Obiective ====== | ====== Obiective ====== | ||
| - | * Exersarea lucrului cu tablouri (1D, 2D) și funcții. | + | * Exersarea lucrului cu tablouri și funcții. |
| - | * Implementarea unor cerințe conform unor specificații, dar și găsirea unor soluții pentru anumite cerințe unde nu se spune explicit în enunț cum se face. | + | * Implementarea unor algoritmi conform unor specificații, dar și găsirea unor soluții pentru anumite cerințe. |
| - | * Simularea unui joc de tipul X și 0 (modificat) printr-un program scris în C. Tratarea cazurilor (de eroare) multiple care pot apărea într-o aplicație completă. | + | * Simularea unui joc de tipul X și 0 (modificat) printr-un program scris în C. Tratarea cazurilor (de eroare) multiple care pot apărea într-o aplicație complexă. |
| - | * Exersarea aptitudinilor de a scrie cod clar, modularizat. Think twice before you write the code! | + | * Exersarea aptitudinilor de a scrie cod clar, modularizat. Think twice before you jump to the code! |
| Line 61: | Line 62: | ||
| - | Exemplu - n = 3, m = 8. Dacă șirul de mutări este următorul, atunci se obține board-ul din figura alăturată. | + | Exemplu - n = 3, m = 9. Dacă șirul de mutări este următorul, atunci se obține board-ul din figura alăturată. |
| {{ :programare:teme_2018:poza2_tabla_joc.png|}} | {{ :programare:teme_2018:poza2_tabla_joc.png|}} | ||
| Line 155: | Line 156: | ||
| - | După cum am spus anterior, în fiecare miniboard se va desfășura un joc de X și 0 de dimensiune n x n. Într-un miniboard câștigă jucătorul care are **o linie**, **o coloană** sau **o diagonală** (cea principală sau cea secundară), plină cu X (pentru jucătorul cu X) sau cu 0 (pentru jucătorul cu 0). | + | După cum am spus anterior, în fiecare miniboard se va desfășura un joc de X și 0 de dimensiune n x n. Într-un miniboard câștigă jucătorul care are cel puțin **o linie**, **o coloană** sau **o diagonală** (cea principală sau cea secundară), plină cu X (pentru jucătorul cu X) sau cu 0 (pentru jucătorul cu 0). |
| + | |||
| + | <note warning> | ||
| + | Menționăm că un miniboard este câștigat de **primul** jucător care face o linie, o coloană sau o diagonală în acest miniboard. Se poate pune în continuare mutări într-un miniboard câștigat, dar acesta rămâne în continuare a celui care l-a câștigat inițial. | ||
| + | </note> | ||
| Line 162: | Line 167: | ||
| În caz de remiză într-un miniboard, în macroboard se va pune caracterul **-** (liniuță). Considerăm remiză orice caz în care **nu** există **un** câștigător. | În caz de remiză într-un miniboard, în macroboard se va pune caracterul **-** (liniuță). Considerăm remiză orice caz în care **nu** există **un** câștigător. | ||
| - | După completarea macroboard-ului, care are tot dimensiune $n$ x $n$, aplicăm aceeași regulă de mai sus: jocul este câștigat de jucătorul care are o linie, o coloană sau o diagonală (cea principală sau secundară) plină cu caracterul său în macroboard. | + | După completarea macroboard-ului, care are tot dimensiune $n$ x $n$, aplicăm următoarea regulă: jocul este câștigat de jucătorul care are cel puțin o linie, o coloană sau o diagonală (cea principală sau secundară) plină cu caracterul său în macroboard la **finalul jocului**. |
| - | + | <note warning> | |
| - | <note> | + | Menționăm că jocul/macroboard-ul **poate** fi câștigat de **un singur** jucător. Acesta se stabilește la **finalul** execuției celor m mutări! |
| - | Menționăm că un miniboard este câștigat de primul jucător care face o linie, o coloană sau o diagonală în acest miniboard. Se poate pune în continuare mutări într-un miniboard câștigat, dar acesta rămâne în continuare a celui care l-a câștigat inițial. | + | |
| </note> | </note> | ||
| + | |||
| Pentru a rezolva task 2 se cer următoarele: | Pentru a rezolva task 2 se cer următoarele: | ||
| * 1. Să se afișeze **configurația finală a macroboard-ului** după executarea celor m mutări de la task 1. | * 1. Să se afișeze **configurația finală a macroboard-ului** după executarea celor m mutări de la task 1. | ||
| - | * 2. Să se determine **cine a câștigat** și să se afișeze pe ecran unul dintre mesajele | + | * 2. Să se determine **cine a câștigat** și să se afișeze pe ecran **unul** dintre mesajele |
| * “X won” | * “X won” | ||
| * “0 won” | * “0 won” | ||
| - | * “Draw again! Let’s play darts!” | + | * “Draw again! Let's play darts!” |
| <spoiler 00-example.in (Tasks 1 + 2)> | <spoiler 00-example.in (Tasks 1 + 2)> | ||
| Line 194: | Line 199: | ||
| NOT AN EMPTY CELL | NOT AN EMPTY CELL | ||
| X0- | X0- | ||
| - | --- | + | ---’--- |
| - | --- | + | Draw again! Let's play darts! |
| - | Draw again! Let’s play darts! | + | |
| </code> \\ \\ | | </code> \\ \\ | | ||
| Line 274: | Line 278: | ||
| NOT AN EMPTY CELL | NOT AN EMPTY CELL | ||
| X0- | X0- | ||
| - | --- | + | ---’--- |
| - | --- | + | Draw again! Let's play darts! |
| - | Draw again! Let’s play darts! | + | |
| X 0.2500000000 | X 0.2500000000 | ||
| 0 0.3333333333 | 0 0.3333333333 | ||
| Line 369: | Line 372: | ||
| <note warning> | <note warning> | ||
| - | Toate aceste exemple se găsesc în arhiva de testare [[https://ocw.cs.pub.ro/courses/_media/programare/teme2018/check_gigel.zip|check_gigel.zip]]. | + | Toate aceste exemple se găsesc în arhiva de testare check_gigel.zip. |
| Pentru fiecare exemplu se găsesc: | Pentru fiecare exemplu se găsesc: | ||
| Line 397: | Line 400: | ||
| NOT AN EMPTY CELL | NOT AN EMPTY CELL | ||
| X0- | X0- | ||
| - | --- | + | ---’--- |
| - | --- | + | Draw again! Let's play darts! |
| - | Draw again! Let’s play darts! | + | |
| X 0.2500000000 | X 0.2500000000 | ||
| 0 0.3333333333 | 0 0.3333333333 | ||
| Line 462: | Line 464: | ||
| ---- | ---- | ||
| ---- | ---- | ||
| - | ---- | + | ’--- |
| - | Draw again! Let’s play darts! | + | Draw again! Let's play darts! |
| X 0.2500000000 | X 0.2500000000 | ||
| 0 0.0000000000 | 0 0.0000000000 | ||
| Line 514: | Line 516: | ||
| ====== Testare ====== | ====== Testare ====== | ||
| - | Testarea temei se va face folosind un script de evaluare automată, ce poate fi descărcat de [[https://ocw.cs.pub.ro/courses/_media/programare/project-allocator.zip|aici]]. | + | Testarea temei se va face folosind un script de evaluare automată, ce poate fi găsit în [[https://ocw.cs.pub.ro/courses/_media/programare/teme_2018/check_gigel.zip|check_gigel.zip]]. |
| <note warning> | <note warning> | ||
| Line 546: | Line 548: | ||
| </note> | </note> | ||
| + | |||
| + | * Arhiva mai conține un script numit ''cs.py'', prezentat în pagina de Coding Style de pe ocw. | ||
| * Dacă apar erori şi testarea eşuează, puteţi să vă uitaţi în directorul ''tests'' şi să comparaţi rezultatele voastre (fişierele ''tests/out/*.out''), cu cele ale implementării de referinţă (fişierele ''tests/ref/*.ref''). | * Dacă apar erori şi testarea eşuează, puteţi să vă uitaţi în directorul ''tests'' şi să comparaţi rezultatele voastre (fişierele ''tests/out/*.out''), cu cele ale implementării de referinţă (fişierele ''tests/ref/*.ref''). | ||
| ea să-l rulaţi separat şi să experimentaţi cu el şi alte situaţii. | ea să-l rulaţi separat şi să experimentaţi cu el şi alte situaţii. | ||
| - | * Arhiva mai conține un script numit ''cs.py'', prezentat în pagina de Coding Style de pe ocw. | + | <spoiler Testare manuală> |
| + | <note> | ||
| + | Dacă doriți să testați manual folosind redirectări (fără a introduce de fiecare dată datele de la tastatură), puteți folosi această metodă. | ||
| + | <code bash> | ||
| + | darius@pc ~ $ make build # imi va creea executabilul gigel | ||
| + | |||
| + | darius@pc ~ $ ./gigel < tests/in/00-gigel.in # voi rula pe gigel cu inputul din fisierul tests/in/00-gigel.in | ||
| + | # rezultatul se va afisa pe ecran | ||
| + | |||
| + | darius@pc ~ $ ./gigel < tests/in/00-gigel.in > out # voi rula pe gigel cu inputul din fisierul tests/in/00-gigel.in | ||
| + | # rezultatul va fi salvat in fisierul out (pe care pot da cat sau il pot deschide in Sublie) | ||
| + | |||
| + | darius@pc ~ $ diff tests/ref/00-gigel.ref out # diff compara linie cu linie cele 2 fisiere | ||
| + | # daca nu afiseaza ceva (erori) atunci sunt indentice | ||
| + | # altfel arata cum este linia in primul fisier si cum arata in al 2lea | ||
| + | # DACA fisierele au linii mici, se pot compara in paralel (pe coloane), folosind parametrul -y. | ||
| + | </code> | ||
| + | |||
| + | Un exemplu de comparare se află in poza următoare. | ||
| + | |||
| + | {{programare:teme_2018:tema2_diff.png?800}} | ||
| + | </note> | ||
| + | </spoiler> | ||
| ===== Barem corectare ===== | ===== Barem corectare ===== | ||
| * Criteriile de notare sunt următoarele: | * Criteriile de notare sunt următoarele: | ||
| Line 585: | Line 611: | ||
| * Tema se va implementa DOAR în limbajul **C**. Va fi compilat și testat DOAR într-un mediu **LINUX**. Nerespectarea acestor reguli aduce un punctaj NUL. | * Tema se va implementa DOAR în limbajul **C**. Va fi compilat și testat DOAR într-un mediu **LINUX**. Nerespectarea acestor reguli aduce un punctaj NUL. | ||
| - | * Tema va fi trimisă DOAR pe [[https://elf.cs.pub.ro/vmchecker/|vmchecker]], sub forma unei arhive **ZIP**. Nerespectarea acestei reguli aduce un punctaj NUL pe temă. | + | * Temele vor fi trimise OBLIGATORIU pe vmchecker **ȘI** pe site-ul de curs (moodle), in sectiunea dedicata temei respective. |
| * Fișierele temei trebuie OBLIGATORIU împachetate într-o arhiva de tip '.zip', cu numele **Grupa_NumePrenume_Tema2.zip** (exemplu: **369CA_PopescuGigel_Tema2.zip**). | * Fișierele temei trebuie OBLIGATORIU împachetate într-o arhiva de tip '.zip', cu numele **Grupa_NumePrenume_Tema2.zip** (exemplu: **369CA_PopescuGigel_Tema2.zip**). | ||