fbpx

Tipul struct in C++ | Teorie si probleme rezolvate

de Mihai-Alexandru

Ce este struct in C++ ?

Struct este o structura de date care iti permite sa grupezi mai multe elemente sub o singura umbrela. Aceste elemente sunt denumite „membrii” si pot avea tipuri diferite. De exemplu pentru definirea unei structuri ce reprezinta o masina, analizam codul de mai jos:

struct teoriePana in prezent am folosit variabile ca sa definim numere ( int n; ), caractere ( char c; ) s.a.m.d. Acum ne-am definit propriul nostru tip de variabila, avem variabila tip masina.

Nota: In interiorul unui struct, putem apela alt struct.

struct memorare variabilaDe exemplu, in imaginea de mai sus avem reprezentat primul element din multimea masina V[20];

Definirea unui struct

#include    <iostream>

using namespace std;

struct masina{
    char marca[50];
    char culoare[20];
    int capacitate_rezervor;
    int an_fabricatie;
    float pret;
    float km_parcursi;
} V[20]; // Definim un vector cu 20 de masini


int main() {
    masina M1, M2; // Definirea a doua masini separate
    return 0;
}

Codul de mai sus declara o structura de date noua, ce va purta denumirea „masina”. Intre paranteze { }  gasim membrii acestei structuri, fiecare membru avand un tip si o denumire.

Atentie!: Inainte de a inchide acolada de la struct, putem declara cateva variabile de tipul masina. Spre exemplu eu am declarat un vector cu 20 de masini, inainte de pune „;” la final. Aceasta declarare este optionala.

Citirea si scrierea folosind struct in C++

#include    <iostream>

using namespace std;

struct masina{
    char marca[50];
    int pret;
};


int main() {
    masina M1, M2;
    cout << "Introdu marca pentru masina M1: "; cin >> M1.marca;
    cout << "Introdu pretul pentru masina M1: "; cin >> M1.pret;
    cout << "Introdu marca pentru masina M2: "; cin >> M2.marca;
    cout << "Introdu pretul pentru masina M2: "; cin >> M2.pret;

    cout << "Masinile introduse: " << M1.marca << " - pret: " << M1.pret << "\n";
    cout << "Masinile introduse: " << M2.marca << " - pret: " << M2.pret;
    return 0;
}

Am prescurtat putin struct-ul dinainte pentru a scrie mai putin si a fi mai usor de urmarit.

Pentru a accesa o anumita caracteristica dintr-un struct (de exemplu, pretul), tot ceea ce trebuie sa facem este sa punem punct ( . ) dupa variabila noastra. De exemplu pentru a accesa pretul masinii 1, scriu M1.pret

struct citire scriereFunctii care utilizeaza struct in C++

#include    <iostream>

using namespace std;

struct masina {
    char marca[50];
    int pret;
};

void compara_masini(masina x, masina y) {
    cout << "Cea mai scumpa masina este: ";
    if(x.pret > y.pret)
        cout << x.marca;
    else
        if(x.pret < y.pret)
            cout << y.marca;
}

int main() {
    masina M1, M2;
    cout << "Introdu marca pentru masina M1: "; cin >> M1.marca;
    cout << "Introdu pretul pentru masina M1: "; cin >> M1.pret;
    cout << "Introdu marca pentru masina M2: "; cin >> M2.marca;
    cout << "Introdu pretul pentru masina M2: "; cin >> M2.pret;

    compara_masini(M1, M2);

    return 0;
}

Probleme propuse

1) Studentii dintr-o facultate vor să facă un top al celor mai bune 10 melodii pentru fiecare săptămană. Ajutaţi-i să realizeze un program prin care se introduc n date de forma:

  • titlu melodie
  • interpret
  • număr puncte acumulate
  • număr puncte primite

Sa se afiseze primele 10 titluri, in ordinea descrescătoare a punctelor.

#include    <iostream>
#include    <algorithm>

using namespace std;

struct melodie {
    char titlu[50];
    char artist[50];
    int puncte_primite;
}V[5];

void citeste_melodii() {
    strcpy(V[0].titlu,"Titlu 1"); strcpy(V[0].artist,"Artist 1"); V[0].puncte_primite = 10;
    strcpy(V[1].titlu,"Titlu 2"); strcpy(V[1].artist,"Artist 2"); V[1].puncte_primite = 32;
    strcpy(V[2].titlu,"Titlu 3"); strcpy(V[2].artist,"Artist 3"); V[2].puncte_primite = 52;
    strcpy(V[3].titlu,"Titlu 4"); strcpy(V[3].artist,"Artist 4"); V[3].puncte_primite = 85;
    strcpy(V[4].titlu,"Titlu 5"); strcpy(V[4].artist,"Artist 5"); V[4].puncte_primite = 3;
}

bool compara(melodie x, melodie y) {
    return x.puncte_primite > y.puncte_primite;
}

void sorteaza_melodii() {
    sort(V, V + 5, compara);
}

void afiseaza_melodii(){
    for(int i = 0; i < 5; i++)
        cout << "Melodie: " << V[i].titlu << " punctaj: " << V[i].puncte_primite << "\n";
}

int main() {
    citeste_melodii();
    sorteaza_melodii();
    afiseaza_melodii();
    return 0;
}

2) La o staţie meteo se trec temperaturile inregistrate intr-o saptamana. Să se prelucreze aceste date afişandu-se zilele in care temperatura a fost maximă.

Utilizarea structului:

Comentarii

S-ar putea sa iti placa