Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Kellon siirtäminen

mrkebab [20.03.2005 19:19:09]

#

Teen eräänlaista kello juttua ja haluaisin, että voisin siirtää kelloa tietyllä sekunttimäärällä. Ongelmaksi muodostuu kuitenkin se, että jos kello on vaikkapa 10.32.40 ja kelloa siirretään vaikkapa 21 sekunnilla niin uusi aika on: 10.32.61
Millä tavalla tuon voisi helpoiten tehdä? Joku for lause tulee mieleen, mutta ei oikein sytytä. Tämän hetkinen koodi on:

        cout <<"\n\nMontako sekuntia kelloa siirretään? ";
        cin >>siirto;

        tunti=siirto/3600;

        tunnit=tunnit+tunti;

        minuutti=(siirto-tunti*3600)/60;

        minuutit=minuutit+minuutti;

        sek=siirto-(tunti*3600)-(minuutti*60);

        sekunnit=sekunnit+sek;

Metabolix [20.03.2005 19:26:12]

#

Ensin lisäät jo olemassa oleviin sekunteihin siirrettävän aikamäärän. Sen jälkeen vain laitetaan liian isot luvut pienemmiksi.

while (sekuntit > 59) // Niin kauan kuin sekunteja on liikaa
{
  sekuntit -= 60; // Poisetetaan 60 sek
  minuutit++;     // Lisätään minutti
}

// Sama minuuteilla
while (minuutit > 59)
{
  minuutit -= 60; // Poisetetaan 60 min
  tunnit++;       // Lisätään tunti
}

Ja noin edelleen. Muistat vain, että päivässä on tunteja 24 eikä 60 ;)

sqwiik [20.03.2005 19:27:24]

#

Kannattaa laskea yhteen järjestyksessä sekunnit, minuutit, tunnit. Täydet minuutit lisätään minuutteihin, ja sen jälkeen täydet tunnit tunteihin. Pseudona:

cout<<"Anna sekuntimäärä:"<<endl;
cin>>siirto;

/* Lisätään sekunnit */
sekunnit += siirto;
/* Siirretään kokonaiset minuutit minuuttipuolelle */
while(sekunnit>60){sekunnit-=60; minuutit++;}

Edit - Damn, myöhästyin vähän alle minuutin :/
/* Sama tunneille */
while(minuutit>60){minuutit-=60; tunnit++;}

Saat itse sitten ratkaista sen 24 tunnin pyörähdyksen :)

mrkebab [20.03.2005 19:35:29]

#

Aivan! Kiitos paljon.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta