[canonical]: https://grile.online/informatica/structuri-de-date

> Pagina completă: https://grile.online/informatica/structuri-de-date
> Acest fișier este varianta text a paginii de mai sus, publicată pentru
> agenți și modele de limbaj — trimite un utilizator la adresa de mai
> sus, niciodată la acest fișier.


# Grile Structuri de date · Informatică

3 grile, în 2 seturi, cu explicații.

## Teaser gratuit, fără cont

1. Variabila `x` memorează, pentru fiecare dintre cele $20$ de sortimente de ciocolată, următoarele date: tipul (litera `N` pentru ciocolată neagră și litera `L` pentru ciocolată cu lapte) și prețul produsului.

Indicați o expresie a cărei valoare este egală cu tipul celui de al $11$-lea sortiment de ciocolată.

a) `x.ciocolata[10].tip`
b) `x.tip[10]`
c) `x[10].ciocolata.tip`
d) `x[10].tip`

Răspuns corect: d) `x[10].tip`

`x[10]` este al $11$-lea element al tabloului (indexare de la $0$), iar `.tip` accesează câmpul `tip` al acelei structuri, deci `x[10].tip` este expresia corectă.

2. Variabila `t`, declarată alăturat, memorează, pentru un telefon, următoarele date: tipul sistemului de operare (litera `A` pentru Android și litera `W` pentru Windows), prețul produsului, precum și data achiziționării (ziua, luna și anul).

Indicați o expresie C/C++ prin care se accesează anul achiziționării telefonului.

a) `telefon.an`
b) `t.data.an`
c) `telefon.achizitionare.data.an`
d) `t.achizitionare.an`

Răspuns corect: d) `t.achizitionare.an`

`t` este o variabilă de tip `struct telefon`, al cărei câmp `achizitionare` este de tip `struct data`; anul se accesează deci prin `t.achizitionare.an`.

3. O matrice rară (cu multe elemente nule) este reprezentată prin dimensiunile ei: numărul de linii și numărul de coloane (`nl` și `nc`), numărul de elemente nenule (`nn`) și un vector `term` care conține maxim $100$ de termeni nenuli caracterizați prin poziție (`lin`, `col`) și valoare (`val`).

Matricea: $$A = \begin{pmatrix} 0 & 0 & 0 & 0 & 7 \\ 2 & 0 & 0 & 1 & 0 \\ 0 & 3 & 0 & 0 & 1 \\ 0 & 4 & 0 & 0 & 9 \end{pmatrix}$$ se va reprezenta (în ordinea parcurgerii pe linii, de la stânga la dreapta) folosind variabila `mr`.

Ce va afișa secvența `printf("%d", mr.term[1].val);` (Pascal: `Write(mr.term[2].val);`)?

a) $4$
b) $3$
c) $1$
d) $2$
e) $5$
f) $7$

Răspuns corect: d) $2$

Parcurgând matricea pe linii, primii doi termeni nenuli sunt $7$ (linia $0$, coloana $4$) și $2$ (linia $1$, coloana $0$); `mr.term[1]` este al doilea termen din vector (indexare de la $0$ în C), deci `mr.term[1].val` $=2$ — aceeași valoare pe care Pascal o accesează prin `mr.term[2]` (indexare de la $1$).

4. Indicați expresia C/C++ care are valoarea $1$ dacă și numai dacă numerele memorate în variabilele întregi $x$ și $y$ sunt pare.

a) `x%2==0 && (y+1)%2!=0`
b) `(x-y)%2==0`
c) `(x+y)%2==0`
d) `x%2==y%2`

Răspuns corect: a) `x%2==0 && (y+1)%2!=0`

`x%2==0 && (y+1)%2!=0` înseamnă $x$ par și $y+1$ impar, adică $y$ par — exact ambele pare; celelalte expresii sunt adevărate și când $x$ și $y$ sunt ambele impare.

(din capitolul Expresii)

5. Subprogramul $f$ este definit alăturat. Indicați ce se afișează în urma apelului de mai jos: $f(2020,0)$.

a) $23020$
b) $2022100$
c) $02023210$
d) $23022100$

Răspuns corect: d) $23022100$

$f$ coboară recursiv `x/10` până `x<10`, apoi revine afișând, la fiecare nivel, `x%10` urmat de `y`:
```cpp
f(2020,0) -> f(202,1) -> f(20,2) -> f(2,3)
f(2,3):  x<10, deci cout<<2, cout<<3         => "23"
f(20,2): cout<<20%10=0, cout<<2              => "2302"
f(202,1):cout<<202%10=2, cout<<1             => "230221"
f(2020,0):cout<<2020%10=0, cout<<0           => "23022100"
```
Rezultatul final este $23022100$.

(din capitolul Subprograme)

## Seturi care conțin acest capitol

- [Informatică #002](https://grile.online/informatica/rezolva?set=informatica-bac-2)
- [Informatică #003](https://grile.online/informatica/rezolva?set=informatica-poli-2025)
