Suma wyników c++(odczyt z pliku)

0

#include <iostream>
#include <fstream>
#include <stdlib.h>

using namespace std;

char Marka[30];
char Model[30];
char Rok_produkcji[30];
char Cena_zakupu[30];
char Nr_rejestracyjny[30];
char Przebieg[30];
char Data_ostatniego_remontu[30];
char podana_marka[30];
char podany_rok[30];

int sprawdz_marke()
{
int wynik=1;
int licznik=0;
while(podana_marka[licznik]!=0)
{
if (Marka[licznik]!=podana_marka[licznik]) wynik=0;
licznik++;
}
return wynik;
}
int sprawdz_rok()
{
int wynik=1;
int licznik=0;
while(podany_rok[licznik]!=0)
{
if (Rok_produkcji[licznik]!=podany_rok[licznik]) wynik=0;
licznik++;
}
return wynik;
}

int main()

{

std::cout<<"podaj marke"<<endl;

std::cin>>podana_marka;

std::cout<<"podaj rok"<<endl;

std::cin>>podany_rok;

ifstream plik;

plik.open("plik.txt");
for (int y=1;y<9;y++)
for(int x=0;x<135;x++)

{

plik>>Marka;

plik>>Model;

plik>>Rok_produkcji;

plik>>Cena_zakupu;

plik>>Nr_rejestracyjny;

plik>>Przebieg;

plik>>Data_ostatniego_remontu;

if (sprawdz_marke()==1 && sprawdz_rok()==1) cout<<"Model:"<<Model<<" "<<"Przebieg:"<<Przebieg<<" "<<endl;

}

plik.close();

return 0;

}
Program działa, ale nie mam pomysłu jak zrobić to by program po zakończeniu pracy dodatkowo wyświetlił sumę wszystkich przebiegów które się wyświetlą

2

Teraz coś widać.
Czy możesz jeszcze raz wyjaśnić innymi słowami co chcesz zrobić?

#include <iostream>
#include <fstream>
#include <stdlib.h>

using namespace std;

char Marka[30];
char Model[30];
char Rok_produkcji[30];
char Cena_zakupu[30];
char Nr_rejestracyjny[30];
char Przebieg[30];
char Data_ostatniego_remontu[30];
char podana_marka[30];
char podany_rok[30];

int sprawdz_marke() {
  int wynik = 1;
  int licznik = 0;
  while (podana_marka[licznik] != 0) {
    if (Marka[licznik] != podana_marka[licznik]) wynik = 0;
    licznik++;
  }
  return wynik;
}

int sprawdz_rok() {
  int wynik = 1;
  int licznik = 0;
  while (podany_rok[licznik] != 0) {
    if (Rok_produkcji[licznik] != podany_rok[licznik]) wynik = 0;
    licznik++;
  }
  return wynik;
}

int main()
{

  std::cout << "podaj marke" << endl;
  std::cin >> podana_marka;
  std::cout << "podaj rok" << endl;
  std::cin >> podany_rok;
  ifstream plik;

  plik.open("plik.txt");
  for (int y = 1; y < 9; y++)
    for (int x = 0; x < 135; x++)
    {
        plik >> Marka;
        plik >> Model;
        plik >> Rok_produkcji;
        plik >> Cena_zakupu;
        plik >> Nr_rejestracyjny;
        plik >> Przebieg;
        plik >> Data_ostatniego_remontu;
        if (sprawdz_marke() == 1 && sprawdz_rok() == 1) cout << "Model:" << Model << " " << "Przebieg:" << Przebieg << " " << endl;
    }
 
  plik.close();

  return 0;

}
1

Na wstępie kilka uwag:

  1. Nie używaj zmiennych globalnych
  2. Zamień tablice typu **char **na **std::string **
  3. Wywal z kodu magiczne liczby ( 9 , 135 ) z pętli - nie wiem po co są tutaj dwie (*).
  4. Funkcje powinny zwracać typ **bool **i przyjmować jakieś parametry na podstawie których wyliczany będzie wynik.

Jeżeli chcesz obliczyć sumę wszystkich wyświetlanych przebiegów, to zadeklaruj dodatkową zmienną np. typu int ( przed pętlą for ) i dodawaj(**) do niej odczytany z pliku przebieg w momencie, kiedy warunek w instrukcji if będzie prawdziwy.

(*) Odczyt z pliku można realizować za pomocą pętli while

while(  plik >> Marka >> Model >> Rok_produkcji >> Cena_zakupu >> Nr_rejestracyjny >> Przebieg >> Data_ostatniego_remontu )
{
...
}

(**) Przy dodawaniu powinieneś zamienić string na liczbę całkowitą przy pomocy np. std::stoi

0
TomaszLiMoon napisał(a):

(**) Przy dodawaniu powinieneś zamienić string na liczbę całkowitą przy pomocy np. std::stoi

Czy nie dać prościej: long Cena_zakupu; zamiast: char Cena_zakupu[30];

0

Program działa, ale nie mam pomysłu jak zrobić to by program po zakończeniu pracy dodatkowo wyświetlił sumę wszystkich przebiegów które się wyświetlą

Dobrze rozumiem, że pytasz się o to jak posumować przebiegi?
Czy może chodzi o agregację przebiegów pod konkretny model, markę, nr rejestracyjny, etc.

0

tak, ale dopiero wtedy gdy program wskaże samochody które spełniają kryteria, czyli markę i rok produkcji

Należy przefiltrować wyniki po zadanym kryterium, a następnie posumować. Proceduralnie wygląda to tak:

  1. Zapisać wczytane dane jako rekord (struktura lub klasa). Zapisać wszystkie rekordy w jakiejś kolekcji. Dla uproszczenia załóżmy, że lista, choć można pokusić się tablice hashujące (unordered_map) dla efektywności.
  2. Przeiterować przez zapisane rekordy i sumować przebieg jeżeli spełnia kryterium.

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