Differences

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

Link to this comparison view

programare:tema1_cbcd_2015_2016 [2015/10/26 00:00]
cosmin.boaca created
programare:tema1_cbcd_2015_2016 [2015/10/26 17:50] (current)
cosmin.boaca [Trimitere temă]
Line 6: Line 6:
  
 **Termen de predare: ** To be decided **Termen de predare: ** To be decided
 +
 +===== Obiective Temă ===== 
 +
 +  * să se realizeze un program urmând anumite cerințe
 +  * să se utilizeze funcţii, pentru a modulariza programul
 +  * să se respecte formate stricte de intrare/​ieşire
 +  * să se însușească cunoștințele din primele 4 laboratoare
 +
 +===== Cunoştinte necesare ===== 
 +  * laboratoarele 1-4
 +  * matematică elementară
 +
 +===== Cerință ===== 
 +
 +=== Task1. 20p ===
 +
 +Florin și-a descoperit de curând pasiunea pentru teoria numerelor. După îndelungi cercetări el a descoperit că există perechi de numere **(a, b)** cu o proprietate interesantă:​
 +
 +** SumDiv(a) = b si SumDiv(b) = a ** unde
 +
 +** SumDiv(X) = suma divizorilor lui X care sunt mai mici ca X **
 +
 +Fiind foarte încântat de numerele descoperite Florin a vrut să-i arate lui Cosmin ** o listă cu toate perechile de numere mai mici decât K **. Totuși, Florin nu a fost atent și a pierdut lista cu numerele iar acum voi va trebui să-l ajutați să o refacă. În schimbul ajutorului vostru Florin o să vă răsplătească oferindu-vă 20 de puncte din tema la PC.
 +
 +== Input ==
 +
 +Pe prima linie se va regăsi numărul K.
 +
 + K
 +
 +== Output: ==
 +
 +Pe prima linie se va găsi **numărul N de perechi** de forma (a, b) care resepctă proprietatea descrisă mai sus
 +Pe următoarele N linii se vor regăsi perechile **(ai, bi), ai < bi** sortate în ordinea crescătoare a numărului **ai**, iar în caz de egalitate în ordinea crescătoare a numărului **bi**
 +
 + N
 + (a0, b0)
 + (a1, b1)
 + (a2, b2)
 + .
 + .
 + .
 + (aN, bN)
 +
 +=== Task2. 20p ===
 +
 +După recuperarea perechilor de numere pierdute Cosmin și Florin își pun tot mai multe întrebări legate de numere. Printre acestea se numără și următoarea întrebare:
 +
 +** Câte palindroame mai mici decât X se pot scrie ca produs de 2 numere de P cifre ? **
 +
 +** Un palindrom este un număr care se citește la fel și de la stânga la dreapta și de la dreapta la stânga, de exemplu 121, 2222, 2442 **
 +
 +== Input ==
 +
 +Pe prima linie se vor găsi numerele P, X.
 +
 + P X
 +
 +== Output ==
 +
 +Numărul de numere mai mici ca X care sunt palindroame și se pot scrie ca produs de 2 numere de P cifre.
 +
 +== Restricții ==
 +
 +** 0 < X < 2 ^ 63 **
 +
 +0 < P < 4
 +
 +=== Task3. 40p ===
 +
 +Cosmin si Florin au descoperit un nou joc. Ei au un teren de luptă de 8x8 codificat sub forma unui număr pe 64 de biți (unsigned long long).
 +Pe terenul de luptă se află soldați ** (codificați cu bit-ul 1) ** și celule libere ** (codificate cu bit-ul 0) **.
 +
 +<note tip>
 +
 +**7 = 0000000000000000000000000000000000000000000000000000000000000111**
 +
 +Codifică harta următoare
 +
 +^ Hartă pentru valoarea 7^^^^^^^^
 +| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
 +| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
 +| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
 +| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
 +| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
 +| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
 +| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
 +| 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
 +
 +</​note>​
 +
 +Cosmin și Florin mută alternativ câte un soldat dintr-o celulă a hărții intr-o altă celulă a hărții. ​
 +Dacă un soldat este mutat într-o celulă în care se află alt soldat se vor lupta intre ei, iar ambii vor dispărea de pe teren. Mutările făcute
 +sunt codificate sub forma unui număr întreg astfel:
 + - primii 6 biți reprezintă pozitia curentă a unui soldat pe hartă: (primii 3 biți reprezintă coloana, iar următorii 3 biți reprezintă linia).
 + - următorii 6 biti reprezintă pozitia în care soldatul se va teleporta pe harta: (primii 3 biți reprezintă coloana, iar următorii 3 biți reprezintă linia)
 +
 +<note tip>
 +
 +Numărul **2655 (baza 10) ** =  ** 101001011111 (baza 2) ** reprezinta o codificarea a următoarei mutări pe hartă:
 +
 +poziția curentă: ** (011, 111)  ** -> ** (3, 7) **
 +
 +poziția în care soldatul va fi mutat ** (101, 001) ** -> ** (5, 1) **
 +
 +</​note>​
 +
 +Fiind dată o hartă inițiala și o lista de mutări codificate ca în exemplul anterior Cosmin și Florin vă roagă să afișați configurația finală a hărții sub forma unui număr pe 64 de biți. Ei vă vor recompensa cu 40 de puncte dacă reușiți să afișați configurația finală corect.
 +
 +== Input ==
 +
 +Pe prima linie se va găsi un număr pe 64 de biți reprezentând configurația inițială a hărții.
 +
 +Pe următoarea linie se va afla un număr N, reprezentând numărul de mutări făcute de soldați.
 +
 +Pe următoarele N linii se vor afla numere întregi reprezentând codificările mutărilor.
 +
 + ConfigurațieHartă
 + N
 + mutare1
 + mutare2
 + .
 + .
 + .
 + mutareN
 +
 +== Output ==
 +
 +Configurația finală a jocului după ce au fost aplicate cele N mutări.
 +
 + ConfigurațieFinală
 +
 +== Precizări ==
 +<note warning>
 +
 + - Dacă pe poziția curentă nu se află un soldat (bit-ul corespunzător este 0) mutarea nu se va aplica
 + - Dacă pe poziția unde va fi mutat un soldat există un alt soldat ambii vor dispărea de pe hartă
 + - Folosiți tipuri de date unsigned pentru variabilele pe care faceți operații pe biți ** in special pentru configurația hărții **
 + - Numărul afisat în fișierul de ieșire **TREBUIE** să fie un număr positiv
 +
 +</​note> ​
 +
 +== Exemplu ==
 +
 +** Input: **
 + 7
 + 4
 + 3647 (muta de la (7,7) la (7,0))
 + 3710 (muta de la (7,6) la (7,1))
 + 3641 (muta de la (7,1) la (7,0))
 + 1133 (muta de la (5,5) la (2,1))
 +
 +** Output: **
 + 4
 +
 +** Explicație **
 +
 +{{http://​s4.postimg.org/​41260rbbx/​Explanation.png}}
 +
 +==== Trimitere temă ====
 +
 +Tema va fi trimisă folosind [[https://​vmchecker.cs.pub.ro|vmchecker]]
 +
 +După cum probabil ați observat task-urile au un total de 80p. Celelalte 20p se vor acorda pentru [[https://​www.kernel.org/​doc/​Documentation/​CodingStyle|coding style]].
 +
 +Formatul arhivei va fi următorul:
 + - 3 fișiere .c, câte unul pentru fiecare task
 + - Un fișier **Makefile / makefile** care să conțină următoarele reguli:
 + - build-tX: crează executabilul aferent task-ului X, X ia valori din {1, 2, 3}
 + - run-tX: rulează executabilul aferent task-ului X, X ia valori din {1, 2, 3}
 + - Un fișier README în care descrieți ideea voastră pentru fiecare dintre task-uri
 +
 +<note warning>
 +
 +Arhiva trebuie să fie de tipul zip.
 +
 +**Lipsa** fișierului README se depunctează cu 10p. 
 +
 +Inputul pentru **TOATE** task-urile va fi citit de la **stdin (tastatura)** iar output-ul va fi afișat la **stdout (ecran)**.
 +
 +Dacă nu rezolvați un anumit task regulile build-tX / run-tX corespunzătoare task-ului respectiv **trebuie** să apară in Makefile, chiar dacă ele nu vor face nimic.
 +
 +</​note>​
programare/tema1_cbcd_2015_2016.1445810439.txt.gz · Last modified: 2015/10/26 00:00 by cosmin.boaca
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0