► Cerinta :
ENERGIE ELECTRICA
Ne dorim cu toti o planeta verde. In acest scop este foarte important sa economisim energia electrica.
Se considera abonatii retelei de aprovizionare electrica dintr-o anumita localitate. Pentru fiecare din acesti abonati este cunoscut numele, prenumele si consumul anual, exprimat in kilowati-ora
[...]
► Rezolvare C++ ( perspectiva POO):
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
//Clasa client pentru memorarea usoara a datelor
class client {
public:
std::string nume, prenume;
float consum;
};
//Functie pentru citirea vectorului de clienti
std::vector<client> citire_date() {
//Declara vectorul de clienti
std::vector<client> clienti;
//Deschide fisier
std::ifstream file("energie.in");
//Citeste numarul de clienti, rezerva suficienta memorie pentru memorarea tuturor clientilor
int n;
file >> n;
clienti.reserve(n);
//Citeste clientii
for (int index = 0; index < n; index++) {
client tmp;
file >> tmp.nume >> tmp.prenume >> tmp.consum;
clienti.push_back(tmp);
}
//Inchide fisierul, returneaza vectorul de clienti
file.close();
return clienti;
}
//Functie pentru compararea a doi clienti in functie de consum
//Returnaza true daca clientul a are consum mai mic decat clientul b
bool comparator_clienti(client& a, client& b) {
return a.consum < b.consum;
}
//Functie pentru calculul mediei
float calcul_medie(std::vector<client> clienti) {
float suma = 0;
//Calcul suma
for (auto entitate : clienti) {
suma += entitate.consum;
}
//Calculeaza si returneaza media
return float(suma) / clienti.size();
}
int main() {
//Citire clienti
std::vector<client> clienti = citire_date();
//Deschidere fisier iesire
std::ofstream file("energie.out");
//Afisare medie
file << std::setw(10) << std::setfill(' ') << std::right << std::fixed << std::setprecision(2) << calcul_medie(clienti) << std::endl;
//Sortare vector clienti dupa ordinea data de comparator_clienti (crescator, dupa consum)
std::sort(clienti.begin(), clienti.end(), comparator_clienti);
//Afisare client cu consum maxim, minim
file << clienti[clienti.size() - 1].nume << " " << clienti[clienti.size() - 1].prenume << " " << clienti[clienti.size() - 1].consum << std::endl;
file << clienti[0].nume << " " << clienti[0].prenume << " " << clienti[0].consum << std::endl;
//Inchidere fisier
file.close();
}
► Nota :
- Nu imi dau seama ce ai vrut sa faci mai exact in codul dat de tine.
- Exemplul de pe foaie e gresit, media numerelor 25,59 si 38 este 40,(6).
- Am folosit elemente de programare orientata pe obiecte. Daca te deranjeaza acel class il poti inlocui fara probleme cu un struct sau cu un tuple. In loc de vectorul din STL poti folosi un vector alocat dinamic intr-un mod similar.
- Ai codul in fisierul 9591108.txt atasat.