Przeliczanie sekund na inne jednostki

0

Witam, miałem za zadanie zrobić program który przelicza sekundy (w moim przypadku 4000s) na ilość godzin, minut oraz sekund, np. 4000s= 1h 6min 40sek.
Wszystko zrobiłem, aczkolwiek nie rozumiem jednej rzeczy (którą być może zle napisałem). W ostatniej linijce jest mowa o sekundach, tzn. mam już zapis 1h 6min i brakuje mi ostatniej wartości którą są sekundy. Jak wiadomo w 1 sekundzie mieści się 1 sekunda, więc moim zdaniem zapis powinien wyglądać nastepująco:
<< (t % 3600) / 1 << , jednak wynik wychodzi zły. Kolega doradził mi żebym zastosował takie polecenie jakie mam poniżej, czyli owe << (t % 60) / 1 <<
Moje 2 pytania brzmią następująco:

  1. Czy kolega dobrze mi doradził i to ja zle myśle (jeśli dobrze prosiłbym o wytłumaczenie czemu tak)
  2. Czy kod powinien wyglądać jeszcze inaczej
    Dziękuję za pomoc, poniżej wklejam kod .cpp
#include <iostream>
using namespace std;

int main() {
    int t;
    cin >> t;
    cout << t / 3600 << "g" << (t % 3600) / 59 << "m" << (t % 60) / 1 << "s" << endl;
}
1

A dlaczego dzielisz przez 59?

0
  1. Twoja funkcja nic nie zwraca.Tradycyjne return 0 by się przydało.
  2. (t % 3600)/60 - minuty, t%60 - sekundy. I minuty lepiej oznacz min, bo można z metrem pomylić. O "/59" i "/1" nie wspomnę.
0
vpiotr napisał(a):

A dlaczego dzielisz przez 59?

W zadaniu dostałem polecenie, że sekundy jak i minuty nie mogą przekraczać wartości 59.

Serechiel napisał(a):
  1. Twoja funkcja nic nie zwraca.Tradycyjne return 0 by się przydało.
  2. (t % 3600)/60 - minuty, t%60 - sekundy. I minuty lepiej oznacz min, bo można z metrem pomylić. O "/59" i "/1" nie wspomnę.
  1. W poleceniu zadania miałem napisać tyle co napisałem, więc o żadnym return 0 nie było pisku
  2. Oczywiscie jasne ze lepiej to oznaczyc min itp. aczkolwiek miała zostać tylko same literki g,m oraz s. Co do tego 59 oraz 1, jak wyżej pisałem, zostało mi wspomniane że te wartości nie mogą przekroczyć wartości 59.
  3. Nadal nie wiem czemu w sekundach jest 60, skoro w godzinie miesci się 3600s, w minucie 60s, to w sekundzie powinna miescic sie tylko 1 sekunda. Mógłbyś mi to wyjaśnić bądz przytoczyć jakiś przykład? ;x
0

Operacja op1 % op2 zwraca wartość od 0 od op2 - 1.
Reszta to prosta matematyka.

0
ZAKŁOPOTANY napisał(a):

Witam, miałem za zadanie zrobić program który przelicza sekundy (w moim przypadku 4000s) na ilość godzin, minut oraz sekund, np. 4000s= 1h 6min 40sek.
Wszystko zrobiłem, aczkolwiek nie rozumiem jednej rzeczy (którą być może zle napisałem). W ostatniej linijce jest mowa o sekundach, tzn. mam już zapis 1h 6min i brakuje mi ostatniej wartości którą są sekundy. Jak wiadomo w 1 sekundzie mieści się 1 sekunda, więc moim zdaniem zapis powinien wyglądać nastepująco:
<< (t % 3600) / 1 << , jednak wynik wychodzi zły. Kolega doradził mi żebym zastosował takie polecenie jakie mam poniżej, czyli owe << (t % 60) / 1 <<
Moje 2 pytania brzmią następująco:

  1. Czy kolega dobrze mi doradził i to ja zle myśle (jeśli dobrze prosiłbym o wytłumaczenie czemu tak)

4000/60 = 66 , dla łatwiejszego zrozumienia ozna pomnozyc 60*66=3960 i teraz 4000-3960=40 reszta to reszta to 40 czyli liczba sekund

0
    const int total_sec = 4000;
    int h = total_sec / 3600; //tyle pelnych godzin jest w total_sec
    int min = (total_sec / 60) % 60; //ilosc pelnych minut w total_sec modulo 60 - daje ilosc pozostalych minut niezawartych w pelnej godzinie
    int s = total_sec % 60; //ilosc pozostalych sekund niezawartych w pelnych godzinach ani w pelnych minutach
 
    cout << h<< ":" << min << ":" << s << endl;
0

Dobra już wszystko rozumiem, dziękuję każdej osobie za pomoc. Przepraszam również że zajmuję czas takimi błahostkami, aczkolwiek jak pisałem, jest to mój może 2-3 dzień z tym jęzkiem, chciałbym wszystko idealnie rozumieć żeby nie było żadnych problemów. Jeszcze raz dziękuję i życzę miłego dnia, a właściwie wieczorku, pozdrawiam :)

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