Cei N prieteni se intalnesc dupa mult timp. Se da urmatorul tabel cu cei n prieteni care contine: ● numele ● prenumele ● greutate ● inaltime ● varsta Sa se elimine minorii, cei care inaltime sub 140 cm si peste 220 cm, iar apoi sa se afiseze prietenul care este cel mai gras si cel mai slab
Răspunsuri la întrebare
Răspuns:
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
using std::cout, std::endl, std::cin, std::string, std::vector;
struct Prieten {
string _nume, _prenume;
double _greutate;
int _inaltime, _varsta;
// constructor-ul
Prieten(string nume, string prenume, double greutate, int inaltime, int varsta)
: _nume(nume), _prenume(prenume), _greutate(greutate), _inaltime(inaltime), _varsta(varsta) { }
};
// Adaugă prieteni în vector
static void creeareVector(vector<Prieten>& vectorPrieteni) {
vectorPrieteni.reserve(5);
vectorPrieteni.emplace_back("Vasilescu", "Vasile", 88.5, 163, 20);
vectorPrieteni.emplace_back("Andreescu", "Andrei", 95.3, 160, 17);
vectorPrieteni.emplace_back("Ionescu", "Ion", 105.8, 189, 23);
vectorPrieteni.emplace_back("Alexandrescu", "Alex", 93.4, 175, 35);
vectorPrieteni.emplace_back("Gigeleanu", "Gigi", 73, 223, 38);
}
// Caută prietenul minor sau cu o înălțime necorespunzătoare și-l scoate din listă
static void eliminarePrieteni(vector<Prieten>& vectorPrieteni) {
for (size_t i = 0; i < vectorPrieteni.size(); ++i)
// dacă are mai puțin de 18 ani sau înălțimea nu e în intervalul (140, 220)
if (vectorPrieteni.at(i)._varsta < 18 || !(vectorPrieteni.at(i)._inaltime > 140 && vectorPrieteni.at(i)._inaltime < 220))
// îl ștergem din vector
vectorPrieteni.erase(vectorPrieteni.begin() + i);
}
// Funcție ajutătoare pentru a afișa elementele vectorului
static void afisareVector(vector<Prieten>& vectorPrieteni) {
int i = 1;
for (Prieten& prietenCurent : vectorPrieteni)
cout << "\t" << i++ << ". " << prietenCurent._nume << " " << prietenCurent._prenume << " are " <<
prietenCurent._varsta << " ani, " << prietenCurent._greutate << " kg si " << prietenCurent._inaltime << "cm inaltime!" << endl;
}
// Funcția returnează o pereche cu cel mai slab și cel mai gras prieten
static void ceiDoiPrieteni(vector<Prieten>& vectorPrieteni) {
// ne folosim de std::minmax_element pentru a găsi cel mai slab și cel mai gras prieten
const auto perechePrieteni = std::minmax_element(begin(vectorPrieteni), end(vectorPrieteni),
// funcție lambda care verifică dacă primul prieten este mai slab decât al doilea
[](const Prieten& primulPrieten, const Prieten& alDoileaPrieten) {
return primulPrieten._greutate < alDoileaPrieten._greutate;
});
/* și afișăm, cel mai slab îl preluăm cu 'first' iar cel mai gras cu 'second' iar '->' este folosit pentru a accesa atributele obiectelor */
cout << "\n" << perechePrieteni.first->_nume << " " << perechePrieteni.first->_prenume << " e cel mai slab (" <<
perechePrieteni.first->_greutate << ")" << endl;
cout << perechePrieteni.second->_nume << " " << perechePrieteni.second->_prenume << " e cel mai gras ("
<< perechePrieteni.second->_greutate << ")" << endl;
}
int main() {
vector<Prieten> vectorPrieteni;
creeareVector(vectorPrieteni);
cout << "Vectorul cu prieteni initial:\n";
afisareVector(vectorPrieteni);
eliminarePrieteni(vectorPrieteni);
cout << "\nVectorul cu prieteni dupa stergere:\n";
afisareVector(vectorPrieteni);
ceiDoiPrieteni(vectorPrieteni);
}