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

Nie wychodzi mi działanie

Object Storage Arubacloud
0 głosów
345 wizyt
pytanie zadane 19 listopada 2020 w C i C++ przez Karson Obywatel (1,000 p.)

Witam mam problem z obliczeniami. Mam książke "Język C++ Szkoła programowania", mam przeliczyć liczbe sekund na dni, godziny, minuty i sekundy. W książce wychodzi tak: 

31600000 sekund = 365 dni, 17 godzin, 46 minut, 40 sekund.

Dni wyszły mi dobrze, ale godziny juz nie do końca. Próbowałem liczyć to na kalkulatorze( według tego co napisałem w kodzie) i myśle ze jest problem z tą resztą z dzielnie bo tu wychodzi 125, a na kalkulatorze po przecinku zostaje 741740 (coś takiego) co w sumie dawałoby to 17 godzin.

Wie ktoś co robie źle albo jak to poprawić?

1
komentarz 19 listopada 2020 przez Whistleroosh Maniak (56,980 p.)
Kod jest lepiej wstawić w specjalny bloczek, bo na zdjęciu kiepsko widać. Ale z tego co widzę, to Twoje działanie z modulo nie ma żadnego sensu. Żeby policzyć liczbę godzin na początku musisz pozbyć się pełnych dni z tych wszystkich sekund czyli zrobić seconds % (60*60*24), a następnie to musisz podzielić przez ilość sekund w godzinie czyli 60*60
komentarz 19 listopada 2020 przez Karson Obywatel (1,000 p.)

long hours = seconds % (sec_in_min * min_in_hour * hour_in_day) / 3600;

Ten kod mi działa, ale nie do końca rozumiem jak to działa :(

(sec_in_min * min_in_hour * hour_in_day) - tutaj liczę ile jest sekund w dniu, dziele to przez 3600.

Ale nie wiem skąd to nie wszystko wzięło.

1
komentarz 19 listopada 2020 przez Whistleroosh Maniak (56,980 p.)
Zmienna seconds zawiera w sobie ileś tam dni, ileś godzin, dni itd. Policzyłeś liczbę dni i teraz jeżeli chcesz policzyć liczbę godzin, to musisz od zmiennej seconds odjąc ilość sekund zawartych w tych pełnych dniach. Jeżeli tego nie zrobisz to wyjdzie Ci za dużo godzin. Za odejmowanie sekund zawartych w pełnych dniach odpowiada ta linijka:

seconds % (sec_in_min * min_in_hour * hour_in_day)

Wynikiem tego działania jest ilość sekund nie wliczając sekund zawartych w tych pełnych dniach. I teraz robimy analogicznie jak dla dni, czyli dzielimy to na początku przez 60, a potem znowu przez 60, aby otrzymać ilość godzin zawartych w tych sekundach. Tutaj trzeba pamiętać, że takie wyrażenie (x/y)/z jest równe x/(y*z)
komentarz 19 listopada 2020 przez Karson Obywatel (1,000 p.)
Dobra wydaje mi się, że rozumiem. Dzięki wielkie, że Ci sie chciało ;)

1 odpowiedź

+1 głos
odpowiedź 21 listopada 2020 przez profesorek96 Szeryf (91,420 p.)

Zadanie tego typu musisz zacząć nie jako od tyłu. Twój program przyjmuje liczbę sekund. Najpierw tą liczbę dzielisz przez ilość sekund jaką ma jeden dzień. Wynik zapisujesz do zmiennej. To co ci zostanie czyli reszta z dzielenia wczytanej liczy sekund przez ilość sekund jaką ma jeden dzień to jest to wartość sekund jaka została ci do podziału na godizny, minut i sekundy.

Kod realizujący to zadanie:

#include <iostream>
using namespace std;

int main() {
	int sekundy;
	cin>>sekundy;
    int dni=sekundy/(24*60*60);
    sekundy=sekundy%(24*60*60);
    int godziny=sekundy/(60*60);
    sekundy=sekundy%(60*60);
    int minuty=sekundy/60;
    sekundy=sekundy%60;
    cout<<dni<<" dni "<<godziny<<" godz "<<minuty<<" min "<<sekundy<<" sec"<<endl;
	return 0;
}

 

Podobne pytania

+1 głos
2 odpowiedzi 226 wizyt
pytanie zadane 11 lipca 2021 w JavaScript przez Doge Gaduła (3,370 p.)
+3 głosów
7 odpowiedzi 4,418 wizyt
pytanie zadane 18 sierpnia 2018 w Algorytmy przez 1DS Nowicjusz (170 p.)
+1 głos
1 odpowiedź 142 wizyt

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 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!

...