Lecție pentru bacalaureat · Informatică

Tipul înregistrare (struct)

Clasa a X-a

Ideile de bază pe scurt și, unde există, exercițiile din subiectele de BAC care le verifică. Lecția completă, animată, cu grile și exerciții corectate, e în aplicația Tomomi.

Pe scurt

Formulă

Sintaxă: declararea și folosirea unui struct

Tipul se declară o dată (atenție la punctul și virgula final), variabila după aceea:

struct Elev {
    int nota;
    int varsta;
};

Elev e;
cin >> e.nota >> e.varsta;
cout << e.nota;
Sfat

Capcana: tipul nu este variabilă

Elev este TIPUL, e este variabila. Elev.nota = 9; nu compilează, iar cin >> e; nu are sens: citirea și afișarea se fac întotdeauna câmp cu câmp. Și nu uita punctul și virgula de după acolada care închide struct - lipsa lui dă o eroare de compilare greu de citit.

Formulă

Șablon: citirea unui tablou de înregistrări

Indicele alege fișa, punctul alege câmpul:

Elev v[51];
int n;
cin >> n;
for (int i = 0; i < n; i++) {
    cin >> v[i].nota >> v[i].varsta;
}
Sfat

Capcana: v[i].nota, nu v.nota[i]

v este un tablou DE înregistrări, deci indicele vine primul: v[i].nota. Scrierea v.nota[i] ar cere ca v să fie o înregistrare al cărei câmp nota este tablou - exact pe dos față de declarație.

Formulă

Șablon: maximul după un câmp

Reții POZIȚIA, ca să poți răspunde apoi cu orice câmp al aceleiași fișe:

int poz = 0;
for (int i = 1; i < n; i++) {
    if (v[i].nota > v[poz].nota) {
        poz = i;
    }
}
cout << v[poz].varsta;
Sfat

Capcana: la ordonare muți fișa întreagă

Compari după un câmp, dar interschimbi înregistrarea completă, cu o temporară de tip Elev: Elev t = v[j]; v[j] = v[j+1]; v[j+1] = t;. Dacă temporara este int și muți doar notele, notele ajung lipite de vârstele altor elevi.

Din subiectele de BAC

Exerciții reale din subiectele anilor trecuți. Încearcă-le singur înainte să deschizi rezolvarea.

Variabila p memorează simultan, pentru un tip de prăjitură, codul (un număr natural de două cifre), prețul (număr real) și un set de trei numere naturale din intervalul [1,102][1,10^2], reprezentând informații specifice, în această ordine: tipul glazurii, tipul cremei principale și numărul de blaturi. Știind că expresiile C/C++ de mai jos au ca valori codul, prețul, respectiv tipul glazurii pentru o prăjitură, scrieți definiția unei structuri cu eticheta prajitura, care permite memorarea datelor despre o prăjitură, și declarați corespunzător variabila p.

p.cod      p.pret      p.informatii[0]
Vezi rezolvarea

Expresiile din enunț impun structura câmpurilor: p.cod și p.pret sunt câmpuri simple, iar p.informatii[0] arată că informatii este un tablou cu 3 elemente.

struct prajitura
{
    int cod;
    float pret;
    int informatii[3];
};

prajitura p;

Codul este un număr natural de două cifre și cele trei informații sunt numere naturale din [1,102][1,10^2], deci tipul int este suficient pentru toate; prețul este număr real, deci float (sau double). În C, declararea variabilei se scrie struct prajitura p;.

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ă.

struct ciocolata
 { char tip;
   float pret;
 }x[20];

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

Vezi rezolvarea

x este un tablou cu 20 de elemente de tip struct ciocolata. Al 11-lea sortiment se află pe indicele 10 (indexarea începe de la 0), deci elementul este x[10], iar câmpul său se accesează cu operatorul punct: x[10].tip.

Celelalte variante aplică operatorii în ordine greșită (indexează câmpul sau numele tipului în loc de variabilă).

Răspunsul corect este d.

Variabila f memorează, pentru fiecare dintre cele 10 soiuri de lalele care se vând într-o florărie, caracteristicile acestora: denumirea (șir de maximum 20 de caractere) și stocul, exprimat prin numărul de fire și prețul unui fir, în lei (numere naturale). Știind că expresiile de mai jos au ca valori denumirea primului soi de lalele, respectiv suma, în lei, necesară pentru a cumpăra toate lalelele din acest soi, scrieți în limbajul C/C++ definiția unei structuri cu eticheta lalea, care să permită memorarea informațiilor menționate pentru un soi de lalea, și declarați corespunzător variabila f.

f[0].denumire
f[0].stoc.nrFire*f[0].stoc.pretFir
Vezi rezolvarea
struct lalea {
    char denumire[21];
    struct {
        int nrFire;
        int pretFir;
    } stoc;
};

struct lalea f[10];

Câmpul denumire are 21 de caractere (20 utile plus terminatorul '\0'), câmpul stoc este o structură imbricată cu nrFire și pretFir, iar f este un tablou cu 10 elemente de tip lalea, câte unul pentru fiecare soi.

Toate lecțiile de Informatică

Descarcă

Începe azi. Bacul nu așteaptă.

Descarcă Tomomi pe telefonul copilului tău și pornește perioada de probă gratuită.