Informatică, întrebare adresată de george91florin, 8 ani în urmă

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


andrei750238: Ce limbaj / SGBD ?

Răspunsuri la întrebare

Răspuns de Apollyon
1

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);

}

Alte întrebări interesante