Răspuns :
Răspuns:
#include <iostream>
#include <string>
#include <vector>
/* ca să nu mai scriem std::vector<std::string>& în funcții putem scrie acuma vectorString */
typedef std::vector<std::string>& vectorString;
/* la fel */
typedef std::vector<float>& vectorFloat;
void scos_din_persoane(vectorString vectorNume, vectorString vectorPrenume, vectorFloat vectorGreutate, vectorFloat vectorInaltime, vectorFloat vectorVarsta);
void gras_si_slab(vectorString vectorNume, vectorString vectorPrenume, vectorFloat vectorGreutate);
void afisare_persoane(vectorString vectorNume, vectorString vectorPrenume, vectorFloat vectorGreutate, vectorFloat vectorInaltime, vectorFloat vectorVarsta);
int main()
{
/* nu am mai implementat scrierea datelor de la tastatură pentru a salva timp */
std::vector<std::string> vectorNume{ "Ion", "Vasile", "Andrei", "Mihai" };
std::vector<std::string> vectorPrenume{ "Ionescu", "Vasilescu", "Andreescu", "Mihailescu" };
std::vector<float> vectorGreutate{ 50.0f, 67.3f, 88.2f, 100.3f };
std::vector<float> vectorInaltime{ 150.0f, 165.0f, 163.2f, 139.5f };
std::vector<float> vectorVarsta{ 18.0f, 19.0f, 20.0f, 34.0f };
/* afișăm persoanele înainte de modificări (mai mult pentru testare) */
std::cout << "Persoanale inainte de modificari:\n";
/* am creat o funcție-n + care ne afișează persoanele ca să nu mai scriem noi de mână tot COUT-ul */
afisare_persoane(vectorNume, vectorPrenume, vectorGreutate, vectorInaltime, vectorVarsta);
/* scoatem persoanele care nu îndeplinesc criteriile (vârstă >= 18 și înălțimea între 140 și 220) */
scos_din_persoane(vectorNume, vectorPrenume, vectorGreutate, vectorInaltime, vectorVarsta);
/* le afișăm din nou pentru a vedea dacă modificările aduse vectorilor au funcționat */
std::cout << "\nPersoanale dupa eliminarea unora:\n";
afisare_persoane(vectorNume, vectorPrenume, vectorGreutate, vectorInaltime, vectorVarsta);
std::cout << "\n";
/* iar la final afișăm cea mai slabă și cea mai grasă persoană */
gras_si_slab(vectorNume, vectorPrenume, vectorGreutate);
return 0;
}
void scos_din_persoane(vectorString vectorNume, vectorString vectorPrenume, vectorFloat vectorGreutate, vectorFloat vectorInaltime, vectorFloat vectorVarsta)
{
/* calculăm dimensiunea vectorilor (toți ar trebui să aibă dimensiuni egale) */
size_t dimVector{ vectorNume.size() };
for (size_t i{}; i < dimVector; i++) {
float varstaPersoana{ vectorVarsta.at(i) };
float inaltimePersoana{ vectorInaltime.at(i) };
bool conditieInaltime{ inaltimePersoana >= 140.0f && inaltimePersoana <= 220.0f };
/* dacă vârsta e mai mică de 18 iar condiția înălțimii nu este îndeplinită */
if (varstaPersoana < 18.0f || !conditieInaltime) {
/* scoatem persoana din vectori */
vectorNume.erase(vectorNume.begin() + i);
vectorPrenume.erase(vectorPrenume.begin() + i);
vectorGreutate.erase(vectorGreutate.begin() + i);
vectorInaltime.erase(vectorInaltime.begin() + i);
vectorVarsta.erase(vectorVarsta.begin() + i);
}
}
}
void gras_si_slab(vectorString vectorNume, vectorString vectorPrenume, vectorFloat vectorGreutate)
{
size_t indicePersoanaSlaba{}, indicePersoanaGrasa{}, dimVector{ vectorNume.size() };
float greutateMin{ FLT_MAX }, greutateMax{ FLT_MIN };
for (size_t i{}; i < dimVector; i++) {
/* luăm greutatea persoanei curente */
float greutateCurenta{ vectorGreutate.at(i) };
/* dacă greutatea persoanei este mai mare decât cea actuală */
if (greutateCurenta > greutateMax) {
/* salvăm indexul persoanei și actualizăm greutatea */
indicePersoanaGrasa = i;
greutateMax = greutateCurenta;
}
/* dacă greutatea persoanei este mai mică decât cea actuală */
if (greutateCurenta < greutateMin) {
/* același lucru */
indicePersoanaSlaba = i;
greutateMin = greutateCurenta;
}
}
std::cout << "Cea mai slaba persoana din liste este: "
<< vectorNume.at(indicePersoanaSlaba) << " " << vectorPrenume.at(indicePersoanaSlaba) << "\n";
std::cout << "Cea mai grasa persoana din liste este: "
<< vectorNume.at(indicePersoanaGrasa) << " " << vectorPrenume.at(indicePersoanaGrasa) << "\n";
}
void afisare_persoane(vectorString vectorNume, vectorString vectorPrenume, vectorFloat vectorGreutate, vectorFloat vectorInaltime, vectorFloat vectorVarsta)
{
size_t dimVector{ vectorNume.size() };
for (size_t i{}; i < dimVector; i++) {
std::cout << "\t" << i + 1 << ".) " << vectorNume.at(i) << " " << vectorPrenume.at(i)
<< " in varsta de " << vectorVarsta.at(i) << " are " << vectorInaltime.at(i)
<< "cm inaltime si cantareste " << vectorGreutate.at(i) << "kg!\n";
}
}
Vă mulțumim că ați vizitat site-ul nostru dedicat Informatică. Sperăm că informațiile oferite v-au fost de ajutor. Dacă aveți întrebări sau nevoie de asistență suplimentară, nu ezitați să ne contactați. Ne vedem curând și nu uitați să ne adăugați la marcaje!