Termen de predare: 08.11.2017, ora 23:55
Pentru fiecare zi (24 de ore) de întârziere, se vor scădea 10 puncte din nota acordată. Temele trimise după 7 de zile de întârziere vor putea fi notate cu maxim 30 de puncte. În consecință, deadline-ul hard este 15.11.2017, ora 23:00.
Update: 27.10.2017: Am publicat un checker local + subset de teste pe cs.curs Checker
Publicare: 25.10.2017
Dacă aveți nelămuriri, puteți să ne contactați pe forumul dedicat.
La orice întrebare vom răspunde în maxim 24 de ore.
Nu se acceptă întrebări în ultimele 24 de ore înainte de deadline.
Gigi, student în anul I la Calculatoare, este începător în programarea în C, însă reușește sa se acomodeze. Dupa laboratorul 3, ajunge acasă și se apucă sa exerseze instrucțiunile repetitive (for, while, do while). Astfel, descoperă un truc care i se pare foarte interesant: folosind instrucțiuni repetitive, poate sa afișeze în consola diverse forme amuzante, ca de exemplu:
x x x x x x x x x x x x x x x x x x x x x x x x x x x x
Acesta ar fi un triunghi format din caracterul 'x' cu dimensiunea de 7 caractere (lățime, înălțime).
Scrieți un program care citește de la tastatură un număr ce reprezintă dimensiunea triunghiului și un caracter, și afișează un triunghi făcut din caracterul respectiv și cu dimensiunea respectivă. Triunghiul trebuie să aibă aceeași formă cu cel de mai sus (trebuie să reprezinte jumătatea din dreapta sus a unui pătrat tăiat pe diagonală). Caracterele de pe aceeași linie trebuie separate cu un spațiu. Spațiile libere (jumatatea din stanga jos simetrica triunghiului) trebuie făcută tot din caracterul spațiu.
Format intrare:
N C
Pe prima linie se va afla un număr N și un caracter C separate prin spațiu
N = dimensiunea (lățime și înălțime) a triunghiului C = caracterul ASCII care trebuie folosit
Exemplu
5 x
Output:
x x x x x x x x x x x x x x x
Explicație: Un triunghi ce folosește caracterul și dimensiunea specificate în fișierul de input, și care are forma de mai sus.
Între timp, Gigi devine din ce în ce mai bun la programare. Fiind un mare pasionat de jocuri (colecția lui de pe Steam atinge 2000$, are toate pachetele de tier 1 in Hearthstone, și are peste 900 de ore în CS:GO), decide să încerce să facă un mic joculeț în consolă (top-down single-player turn-based MMORPG). Începe cu ceva simplu: să creeze un personaj pe care să-l poată muta folosind tastatura.
O „tablă de joc” este o zonă de dimensiune NxM care va fi afișată în consolă astfel:
****** * * * * ******
Acesta e un exemplu de tabla 2×4 (zona liberă din interior are 2 rânduri și 4 coloane). Pe o tablă va exista un „personaj”, care este reprezentat de caracterul ‘v’.
Jocul este turn-based, iar o tură funcționeaza în felul urmator:
Exemplu:
****** * v * * * ******
****** * * * v * ******
****** * * * > * ******
(personajul a fost mutat la dreapta)
****** * * * >* ****** GAME COMPLETED
Scrieți un program care citește de la tastatură 5 numere: N, M, x, y, P (din care N, M, x si y cu semnificația dată mai sus, iar P va fi momentan 0 – îl veți folosi la taskul 3), afișează tabla curentă și aplică mișcarea conform cu datele citite de la tastatură. După fiecare mișcare citită de la tastatură, tabla de joc trebuie afișată din nou, având modificarea aplicată.
Format intrare:
Pe prima linie se dau numerele N, M, x, y, 0 separate prin spațiu.
Exemplu:
2 4 2 1 0
Pe fiecare linie care urmează se va citi un caracter de mișcare (w/a/s/d) sau caracterul q. Programul se încheie la citirea caracterului q (fără să mai afișeze încă o dată tabla).
Exemplu Ieșire:
După citirea primei linii (cu numerele N, M, x, y, P) și după fiecare caracter de mișcare citit de la tastatură, tabla de joc curentă trebuie afișată.
****** * v * * * ******
Observații și restricții:
Având ambiții de gamer profesionist, lui Gigi i se pare că jocul este prea simplu, astfel încât decide să-i adauge niste obstacole.
Numărul P citit de la tastatură pe prima linie reprezintă numărul de obstacole. Dacă P>0, pe următoarele P linii se află informațiile despre fiecare obstacol: câte două numere l și c, și un caracter m, cu semnificația de mai jos.
Un obstacol va fi reprezentat pe tabla de joc folosind caracterul ‘x’. Un obstacol fix va rămâne mereu acolo unde a fost poziționat, la coordonatele (l, c). Un obstacol mobil se va deplasa înspre personaj, pe una din cele 8 direcții, cu 1 poziție la fiecare 2 ture. Când utilizatorul execută o mutare care trimite personajul intr-o poziție ocupată de un obstacol (sau când un obstacol mobil vine peste personaj), jocul se termină (nu se mai afișează tabla de joc încă o dată, în schimb se afișează mesajul “GAME OVER” și execuția se încheie).
Modificați programul de până acum ca să ia în considerare varianta în care P>0.
Observații și restricții:
Exemplu intrare
3 4 2 1 3 2 1 f 1 4 m 3 4 m
Semnificație: Tabla este 3×4, personajul se află la coordonatele (1,2) și există 3 obstacole:
Tabla de joc va arăta astfel:
****** * v x* *x * * x* ******
Dacă utilizatorul execută două mutări succesive în jos, după prima mutare tabla este:
****** * x* *xv * * x* ******
După a doua mutare: (au trecut două ture, deci obstacolele mobile se vor muta cu o poziție spre personaj)
****** * * *x x * * vx * ******
După o nouă mutare la dreapta, nu se mai afișează tabla de joc încă o dată, ci se afișează următorul mesaj și programul se încheie:
GAME OVER
Observații finale:
| x_personaj - x_obstacol | + | y_personaj - y_obstacol |
Tema va fi trimisă folosind vmchecker, cursul Programarea Calculatoarelor (CB & CD).
Formatul arhivei va fi următorul:
.c
.
Lista nu este exhaustivă.