Zeit



  • Hallo
    Was habe ich falsch gemacht das er mir nicht die Stunden anzeigt sondern nur die Minuten und Sekunden?

    [code]
    
        Int32 sekunden,minuten,stunden;
    
    	Console::Write("\nBitte geben sie die Sekunden ein: = ");
    	sekunden=Convert::ToInt32(Console::ReadLine());
    
    	stunden = minuten / 60;
    	minuten=minuten%60;
    	minuten=sekunden / 60;
    	sekunden=sekunden%60;
    	Console::WriteLine("\n Stunden {0} Minuten {1} Sekunden {2}  \n\n",stunden, minuten, sekunden);
    

    [/code]
    Vielen Dank im Voraus



  • minuten ist doch noch gar nicht initialisiert, wenn du damit schon rechnest... 😕



  • _matze schrieb:

    minuten ist doch noch gar nicht initialisiert, wenn du damit schon rechnest... 😕

    Hallo Matze
    Ich denke mal du meinst es so?

    [code]
    Int32 sekunden,minuten,stunden;
    	stunden = 0;
    	minuten = 0;
    
        Console::Write("\nBitte geben sie die Sekunden ein: = ");
    	sekunden=Convert::ToInt32(Console::ReadLine());
    
    	stunden = minuten / 60;
    	minuten = sekunden / 60;
    	sekunden = sekunden % 60;
    	Console::WriteLine("\n Stunden {0} Minuten {1} Sekunden {2} \n\n",stunden, minuten, sekunden);
    

    [/code]
    Da zeigt er mir genau das selbe wie vorher, warum zeigt er die Stunden nicht an?



  • Na du rechnest:

    stunden = minuten / 60;
    

    ohne das Minuten einen Wert besitzt.
    Das meinte _matze 😉

    Wundert mich das beim Rest was vernünftiges ausgegeben wird 🙂



  • ich988 schrieb:

    Na du rechnest:

    stunden = minuten / 60;
    

    ohne das Minuten einen Wert besitzt.
    Das meinte _matze 😉

    Wundert mich das beim Rest was vernünftiges ausgegeben wird 🙂

    Wenn ich beispielsweise 5000 Sekunden eingebe zeigt er mir Stunden 0
    Minuten 83 und Sekunden 20 wenn ich das zurück rechne sind es 5000 Sekunden.
    Warum muss Minuten einen Wert haben der soll doch errechnet werden und angezeigt werden was bei Minuten ja auch geht aber nicht bei Stunden warum nicht das möchte ich gerne wissen



  • Ach mist ich muss mich korrigieren 😃
    War heut Mittag grad im Tief 🤡 -> Der Rest muss natürlich richtig ausgegeben werden.Nur bei Stunden ist der Fehler.

    An der Stelle an der du die Stunden errechnest hat Minuten noch den Wert 0. 0/60 ergibt 0. Es passiert genau das was du eingegeben hast 😉
    Wenn du einen Wert haben willst muss du Minuten auch vorher einen zuweisen.



  • Simples Beispiel:

    int h,m,s,rest=3666;
    	h=rest/3600;
    	rest=rest%3600;
    	m=rest/60;
    	rest=rest%60;
    	s=rest;
    

    (sollte passen...)



  • _matze schrieb:

    Simples Beispiel:

    int h,m,s,rest=3666;
    	h=rest/3600;
    	rest=rest%3600;
    	m=rest/60;
    	rest=rest%60;
    	s=rest;
    

    (sollte passen...)

    Hallo matze
    Entschuldige es ging nicht schneller
    Du solltest mal ausprbieren was du geschrieben hast da geht nämlich garnichts.
    Wenn du mir nicht sagen kannst wie ich nach der ersten Teilung auf die verbleibenden Sekunden zugreifen kann, wirst du mir nicht helfen können.

    [code]
    stunden = sekunden / 3600;
    

    [/code]
    Trotzdem vielen Dank für deine Bemühungen



  • Doch, klar geht das! Kopier mal den ganzen Code hier in eine main:

    int h,m,s,rest=3661;
    	h=rest/3600;
    	rest=rest%3600;
    	m=rest/60;
    	rest=rest%60;
    	s=rest;
    
    	char str[256];
    	sprintf_s(str,256,"h: %d, m: %d, s: %d\n",h,m,s);
    	printf(str);
    	getchar();
    

    Du wirst sehen, dass er 1 Stunde (3600 sek), 1 Minute (60 sek) und 1 Sekunde (1 sek 😉 ) ausgibt. Und das klappt sogar auch mit anderen Werten! 😃

    Wenn du mir nicht sagen kannst wie ich nach der ersten Teilung auf die verbleibenden Sekunden zugreifen kann, wirst du mir nicht helfen können.

    Nach der ersten Teilung "Stunden=GesamtSekunden/3600" kommst du an die Restsekunden, indem du den Modulo-Operator ("%") einsetzt: "GesamtSekunden=GesamtSekunden % 3600". Das siehst du auch an meinem Beispiel.



  • _matze schrieb:

    Doch, klar geht das! Kopier mal den ganzen Code hier in eine main:

    int h,m,s,rest=3661;
    	h=rest/3600;
    	rest=rest%3600;
    	m=rest/60;
    	rest=rest%60;
    	s=rest;
    
    	char str[256];
    	sprintf_s(str,256,"h: %d, m: %d, s: %d\n",h,m,s);
    	printf(str);
    	getchar();
    

    Du wirst sehen, dass er 1 Stunde (3600 sek), 1 Minute (60 sek) und 1 Sekunde (1 sek 😉 ) ausgibt. Und das klappt sogar auch mit anderen Werten! 😃

    Wenn du mir nicht sagen kannst wie ich nach der ersten Teilung auf die verbleibenden Sekunden zugreifen kann, wirst du mir nicht helfen können.

    Nach der ersten Teilung "Stunden=GesamtSekunden/3600" kommst du an die Restsekunden, indem du den Modulo-Operator ("%") einsetzt: "GesamtSekunden=GesamtSekunden % 3600". Das siehst du auch an meinem Beispiel.

    Das was du geschrieben hast ist aber reines C und kein C++ und wir sind hier im C++/CLI. Meiner Meinung nach fehlt bei dir doch die Eingabe der Sekunden.
    Und das geht doch unter C mit scanf(%d, &sekunden);
    Ich erhalte bei deinem Programm die Fehlermeldungen
    Ich habe Visual Studio C++ 2005 Express

    [code]
     error C3861: "sprintf_s": Bezeichner wurde nicht gefunden.
     error C3861: "printf": Bezeichner wurde nicht gefunden.
     error C3861: "getchar": Bezeichner wurde nicht gefunden.
    

    [/code]
    Wenn ich es so unter C++/CLI schreibe zeigt mir die Stunden aber auch die kompletten Minuten an und die Sekunden
    [/cpp][code]
    Int32 stunden, minuten, sekunden;
    Console::Write("\nBitte geben sie die Sekunden ein: = ");
    sekunden=Convert::ToInt32(Console::ReadLine());
    stunden = sekunden / 3600;
    minuten = sekunden / 60;
    sekunden = sekunden % 60;
    Console::WriteLine("\n Stunden {0} Minuten {1} Sekunden {2} \n\n", stunden, minuten, sekunden);

    [/cpp][code]



  • Es ging ja auch nur um die grundsätzliche Vorgehensweise, daher habe ich die Eingabe mal weggelassen und den Wert fix vergeben. Welche Funktionen man zur Eingabe/Ausgabe benutzt, ist doch erstmal irrelevant. Und den Modulo-Operator gibts auch in C++/CLI! Tatsache ist, dass du mit deiner Rechnung

    stunden = sekunden / 3600; 
    minuten = sekunden / 60; 
    sekunden = sekunden % 60;
    

    nicht herausbekommst, dass x Sekunden = x Stunden, x Minuten und x Sekunden sind. Du berechnest, dass x Sekunden y volle Stunden enthalten, und in der nächsten Zeile dass x Sekunden (also immer noch die Gesamtanzahl) y volle Minuten enthalten. Das sind aber nicht die Restminuten, nachdem du die Stunden abgezogen hast (denn das passiert nirgendwo). Als Beispiel: Wenn du einen Wert von 3600 Sekunden (also 1 Stunde) hast, dann ist dein Ergebnis: 1 Stunde und 60 Minuten. Nicht 1 Stunde und 0 Minuten, wie es sein sollte. Halte dich an mein Beispiel (mit deiner Eingabe und Ausgabe), dann passt es. 🙂



  • Heinerich schrieb:

    _matze schrieb:

    Doch, klar geht das! Kopier mal den ganzen Code hier in eine main:

    int h,m,s,rest=3661;
    	h=rest/3600;
    	rest=rest%3600;
    	m=rest/60;
    	rest=rest%60;
    	s=rest;
    
    	char str[256];
    	sprintf_s(str,256,"h: %d, m: %d, s: %d\n",h,m,s);
    	printf(str);
    	getchar();
    

    Du wirst sehen, dass er 1 Stunde (3600 sek), 1 Minute (60 sek) und 1 Sekunde (1 sek 😉 ) ausgibt. Und das klappt sogar auch mit anderen Werten! 😃

    Wenn du mir nicht sagen kannst wie ich nach der ersten Teilung auf die verbleibenden Sekunden zugreifen kann, wirst du mir nicht helfen können.

    Nach der ersten Teilung "Stunden=GesamtSekunden/3600" kommst du an die Restsekunden, indem du den Modulo-Operator ("%") einsetzt: "GesamtSekunden=GesamtSekunden % 3600". Das siehst du auch an meinem Beispiel.

    Das was du geschrieben hast ist aber reines C und kein C++ und wir sind hier im C++/CLI. Meiner Meinung nach fehlt bei dir doch die Eingabe der Sekunden.
    Und das geht doch unter C mit scanf(%d, &sekunden);
    Ich erhalte bei deinem Programm die Fehlermeldungen
    Ich habe Visual Studio C++ 2005 Express

    [code]
     error C3861: "sprintf_s": Bezeichner wurde nicht gefunden.
     error C3861: "printf": Bezeichner wurde nicht gefunden.
     error C3861: "getchar": Bezeichner wurde nicht gefunden.
    

    [/code]
    Wenn ich es so unter C++/CLI schreibe zeigt mir die Stunden aber auch die kompletten Minuten an und die Sekunden
    [/cpp][code]
    Int32 stunden, minuten, sekunden;
    Console::Write("\nBitte geben sie die Sekunden ein: = ");
    sekunden=Convert::ToInt32(Console::ReadLine());
    stunden = sekunden / 3600;
    minuten = sekunden / 60;
    sekunden = sekunden % 60;
    Console::WriteLine("\n Stunden {0} Minuten {1} Sekunden {2} \n\n", stunden, minuten, sekunden);

    [/cpp][code]

    Hallo matze
    So funktioniert es in C++/CLI
    [cpp][code]
    stunden = eingabe / 3600;
    sekunden = eingabe - stunden * 3600;
    minuten = sekunden / 60;
    sekunden = sekunden % 60;
    [/cpp][/code]
    Vielen Dank für deine Bemühungen



  • Heinerich schrieb:

    sekunden = eingabe - stunden * 3600;
    

    Diese Zeile ist nicht ganz so schön. Das kannst du ebenfalls mit dem Modulo-Operator machen (hast du bei den Sekunden ja auch getan). Na ja, hauptsache es läuft! 😉

    Heinerich schrieb:

    Vielen Dank für deine Bemühungen

    Gern geschehen.

    P.S.: Sieh dir die Sache mit den Code-Tags am besten noch mal an. 😉


Anmelden zum Antworten