Berechnete Zeit exakt ausgeben (hh:mm:ss)



  • Hi Ihrs,

    ich habe da ein Problem mit der Zeitausgabe in meinem Programm. Mein Programm berechnet die Dauer der Downloadzeit für bestimmte MB Größen. Ich möchte ganz gern meine Zeit exakt ausgeben, in der Form hh🇲🇲ss, schaffe es aber leider nicht. Derzeitig gibt mir das Programm nur die Zeit in Minuten aus.

    Nun zu meiner Frage, wie müsste ich die Funktion gestallten um mir meine berechnete Zeit exakt ausgeben lassen zu können?
    Denn so wie es derzeitig ist, nur in Minuten, ist es doch sehr "primitiv".

    int main()
    {
        char auswahl, wahljn;
    
    for ( ;; )
    
        {
         printf( "\n\n Das Programm berechnet, wie lange es dauert, um Daten aus\n"
    			"dem Netz zu ziehen"
                "\nMenue: \n"
    			"\n 1 - Mit Analog-(M)odem"
    			"\n 2 - Mit (I)SDN        "
                "\n 3 - Mit DSL 1000  "
                "\n 4 - Mit DSL 2000  "
                "\n 5 - Mit DSL 6000  "
                "\n 6 - Mit DSL 16000 "
    			"\n 7 - (E)nde            "
                "\n--------------------------"
                "\n Waehl schon ne Uebertragungsart aus: " );
        cin >> auswahl;
    
    	// Je nach Auswahl
    	switch (auswahl)
         {
          case 'M':				// Modem
    	  case '1':             ausgabe(int (getMB()*10000/56.1/60));
                                Hinweis();
    							break;
    (...)
    

    Ab da geht das Programm dann weiter mit den anderen Fällen.

    Ich habe quasi einen Fubktion ausgabe()-->für die Ausgabe

    int ausgabe (int dauer)
    {
      cout << "Es dauert "<< dauer <<"min"<<endl;
    }
    

    und eine Funktion getMB()--> für die Eingabe der Dateigröße

    int getMB( )
    {
      int dbMB;
    
      printf( "\n Dateigroesse [MB] = " );
      cin >> dbMB;
      return dbMB;
    }
    

    Könnt ihr mir nen Tipp geben?

    P.S.Super Forum hier, vorallem das man auch als "externer" nen Beitrag verfassen kann. Wirklich super Sache!



  • Du kannst deinen Wert mit % (Modulo) und / (Division) in richtige Portionen zerlegen und dann ausgeben.

    (btw solltest du die Zeit lieber in Sekunden ausrechnen - durch die int-Rundung verlierst du sonst Informationen)



  • Hi CStoll,

    danke erstmal für deine Antwort, ich werde es mal so versuchen.
    Ich hatte da zwar noch was aus der Vergangenheit gefunden, aber bei dieser Unformung steige ich absolut nicht durch. Aber ich poste den Quellcode mal, vielleicht steigt ja einer von euch da durch!

    class zeit
    { private: unsigned int Stunden, Minuten;
      public:
        zeit(int s, int m) {int rest1,rest2, k=60;                     //Konstructor
                            if ((s>0)&&(m>0)){Stunden=s; Minuten=m;}
                            else {Stunden=0; Minuten=0;}
                            if (m>59)
                           {rest1=int(fmod(m,k));
                            rest2=(m-rest1)/k; s=s+rest2;       //Min in h umrechnen
                            m=rest1;Stunden=s; Minuten=m;}}
       ~zeit() {Stunden=0; Minuten=0;}                                  //Destructor
        void ausgabe()
                    {cout<<"\n\t\t Stunden = "<<Stunden;
                     if (Minuten>1 ||Minuten==0) cout<<"\n\t\t Minuten = "<<Minuten;
                     if (Minuten==1) cout<<"\n\t\t Minute  = "<<Minuten;}
    
    };
    

    Gruß,

    vR



  • Du solltest das Problem lieber selbst lösen wenn du was wirklich lernen willst.

    Eine Stunde sind 3600 Sekunden
    Eine Minute sind 60 Sekunden

    4000 Sekunden / 3600 Sekunden ergibt mit ganzzahligem Ergebnis: 1 --> ErgebnisStunden = 1

    4000 Sekunden - (ErgebnisStunden * 3600 Sekunden) = 400 Sekunden

    400 Sekunden / 60 Sekunden ergibt mit ganzzahligem Ergebnis: 6 --> ErgebnisMinuten = 6

    Wie man die verbleibenden Sekunden ausrechnet müsste klar sein.
    Nutze ganzzahlige Datentypen und es sollte kein Problem sein dies zu implementieren.



  • Hi Senfgurke,

    das Problem ist ja (bzw. das schlimme), dass ich das mal vor 3 Jahren selber eine Zeitausgabe geproggt habe, in unserer Übung Grundlagen der Informatik für Ingenieure, dort wurden dann Zeiten addiert und multipliziert.
    Da nun mein jüngerer Bruder zu mir kam, versuchte ich es ihm zu programmieren, da die in der Schule am Programmieren sind.

    Da ich aber im Hauptstudium absolut nix mehr programmiert habe, sind meine Kenntnisse doch extrem gegen Null gegangen. Rechnerisch ist´s kein Problem mit Rest und so, aber dies dann in einem C-Code zu implementieren ist dann schon wieder ne andere Sache. Ich will ja schließlich kein Programmierer werden/sein. Finde es aber dennoch schade, dass meine Kenntnisse so enorm verfallen sind und daher packte mich der Ehrgeiz!

    Für meinen Bruder reicht ja die Angabe in Minuten, aber ich selber wollte es halt als exakte Ausgabe haben.

    Gruß,

    vR



  • Hi,

    hab´s mit einfacher Algebra gelöst, ist zwar nicht schön aber zielerfüllend.

    Das mit Konstructor und Destructor werde ich mir wohl am we noch mal zu Gemüte führen, muss doch wieder abrufbar sein aus´m Hirn, dass kann doch kein Opfer der Alkoholexzesse sein! 😉

    int ausgabe (int dauer)
    {
    
      int Zeit,h,m,mzw,s;
    
        h=dauer/3600;
        mzw=dauer-h*3600;
        m=mzw/60;
        s=dauer-h*3600-m*60;
    
        cout<<"\n\n  ================================================="<<endl;
        cout<<"  \tEs dauert dauert: "<<h<<"[h]::"<< m<<"[min]::"<< s<<"[s]"<<endl;
        cout<<"  ================================================="<<endl;
    
    }
    

    Special Thanks noch mal an Senfgurke 👍


Anmelden zum Antworten