Przedział godzinowy, true or false

0

Dzień dobry,

Mam za zadanie napisać program który który wczytuje ze standardowego wejścia godzinę i minuty, na przykład 11 45 dla 11:45, i wypisuje na standardowe wyjście true, jeśli sklep jest otwarty lub false jeśli zamknięty.
Dla pełnych godzin to nie ma problemu, napisałem ale jak przyjmować godziny jak w treści zadania? Godziny sklepu powinny też być określone na 7:30 18:30 ale nie wiem jak przekonwertować godzinę na liczbę w programie dlatego przyjąłem 7 i 18. Proszę o wskazówkę.

#include <iostream>

bool sklep(int otwarty)
{
    if (otwarty >= 7 && otwarty <= 18)
        return (true);
	 return (false);
}

int main() {		
		int godzina;
		std::cin >> godzina;
std::cout << std::boolalpha << sklep(godzina) << std::endl; }
0

Najprościej: wczytuj liczbowo jako liczbę czterocyfrową (1830, 745 itd)

0

ok, ale jak podam 766 to nie jest godzina a zwróci mi true, czy istnieje w ogóle jakiś prosty sposób żeby wpisywać godzinę?
Ewentualnie określić jakiś przedział etc.?

0

To sprawdzaj podane wartości czy są poprawne. Możesz wczytywać godzinę i minutę osobno i łączyć później.

0

zaczynam dopiero się uczyć C++ ;)
Chodzi mi też żeby nie wpisywać osobno, tylko jak w treści zadania mam wpisać np. 11 45 i powinno być ok dla takiego formatu.
Bo sprawdzać to rozumiem że pojedynczo, np. czy godzina jest w przedziale 0-24 i czy minuty są w przedziale 0-60?

0

A, już chyba zrozumiałem problem. Chodzi o to, że chcesz wczytywać razem. No to zwyczajnie wczytujesz:

cin >> godzina >> minuta;

Dawno nie miałem C++ w ręce, ale to powinno działać. No i potem wypisujesz, tak jak już masz.

PS. Dla minut dodaj drugi argument do metody.

0

Bardziej mi chodzi żeby wpisać od razu z klawiatury np. 11 45 w jednym ciągu, a nie 11 [enter] 45 [enter]

0

Jak najbardziej możesz tak zrobić.

0

ok, ze spacja rzeczywiście wchodzi.
Poprawiłem nieco kod, ale gdy podam 7 15 dostaje true, powinno być false, godziny otwarcia które przyjąłem to 7:30 do 18:30

#include <iostream>

bool sklep(int godzina, int minuta)
{
    if (godzina >= 7 && godzina <= 18 || minuta >=30 && minuta <= 59)
        return (true);
	 return (false);
}

int main() {		
		int godzina, minuta;
		std::cin >> godzina >> minuta;
std::cout << std::boolalpha << sklep(godzina, minuta) << std::endl; }
1

A co się stanie gdy, na ten przykład, zastosujesz moją sugestię?

bool sklep(int godzina, int minuta)
{
    int godzina_do_porownania = godzina * 100 + minuta;
    if (godzina_do_porownania >= 715 && godzina_do_porownania <= 1859)
        return (true);
     return (false);
}
0

if (godzina >= 7 && godzina <= 18 || minuta >=30 && minuta <= 59) – niepoprawnie. Porównujesz minuty i godziny oddzielnie, a powinny być razem porównywane.

0

Jeśli zastosuję Twoją kq sugestię to działa tak jak tego oczekiwałem ;) tylko nie do końca wiem czemu.
Chodzi mi o zapis

 int godzina_do_porownania = godzina * 100 + minuta;
 if (godzina_do_porownania >= 1030 && godzina_do_porownania <= 1830)

Co to jest ten "int", to służy do dodawania zmiennej bez wcześniejszej jej deklaracji?

0

To jest właśnie definicja nowej zmiennej. Dokładnie to samo co

int godzina;

w pierwszym poście.

0

Musisz zrobić 3 porównania – dla przedziałów: 7:30-7:59, 8:00-17:59, 18:00-18:30. Ewentualnie można inaczej to rozpisać, ale chyba tak jest w miarę czytelnie. PS. Pamiętaj też o znakach równości i nierówności – nie wszędzie takie same.

0

ok, rozwiązanie @kq jest prawie doskonałe, ale wciąż zostaje jeszcze problem podania godziny, bo gdy wpisze 17 87 dostaje true

1

Napisz osobną funkcję do wczytywania (jednej) liczby, która wczytuje tak długo, aż zostanie podana liczba z odpowiedniego zakresu:

int get_int_within_range(int min, int max)
{
    // ...
}

int main()
{
    int godzina = get_int_within_range(0, 24);
    int minuta = get_int_within_range(0, 60);
    // ...
}

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