Gå til innhold

[Løst] Gjøre x sekunder til hh:mm:ss i C++?


Anbefalte innlegg

Hei. I boken jeg leser har jeg fått dette som oppgave.

 

Skriv et program som leser inn et antall sekunder og beregner hvor mange timer, minutter og sekunder dette er. (Hint: Bruk heltallsdivisjon.)

 

Programmet skal skrives veldig simpelt med kun bruk av simple variabler (int, double), siden jeg ikke har lært mer enn det til nå. Jeg kan utregningen matematisk, men sitter bom fast mtp. på hvordan jeg skal sette opp programmet.

Lenke til kommentar
Videoannonse
Annonse

Sette opp programmet som i å kode. Matematisk sett begynner man med å dele sekundene på 3600 for å få timer. La oss si det er 5200 sekunder som skal omgjøres. Da blir det 5200 / 3600 som gir 1,4444 timer. Dette er greit. Men problemet er å få minuttene og sekundene. For når man har 1,4444 så runder man ned til 1 og tar resten (altså 0,4444) og ganger med 60 for å få minutter. Det samme gjøres deretter med sekunder. Jeg sliter altså med å få ut tallene bak komma slik at jeg kan regne ut minuttene og sekundene.

Lenke til kommentar

Du kan bruke modulus-operatoren (%). Hvis du f.eks har 5200 sek og skriver noe ala

iSek =  5200 % 3600

får du resten etter den største mulige heltallsdivisjonen. Altså det som blir igjen etter at du har delt 5200 på det høyeste heltatt som gir et produkt over null. I dette tilfelle blir det resten etter 5200 / 3200 som er 2000. Da kan du bruke det tallet til å regene ut minutter og sekunder.

 

Håper du forstår forklaringen min=P

 

EDIT: skrivefeil.

Endret av FluffyBeast
Lenke til kommentar

Her er koden. :)

 

 

#include <iostream>
using namespace std;

int main() {

   double timer;
   double minutter;
   double sekunder;

   cout << "Skriv inn antall sekunder som skal omgjøres: ";
   cin >> sekunder;

   timer = sekunder / 3600;
   minutter = (timer - (int)timer) * 60;
   sekunder = (minutter - (int)minutter) * 60;

   cout << endl << (int)timer << " time(r), " << (int)minutter << " minutt(er) og "
   << (int)sekunder << " sekund(er)";

   system("pause >nul");
}

 

Lenke til kommentar

Det skal være 40 sekunder, tror jeg.

5200(sek) er en hel time (3600 sek) 5200 - 3600 = 1600 sek

1600 sek er 26 hele minutter (26 * 60 = 1560) sek

Da står du igjen med 40 sek.

 

Skal du bruke bare int (som jeg anbefaler) må du gjøre utregningene annerledes. Som tidligere nevnt kan du bruke modulusoperatoren. (1600 % 60 vil gi 40 )

Lenke til kommentar

Endelig! Jeg tror dette skal være rett.

 

 

#include <iostream>
using namespace std;

int main() {

   int sek;

   cout << "Skriv inn antall sekunder: ";
   cin >> sek;

   int timer = sek / 3600;
   int rest = sek % 3600;
   int min = rest / 60;
   int sek2 = rest % 60;

   cout << endl << sek << " sekunder er lik " << timer
   << " tim(er), " << min << " minutt(er) og " << sek2 << " sekund(er).";

   system("pause >nul");
   return 0;
}

 

Lenke til kommentar

Endelig! Jeg tror dette skal være rett.

 

 

#include <iostream>
using namespace std;

int main() {

   int sek;

   cout << "Skriv inn antall sekunder: ";
   cin >> sek;

   int timer = sek / 3600;
   int rest = sek % 3600;
   int min = rest / 60;
   int sek2 = rest % 60;

   cout << endl << sek << " sekunder er lik " << timer
   << " tim(er), " << min << " minutt(er) og " << sek2 << " sekund(er).";

   system("pause >nul");
   return 0;
}

 

Jeg ville gjort akkurat dette her selv...det er sånne ting som dette hvor modulo-operatoren er kjekk å bruke...

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...