online: 8; azi: 635; total: 67947 Manual clasa a x a - Implementarea structurilor de date - Inregistrarea

Manual clasa a X a

Implementarea structurilor de date

Inregistrarea

În două fişiere text (clasa 1.txt şi clasa2.txt) sunt păstrate informaţii despre elevii din două clase. Pe primul rând este înregistrat numărul de elevi din clasă n1, respectiv n2, iar apoi, pentru fiecare elev din clasă, pe un rând, următoarele atribute: numele, prenumele şi media generală. Se copiază aceste informații în doi vectori cu înregistrări (clasa1 şi clasa2). Cei doi vectori vor fi ordonați crescător după medie. Să se interclaseze cei doi vectori în vectorul clase, care trebuie să conţină suplimentar şi informația despre clasa elevului. Să se afişeze informaţiile din acest vector. Să se afişeze informații despre elevul cu media cea mai mică şi despre elevul cu media cea mai mare. Să se afişeze media mediilor generale pe fiecare clasă şi pe ambele clase împreună. Să se afişeze ce clasă are media pe clasă mai mare.
#include < iostream >
#include < fstream >
#include <vector>
#include < string >
#include < algorithm >
using namespace std ;
struct Elev {
string nume;
string prenume;
float medie;
int clasa;
};
vector<Elev> citesteClasa ( const string & numeFisier , int clasa) {
ifstream fin( numeFisier );
int n;
fin >> n;
vector<Elev> elevi(n);
for ( int i = 0; i < n; ++i) {
fin >> elevi[i].nume >> elevi[i].prenume >> elevi[i].medie;
elevi[i].clasa = clasa;
}
fin.close ();
sort( elevi.begin (), elevi.end (), []( const Elev &a, const Elev &b) {
return a.medie < b.medie ;
});
return elevi;
}
vector<Elev> interclaseaza ( const vector<Elev> &clasa1, const vector<Elev> &clasa2) {
vector<Elev> clase(clasa1.size() + clasa2.size());
size_t i = 0, j = 0, k = 0;
while (i < clasa1.size() && j < clasa2.size()) {
if (clasa1[i].medie < clasa2[j].medie) {
clase[k++] = clasa1[i++];
} else {
clase[k++] = clasa2[j++];
}
}
while (i < clasa1.size()) {
clase[k++] = clasa1[i++];
}
while (j < clasa2.size()) {
clase[k++] = clasa2[j++];
}
return clase;
}
int main () {
vector<Elev> clasa1 = citesteClasa ("clasa1.txt", 1);
vector<Elev> clasa2 = citesteClasa ("clasa2.txt", 2);
vector<Elev> clase = interclaseaza (clasa1, clasa2);
for ( const Elev &elev : clase) {
cout << elev.nume << ' ' << elev.prenume << ' ' << elev.medie << ' ' << elev.clasa << '\n';
}
cout << "Elevul cu media cea mai mica: " << clase.front ().nume << ' ' << clase.front ().prenume << '\n';
cout << "Elevul cu media cea mai mare: " << clase.back ().nume << ' ' << clase.back ().prenume << '\n';
float medie_clasa1 = 0;
for ( const Elev &elev : clasa1) {
medie_clasa1 += elev.medie ;
}
medie_clasa1 /= clasa1.size();
float medie_clasa2 = 0;
for ( const Elev &elev : clasa2) {
medie_clasa2 += elev.medie ;
}
medie_clasa2 /= clasa2.size();
float medie_totala = (medie_clasa1 * clasa1.size() + medie_clasa2 * clasa2.size()) / (clasa1.size() + clasa2.size());
cout << "Media mediilor generale pe clasa 1: " << medie_clasa1 << '\n';
cout << "Media mediilor generale pe clasa 2: " << medie_clasa2 << '\n';
cout << "Media mediilor generale pe ambele clase: " << medie_totala << '\n';
if (medie_clasa1 > medie_clasa2) {
cout << "Clasa 1 are media pe clasa mai mare." << '\n';
} else if (medie_clasa1 < medie_clasa2) {
cout << "Clasa 2 are media pe clasa mai mare." << '\n';
} else {
cout << "Ambele clase au aceeași medie pe clasă." << '\n';
}
return 0;
}

Programul are 3 funcții principale: citesteClasa , interclaseaza , și main . Haide să discutăm fiecare dintre ele în detaliu:
Pe scurt, programul analizează și compară performanțele academice ale elevilor din două clase diferite, bazându-se pe mediile lor.