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:
Pana 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.
De 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
Functii 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:
- Liste simplu inlantuite – clasa 11
- Liste dublu inlantuite – clasa 11
- Intrebari grile – Bacalaureat