1 PROGRAM BIORHYTHMUS(INPUT,OUTPUT);
6 TYPE DATUM=RECORD TAG,MONAT,JAHR: INTEGER END;
8 VAR GEB,VON,BIS,HEUTE: DATUM;
10 ZEILE: ARRAY[-AMP..+AMP] OF CHAR;
13 PROCEDURE LIESDATUM(VAR X: DATUM);
14 (* EINGABEFORMAT: JJ-MM-TT *)
17 READ(X.JAHR,C,X.MONAT,C,X.TAG)
21 PROCEDURE DRUCKEDATUM(X: DATUM);
23 PROCEDURE WRITE00(N: INTEGER);
24 BEGIN WRITE(N DIV 10 :1, N MOD 10 :1) END;
27 WRITE00(X.JAHR); WRITE("-");
28 WRITE00(X.MONAT);WRITE("-");
30 END (* DRUCKEDATUM *);
33 FUNCTION TAGESANZAHL(X: DATUM): INTEGER;
37 THEN BEGIN G:=1900 + X.JAHR; F:=X.MONAT + 1 END
38 ELSE BEGIN G:=1900 + X.JAHR - 1; F:=X.MONAT + 13 END;
39 TAGESANZAHL:=TRUNC(365.25*G) + TRUNC(30.6*F) + X.TAG - 621049
40 END (* TAGESANZAHL *);
43 PROCEDURE NAECHSTERTAG(VAR X: DATUM);
45 FUNCTION MONATSTAGE(X: DATUM): INTEGER;
48 1,3,5,7,8,10,12: MONATSTAGE:=31;
49 4,6,9,11: MONATSTAGE:=30;
50 2: IF X.JAHR MOD 4 = 0 THEN MONATSTAGE:=29
57 IF X.TAG>MONATSTAGE(X)
58 THEN BEGIN X.MONAT := X.MONAT + 1;
61 THEN BEGIN X.JAHR := X.JAHR +1;
65 END (* NAECHSTERTAG *);
68 PROCEDURE LOESCHEZEILE;
71 FOR I := -AMP TO AMP DO ZEILE[I] := " "
72 END (* LOESCHEZEILE *);
75 PROCEDURE DRUCKEZEILE;
79 FOR I := -AMP TO AMP DO WRITE( ZEILE[I] );
81 END (* DRUCKEZEILE *);
88 WRITELN("JJ-MM-TT -1", "0":AMP, "1":AMP);
90 FOR I:=1 TO AMP-1 DO WRITE(".");
92 FOR I:=1 TO AMP-1 DO WRITE(".");
99 BEGIN (* H A U P T P R O G R A M M *)
101 WRITE("GEBURTSDATUM"); LIESDATUM(GEB);
102 WRITE("BIORHYTHMEN VON"); LIESDATUM(VON);
103 WRITE(" BIS"); LIESDATUM(BIS);
105 ALTER := TAGESANZAHL(HEUTE) - TAGESANZAHL(GEB);
106 LIMIT := TAGESANZAHL( BIS ) - TAGESANZAHL(GEB);
110 ZEILE[ ROUND(AMP*SIN(ALTER*ZWEIPI/23)) ] := "P";
111 ZEILE[ ROUND(AMP*SIN(ALTER*ZWEIPI/28)) ] := "S";
112 ZEILE[ ROUND(AMP*SIN(ALTER*ZWEIPI/33)) ] := "I";