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;
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 ;)
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 :)
Aivan! Kiitos paljon.
Aihe on jo aika vanha, joten et voi enää vastata siihen.