Anfängerproblem Schaltjahr berechnen



  • Hallo,
    ich hab vor einigen Tagen begonnen mir C selber beizubringen und hänge im Buch "C Programmieren von Anfang an von Helmut Erlenkötter" bei einer Bedingung bzw verstehe ich diese nicht.

    (!((Jahr%100)%4)

    Gehe ich richtig davon aus das hier zuerst eine Divisionsrestberechnung (Jahr%100), von dem Ergebnis nochmals eine Divisionsrestberechnung %4 gemacht wird und davon das Ergebnis sollte es 0 sein vom ! ins positive bzw jede andere Zahl als 0 ins negative umgewandelt wird?

    Im Buch steht "Wenn sich also die letzten 2 Stellen der Jahreszahl (Jahr%100)durch 4 teilen lassen.. und hier hänge ich.. wie kommt er von einer Divisionsrestberechnung auf die letzten 2 Stellen der Jahreszahl?

    Wäre für eure Hilfe sehr dankbar.
    mfg
    Michael


  • Mod

    Denk mal darüber nach, was wohl der Divisionsrest einer Zahl mit 100 ist und wie das mit den letzten beiden Stellen dieser Zahl zusammenhängen könnte 😉 .



  • Aus einer Beispielsammlung die Angabe die wir mal als Hausübung erhalten hatten, hab ich grad im Archiv des Jahres 2009 ausgekramt ^^

    Schaltjahrberechnung: Ein Jahr ist ein SJ, wenn es durch 4 teilbar, aber nicht durch 100 teilbar ist; Ausnahme: es ist durch 400 teilbar  dann ist es ein SJ!

    Folglich:

    int main(void) {
    
      int jahr;
    
      printf("\nGeben Sie das Jahr an: ");
      scanf("%d", &jahr);
    
      if((jahr%100 != 0 && jahr%4 == 0) || jahr%400 == 0)
        printf("Jahr ist ein Schaltjahr!");
      else
        printf("Jahr ist kein Schaltjahr!");
    
      return 0;
    }
    

    Bei deiner Bedingung: (!((Jahr%100)%4), korrigiert mich falls falsch aber ich sehe das so:

    Jahr wird durch 100 geteilt, der rest wird durch 4 geteilt und dieser rest wird negiert... der rest von 2012 durch 100 ist 12 (bedingung !%100 erfüllt), 12 % 4 (bedingung %4 erfüllt) ist 0 und dieser negiert ergibt 1, folglich wahr...

    Anderes Beispiel, 2011 / 100 rest 11, 11/4 rest 3, dieser negiert 0... folglich kein Schaltjahr ^^

    Wie gesagt korrigiert mich falls falsch ^^

    Edit: Sorry SeppJ, hab deine Antwort nich gesehen und wollte so freundlich sein ^^
    Natürlich hast du recht, selber denken schadet nie ^^



  • Hallo SeppJ,

    vielen dank nun hab ichs kapiert 😃

    bei Divisionsrestberechnung Jahr%100 ist der Rest die letzten zwei Ziffern der vierstelligen jahreszahl.

    Und darüber hab ich mir den Abend meinen Kopf zerbrochen 😡

    Danke nochmals

    lg
    Michael



  • Anderes Beispiel:
    2100 / 100 Rest 0, 0/4 Rest 0 und dieser negiert ergibt 1, folglich wahr.
    Nur ist 2100 kein Schalthahr, da es durch 100 teilbar ist, aber nicht durch 400. (2000 war demnach ein sehr besonderes Schaltjar).

    Die Formel ist eh Blödsinn, da 100 ohne Rest durch 4 Teilbar ist.



  • Stimmt, ich wusste da hats nen Hacken war dann aber um diese Uhrzeit gar nich in der Lage dass zu erkennen ^^ Denn ich vermisste die Prüfung auf 400 ^^

    Verwende lieber die logischen Operatoren, is viel besser und übersichtlicher... Solchen Code kannst du schreiben wenn du an einem Wettbewerb
    teillnimmst bei dem es die Aufgabe ist, viel Code in so kurzen und vorallem equivalenten Code umzuwandeln. Ansonsten bleib lieber auf der sicheren
    Seite ^^


Anmelden zum Antworten