Gå til innhold

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


Anbefalte innlegg

Skrevet

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.

Videoannonse
Annonse
Skrevet

Skjønner ikke helt hva du mener med å sette opp programmet, men mitt tips er at du prøver deg frem frøst. Se om du f.eks får riktig antall timer, så riktig antall minutter osv... Og heller spørre om du har noen mer konkrete spørsmål.

Skrevet

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.

Skrevet (endret)

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
Skrevet (endret)

Tusen takk for svaret. :) Jeg brukte ikke modulus-operatøren, men pga. innlegget ditt fant jeg en annen løsning etter litt tid med hard tenking.

Endret av Sondre
Skrevet

Bare glad for å kunne hjelpe=)

 

Forresten; regna du ut antall timer, og tok antall timer * 3600 for å finne utgangspunktet for å regne ut antall minutter? Ble bare litt nysgjerrig...=P

Skrevet

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");
}

 

Skrevet (endret)

Det funker helt fint her. Med 5200 sekunder som eksempel, blir timer - (int)timer det samme som 1,4444 - 1.

Endret av Sondre
Skrevet

Ja, ser det nå. Det var bare en noe fremmed måte for meg å gjøre det på. Jeg ville ikke brukt double.

 

Men resultatet ditt blir vel 39 sekunder, ikke 40?

Skrevet

Det kan sikkert virke fremmed, ja. Jeg er helt ny med programmering og dette var den eneste løsningen jeg klarte å komme frem til. Hvordan kan det gjøres uten å bruke double?

 

Og ja, jeg får 39 sekunder. Er det feil?

Skrevet

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 )

Skrevet

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;
}

 

Skrevet

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...

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...