I2010506%DBSTU1.BITNET@cunyvm.cuny.edu (04/25/89)
Date: 24 April 1989, 18:03:17 MEZ From: Christian Boettger +49 (0)531 3915113 / I2010506 at DBSTU1 To: info-pascal at vim.brl program kalender (input,output); type jahre = 1982..2399; monate = (jan,feb,mrz,apr,mai,jun,jul,aug,sep,okt,nov,dez); wochen = 0..5; tage = 0..6; wtage = packed array [1..2] of char; spalten = 0..133; var jahr : jahre; ausgabe : text; spalte : spalten; procedure rahmen (var ausgabe : text); begin write (ausgabe,' '); write (ausgabe,'*'); write (ausgabe,' ':125); writeln (ausgabe,'*'); end; procedure ueberschrift (jahr:jahre); type ziffernsegmente = packed array [1..9] of char; zeilen = 1..7; spalten = 0..133; ziffern = 0..9; stellen = (tausender,hunderter,zehner,einer); var zeile : zeilen; spalte : spalten; stelle : stellen; ziffer : ziffern; i : zeilen; function teileauf (st:stellen;j:jahre):ziffern; begin case st of tausender: teileauf := j div 1000; hunderter: teileauf := (j mod 1000) div 100; zehner : teileauf := (j mod 100) div 10; einer : teileauf := j mod 10 end end; function ziffernsegment (z:zeilen;ziffer:ziffern):ziffernsegmente; var s1,s2,s3,s4,s5,s6,s7,s8 : ziffernsegmente; begin s1 := ' ****** '; s2 := ' ** **'; s3 := ' ** '; s4 := ' *** '; s5 := ' ** '; s6 := ' ** '; s7 := ' ** '; s8 := ' **'; case z of 1 : case ziffer of 1 : ziffernsegment := s4; 2,3,5,6,7,8,9,0 : ziffernsegment := s1; 4 : ziffernsegment := s2 end; 2,3 : case ziffer of 1 : ziffernsegment := s5; 2,3,7 : ziffernsegment := s8; 4,8,9,0 : ziffernsegment := s2; 5,6 : ziffernsegment := s3 end; 4 : case ziffer of 1 : ziffernsegment := s5; 2,3,4,5,6,8,9 : ziffernsegment := s1; 7 : ziffernsegment := s7; 0 : ziffernsegment := s2 end; 5 : case ziffer of 1 : ziffernsegment := s5; 2 : ziffernsegment := s3; 3,4,5,9 : ziffernsegment := s8; 6,8,0 : ziffernsegment := s2; 7 : ziffernsegment := s6 end; 6 : case ziffer of 1,7 : ziffernsegment := s5; 2 : ziffernsegment := s3; 3,4,5,9 : ziffernsegment := s8; 6,8,0 : ziffernsegment := s2 end; 7 : case ziffer of 1,2,3,5,6,8,9,0 : ziffernsegment := s1; 4 : ziffernsegment := s8; 7 : ziffernsegment := s5 end end end; begin (* of ueberschrift *) write (ausgabe,' '); for spalte := 1 to 126 do write (ausgabe,'*'); writeln (ausgabe,'*'); rahmen (ausgabe); rahmen(ausgabe); for zeile := 1 to 7 do begin write(ausgabe,' '); write(ausgabe,'*'); write(ausgabe,' ':43); for stelle := tausender to einer do begin ziffer := teileauf (stelle,jahr); write (ausgabe,ziffernsegment(zeile,ziffer):11) end; write (ausgabe,' ':38); writeln(ausgabe,'*') end; for i := 1 to 5 do rahmen (ausgabe); write (ausgabe,' '); for spalte := 1 to 126 do write (ausgabe,'*'); writeln (ausgabe,'*'); rahmen (ausgabe); rahmen(ausgabe); end; procedure druck (anfangsmonat,endmonat:monate;jahr:jahre); var tag : tage; woche : wochen; monat : monate; kalender : array [jan..dez,0..6,0..5] of integer; function schaltjahr (j:jahre):boolean; begin if ((j mod 4 = 0) and (j mod 100 <> 0) or (j mod 400 = 0)) then schaltjahr := true else schaltjahr := false end; function jahresanfang (j:jahre):tage; var jj : jahre; t : tage; begin t := 4; for jj := 1983 to j do if schaltjahr (jj-1) then t := (t+2) mod 7 else t := (t+1) mod 7; jahresanfang := t end; function laenge (m:monate;j:jahre):integer; begin case m of jan,mrz,mai,jul,aug,okt,dez : laenge := 31; apr,jun,sep,nov : laenge := 30; feb : if schaltjahr(j) then laenge := 29 else laenge := 28 end end; function monatsanfang (m:monate;j:jahre):tage; var mm : monate; t : tage; begin if m = jan then monatsanfang := jahresanfang(j) else begin t := jahresanfang(j); for mm := jan to pred(m) do t := (t+laenge(mm,j)) mod 7; monatsanfang := t end; end; function wochentag (t:tage):wtage; begin case t of 0 : wochentag := 'Mo'; 1 : wochentag := 'Tu'; 2 : wochentag := 'We'; 3 : wochentag := 'Th'; 4 : wochentag := 'Fr'; 5 : wochentag := 'Sa'; 6 : wochentag := 'Su' end end; begin (* of druck *) for monat := anfangsmonat to endmonat do for tag := 0 to 6 do for woche := 0 to 5 do kalender[monat,tag,woche] := 1+tag+woche*7 -monatsanfang(monat,jahr); rahmen (ausgabe); for tag := 0 to 6 do begin write (ausgabe,' '); write (ausgabe,'*'); write (ausgabe,' ':28); write(ausgabe,wochentag(tag):3,' '); for monat := anfangsmonat to endmonat do for woche := 0 to 5 do begin if ( kalender[monat,tag,woche] <= 0 ) or ( kalender[monat,tag,woche] > laenge(monat,jahr) ) then write(ausgabe,' ':3) else write(ausgabe,kalender[monat,tag,woche]:3) end; write (ausgabe,wochentag(tag):3); write (ausgabe,' ':18); writeln (ausgabe,'*'); end; rahmen (ausgabe);rahmen (ausgabe) end; (******************************************************************) (************* hauptprogramm **************) (******************************************************************) begin read(jahr); if ( jahr >= 1983 ) and ( jahr <= 2399 ) then begin rewrite(ausgabe); ueberschrift(jahr); write (ausgabe,' '); write (ausgabe,'*'); write (ausgabe,' ':32); write (ausgabe,'January':12,'February':19); write (ausgabe,'March':16,'April':18); write (ausgabe,' ':28); writeln (ausgabe,'*'); druck(jan,apr,jahr); write (ausgabe,' '); write (ausgabe,'*'); write (ausgabe,' ':32); write (ausgabe,'May':9,'June':19); write (ausgabe,'July':18,'August':20); write (ausgabe,' ':27); writeln (ausgabe,'*'); druck(mai,aug,jahr); write (ausgabe,' '); write (ausgabe,'*'); write (ausgabe,' ':32); write (ausgabe,'September':15,'October':16); write (ausgabe,'November':19,'December':16); write (ausgabe,' ':27); writeln (ausgabe,'*'); druck(sep,dez,jahr); rahmen (ausgabe); write (ausgabe,' '); for spalte := 1 to 126 do write (ausgabe,'*'); writeln (ausgabe,'*'); writeln (ausgabe); close(ausgabe); end else begin write('This program evaluates calendars for years '); writeln('between 1983 and 2399 ||'); if ( jahr < 1983 ) then writeln('Try it in a museum |'); if ( jahr > 2399 ) then writeln('You won`t live then anyway |') end end. ________________________________________________________________________________ Christian Boettger phone: (+49) (0)531/391-5113 mail: Institut fuer Metallphysik und Nukleare Festkoerperphysik, (room -167/-168), Technische Universitaet Braunschweig, Mendelssohnstrasse 3, D-3300 Braunschweig, Bundesrepublik Deutschland ________________________________________________________________________________ EARN: I2010506@DBSTU1.BITNET InterNet: boettger@julian.uwo.CA I2010605@DBSTU1.BITNET UseNet: boettger@julian.UUCP ********************************************************************************