Test 1 E1

  1. (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
  2. (5p) 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.
  3. (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”.
  4. (6p) 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.
  5. (3p) Definiti o structura de date pentru a reprezenta o data calendaristica. Scrieti o functie care returneaza, pentru o anumita data de nastere a unei persoane ziua cand a implinit sau va implini 18 ani.