Zwei Aktionen mit einer Eingabe



  • Hallo
    Ich bin C-Anfänger und habe folgende Frage. Ich will eine positive Int Zahl eingeben und diese soll geprüft werden ob sie durch 4 teilbar ist. Zudem soll abschließend die komplette eingegebenen Zahl z.B 3452646 geprüft werden ob die Quersumme durch 4 teilbar ist...

    #include <stdio.h>
    
    main() {
    int x,y;
    printf("Bitte pos. Integer Zahl eingeben\n");
    scanf("Zahl: %i",&zahl);
    if (zahl%4==0)
    printf("Durch 4 teilbar");
    else
    printf("Nicht durch 4 teilbar");
    }
    

    So müsste das doch eigentlich schonmal gehen, dass er durch 4 teilt bzw. das testet...
    Aber wie mache ich das jetzt, dass er die ganzen eingegebenen Zahlen z.B. 355254 also Quersumme addiert und diese dann nochmals testet ob sie durch 4 teilbar ist?

    Danke schonmal für die Hilfe!!!



  • zzzboard schrieb:

    So müsste das doch eigentlich schonmal gehen, dass er durch 4 teilt bzw. das testet...

    Ja vermutlich, wenn du das fehlende Semikolon, die fehlende Variablendeklaration und den fehlenden Rückgabewert von main() ergänzt 🙄

    Aber wie mache ich das jetzt, dass er die ganzen eingegebenen Zahlen z.B. 355254 also Quersumme addiert und diese dann nochmals testet ob sie durch 4 teilbar ist?

    Die Quersumme kannst du berechnen, indem du mit modulo 10 einzelne Ziffern betrachtest. Also

    int quersumme = 0;
    while (zahl) {
        quersumme += zahl % 10;
        zahl /= 10;
    }
    


  • ja danke es funktioniert...und die Fehler hab ich behoben! 🙂 danke für die Hinweise! 🙂

    aber kannst du mir noch kurz die while-schleife erklären, wie die funktioniert?

    int quersumme = 0;
    while (zahl) {               
        quersumme += zahl % 10;
        zahl /= 10;
    }
    

    Die Schleife wird solange durchlaufe bis zahl = 0, richtig ?
    dann wird die quersumme berechnet indem ich die zahl modulo 10 rechner..
    bsp. 102 mod 10 = 2
    also wird in quersumme = 2 gespeichert
    jetzt wird zahl durch 10 geteilt also kommt da 10 raus da int und somit keine Nachkommastellen....
    nun steht 10 in der Schleife bei while aber 10 % 10 ist doch 0!

    Also wird die 0 noch draufaddiert auf die 2 und somit hätte ich die 2 als Quersumme?! Sie müsste aber 3 sein?!



  • Nachdem die 0 dazuaddiert wurde, ist zahl ja immernoch 10. Das wird dann durch 10 geteilt, also ist zahl 1. Es gibt also noch einen Schleifendurchgang, bei dem dann 1 zu quersumme addiert wird (so dass sich drei ergibt). Dann wird zahl nochmal durch 10 dividiert, diesmal ergibt sich aus 1/10 durchs Abrunden 0 und die Schleife endet.



  • OK sauber.... alles verstanden!

    besten Dank für die Hilfe!!!


Log in to reply