Klasa, problem z rekurencja?

0

Dzien dobry!

Program ma za zadanie uzyc konstruktora, ktory przyjmie ilosc litrow na km, funkcji ktora spr bak auta, dotankowuje i funkcje ktora przyjmuje odleglosc w km.
Coś mi tutaj nie działa. Wydaje mi się, że powinienem wrzucić gdzieś rekurencję.
Proszę o jakieś podpowiedzi.
Z góry dzięki!

#include <iostream>

using namespace std;

class Car
{
public:
    Car(int ile_paliwa_na_sto);
    int fuel() const;
    void refuel(int ile_paliwa);
    int go(int km);

private:
    int ile_paliwa_na_sto;
    int ile_paliwa;
};

Car::Car(int ile_paliwa_na_sto) : ile_paliwa_na_sto(ile_paliwa_na_sto){}

int Car::fuel() const
{
    return ile_paliwa;
}

void Car::refuel(int wlej)

{
    ile_paliwa+=wlej;
}

int Car::go(int km)
{
    /*Metodę go, która przyjmuje liczbę kilometrów do przejechania i zwraca liczbę kilometrów, które
      udało się rzeczywiście przejechać bez tankowania. Jednocześnie funkcja zmniejsza odpowiednio ilość
      paliwa w baku.*/
    int litry_na_km = (1*ile_paliwa_na_sto)/100;
    int wynik;
    for(int i=0; i<km; i++)
    {
        litry_na_km+=litry_na_km;
        if(litry_na_km>ile_paliwa)
        {
            wynik = i;
            cout << i << " km można przejechać na " << ile_paliwa << " l paliwa" << endl;
        }
    }
    return wynik;
}
int main()
{
    Car car(6);
    car.refuel(50);
    std::cout << car.go(500) << " ";
    std::cout << car.fuel() << std::endl;
 //   std::cout << car.go(500) << " ";
 //   std::cout << car.fuel() << std::endl;
    return 0;
}
0

Ee, gdzie chciałbyś mieć tutaj rekurencję?
Malo tego - tutaj nawet pętli nigdzie nie trzeba.

0
Patryk27 napisał(a):

Ee, gdzie chciałbyś mieć tutaj rekurencję?
Malo tego - tutaj nawet pętli nigdzie nie trzeba.

Bo własnie wyliczyłem ile litrów potrzeba na 1km - pozniej juz tylko dodawalem litry zwiekszajac km.
Wyskakują mi jakieś liczby 2354355 23432432

0

W dalszym ciągu nie rozumiem, co ma do tego rekurencja.

Zacznij od rozwiązania Twojego problemu na kartce papieru - ręcznie, w stałym czasie dla dowolnych wartości.

0

Ogólnie w tej metodzie niepokoi kilka zapisów:
tutaj powinno być przynajmiej rzutowanie na double, a najlepiej, żeby cała zmienna była tego typu, więc lepiej zmienić to od razu w klasie.

int litry_na_km = (1*ile_paliwa_na_sto)/100;   /* double litry_na_km =(double) (1*ile_paliwa_na_sto)/(double)100);*/

wynik powinien być zainicjalizowany zerem, ponieważ jest to zmienna lokalna i jest możliwość, że nie zostanie zdefiniowana, a zwrócona przez metodę.

int wynik=0;

Poza tym ten VW chyba pali wykładniczo do przejechanej trasy, ale wiadomo technologia wymaga zasobów:

litry_na_km+=litry_na_km; /*Tutaj coś mi się nie zgadza*/

ogólnie ten warunek w pętli zrobiłbym inny.

Najprościej chyba da się to zrobić tak:

int Car::go(int km)
{
double litry_na_km =(double)((double)ile_paliwa_na_sto)/(double)100;
double potrzeba=litry_na_km*(double)km;
if (potrzeba > ile_paliwa)
{
    return (int)((double)ile_paliwa/(double)litry_na_km);
}
else
{
    return km;
}
}
0
Standardowe wyjście
500 17.5
269.231 0

Pętla for jednak musi być.

0

Dlaczego?

0
Patryk27 napisał(a):

Dlaczego?

Żeby zmniejszała ilość paliwa w baku, a na koniec wypisała km w którym był już pusty?

0

Klasa Car powinna opisywać własności samochodu.
Jeśli masz zamiar dać podróż w pętli, żeby aktualizować stan samochodu,
utwórz drugą klasę np. Trip i w niej możesz w pętli na podstawie losowej długości odcinków
aktualizować dane samochodu.

0

Żeby zmniejszała ilość paliwa w baku

W jaki sposób to implikuje konieczność wykorzystania pętli?
Dzielenie oraz odejmowanie to za mało czy co?

a na koniec wypisała km w którym był już pusty?

Gdzie jest napisane, aby ta metoda coś wypisywała?
A zresztą nawet gdyby miała to wypisywać, w dalszym ciągu nie widzę powodu, w imię którego pętla jest tutaj niezbędna.

Na kartce też liczyłbyś to z wykorzystaniem pętli?

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