For Schleife bitte um Hilfe



  • Ich erkläre dir mal kurz, wie das hier läuft:

    Da das offenbar eine Hausaufgabe ist und du nichts selber machst, wird dir gleich jemand eine Lösung mit Templates und Makros präsentieren, die du (und dein Lehrer) nicht im Ansatz verstehen.

    Sobald du aber etwas Eingeninitiative zeigst, egal wie schlecht der Code ist, stehen die Chancen gut, dass das einer verbessert und du deine Lösung -ohne wirklich was selber zu machen- bekommst.

    Also zeig mal irgendwas.



  • Jockelx schrieb:

    egal wie schlecht der Code ist,

    Eine Schleife die rückwärts zählt und die Zählvariable ausgibt, sollte es schon sein.

    Und mit cout . Ist ja C++



  • So etwa. Siehe SeppJ's Antwort.

    #include <stdio.h>
    
    unsigned long cnt;
    
    #define SEC 60
    #define HOUR 24
    
    void tick()
    {
        cnt++;
        printf ("days:%d hour:%d min:%d sec:%d\n", cnt/SEC/HOUR/HOUR, (cnt/SEC/HOUR)%HOUR, (cnt/SEC)%HOUR, cnt%SEC);
    }
    
    void main()
    {
        for(;;)
            tick();
    }
    


  • Das ist jetzt der code von dir für die gegebene Aufgabenstellung? Das sieht eher aus wie ein Beispiel aus dem Unterricht, dass auch noch falsch ist (24min pro Stunde). Hast du nicht wenigstens einen Ansatz wie man das auf das geforderte umbauen kann (zählt runter statt hoch, keine Anzeige von Stunden und tagen). Ein bisschen Einsatz musst du schon zeigen...



  • sebi707 schrieb:

    Das ist jetzt der code von dir für die gegebene Aufgabenstellung? Das sieht eher aus wie ein Beispiel aus dem Unterricht, dass auch noch falsch ist (24min pro Stunde). Hast du nicht wenigstens einen Ansatz wie man das auf das geforderte umbauen kann (zählt runter statt hoch, keine Anzeige von Stunden und tagen). Ein bisschen Einsatz musst du schon zeigen...

    Ist nur ne Demo mit der der OP rumfrickeln kann.
    Wichtig ist das Verständnis.



  • Hier mal eine C++11 (14?) Lösung.
    Einfacher geht es nicht, die Denkarbeit (das Umrechnen) macht die coole chrono-lib

    #include<chrono>
    #include<iostream>
    #include<thread>
    
    using namespace std;
    
    int main()
    {
    	constexpr chrono::seconds dauer = 120s;
    
    	for( auto i = dauer; i >= 0s; i-- )
    	{
    		chrono::minutes m = chrono::duration_cast<chrono::minutes>( i );
    		chrono::seconds s = i - m;
    
    		cout << "TIMER: " << m.count() << ':' << s.count() << endl;
    		std::this_thread::sleep_for( 1s );
    	}
    }
    

    Mfg



  • Leprechaun schrieb:

    Ist nur ne Demo mit der der OP rumfrickeln kann.
    Wichtig ist das Verständnis.

    Ach sorry. Hab dich für den TO gehalten...

    shft schrieb:

    Hier mal eine C++11 (14?) Lösung.

    C++14, da kamen die Literals erst dazu. Außerdem fehlt noch ein using namespace std::chrono_literals; .



  • sebi707 schrieb:

    Außerdem fehlt noch ein using namespace std::chrono_literals; .

    OK fehlt doch nicht dank inline Namespaces...



  • Wenns nur 1ne For Schleife ist kann sie mir einer zeigen ? Da ich keinerlei Ideene dazu habe und meine verusche immer fehlschlagen ...

    Wenns nur eine ist ?

    Eine Schleife kann ich machen aber dann zählt es ja die sekunden runter aber wie sage ich der for schleife dass sie die Minute um 1 veringern soll wenn die sekunde bei 0 ist ? und wie sage ich der Schleife dass wenn die Minute verringert wurde und die Sekunde auf 00 war dass sie wieder bei 59 anfangen soll für die nächste minute ?

    das sind fragen die ich mir nicht beantworten kann.

    mfg 🙂



  • Lesen zu können ist oft recht hilfreich.
    SeppJ und spätestens DirkB haben doch schon alles gesagt.
    Das war schon fast spoonfeeding (fällt mir auf Deutsch jetzt keine vernünftige Übersetzung ein).

    EDIT:
    Und vergiß Leprechauns Vorschlag. Nicht gut.
    Angefangen mit einer nicht initialisierten globalen Variable, usw. usf.



  • zantes schrieb:

    und wie sage ich der Schleife dass wenn die Minute verringert wurde und die Sekunde auf 00 war dass sie wieder bei 59 anfangen soll für die nächste minute ?

    Hättest du weniger Probleme, wenn du Zentimeter zählst und Meter ausgeben sollst?

    EOP schrieb:

    ... mit einer nicht initialisierten globalen Variable

    wie soll das denn gehen?
    Nur weil er den Wert nicht hinschreibt?



  • Irgendwie fuhlfüich mich ignoriert...



  • EOP schrieb:

    Und vergiß Leprechauns Vorschlag. Nicht gut.
    Angefangen mit einer nicht initialisierten globalen Variable, usw. usf.

    Das ist, wie gesagt, bloß ein Beispiel. Man betrachte es als Pseudocode.
    Werden globale Variablen nicht automatisch auf 0 gesetzt, oder ist das nur bei Java so?



  • Leprechaun schrieb:

    Werden globale Variablen nicht automatisch auf 0 gesetzt, oder ist das nur bei Java so?

    Ne ist auch in C++ so. Allerdings sind da wie gesagt noch andere Macken drin. Erstmal ist printf C und kein C++. Und ich hätte SEC nicht doppelt benutzt sondern noch eine Variable (defines sind auch so C mäßig) für Minuten eingeführt. Dann wäre dir wohl auch nicht der Fehler unterlaufen, dass bei dir eine Stunde 24 Minuten hat. So sieht es etwas moderner aus:

    const int SEC = 60;
    const int MIN = 60;
    const int HOUR = 24;
    
    //...
    
    cout << "days: " << cnt/SEC/MIN/HOUR << " hour: " << (cnt/SEC/MIN)%HOUR
         << " min: " << (cnt/SEC)%MIN << " sec: " << cnt%SEC << endl;
    


  • sebi707 schrieb:

    Erstmal ist printf C und kein C++.

    Weiß ich, aber mein Compiler zumindest frisst beides. Außerdem finde ich persönlich printf einfach schöner als cout.



  • Leprechaun schrieb:

    sebi707 schrieb:

    Erstmal ist printf C und kein C++.

    Weiß ich, aber mein Compiler zumindest frisst beides.

    Was falsch ist. In C++ ist der Header <cstdio> und printf ist in namespace std.
    Desweiteren sollten, wie angemerkt, die Makros durch Konstanten ersetzt werden, und das Design mit der globalen Variable ist auch nicht gerade schön.
    Und void main() ist falsch, der return type ist int. Alles andere ist falsch, aktivier mal Compiler Warnungen, dann sagt er dir das auch.



  • Nathan schrieb:

    Was falsch ist.

    Egal, tut aber das Gewünschte. Das reicht mir.


  • Mod

    Leprechaun schrieb:

    Nathan schrieb:

    Was falsch ist.

    Egal, tut aber das Gewünschte. Das reicht mir.

    Das mag dir reichen, aber es ist ein schlechtes Vorbild für Anfänger.



  • SeppJ schrieb:

    Leprechaun schrieb:

    Nathan schrieb:

    Was falsch ist.

    Egal, tut aber das Gewünschte. Das reicht mir.

    Das mag dir reichen, aber es ist ein schlechtes Vorbild für Anfänger.

    Da hast du natürlich Recht.



  • SeppJ schrieb:

    ]Das mag dir reichen, aber es ist ein schlechtes Vorbild für Anfänger.

    Ist mir natürlich klar, daß mein code auch nicht von allen Leuten gemocht wird.
    Ist mir aber ziemlich egal - meine Antworten sind immer situationsbezogen.


Anmelden zum Antworten