1. (7p) Folosind biblioteca conio2.h (https://www.edusoft.ro/introp/index.php/2018/10/18/biblioteca-conio2/), scrieți un program care să facă un text să se deruleze de la dreapta la stânga, precum informațiile din bara de jos, de la televiziunile de știri. Textul va fi citit dintr-un fișier sau de la tastatură.
  2. (6p) Folosind biblioteca conio2.h, scrieți o secvență de program care deplasează o literă pe ecran, în mod aleatoriu, într-una din cele 8 direcții, până la acționarea tastei spațiu. Pentru a genera un număr întreg aleatoriu între 0 și t-1, se apelează rand() % t.
  3. (9p) Scrieți o funcție care codifică un număr natural între 0 și 100000 într-un șir de caractere, reprezentând numărul scris cu litere, în limba franceză. De exemplu, pentru 74392 rezultatul funcției va fi „soixante-quatorze mille trois cent quatre-vingt-douze”. Pentru reguli, puteți consulta https://en.wiktionary.org/wiki/Appendix:French_numbers si https://www.logicieleducatif.fr/fiches/numeration/nombres-mots/ecrire-en-lettres-regles.pdf
  4. (6p) Scrieți o funcție care primește la intrare un text sub forma unui șir de caractere și returnează un vector de structuri de tipul struct { char cuvant[100]; unsigned int nrAparitii; } cu cuvintele din text, precum și numărul de apariții ale fiecăuia din aceste cuvinte în text. Se consideră cuvânt orice secvență de litere (mici sau mari), cifre sau simbolul cratimă (reprezentat prin caracterul „-” (minus)), restul caracterelor considerându-se separatori.
  5. (9p) Se dă un text aliniat la stânga, care cuprinde cuvinte (compuse doar din litere mici/mari, simbolul „-” (cratimă=minus) și simbolurile „ ” (spațiu) sau semnele de punctuație din limba română). Să se alinieze acest text la dreapta, eliminând eventualele spații duble dintre cuvinte.
  6. (9p) Pentru a reprezenta amplasarea unei piese pe o tablă de șah se consideră o codificare printr-un șir de 4 caractere. Primul caracter reprezintă culoarea piesei, al doilea tipul piesei, a treia linia, iar a patra coloana. Scrieți o funcție care verifică dacă o anumită piesă atacă sau nu o altă piesă.
  7. (9p) Se consideră declarațiile: #define MAX_ADN 10 și typedef char sirADN[MAX_ADN]; Un informatician a descoperit un nou mod de a codifica un număr întreg folosind acidul dezoxiribonucleic (ADN), ce conține A (adenină), C (citozină), G (guanină) și T (timină). Astfel, în calcule se folosește baza de numerație 4, dar cifrele A, C, G și T au valorile A=0, C=1, G=2, iar T=-1. De exemplu, numărul întreg 27 se reprezintă, folosind ADN, prin “GTT”. Asemănător, numărul întreg -6 se reprezintă prin “TGG”, iar numărul 84 se reprezintă prin “CCCA”. Justificare: GTT = Gx42+Tx41+Tx40 = 2×16+(-1)x4+(-1)x1 = 32-4-1=27, TGG = Tx42+Gx41+Gx40 = (-1)x16+2×4+2×1 = -16+8+2=-6, CCCA = Cx43+Cx42+Cx41+Ax40=1×64+1×16+1×4+0x1=84
    • (4p) Scrieți o funcție void codificareADN(long nrIntreg, sirADN codADN) care codifica un număr întreg nrIntreg în reprezentarea sa ADN. De exemplu, pentru nrIntreg=27, funcția va seta pe sirADN la “GTT”.
    • (3p) Scrieți o funcție void decodificareADN(char sirADN[MAX_ADN], long& nrIntreg), care decodifică un șir ADN într-un număr întreg. De exemplu, pentru sirADN=”GTT” funcția va obține nrIntreg=27.
    • (1p) Scrieți o funcție void adunareADN(sirADN primulSir, sirADN alDoileaSir, sirADN suma), care adună două șiruri ADN, rezultatul fiind reprezentarea în ADN a sumei celor două numere, reprezentate de primulSir și alDoileaSir. De exemplu, pentru primulSir=”GTT” și alDoileaSir=”C”, funcţia va obține suma=”GTA”.
    • (1p) Scrieți o funcție void scadereADN(sirADN primulSir, sirADN alDoileaSir, sirADN diferenta), care scade două șiruri ADN, rezultatul fiind reprezentarea în ADN a diferentei celor două numere, reprezentate de primulSir și alDoileaSir. De exemplu, pentru primulSir=”GTA” și alDoileaSir=”C”, funcţia va obține diferenta=”GTT”.
  8. (5p) Definiţi o structură de date pentru a stoca informaţiile despre un pachet de 52 cărţi (fără jokeri), având numerele 2, 3, …, 10, precum şi literele A (as), J (valet), Q (damă), K (rege), în cele 4 simboluri (treflă, caro, cupă şi pică) (0,25p). Generaţi tot pachetul de cărţi (0,25p), apoi scrieţi secvenţe de cod pentru a amesteca aceste cărţi (0,50p). Pentru a genera un număr întreg aleator, între 0 şi t-1 se poate apela funcţia rand astfel: rand()%t. Funcţia se găseşte în stdlib.h.
    Click aici pentru solutie.
  9. (9p) Jocul Piticot constă în parcurgerea de n jucători (2<=n<=4) a unui traseu ce constă din m căsuţe consecutive,  numerotate de la 1 la n. Pionii celor n jucători au culori diferite şi încep să se deplaseze de la punctul de start, o căsuţă cu numărul 0. Scopul jocului este să se ajungă la ultima căsuţă. Pionii se deplasează pe rând, alternativ, în funcţie de valorile zarului, aşa cum pică la fiecare jucător (1..6). Există, pe traseu, anumite căsuţe (10%) unde, de îndată ce a ajuns acolo un pion, el sare automat către o altă căsuţă normală, fie ea înainte, fie înapoi. Există şi alte căsuţe (10%), unde un pion ajuns va trebui să stea o tură, precum şi căsuţe unde pionul poate să avanseze, jucătorul dând din nou cu zarul.
    Definiţi o structură de date pentru a stoca informaţiile menţionate mai sus pentru tabla de joc (0,50p), pentru poziţiile curente ale pionilor din joc (0,20p), precum şi pentru cine urmează să dea cu zarul în vederea deplasării (0,10p).
  10. (9p) Un student la informatică doreşte să îi facă prietenei sale un cadou: un program de testare a culturii generale. El va genera un număr de minim 10 şi maxim 50 întrebări, fiecare din ele având una sau mai multe variante de răspuns, din 5 posibile. Definiţi o structură de date pentru stocarea unui asemenea test de cultură generală, cu tot cu răspunsurile corecte şi greşite (4p), precum şi răspunsurile date de prietena sa (3p). Ştiind că fiecare dintre întrebări la care s-a răspuns perfect corect primeşte acelaşi punctaj şi că punctajul maxim este 10, 1 punct fiind din oficiu, scrieţi o secvenţă de cod care să calculeze punctajul pe care l-a primit la test prietena studentului nostru, în funcţie de răspunsurile sale (2p).
  11. (4p) Declarați, apoi implementați o funcție care calculează cifra de control pentru un cod ISBN-10. Indicații la https://en.wikipedia.org/wiki/International_Standard_Book_Number
  12. (7p) Definiți o structură de date pentru a reprezenta datele personale ale unor concurenți la un concurs (nume, prenume, vârstă, sex), precum și punctajul obținut de fiecare concurent. Scrieți un program C++ care să citească aceste date, apoi, folosind un algoritm de sortare, ordonați descrescător persoanele de sex masculin cu vârste între 16 și 20 ani, în funcţie de punctaj şi afișați lista ordonată, în cadrul listei tuturor celorlalți studenți (care vor rămâne în pozițiile lor inițiale, neschimbate).
  13. (6p) Definiți o structură de date corespunzătoare pentru a memora simpatiile de diferite grade dintre cele NrF fete și NrB băieți dintr-o grupă de studenți, știind că avem relații de simpatie atât de la fete pentru băieți, cât și de la băieți pentru fete. Scrieți un algoritm pentru a determina care este cea mai simpatizată fată din grupă, ca sumă a simpatiilor băieților. De asemenea, scrieți un algoritm pentru a determina care sunt băieții care nu sunt deloc simpatizați de această fată.
  14. (9p) Definiți o structură de date pentru jocul Snake, în care pe tablă (de culoare galbenă) se află șarpele (reprezentat de pătrățele verzi, cu excepția capului care este roșu), precum și diferite fructe (de culori roșu (1p) sau albastru (2p)), care pot fi mâncate de șarpe. Codificați printr-un câmp al structurii de date definite și direcția de deplasare a șarpelui. Scrieți o secvență de cod sau o funcție pentru a verifica dacă șarpele lăsat în pace, în situația curentă, ar urma să se mânânce pe sine, să iasă din tabla de joc sau să mânânce un fruct.
  15. (7p) Definiți o structură de date adecvată pentru a stoca datele despre codul numeric personal al unei persoane, apoi scrieți o secvență în C++ (o funcție) care să verifice dacă un anumit CNP ar putea fi corect. Informații despre CNP se găsesc la adresa: https://ro.wikipedia.org/wiki/Cod_numeric_personal
  16. (6p) Definiți un tip de date adecvat pentru reprezentarea unei situatii din jocul de șah, stocând date despre:
    1. numele jucătorilor cu piesele albe, respectiv negre;
    2. cine este jucătorul care urmează să mute;
    3. așezarea curentă a pieselor de ambele culori, pe tabla de șah.
      Cu această structură definită, scrieți o secvență de cod pentru a plasa pe tabla de șah toate piesele așa cum sunt ele la începutul jocului de șah.
      Click aici pentru solutie.
  • (7p) In jocul Patratelor alunecatoare (glisante), cei doi jucatori joaca cu piesele albastre, respectiv verzi, amplasate initial pe tabla alternativ, ca in figura urmatoare. In mijloc este spatiu liber.http://ro.goobix.com/jocuri-online/patratele-alunecatoare/

    Jocul are următoarele reguli:

    • fiecare jucător realizează alternativ câte o mutare, cu propriile piese (albastru sau verde), începând cu jucatorul detinand piesele albastre;
    • o mutare constă în interschimbarea pătratului liber (alb) cu unul din pătratele alăturate
    • pentru a fi interschimbate, pătratele trebuie să aibă o latură în comun
    • jucătorul care nu mai poate muta pierde jocul

    (3p) Definiti o structura de date adecvata pentru a reprezenta o situatie din acest joc, stocand dimensiunea tablei de joc (numarul de linii = numarul de coloane), locurile unde sunt amplasate piesele celor doi jucatori, locul spatiului liber (alb), precum si cine urmeaza sa mute. (4p) Scrieti o secventa de program sau o functie care testeaza daca unul dintre jucatori a castigat.
    Click aici pentru solutie