👤

Daca nu stiti despre date de tip tablou si string nu va atingeti de problema.

Incercarea am facuto, dar apar greseli la raspuns. Daca cel mai mare sau mic numar este primul atunci nu afiseaza corect raspunsul, daca apar mai multi utilizatori si numere mai mari apar greseli de raspuns.


Daca Nu Stiti Despre Date De Tip Tablou Si String Nu Va Atingeti De Problema Incercarea Am Facuto Dar Apar Greseli La Raspuns Daca Cel Mai Mare Sau Mic Numar Es class=
Daca Nu Stiti Despre Date De Tip Tablou Si String Nu Va Atingeti De Problema Incercarea Am Facuto Dar Apar Greseli La Raspuns Daca Cel Mai Mare Sau Mic Numar Es class=
Daca Nu Stiti Despre Date De Tip Tablou Si String Nu Va Atingeti De Problema Incercarea Am Facuto Dar Apar Greseli La Raspuns Daca Cel Mai Mare Sau Mic Numar Es class=

Răspuns :

► 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 :

  1. Nu imi dau seama ce ai vrut sa faci mai exact in codul dat de tine.
  2. Exemplul de pe foaie e gresit, media numerelor 25,59 si 38 este 40,(6).
  3. 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.
  4. Ai codul in fisierul 9591108.txt atasat.
Vezi imaginea Andrei750238
Vezi imaginea Andrei750238