Advertisement
ActiveBubbles

Untitled

Nov 16th, 2020
1,137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.83 KB | None | 0 0
  1. // Programm zur Bestimmung eines Wochentages zu einem bestimmten Datum
  2. // und ob das Jahr ein Schaltjahr ist.
  3. // Von Paul Rambow und Lennard Kirchner 16.11.2020
  4.  
  5. program Ueb03;
  6.  
  7. {$APPTYPE CONSOLE}
  8. {$R+,Q+,X-}
  9.  
  10. uses
  11.   System.SysUtils;
  12.  
  13. var
  14.   Month, Day, Weekday, Year: SmallInt;
  15.   YearLastDigits, YearFirstDigits, CalcMonth: Byte;
  16.   IsLeapYear: Boolean;
  17.  
  18. begin
  19.  
  20.   // Input
  21.   write('Bitte den Tag eingeben (1..31): ');
  22.   Readln(Day);
  23.  
  24.   write('Bitte den Monat eingeben (1..12): ');
  25.   Readln(Month);
  26.  
  27.   write('Bitte das Jahr eingeben (1..2999): ');
  28.   Readln(Year);
  29.  
  30.   // PROCESSING
  31.   // Input Range Check
  32.   if (Day > 31) or (Day < 1) then
  33.     writeLn('Ungültger Tag!')
  34.   else if (Month > 12) or (Month < 1) then
  35.     writeLn('Ungültiger Monat!')
  36.   else if (Year > 2999) or (Year < 1) then
  37.     writeLn('Ungültiges Jahr!')
  38.   else
  39.   begin
  40.  
  41.     // LeapYear Calculation
  42.     if (Year mod 400 <> 0) then
  43.       if (Year mod 100 <> 0) then
  44.         if (Year mod 4 <> 0) then
  45.           IsLeapYear := False
  46.         else
  47.           IsLeapYear := True
  48.       else
  49.         IsLeapYear := False
  50.     else
  51.       IsLeapYear := True;
  52.  
  53.     // 31. Day of Month Check
  54.     if (Day = 31) then
  55.       if (((Month < 8) and (not odd(Month))) or ((Month > 7) and odd(Month)))
  56.       then
  57.         writeLn('Den ', Day, '. gibt es in diesem Monat nicht!')
  58.       else
  59.         // Februray Check
  60.       else if (Month = 2) then
  61.         if (IsLeapYear and (Day > 29)) or (not(IsLeapYear) and (Day > 28)) then
  62.           writeLn('Den ', Day, '. gibt es in diesem Monat nicht!')
  63.         else
  64.         begin
  65.  
  66.           CalcMonth := Month - 2 + (Byte(Month - 2 < 1) * 12);
  67.  
  68.           YearFirstDigits := (Year - Byte((Month = 1) or (Month = 2))) div 100;
  69.           YearLastDigits := (Year - Byte((Month = 1) or (Month = 2))) mod 100;
  70.  
  71.           // Calculating Weekday with given formula
  72.           Weekday := (Day + trunc(2.6 * CalcMonth - 0.19) + YearLastDigits +
  73.             trunc(YearLastDigits / 4) + trunc(YearLastDigits / 4) - 2 *
  74.             YearFirstDigits) mod 7;
  75.  
  76.           Weekday := Weekday + (Byte(Weekday < 0) * 7);
  77.  
  78.           write('Der ', Day, '.', Month, '.', Year);
  79.  
  80.           case Weekday of
  81.             0:
  82.               write(' ist ein Sonntag ');
  83.             1:
  84.               write(' ist ein Montag ');
  85.             2:
  86.               write(' ist ein Dienstag ');
  87.             3:
  88.               write(' ist ein Mittwoch ');
  89.             4:
  90.               write(' ist ein Donnerstag ');
  91.             5:
  92.               write(' ist ein Freitag ');
  93.             6:
  94.               write(' ist ein Samstag ');
  95.  
  96.           end;
  97.  
  98.           write('und liegt sich in ');
  99.  
  100.           if IsLeapYear then
  101.             Write('einem ')
  102.           else
  103.             write('keinem ');
  104.  
  105.           write('Schaltjahr!');
  106.         end
  107.   end;
  108.  
  109.   Readln;
  110.  
  111. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement