Masz zadanie związane z zegarkiem czyli mierzeniem upływu czasu. Nie dotyczy to tego jednego, wymienionego w tytule zadania.
Jak się do niego zabierasz? Tworzysz zmienne - liczniki, godzina i minuta? Oczywiście można tak, ale jest prostszy sposób.
Wyobraź sobie, że musisz mierzyć także sekundy. A co jeżeli ma to być zegar z kalendarzem? Odzielne liczniki na dni, tygodnie, miesiące, lata? Jak będzie wyglądał program - kod, gdy musisz szybko przestawić zegar [+ być może miesiące i lata] na iną strefę czasową lubna inną datę?
Jest proste rozwiązanie i tak się to właśnie robi. Tylko jedna zmienna - jeden licznik przechowujący aktualny czas.
Jeżeli potrzebna dokładność czasu, tak jak w tym zadaniu to jedna minuta, to licznik mierzy tylko minuty i tak przedstawia czas w minutach. Dopiero program chcąc wyświetlić czas w “normalnym” formacie przelicza czas w minutach na godziny i minuty. Jak, np tak:
czas = 1361; //minuty
godzina = czas / 60 = 22
minuta = czas % 60 = 41
AKTUALNY= godzina:minuta = 22:41
Po 20 minutach:
czas + 20 = 1361 + 20 = 1381
godzina = 1381 / 60 = 23
minuta = 1381 % 60 = 1
Czyli Aktualny 23:01
Co jeżeli w powyższym zegarku minie doba?
Doba = 24*60 = 1440 minut więc możemy dzielić czas modulo i brać resztę - czas % doba.
Lub jeśli przesuwamy zegarek co minutę o jedną minutę można sprawdzać i go wyzerować gdy nadejdzie pora:
czas++
if (czas == doba) czas = 0;
Analogicznie dla zegarka z sekundnikiem:
czas = 81715 sekund
godzina = 81715 / (60*60) = 22
minuta = 81715 % (60*60) / 60 = 41
secunda = 81715 % 60 = 55
AKTUALNY: 22:41:55
czas++
if (czas == 24*60*60) czas = 0;
.
Jest też możliwość użycia metody tzw czarnej skrzynki. Posługujemy się gotowymi procedurami z bibliotek np: <chrono>
lub <ctime>
.
==========
Jeżeli coś jest niezrozumiałe lub niejasne wymagające rozszerzenia lub wszelkie komentarze, proszę pisać do mnie na priv i wtedy zamieszczę uzupełnienie i podam autora…