This shows you the differences between two versions of the page.
|
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> | ||