• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Coś źle liczy spalanie paliwa - program C++

Object Storage Arubacloud
0 głosów
1,496 wizyt
pytanie zadane 2 listopada 2016 w C i C++ przez rafalmagician Obywatel (1,320 p.)

Witam,

Mam problem bo program źle liczy spalanie. Jak mam napisać funkcję spalanie albo co odjąć żeby wyświetlało w funkcji wyniki poprawne wartości ?

To mój kod:

#include <iostream>
using namespace std;

class Samochod{
    bool silnik;
    int paliwo;
    int pojemnoscBaku;
    int przebieg;
    int spalanie;

    public:
        Samochod(bool s=false,int p=0,int pb=100,int pr=0,int sp=0){
            silnik=s;
            paliwo=p;
            pojemnoscBaku=pb;
            przebieg=pr;
            spalanie=sp;
        }
        ~Samochod(){
            cout<<"Wywolanie destruktora"<<endl;
        }
        bool _silnik(){
            silnik=true;
            return silnik;
        }
        void _wskazniki(){
            cout<<"silnik       = "<<silnik<<endl;
            cout<<"paliwo/bak   = "<<paliwo<<"/"<<pojemnoscBaku<<endl;
            cout<<"przebieg     = "<<przebieg<<" km"<<endl;
            cout<<"spalanie     = "<<spalanie<<"/100km"<<endl;
        }
        void _tankuj(){
            int tankuj;
            cout<<"Ile paliwa zatankowac >> ";
            cin>>tankuj;
            paliwo=tankuj;
            if(paliwo==pojemnoscBaku){
                cout<<"Bak jest zatankowany do pelna."<<endl;
                _silnik();
            }
            else if(paliwo>pojemnoscBaku){
                cout<<"Nie mozesz zatankowac wiecej paliwa niz pojemnosc baku."<<endl;
                paliwo=pojemnoscBaku;
                _silnik();
            }
            else if(paliwo>0&&paliwo<pojemnoscBaku){
                cout<<"Bak nie jest pelny. Ale mozesz uruchomic silnik."<<endl;
                _silnik();
            }
        }
        int _spalanie(int przebieg){
            spalanie=(paliwo/przebieg)*100;
            return spalanie;
        }
        void _uruchomSilnik(){
            if(paliwo<=0){
                cout<<"Brak paliwa... Nie mozna uruchomic silnika."<<endl;
                silnik=false;
                _tankuj();
            }
            else{
                _silnik();
            }
            _wskazniki();
        }
        void _jedz(){
            if(silnik==1){
                int km;
                cout<<"Ile km chcesz jechac >> ";
                cin>>km;
                _spalanie(km);
                paliwo=paliwo-spalanie;
                if(paliwo<=0){
                    cout<<"Nie mozesz jechac podana ilosc km. Nie wystarczy paliwa."<<endl;
                    _jedz();
                }
                else{
                    przebieg=km;
                    cout<<"Przejechales "<<przebieg<<" km."<<endl;
                    _wskazniki();
                }
            }
            else{
                _uruchomSilnik();
            }
        }
        void _wylaczSilnik(){
            if(silnik==1){
                silnik=false;
            }
            else{
                cout<<"Silnik jest wylaczony"<<endl;
            }
            _wskazniki();
        }
};

int main()
{
    Samochod s1;
        s1._uruchomSilnik();
        cout<<"---------------------"<<endl;
        s1._jedz();
        cout<<"---------------------"<<endl;
        s1._wylaczSilnik();

    return 0;
}

 

komentarz 2 listopada 2016 przez Patrycjerz Mędrzec (192,320 p.)
Wrzuciłeś cały blok kodu ze szczątkowym opisem i myślisz, że tak ma to wyglądać? A gdzie własnoręczna refaktoryzacja kodu? Gdzie chęć nauki algorytmicznego myślenia?
komentarz 2 listopada 2016 przez rafalmagician Obywatel (1,320 p.)
Przyznam że dopiero się uczę programować. A refaktoryzacji jeszcze nie umiem bo chcę nauczyć się myśleć programistycznie (czy jak to się mówi). Ale dzięki za cenne uwagi :)

