Uhrzeiten addieren (mit Modulo)



  • Hallo Leute,

    ich soll folgende Aufgabe lösen:

    Erstellen Sie ein C-Programm, das zwei Zeiten addiert und die Summe im Zeitformat
    tage stunden minuten sekunden
    ausgibt.
    Die zu addierenden Zeiten setzen Sie im Programm in den Konstanten std1, std2, min1, min2, sek1 und sek2
    Hinweis: Rechnen Sie auf der Basis von Sekunden!
    Ausgabe für 5 Std, 59 Min, 39 Sek sowie 7 Std, 47 Min, 52 Sek:
    Summe der Zeiten ist: 0 Tag(e) 13 Std 47 Min 31 Sek
    Ausgabe für 123 Std, 59 Min, 39 Sek sowie 12 Std, 44 Min, 34 Sek
    Summe der Zeiten ist: 5 Tag(e) 16 Std 44 Min 13 Sek

    Hier meine Lösungsvorschlag:

    int main(int argc, char** argv) {
    
        double std1=5, std2=7, min1=59, min2=47, sek1=39, sek2=52;
        int min, sek, std;
    
        std1= std1 * 60 * 60; 
        std2= std2 * 60 * 60;
        min1= min1 * 60;
        min2= min2 * 60;  
    
        std = ((std1 + std2) / 60) / 60 ;
        min = (min1 + min2) / 60;
        sek = (sek1 + sek2); 
    
        sek = sek % 60; 
        min = min % 60;
        std = std % 60;
    
        printf("\n%.2i std",std);
        printf("\n%.2i min",min);
        printf("\n%.2i sek",sek);
    

    Mein Problem ist allerdings, dass mir so die Überträge fehlen.
    Es soll ja: 13 Std 47 Min 31 Sek rauskommen und somit fehlt mir 1 Stunde und 1 minute. Hat jemand einen Vorschlag wie ich die Überträge sinnvoll in meinen Code einbaue?

    Oder vielleicht einen anderen Lösungsansatz. Es ist ja als Tipp gegeben, dass man auf Basis von Sekunden rechnen soll...



  • 1. Nimm dafür nicht den Datentyp double, sondern int!
    2. Du rechnest doch schon in Sekunden um - bilde erst die Gesamtsumme in Sekunden und ermittle dann, wieviel Tage, Stunden, Minuten, Sekunden das sind.



  • Mein Problem ist allerdings, dass mir so die Überträge fehlen.

    Ich finde, Du hast zu wenig eigene Variablen erfunden.

    int main(int argc, char** argv) {
    
        int std1=5, std2=7, min1=59, min2=47, sek1=39, sek2=52;
        int sum1, sum2, sum3;
        int std3, min3, sek3;
    
        sum1= std1 * 60 * 60 + min1 * 60 + sek1; 
        sum2= std2 * 60 * 60 + min2 * 60 + sek2; 
    
        sum3=sum2-sum1;
    
        std3=sum3/60/60;//der war leicht
        min3=?;//dein rätsel
        sec3=sum3%60;//auch leicht
    
        printf("\n%.2i std",std3);
        printf("\n%.2i min",min3);
        printf("\n%.2i sek",sek3);
    


  • Danke für den Vorschlag!
    Aber sollte sum2 mal kleiner als sum1 sein erhalte ich negative Zahlen raus. Das ist ja auch nicht so richtig...

    volkard schrieb:

    int main(int argc, char** argv) {
    
        int std1=5, std2=7, min1=59, min2=47, sek1=39, sek2=52;
        int sum1, sum2, sum3;
        int std3, min3, sek3;
        
        
        sum1= std1 * 60 * 60 + min1 * 60 + sek1; 
        sum2= std2 * 60 * 60 + min2 * 60 + sek2; 
    
        sum3=sum2-sum1;
                
        std3=sum3/60/60;//der war leicht
        min3=?;//dein rätsel
        sec3=sum3%60;//auch leicht
    
        printf("\n%.2i std",std3);
        printf("\n%.2i min",min3);
        printf("\n%.2i sek",sek3);
    


  • Solltest Du denn nicht addieren?



  • Ja genau. Aber sum2 ergibt sich ja aus der zweiten Zeit. Wäre diese kleiner als die erste Zeit würde ja für sum3 etwas negatives rauskommen.



  • Belli schrieb:

    Solltest Du denn nicht addieren?

    Uups, da hab ich mich vertan.



  • Da wir noch keine Bedingungen in der Vorlesung hatten, habe ich es wie folgt gelöst:

    int main(int argc, char** argv) {
    
        int std1=5, std2=7, min1=59, min2=47, sek1=39, sek2=52;
        int gesamt, tag, std, min, sek, zwischensumme;
    
        std1= std1 * 60 * 60; 
        std2= std2 * 60 * 60;
        min1= min1 * 60;
        min2= min2 * 60;  
    
        gesamt = std1 + std2 + min1 + min2 + sek1 + sek2;
    
        tag = gesamt / 3600 / 24;
        zwischensumme = gesamt-(tag*24*3600);
        std = zwischensumme/3600;
        min = (zwischensumme - (std * 3600)) / 60;
        sek = (sek1+sek2) % 60;
    
        printf("\n%i tag(e)",tag);
        printf("\n%.2i std",std);
        printf("\n%.2i min",min);
        printf("\n%.2i sek",sek);
    
        return (EXIT_SUCCESS);
    }
    

Anmelden zum Antworten