Godziny otwarcia sklepu

Bartosz Gruszkowski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 24
0

Cześć,
dostałem jako zadanie napisanie dość prostego programu, który po podaniu czasu będzie wypisywał true jeżeli sklep jest otwarty lub false jeśli jest zamknięty. Sklep jest czynny od 10:30 włącznie do 18:30 wyłącznie. Jednak program nie działa tak jakbym chciał, a ja nie potrafię znaleźć błędu w kodzie. Po podaniu godziny 10:30 program wypisuje false, a po podaniu godziny 18:45 true ale już przy 19:00 wypisuje false.
Poniżej zamieszczam kod.

Kopiuj
#include <iostream>
int main() {
int g, m;
std::cin >> g >> m;
double czas = g + m/60;
bool otwarty = (10.5 - czas) <= 0 && (10.5 - czas) > -8 ;
std::cout << std::boolalpha << otwarty << std::endl; }
szweszwe
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 1694
0

Może napisz po ludzku if czas >= 10.5 && czas <= 18.5 W ogóle to bym poszukał czegoś do obsługi czasu w cpp.

Bartosz Gruszkowski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 24
0

Zapomniałem dodać, że mam napisać program bez użycia instrukcji wyboru, instrukcji warunkowej, ani operatora warunkowego oraz program nie załącza żadnych plików nagłówkowych poza iostream.

szweszwe
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 1694
0

No to nie rób ifa tylko zrób tak jak masz tylko te warunki napisz tak jak ci podałem.

Bartosz Gruszkowski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 24
0

Zrobiłem Twoim sposobem i wciąż nie działa. Przy wpisaniu 10 30 program wyrzuca false, a przy 18 30 oraz 18 45 true ale przy 19 00 już false. Nie wiem czego jest to kwestią. Nierówności prawą poprawiłem oczywiście z <= na </

szweszwe
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 1694
1

A no bo masz int a sprawdzasz zmiennoprzecinkowe liczby.

jurek1980
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3625
3

Po co bawisz się w liczby zmiennoprzecinkowe? Operuj na minutach.

Kopiuj
#include <iostream>

using namespace std;

int main()
{
    int g, m;
std::cin >> g >> m;
int czas = g*60 + m;
bool otwarty = czas >=(10*60+30)  && czas <=(18*60+45);
std::cout << std::boolalpha << otwarty << std::endl; 
}
Bartosz Gruszkowski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 24
0

Bardzo dziękuję za pomoc. O przeliczeniu na minuty jakoś nie pomyślałem, a co do int to musiałem na zajęciach coś ominąć bo wydawało mi się, że skoro zmienna czas była typu double to już wystarczy. Najwyraźniej tak nie było.
Jeszcze raz piękne dzięki.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.