Kalender



  • Hallo kann mir einer sagen wie diese Formel gedacht ist, sie spuckt den richtigen Tag des Datums aus. Aber ich blicke nicht durch warum das so gemacht wird, wäre nett wenn da einer hinter kommt wie das gedacht ist 🙂

    cout << "Bitte geben Sie ein Datum ein!\n"; 
    cout << "Bitte geben Sie den Tag ein! (1 oder 2 ...)\n"; 
    cin >> T; 
    cout << "Bitte geben Sie den Monat ein! (1 - 12)\n"; 
    cin >> M; 
    cout << "Bitte geben Sie das Jahr ein! (z.B. 1980)\n"; 
    cin >> J;
    
    A = M+10; 
    B = (M-14)/12 + J; 
    C = A - 12*(A/13); 
    D = (13 * C - 1)/5; 
    E = 5*(B % 100)/4; 
    W = (D + T + 77 + E + B/400 - 2*(B/100)) % 7;
    
      switch(W) 
       { 
          case 0: 
             ausgabe = "Sonntag"; 
          break; 
          case 1: 
             ausgabe = "Montag"; 
          break; 
          case 2: 
             ausgabe = "Dienstag"; 
          break; 
          case 3: 
             ausgabe = "Mittwoch"; 
          break; 
          case 4: 
             ausgabe = "Donnerstag"; 
          break; 
          case 5: 
             ausgabe = "Freitag"; 
          break; 
          case 6: 
             ausgabe = "Sonnabend"; 
          break; 
       }
    


  • Ähhhh, verstehe jetzt die Frage nicht:

    warum das so gemacht wird,

    Das nennt man einen Algorithmus. Wie er funktioniert steht doch nun da. Oder soll erklärt werden

    - erste Zeile Monat+10
    ...

    Schau dir den Quelltext an

    Alternative:

    short int J=2000,M=1,T=1;
    String ausgabe;
    TDateTime *dt=new TDateTime(J,M,T);
    switch(dt->DayOfWeek())
       {
    	  case 1:
    		 ausgabe = "Sonntag";
    	  break;
    	  case 2:
    		 ausgabe = "Montag";
    	  break;
    	  case 3:
    		 ausgabe = "Dienstag";
    	  break;
    	  case 4:
    		 ausgabe = "Mittwoch";
    	  break;
    	  case 5:
    		 ausgabe = "Donnerstag";
    	  break;
    	  case 6:
    		 ausgabe = "Freitag";
    	  break;
    	  case 7:
    		 ausgabe = "Sonnabend";
    	  break;
       }
    delete dt;
    


  • Und mindestens ab BCB 6

    String ausgabe = LongDayNames[DayOfWeek(Now())-1];
    


  • angepasst:

    short int J=2000,M=1,T=1;
    String ausgabe = LongDayNames[DayOfWeek(TDateTime(J,M,T))-1];
    


  • Das Problem war eher die Formel... Warum wird die Formel so genommen dafür müsste es doch einen Erklärung geben was dahinter steckt die /400 hat wahrschienlich mit den Schaltjahren zu tun bei W= und zur +77 habe ich das gefunden (77 // Tage im Jahr 1582) aber den ganzen rest versteh ich net



  • aber den ganzen rest versteh ich net

    Dann fang vorne an und versuche ihn nachzuvollziehen



  • Dieser Thread wurde von Moderator/in Jansen aus dem Forum VCL/CLX (Borland C++ Builder) in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Der DayofWeek würde nur für die Jahre gehen bis das nächste Schaltjahr kommt, dann klappt das nicht mehr... Das mit Monat+10 will ich nicht wissen. Es muss doch eine Erklärung geben warum diese Formel so gebaut wurde, unter den und den Aspekten...


Anmelden zum Antworten