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