Wyswietlanie najwiekszego zysku dla każdej miejsowosci c++

Odpowiedz Nowy wątek
2019-03-14 23:23
0

Witam , mam problem odnośnie plików binarnych w C++. Moim problemem jest zadanie w którym trzeba wyświetlić największy zysk dla poszczególnych miejscowości. Problemem jest sprawdzanie czy miasto się powtarza, jeśli tak to wypisze firmę, miejscowość i zysk który jest największy.

Treść zadania:

Dany jest plik binarny zawierający dane o strukturze: firma, miejscowość, zysk.wypisz firmy mające zysk poniżej średniej z zysku oraz dla poszczególnych miejscowości wypisz firmę mającą największy zysk.<

funkcja jest podstawowa, wczytanie danych:

#include <iostream>
#include <fstream>

using namespace std;

struct sfirma
{
    char firma[12];
    char miejscowosc[15];
    int zysk;
};
void wyswietl2()
{
    sfirma f;
    fstream plik;
    plik.open("dane.dat",ios::binary|ios::in);

    for(int j=1;;j++)
    {
        plik.read(reinterpret_cast<char*>(&f),sizeof(f));
        if(plik.eof())break;
        cout<<f.firma<<" "<<f.miejscowosc<<" "<<f.zysk<<endl;
    }
    plik.close();
}
int main()
{
    sfirma f;
    wyswietl2();

    return 0;
}

Z góry dziękuje za jakiekolwiek pomysły ;)

Pozostało 580 znaków

2019-03-15 00:05
0

Problemem jest sprawdzanie czy miasto się powtarza, jeśli tak to wypisze firmę, miejscowość i zysk który jest największy.

robisz sobie mape gdzie kluczem jest nazwa miejscowości a wartością obiekt sFirma. Jeśli w mapie już jest takowa firma sprawdzasz sobie kto ma wyższy zysk i ewentualnie zastępujesz i to tyle. Możesz też to zrobić na vectorze czy set czy nawet jakiejś liście. Zastanów się.


We are the 4p. Existence, as you know it, is over. We will add your biological and technological distinctiveness to our own. Resistance is futile

Pozostało 580 znaków

2019-03-15 00:14
0
revcorey napisał(a):

robisz sobie mape gdzie kluczem jest nazwa miejscowości a wartością obiekt sFirma. Jeśli w mapie już jest takowa firma sprawdzasz sobie kto ma wyższy zysk i ewentualnie zastępujesz i to tyle. Możesz też to zrobić na vectorze czy set czy nawet jakiejś liście. Zastanów się.

Mapa chyba odpada, ponieważ nie jest znana z nazwy miejscowość, ponieważ nazwy są inne w innych plikach , a muszę zrobić elastyczny program.

masz strukturę, do której sobie piszesz z pliku? Piszesz do niej wszystkie dane to jakim sposobem nie możesz znać miejscowości skoro takie pole jest w twojej strukturze? - revcorey 2019-03-15 00:17
Tak dokładnie, wprowadzanie odbywa się na początku, nie wiadomo jakie miasta wprowadzi użytkownik. - Szymon Chmielewski 2019-03-15 00:30
wczytujesz dane z pliku do mapy tak jak powiedziałem, jak później sobie użytkownik coś wprowadzi dodatkowo to update mapy. - revcorey 2019-03-15 09:38

Pozostało 580 znaków

2019-03-15 13:59
0
Szymon Chmielewski napisał(a):

Treść zadania:

Dany jest plik binarny zawierający dane o strukturze: firma, miejscowość, zysk.wypisz firmy mające zysk poniżej średniej z zysku oraz dla poszczególnych miejscowości wypisz firmę mającą największy zysk.<

To nie jest kompletna definicja formatu danych (ani w formie binarnej, ani w formie tekstowej).
Bez tej definicji to sobie można tylko zgadywać.

Ale zakładając, że wczytujesz dane poprawnie:

using OneFirmInCityContainer = std::map<std::string, const sfirma *>;

OneFirmInCityContainer findBestCompanyInCities(const std::vector<sfirma> & firms)
{
    OneFirmInCityContainer bestInCity;

    for (const auto &firm : firms) {
          std::string city(firm.miejscowosc);
          auto bestIt = bestInCity.find(city);
          if (bestIt == bestInCity.end()) {
               bestInCity.insert({city, &firm});
          } else {
              if (firm.zysk > bestIt->second->zysk) {
                    bestIt->second = &firm;
              }
          }
    }

    return bestInCity;
}

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22, 2019-03-15 14:12

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0