2 odpowiedzi

0 głosów
odpowiedź 2 listopada 2016 przez iWantCode Bywalec (2,170 p.)
else if(paliwo>0&&paliwo<pojemnoscBaku) ? co to te 0&&, a i może użyj listy inicjalizacyjnej :D
komentarz 2 listopada 2016 przez rafalmagician Obywatel (1,320 p.)
No tak ten warunek nie jest konieczny. Teraz to widze  Dzieki za podpowiedz. Wprowadze poprawki
0 głosów
odpowiedź 2 listopada 2016 przez swetroniusz Użytkownik (540 p.)
edycja 2 listopada 2016 przez swetroniusz

1.W funkcji _jedz() jest blad. Powinienes najpierw sprawdzic, czy możesz spalić paliwo.

2.Funkcja _spalanie() tez jest zle zrobiona. Powinienes zrobic zmienna, ktora przechowa informacje o spalaniu samochodu (najlepiej na 100km) i zamiast tego zrobic:
ilosclitrowktorezostaniespalonepodczasjazdy=ilosckmktorechceprzejechacuzytkownik/100*5 (nie, nie nazywaj tak tych zmiennych)

3.Dlaczego funkcje _silnik() i _spalanie() nie są voidami? Zwracana wartość i tak przepada. Zmień zwracany typ tych funkcji na void i usuń returny.

komentarz 2 listopada 2016 przez DragonCoder Nałogowiec (36,500 p.)
4. Jak nazwy zmiennych sa ok i kod tez to nie trzeba komentarzy... Ja nie uzywam i daje sobie bez tego rade
komentarz 2 listopada 2016 przez swetroniusz Użytkownik (540 p.)
edycja 2 listopada 2016 przez swetroniusz
Komentarze sluza do zrozumienia kodu. Są bardzo ważne, żeby inny programista zrozumiał działanie programu. Nieważne, ze ty ich nie potrzebujesz - to jest podstawa, jezeli chcesz komus udostepnic kod. Nazwy zmiennych nie są najgorsze, lecz uważam, ze komentarze przyspieszają szukanie błędów (a czasami nawet umożliwiają). PS Nie zrozum zle mojego komentarza. Chodzilo mi o ostatnie zdanie Twojej wypowiedzi.
komentarz 2 listopada 2016 przez rafalmagician Obywatel (1,320 p.)
Dzięki za cenne uwagi. Wprowadzę poprawki i zobaczę co będzie... :) Ale co do komentarzy to nie mogę się zgodzić z 4 punktem bo zmienne i funkcje są dobrze nazwane i nie trzeba komentarzy :)
komentarz 2 listopada 2016 przez swetroniusz Użytkownik (540 p.)
Ok. Co do komentarzy to przepraszam, kod jest wystarczająco zrozumialy (zbytnio przyzwyczaiłem się do komentarzy). Jezeli jeszcze potrzebowalbys pomocy, napisz.
komentarz 3 listopada 2016 przez DragonCoder Nałogowiec (36,500 p.)
Na tym to pilega, to nazwy zmiennych powinny mowic co sie dzieje z programmem, oczywiscie nie tylko zmiennych, funkcji klas itd... wszystko jest wazne, jezeli kod jest czytelny i nazwy mowia co robi zmienna to raczej nie potrzeba komentarzy

Podobne pytania

+1 głos
2 odpowiedzi 496 wizyt
pytanie zadane 29 września 2015 w C i C++ przez patrykblu Nowicjusz (160 p.)
0 głosów
1 odpowiedź 350 wizyt
pytanie zadane 18 stycznia 2018 w C i C++ przez Rizenek Nowicjusz (220 p.)
0 głosów
1 odpowiedź 521 wizyt

92,536 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,922 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...