Umrechnung Sekunden in Stunden

  • VB.NET

Es gibt 40 Antworten in diesem Thema. Der letzte Beitrag () ist von VBstudent.

    Umrechnung Sekunden in Stunden

    Hallo zusammen,

    ich muss gerade eine kleine Konsolenanwendung schreiben. Aufgabenstellung besagt, dass der Nutzer einen Wert in Sekunden in die Konsole eintragen soll und die Anwendung die eingegebenen Sekunden in Stunden, Minuten und Sekunden wieder ausgeben soll. Beispiel: Der Nutzer gibt 10500 Sekunden ein, als Ergebnis soll rauskommen 2 Stunden, 55 Minuten, 0 Sekunden.

    Folgenden Code habe ich hierzu geschrieben:

    Imports System.Console
    Module abc

    Sub Main()
    Dim z1 as Long
    Dim Stunde, Minute, Sekunde as Long
    Write("Geben Sie eine Zeitspanne in Sekunden ein: ")
    z1 = Readline()
    Stunde = z1 / 3600
    Minute = (z1 mod 3600) / 60
    Sekunde = (z1 mod 3600) mod 60
    Writeline("Das entspricht einer Zeit von: {0} Stunden, {1} Minuten, {2} Sekunden", Stunde, Minute, Sekunde)

    End Sub
    End Module


    Die Minuten und Sekunden werden bei Ausführung des Programmes korrekt ermittelt. Lediglich die Stunden werden mit dem Wert 3 anstatt 2 ausgegeben. Die Division von 10500 / 3600 würde als Ergebnis 2,916666 ergeben.

    Wer kann mir sagen was an dem Code falsch ist? ?(

    Vielen Dank für konstruktive Lösungsvorschläge....

    bla schrieb:

    Du darfst Stunde, Minute, Sekunde nicht als "Long" deklarieren, sondern als "Double", damit du nicht nur ganze Zahlen bekommst. Double erlaubt quasi Nachkommastellen.
    Vielen Dank für die schnelle Antwort. Ich hab mich etwas ungenau ausgedrückt: Das Ergebnis soll immer in ganzen Zahlen ohne Nachkommastelle angezeigt werden. Das Ergebnis 2,916666 soll also als "2" angezeigt werden, ohne den Rest hinter dem Komma. Anscheinend rundet VB die Zahl aber immer auf 3 auf.... Welch Anweisung führt dazu, dass die Zahlen hinter dem Komma einfach "vergessen" werden?

    Bandog29 schrieb:

    Welch Anweisung führt dazu, dass die Zahlen hinter dem Komma einfach "vergessen" werden?

    Dein Ansatz ist ... FALSCH.
    .Net hat eine Umrechungsklasse bereits eingebaut: Das TimeSpan Objekt!

    Wenn du unbedingt den "schweren" Weg gehen willst (oder musst, weil dein Lehrer keine Fantasie/Ahnung hat), dann solltest du zumindest mal den Unterschied zwischen "/" und "\" lernen ...

    picoflop schrieb:

    Bandog29 schrieb:

    Welch Anweisung führt dazu, dass die Zahlen hinter dem Komma einfach "vergessen" werden?

    Dein Ansatz ist ... FALSCH.
    .Net hat eine Umrechungsklasse bereits eingebaut: Das TimeSpan Objekt!

    Wenn du unbedingt den "schweren" Weg gehen willst (oder musst, weil dein Lehrer keine Fantasie/Ahnung hat), dann solltest du zumindest mal den Unterschied zwischen "/" und "\" lernen ...

    :whistling: Das wars... Zukünftig werd ich das wohl nicht mehr verwechseln.... Danke für die schnelle Hilfe!

    Bandog29 schrieb:

    Zukünftig werd ich das wohl nicht mehr verwechseln....

    Bei sowas (Datentypen auseinanderhalten) ist Option Strict On! sehr hilfreich.
    (nur für den fall, dassde auch weiterhin proggen willst)

    Bandog29 schrieb:

    Das wars...

    vermutlich meinst du das mitt "/" und "\", aber das wars ja grad nicht (wie picoflop schon sagte). Deine Anforderung - mit Zeiten rechnen - ist durch die TimeSpan-Struktur bereits vom Framework abgedeckt (vom Feinsten!), unds ist absolut schlechter Stil, wenn man das Rad neu erfindet.

    Aber vmtl. weiß dein Lehrer das auch nicht. Frag ihn mal (nach Option Strict On! und nach System.Timespan).

    die Gedanken über Sinn und Unsinn

    Hallo Zusammen!
    Ich finde es immer wieder faszinierend, wie sich einige - ohne jemanden zu nahe treten zu wollen - den Kopf zerbrechen, was der Aufgabenstellende sich dabei gedacht hat.
    Es ist doch völlig EGAL, denn den Hilfesuchenden interessiert das nicht!
    Ist es denn so schwer einfach auf die Frage zu antworten?
    Sicher gibt es Funktionen in denen dies alles schon hinreichend erarbeitet wurde, doch hier soll jemand etwas lernen. Hier geht es um die Ganzzahl- und ModuloDivision und nicht darum, dass sich schon jemand den Kopf über die Umrechnung der Sekunden in Stunden, Minuten, Tagen usw. zerbrochen hat.

    Alles in allem wurde die Frage zwar beantwortet, aber für einen Neuling ist es schwer die richtigen Antworten zu finden.
    Ich würde mir wünschen, wenn die Antwortenden sich mehr auf die Fragen konzentrieren würden :!:
    Gruß & ...
    Lächle heut, morgen wird's schlimmer !!!

    Buch lesen | Bitte VB Tags benutzen - was ist damit gemeint? |

    dolce schrieb:

    Ich finde es immer wieder faszinierend, wie sich einige - ohne jemanden zu nahe treten zu wollen - den Kopf zerbrechen, was der Aufgabenstellende sich dabei gedacht hat.

    Man braucht nicht orakeln, es reicht lesen:
    Aufgabenstellung besagt, dass der Nutzer einen Wert in Sekunden in die Konsole
    eintragen soll und die Anwendung die eingegebenen Sekunden in
    Stunden, Minuten und Sekunden wieder ausgeben soll.

    In Bezug auf die gegebene Aufgabenstellung ist das TimeSpan Objekt die korrekte und vollständige Lösung. Das Orakeln ist nur erforderlich, wenn man zu ergründen versucht, warum der TE einen viel elementareren Ansatz wählt. Kann sich offensichtlich nur um eine nicht genannte zur Aufgabenstellung gehörende Vorgabe handeln?

    WENN der TE fragen würde:
    Ich dividiere die Ganzzahl 3 durch 2 und bekomme 1.5, es soll aber 1 rauskommen, DANN wäre die korrekt und vollständige Antwort:
    Benutze die Ganzzahldivision "\"

    dolce schrieb:

    Es ist doch völlig EGAL, denn den Hilfesuchenden interessiert das nicht!
    Ist es denn so schwer einfach auf die Frage zu antworten?
    Sicher gibt es Funktionen in denen dies alles schon hinreichend erarbeitet wurde, doch hier soll jemand etwas lernen. Hier geht es um die Ganzzahl- und ModuloDivision und nicht darum, dass sich schon jemand den Kopf über die Umrechnung der Sekunden in Stunden, Minuten, Tagen usw. zerbrochen hat.

    Alles in allem wurde die Frage zwar beantwortet, aber für einen Neuling ist es schwer die richtigen Antworten zu finden.
    Ich würde mir wünschen, wenn die Antwortenden sich mehr auf die Fragen konzentrieren würden

    spannendes Thema.

    Problem ist: Auf eine Frage gibt es häufig mehrere richtige Antworten. Und manche strenggenommen richtige Antwort ist von einem anneren Standpunkt aus gesehen richtig falsch.

    Wenn einer auffm Holzweg ist, und kommt iwann nicht mehr weiter, und fragt dann irgendein schrulliges Detail-Problem an.

    Was ist dann die richtige Antwort: das Detail-Problem zu lösen, und noch ein bischen weiter auffm Holzweg, oder den richtigen Weg aufzeigen - was seine Frage ühaupt nicht zu beantworten scheint?

    Gute Antworten auf Holzweg-Fragen gehen scheinbar gar nicht auf die Frage ein, und von der Anforderung zum Umdenken sind die meisten Fragesteller schnell überfordert - viele reagieren auch genervt.
    Aber nütztjanix - vom Holzweg muß man runter - früher oder später kommt jeder dahinter, und je früher desto besser.
    Spoiler anzeigen

    ErfinderDesRades schrieb:

    dolce schrieb:

    Es ist doch völlig EGAL, denn den Hilfesuchenden interessiert das nicht!
    Ist es denn so schwer einfach auf die Frage zu antworten?
    Sicher gibt es Funktionen in denen dies alles schon hinreichend erarbeitet wurde, doch hier soll jemand etwas lernen. Hier geht es um die Ganzzahl- und ModuloDivision und nicht darum, dass sich schon jemand den Kopf über die Umrechnung der Sekunden in Stunden, Minuten, Tagen usw. zerbrochen hat.

    Alles in allem wurde die Frage zwar beantwortet, aber für einen Neuling ist es schwer die richtigen Antworten zu finden.
    Ich würde mir wünschen, wenn die Antwortenden sich mehr auf die Fragen konzentrieren würden

    spannendes Thema.

    Problem ist: Auf eine Frage gibt es häufig mehrere richtige Antworten. Und manche strenggenommen richtige Antwort ist von einem anneren Standpunkt aus gesehen richtig falsch.

    Wenn einer auffm Holzweg ist, und kommt iwann nicht mehr weiter, und fragt dann irgendein schrulliges Detail-Problem an.

    Was ist dann die richtige Antwort: das Detail-Problem zu lösen, und noch ein bischen weiter auffm Holzweg, oder den richtigen Weg aufzeigen - was seine Frage ühaupt nicht zu beantworten scheint?

    Gute Antworten auf Holzweg-Fragen gehen scheinbar gar nicht auf die Frage ein, und von der Anforderung zum Umdenken sind die meisten Fragesteller schnell überfordert - viele reagieren auch genervt.
    Aber nütztjanix - vom Holzweg muß man runter - früher oder später kommt jeder dahinter, und je früher desto besser.



    Es ist schon richtig, hier kann man viel diskutieren & ich muss zugeben, dass man als Fragensteller mit der Frage ansich schnell überfordert ist: Wie bringe ich mein Problem jetzt der community bei? Dies ist meist sehr schwierig, denn ich kenne ja mein Vorhaben und das Ziel dabei. Genau :D mein schrulliges DetailProblem.

    Mein Standpunkt: Ich wusste wahrscheinlich mehr als ich die Frage sah, denn ich hatte in meinem VB-Kurs dieselbe Aufgabe & konnte nun :whistling: klugscheißerisch :S antworten, dass es um die Divisionen geht ...

    Nun gut, Euch noch nen angenehmen
    Gruß & ...
    Lächle heut, morgen wird's schlimmer !!!

    Buch lesen | Bitte VB Tags benutzen - was ist damit gemeint? |

    Memo schrieb:

    @ErfinderDesRades: Man muss nicht unbedingt Option Strict On einschalten, ich hätte es vielleicht 2-mal gebrahct, aber dann nie wieder - ich finde es meistens nur lästig


    naja - ich stoße immer wieder auf Beispiele, wos einem 'ne Menge Sucherei erspart hätte.
    Wie zB. dieser Thread - Strict On hätte den Unterschied zw. "\" und "/" bemerkt.

    Auch erzwingt Strict On, dass man die Datentypen, die man benutzt, auch kennenlernt. Und es verleitet dazu, so zu programmieren, dass die Typisierung für einen arbeitet, nicht gegen einen. Dann ist das auch ühaupt nicht lästig - im gegenteil.
    Der Code wird dadurch teilw. sogar kürzer, vor allem aber klarer.
    Und performanter isses ausserdem.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    ErfinderDesRades schrieb:

    unds ist absolut schlechter Stil, wenn man das Rad neu erfindet.

    Das sagt der Erfinder des Rades^^.

    Meine Meinung dazu ist:
    "Du kannst das so und so machen *Fragestellung erklären*, aber Du sparst Dir einen Haufen Arbeit wenn Du das vorgefertigte nimmst *TimeSpan erklären*"

    Also kurz: Man kann auch beides erklären und den TE wählen lassen was er machen will.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    Memo schrieb:

    Hmm. Weil ich immer Ctype einsetzen muss, um eine Funktion aufzurufen?

    wie gesagt: nur wenn du die Datentypen auch kennenlernen und für dich arbeiten lassen willst. Wenn du genauso weiterschlampern willst, und Strings und Zahlen und Chars und Zeiten unüberlegt durcheinanderwerfen - im Vertrauen, dass die Typ-Umwandlungen, die der Compiler vornimmt schon iwie passen werden - dann isses ja eigentlich auch kein Strict On - coden.
    Weil jeder Cast und CType setzt im einzelnen die Typüberprüfung des Compilers ausser Kraft, und wenn du statt der Strict-Off-general-aussetzung jede Schlamper-Stelle explizit ausser Kraft setzt, dann hast du nur insofern etwas gewonnen, dass sichtbar ist, wo Datentypen nicht zueinander passen.


    Memo schrieb:

    Und performanter isses ausserdem.
    Das musst du mir genauer erklären ^^
    Naja, jede Typumwandlung ruft intern mehr oder weniger komplexe Methoden auf.
    Keine ahnung, was im einzelnen, aber einfach mal einen Integer nach String und zurück:

    VB.NET-Quellcode

    1. Strict Off
    2. Dim dbl = 9.1234567
    3. Dim s As String = dbl
    4. dbl += s
    Das ist schon ein Viieelfaches, da die ganzen Stellen aussm double in einen String zu puhlen, unter Beachtung der aktuellen Kultureinstellungen.
    Und die Rück-Umwandlung ebenso. Hast du mal die Anzahl der Kommastellen eines Doubles berechnet oder sowas? Ähnlich komplex dürfte auch das parsen eines Strings sein.

    Ok - vmtl. merkt man den Performance-Unterschied garnet, weils nicht soo drauf ankommt, ob man einzelne Zuweisungen durch Beachtung der Datentypen vlt. ums 100fache beschleunigen kann. Aber es ist einfach ganz unnötig.

    ErfinderDesRades schrieb:

    Wenn du genauso weiterschlampern willst, und Strings und Zahlen und Chars und Zeiten unüberlegt durcheinanderwerfen

    Hat doch niemand gesagt, dass ich das tu. :pinch:

    Ich halte mich meistens an alle datentypen - einfach weils ein Vorteil ist, aber manchmal brauch' ich eben eine Konbentierung - und ich werde nicht die ganze zeit schreiben Ctype(1,String) wenn ich WriteAllText aufrufe. Und da erstell ich nicht extra irgend einen Stream :huh:
    Zum Beispiel WriteAllText: Da gibt es auch die Möglichkeit 1.ToString oder direkt "1" zu schreiben. Nur als Beispiel.
    Man kann sich viele Konvertierungen sparen, in dem man z.B. anstelle einer TextBox gleich ein Numericupdown verwendet. Decimal und Integer sind zwar immer noch was anderes aber ich denke mal es ist einfacher Decimal in Integer umzuwandeln als String.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils