Programm Sekunden in Min,Std,...
-
Ich bin durch deinen Code nicht durchgestiegen.
Was soll das ?
Min = Sek / 60; hilf = (unsigned int)Min; //Min ganzzahlig gespeichert! Min = hilf % 60 + Min; if (Min >= 60) {Beispiel für 120 Sekunden:
Min = 120 / 60 ergibt 2.0
hilf = 2
Min = 2 % 60 + 2.0 = 2+2.0 = 4.0
Tut mir Leid, das ist Schrott.
-
Habe ich das falsch interpretiert. Ich dachte wenn ich eben 120sekunden durch 60 sind 2 Minuten ok
Dann die 2 minuten durch 60 (hätte ich stunden) davon benötige ich den Rest weil ich den ja noch zu den minuten dazuzählen muss usw.
Blick grad nicht durchLg
-
Der Rest sind die Minuten. Und die werden dann nicht größer als 59.
Falls du mit den 60 und 24 Schwierigkeiten hast, probier es mit Längen aus.
Eingabe in mm und Ausgabe in Kilometer, Meter , Centimeter und Millimeter.
Das Prinzip ist das selbe, du hast da aber nur Zehnerpotenzen als Teiler und die Zahlenwerte ändern sich dadurch auch nicht.123456789 mm = 123 km & 456 m & 78 cm & 9 mm
-
DirkB schrieb:
Lass das double sein. Nimm dazu unsigned long.
Wozu unsigned-Arithmetik? Die ist u.U. langsamer und bringt u.U. Probleme mit sich. Ich würde long nehmen.
-
philipp2100 schrieb:
Ich würde long nehmen.
Was letztlich auf int hinausläuft da long und int gleich groß sind (auf nahezu allen Systemen).
-
Ähh.. nein? Auf den meisten unixoiden Systemen nicht, siehe:
http://de.wikipedia.org/wiki/64-Bit-Architektur#Programmiermodell
-
philipp2100 schrieb:
Ähh.. nein? Auf den meisten unixoiden Systemen nicht, siehe:
http://de.wikipedia.org/wiki/64-Bit-Architektur#ProgrammiermodellIch hatte lediglich die Programmiermodelle mal verglichen und da gibt es nur Unterschiede zwischen int und long bei LP32 und LP64. Das sind dann nur 2 von 6 Modellen die ich gefunden habe. Die Verbreitung habe ich scheinbar nicht genau überprüft. LP64 wird ja wohl von den meisten Linux und Unix-Systemen verwendet. Deswegen hast du natürlich Rechte und ich ziehe meine Aussage zurück.
-
Wenn ich jetzt bsp eingebe
1 000 000 Sek
1.) 1 000 000 / 60 = 16666,666...
16 666 = Min; 1 000 000 % 60 = 40;
2.) 16 666 / 60 = 277,76...
277 = Std; und jetzt muss ich doch noch en Rest den ich habe sind ja noch Minuten also die .76... * 60 oder eben 16 666 % 60. Und diesen Wert noch den Min = 16 666 zuordnen oder ...
Ok ich glaube ich habe meinen Fehler erkannt!!
Den Wert 16 666 darf ich nicht als Min interpretieren, sondern ich muss hier Modulo 60 nehmen = Minuten! ... Die 16 666 wandle ich ja dann noch um in Stunden also wieder durch 60; 277 --> sind aber auch nicht die Stunden sondern dann durch 24 = 11,54 ---> Die Stunden sind dann 277%24 ...usw
So gesehen sind die ganzen if Verzweigungen unnötig.
Ich brauche gar keine! ...
Vielen Dank für die Hilfe
Lg
-
Ja. Oder auch:
`Tage = Sek / (3600 * 24).Stunden = (Sek - (Tage * 3600 * 24)) / 3600 = (Sek % (3600 * 24)) / 3600.
Minuten = (Sek - (Tage * 3600 * 24) - (Stunden * 3600)) / 60 = (Sek % 3600) / 60.
Sekunden = Sek - (Tage * 3600 * 24) - (Stunden * 3600) - (Minuten * 60) = Sek % 60.`
Das / bedeutet jeweils ganzzalige Division (der Rest wird ignoriert, es wird also abgerundet). Jetzt verstehst du bestimmt, warum sich hier Ganzzahlarithmetik (-> Integervariablen) anbieten.
Fließkommaarithmetik braucht man nur bei skalenübergreifenden (es kommen sehr kleine und sehr große Zahlen in der selben Rechnung vor) Rechnungen. Für alles andere nimmt man besser Ganzzahlen. Also auch z.B. bei Geldbeträgen lieber mit ints in Cent rechnen.
-
Yep danke vielen Dank
