Benutzer: gast • Besitzer: mthomas • Zuletzt geändert am: 2010/11/04 00:55:22

PROGRAM ver;
USES    crt,hilfe;


TYPE
          datumtyp = RECORD
                     tag : 1..31;
                     monat :1..12;
                     jahr :0..99;
                     END;
          allgemeine_angaben_typ = RECORD
                                   dateiname:string;
                                   bezeichnung: string;
                                   ort: string;
                                   datum : datumtyp;
                                   anfang: 0..24;
                                   ende  : 0..24;
                                   wetter: string;
                                   END;

         { st_typ =  RECORD
                    name : string;
                    rechts,gerade,links:boolean;
                     END;

          }
          kreuzungs_typ = RECORD
                  allgemeine_angaben :allgemeine_angaben_typ;
                  typ                :3..4;
                  st1                :st_typ;
                  st2                :st_typ;
                  st3                :st_typ;
                  st4                :st_typ;
                   END;
          datei_typ=FILE OF kreuzungs_typ;

          zaehl_feld_typ = ARRAY [1..4,1..3,0..95,1..6] OF BYTE;
          {Strassen,Richtungen,Viertelstunden,Fahrzeugarten}
          zaehl_typ = Record
                       messungsname:string;
                       zaehlfeld:zaehl_feld_typ;
                      END;

          mess_datei_typ = FILE OF zaehl_typ;

VAR       kreuzung:kreuzungs_typ;
          datei:datei_typ;
          m_datei:mess_datei_typ;
          hilf_integer:integer;
          hilf_string:string;
          antwort,ent:char;
          zaehlung:zaehl_typ;
          schluss:boolean;
          kreuzungsdatei,zaehlungsdatei:string;


Procedure einleitung;
 Begin
  clrscr;
  writeln('       *****     Willkommen zu "ROMAST¸" Ver. 1.0, ******');
  writeln('      dem automatischen Verkehrsz„hlungauswertungsprogramm!');
  writeln;
  writeln('Sie k”nnen:');
  writeln('Die Daten von Kreuzungen eingeben (Strassen, Richtungen, ...)');
  writeln('Die Daten von Messungen an diesen Kreuzungen speichern');
  writeln('Eine einfache Analyse der Daten sehen.');
  writeln('In zuknftigen Versionen stellen wir Ihnen zur Verfgung:');
  writeln('   weitere Analyse- und Editierfunktionen');
  writeln('   graphische Elemente');
  writeln('   Druckmen');
  writeln('Anregungen oder Quelltexte bitte an LLG-Cottbus@t-online.de');
  writeln('Das Autorenteam:              Romy Klausnitzer');
  writeln('                              Stefan Uhlich');
  writeln('                              Mathias Vogel');
  writeln;
  writeln('Grundlage bildet eine Verkehrz„hlung im Viertelstundentakt');
  writeln('Jede Kreuzung wird als *.ver Datei auf A: gespeichert');
  writeln('Jede Messung wird als *.mes Datei auf a gespeichert');
  writeln('Fr das Anzeigen / die Analyse einer Messung brauchen sie');
  writeln('also beide Dateinamen, den der Kreuzung und den der Messung');
  writeln('Speichern ist im Moment nur auf Diskette (LW A:) m”glich');
  writeln('"ENTER" drcken um fortzufahren.');
  readln;
 End;


Procedure beschreibung;
 Begin
  clrscr;
  writeln;
  writeln('Hinweise:');
  writeln('Bevor eine Messung eingelesen werden kann muss die');
  writeln('Kreuzung erstellt und gespeichert sein.');
  writeln('Achten Sie also immer darauf, dass die jeweils richtige Kreuzung');
  writeln('im Arbeitsspeicher ist!');
  writeln('Zur Zeit im Arbeitsspeicher:');
  writeln  (' KREUZUNGSDATEI: ',kreuzungsdatei,'    MESSUNG: ' ,zaehlungsdatei);

 {  writeln('"ENTER" drcken um fortzufahren.');
  readln;}
 End;




PROCEDURE einlesen_allg;
BEGIN
  writeln ('Geben Sie bitte eine Bezeichnung fr die aktuelle ');
  writeln ('Kreuzung ein (z. B. "Kreuzung 1" ).');
  liesstring ('max 255 Zeichen:   ',kreuzung.allgemeine_angaben.bezeichnung);
  liesstring ('Namen des Z„hlortes (z. B. "Wellmitz":) ',
  kreuzung.allgemeine_angaben.ort);
  writeln ('Bitte geben Sie das Datum ein!');
  liesintegergrenze('Jahr der Z„hlung:',hilf_integer,0,99);
  kreuzung.allgemeine_angaben.datum.jahr:=hilf_integer;
  liesintegergrenze('Monat der Z„hlung:',hilf_integer,0,12);
  kreuzung.allgemeine_angaben.datum.monat:=hilf_integer;
  liesintegergrenze('Tag der Z„hlung:',hilf_integer,1,31);
  kreuzung.allgemeine_angaben.datum.tag:=hilf_integer;
  REPEAT
  liesintegergrenze('Startzeit der Z„hlung (0..24):',hilf_integer,0,24);
  kreuzung.allgemeine_angaben.anfang:=hilf_integer;
  liesintegergrenze('Endzeit der Z„hlung (0..24):',hilf_integer,0,24);
  kreuzung.allgemeine_angaben.ende:=hilf_integer;
  IF kreuzung.allgemeine_angaben.anfang >= kreuzung.allgemeine_angaben.ende
      THEN writeln ('unm”glich!!!, das ganze nochmal!!');
  UNTIL kreuzung.allgemeine_angaben.anfang < kreuzung.allgemeine_angaben.ende;
  writeln ('Beschreiben Sie kurz das Wetter am Meátag');
  writeln ('Angabe kann auch sp„ter erfolgen');
  liesstring ('max 255 Zeichen:   ',kreuzung.allgemeine_angaben.wetter);
END;

PROCEDURE richtungen_einlesen(VAR st:st_typ;x:byte);
BEGIN
  clrscr;
  writeln('So, jetzt legen wir die Daten jeder Strasse fest');
  writeln('Strasse : ',x);
  liesstring('Name der Strasse: ',st.name);
  writeln('Welche Richtungen, Antwort jeweils mit j oder n');
  liesboolean('Gibt es die Richtung RECHTS  :',st.rechts);
  liesboolean('Gibt es die Richtung GERADEAUS  :',st.gerade);
  liesboolean('Gibt es die Richtung LINKS  :',st.links);
END;


PROCEDURE einlesen_dat;
VAR i:integer;
BEGIN
  clrscr;
  writeln ('Jetzt werden noch die speziellen Daten dieser Kr. eingelesen.');
  writeln ('Ist es eine 3-er oder 4-er Kreuzung?');
  liesintegergrenze('Eingabe 3 oder 4:   ',hilf_integer,3,4);
  kreuzung.typ:=hilf_integer;
  richtungen_einlesen(kreuzung.st1,1);
  richtungen_einlesen(kreuzung.st2,2);
  richtungen_einlesen(kreuzung.st3,3);
  IF kreuzung.typ = 4 THEN richtungen_einlesen(kreuzung.st4,4);
END;


PROCEDURE anzeigen_alles;
BEGIN
  clrscr;
  writeln ('Die allgemeinen Daten im šberblick: ');
  writeln ('=================================== ');
  writeln ('Name der Kreuzung : ',kreuzung.allgemeine_angaben.bezeichnung);
  writeln ('Z„hlort : ',kreuzung.allgemeine_angaben.ort);
  write   ('Datum   : ',kreuzung.allgemeine_angaben.datum.tag,'.');
  write   (kreuzung.allgemeine_angaben.datum.monat,'.');
  writeln (kreuzung.allgemeine_angaben.datum.jahr);
  write   ('Zeit    : Von ',kreuzung.allgemeine_angaben.anfang);
  writeln (' Uhr bis ',kreuzung.allgemeine_angaben.ende,' Uhr');
  write   ('Wetter  : ');
  IF kreuzung.allgemeine_angaben.wetter=''
     THEN writeln('Noch keine Angaben')
     ELSE writeln(kreuzung.allgemeine_angaben.wetter);
  writeln ('Kreuzung mit ',Kreuzung.typ,' Strassen');
  writeln;
  writeln ('Richtungen:');
  zeige(kreuzung.st1,1);
  zeige(kreuzung.st2,2);
  zeige(kreuzung.st3,3);
  IF kreuzung.typ=4 THEN zeige(kreuzung.st4,4);
END;



PROCEDURE allgemeine_erfassung;
BEGIN
  REPEAT
  einlesen_allg;
  einlesen_dat;
  anzeigen_alles;

  writeln('Daten in Ordnung?');
  writeln('n oder N fr Nein (Wiederholung der Eingabe), alles andere fr ja.');
  writeln('Die Daten werden dann gespeichert.');
  liesstring('Eingabe : ',hilf_string);
  IF length(hilf_string)=1 THEN antwort:=hilf_string[1]
                           ELSE antwort:='J';
  antwort:=upcase(antwort);
  UNTIL antwort <>'N'

END;







PROCEDURE speichern;
VAR       dateiname1:string;

BEGIN
  clrscr;
  writeln('OK, alle Daten sind eingegeben, jetzt kann gespeichert werden');
  writeln('DOS 8.3, Endung ist ver, auf Diskette');
  REPEAT
  liesstring('Dateibezeichnung, max. 8 Zeichen eingeben: ',dateiname1);
  UNTIL (length(dateiname1)<9) and (length(dateiname1)>0);
  dateiname1:='a:\'+dateiname1+'.ver';
  kreuzung.allgemeine_angaben.dateiname:=dateiname1;
  kreuzungsdatei:=dateiname1;
  ASSIGN(datei,dateiname1);
  {$I-}
  reset(datei);
  {$I+}
  IF ioresult <> 0
   THEN
    BEGIN
    rewrite(datei);
    write(datei,kreuzung);
    close(datei);
    writeln('Speichern erfolgreich!');
    writeln('Die Z„hldaten k”nnen mit Hilfe von "Z„hlung" sp„ter eingegeben werden!');
    writeln('Weiter mit ENTER!');
    readln;
    END
   ELSE
    BEGIN
    writeln('Datei existiert schon, berschreiben? (j oder J fr Ja, sonst nein');
    liesstring('Eingabe : ',hilf_string);
    IF length(hilf_string)=1 THEN antwort:=hilf_string[1]
                             ELSE antwort:='N';
    antwort:=upcase(antwort);
    IF antwort='J' THEN
                     BEGIN
                         rewrite(datei);
                         write(datei,kreuzung);
                         close(datei);
                         writeln('Speichern erfolgreich!, Datei wurde berschrieben');
                         writeln('Die Z„hldaten k”nnen mit Hilfe von ... sp„ter eingegeben werden!');
                         writeln('Weiter mit ENTER!');
                         readln;
                     END
                   ELSE
                     BEGIN
                       writeln('Datei wurde nicht berschrieben');
                       writeln('Weiter mit ENTER!');
                       readln;
                     END;
    END;
END;



PROCEDURE auslesen;
VAR       dateiname:string;

BEGIN
  clrscr;
  writeln('Die Daten welcher Datei sollen geladen und gezeigt werden?');
  writeln('Name ohne . und endung eingeben');
  REPEAT
  liesstring('Dateibezeichnung, max. 8 Zeichen eingeben: ',dateiname);
  UNTIL (length(dateiname)<9) and (length(dateiname)>0);
  dateiname:='a:\'+dateiname+'.ver';

  ASSIGN(datei,dateiname);
  {$I-}
  reset(datei);
  {$I+}
  IF ioresult = 0
   THEN
    BEGIN
    read(datei,kreuzung);
    close(datei);
    END
   ELSE
    BEGIN
    writeln('Diese Datei existiert nicht!');
    writeln('Weiter mit ENTER!');
    readln;
   END;
END;

PROCEDURE  gespeichertes_zeigen;
BEGIN
  auslesen;
  kreuzungsdatei:=kreuzung.allgemeine_angaben.dateiname;
  anzeigen_alles;
  writeln('Weiter mit ENTER!');
  readln;
END;





FUNCTION  pruefung(i,j:integer;kr:kreuzungs_typ):boolean;
VAR       hb:boolean;
          st:st_typ;

BEGIN
  IF i=1 THEN st:=kr.st1;
  IF i=2 THEN st:=kr.st2;
  IF i=3 THEN st:=kr.st3;
  IF i=4 THEN st:=kr.st4;

  IF j=1 THEN hb:=st.links;
  IF j=2 THEN hb:=st.gerade;
  IF j=3 THEN hb:=st.rechts;

  pruefung:=hb;
END;




PROCEDURE legende_zeigen(i,j,k,l:integer;kr:kreuzungs_typ);

VAR        st:st_typ;
           k1:integer;
BEGIN
  IF (l=2) or (l=3) or (l=4)or (l=5)or (l=6) THEN gotoxy(wherex,wherey-1);
  k1:=k+1;
  IF i=1 THEN st:=kr.st1;
  IF i=2 THEN st:=kr.st2;
  IF i=3 THEN st:=kr.st3;
  IF i=4 THEN st:=kr.st4;
  {write  (kr.allgemeine_angaben.bezeichnung,' ');}
  write(st.name);
  write('-Str.(Nr.',i,')');
  CASE j OF
    1 : write('li ');
    2 : write('ge ');
    3 : write('re ');
    END;
  write('');
  write(k DIV 4 :3,':');
  IF (k MOD 4 = 0) THEN write ('00')
                   ELSE write((k MOD 4)*15);
  write('bis');
  write(k1 DIV 4 :3,':');
  IF (k1 MOD 4 = 0) THEN write ('00')
                    ELSE write((k1 MOD 4)*15);
  write('');



  IF l=1 THEN write (' PKW');
  IF l=2 THEN
           BEGIN
             gotoxy(wherex+7,wherey);
             write (' LKW');
           END;
  IF l=3 THEN
           BEGIN
             gotoxy(wherex+14,wherey);
             write (' LZ');
           END;
  IF l=4 THEN
           BEGIN
             gotoxy(wherex+21,wherey);
             write (' Bus');
           END;
  IF l=5 THEN
           BEGIN
             gotoxy(wherex+28,wherey);
             write (' Krad');
           END;
  IF l=6 THEN
           BEGIN
             gotoxy(wherex+35,wherey);
             write (' Rad');
           END;

END;










PROCEDURE messwerterfassung;
VAR       wahl:char;
          i,j,k,l:byte;
          hilf:integer;
BEGIN
  IF kreuzungsdatei='noch keine'
    THEN
      BEGIN
        writeln('Erst eine Kreuzung laden! ');
        writeln('Weiter mit ENTER!');
        readln;
      END
    ELSE
      BEGIN
        writeln('OK, wir lesen Daten fr eine Messung an der ');
        writeln('Kreuzung: ',kreuzung.allgemeine_angaben.bezeichnung,' ein.');
        {writeln('Auf gehts, sie k”nnen jederzeit mit "E" beenden, sonst gehts weiter');}
        writeln('Wollen sie wirklich alles (neu) eingeben, weiter mit j');
        readln(wahl);wahl:=upcase(wahl);
        IF wahl ='J'
        THEN
         BEGIN
          FOR i:=1 TO 4 DO
           FOR j:=1 TO 3 DO
            FOR k:= 0 TO 95 DO
             FOR l:= 1 TO 6 DO
              zaehlung.zaehlfeld[i,j,k,l]:=0;
         FOR i:=1 TO kreuzung.typ DO
          FOR j:=1 TO 3 DO
           FOR k:=(kreuzung.allgemeine_angaben.anfang*4) TO (kreuzung.allgemeine_angaben.ende*4-1) DO
            BEGIN
             IF pruefung(i,j,kreuzung)
               THEN
                FOR l:=1 TO 6 DO
                  BEGIN
                   legende_zeigen(i,j,k,l,kreuzung);
                   liesintegergrenze('',hilf,0,250);
                   zaehlung.zaehlfeld[i,j,k,l]:=hilf;
                  END;
           END;

     END
  ELSE
    BEGIN
      writeln('Tschss dann, weiter mit ENTER!');
      readln;
    END;
  END;
END;

PROCEDURE messwertspeicherung;
VAR       dateiname:string;

BEGIN
  clrscr;
  writeln('Die Messwerte werden gespeichert ');
  writeln('DOS 8.3, Endung ist mes, auf Diskette');
  REPEAT
  liesstring('Dateibezeichnung, max. 8 Zeichen eingeben: ',dateiname);
  UNTIL (length(dateiname)<9) and (length(dateiname)>0);
  dateiname:='a:\'+dateiname+'.mes';
  zaehlung.messungsname:=dateiname;
  zaehlungsdatei:=zaehlung.messungsname;

  ASSIGN(m_datei,dateiname);
  {$I-}
  reset(m_datei);
  {$I+}
  IF ioresult <> 0
   THEN
    BEGIN
    rewrite(m_datei);
    write(m_datei,zaehlung);
    close(m_datei);
    writeln('Speichern erfolgreich!');
    writeln('Weiter mit ENTER!');
    readln;
    END
   ELSE
    BEGIN
    writeln('Datei existiert schon, berschreiben? (j oder J fr Ja, sonst nein');
    liesstring('Eingabe : ',hilf_string);
    IF length(hilf_string)=1 THEN antwort:=hilf_string[1]
                             ELSE antwort:='N';
    antwort:=upcase(antwort);
    IF antwort='J' THEN
                     BEGIN
                         rewrite(m_datei);
                         write(m_datei,zaehlung);
                         close(m_datei);
                         writeln('Speichern erfolgreich!, Datei wurde berschrieben');
                         writeln('Weiter mit ENTER!');
                         readln;
                     END
                   ELSE
                     BEGIN
                       writeln('Datei wurde nicht berschrieben');
                       writeln('Weiter mit ENTER!');
                       readln;
                     END;
    END;
END;


PROCEDURE messwerte;
BEGIN
  messwerterfassung;
  messwertspeicherung;
END;


PROCEDURE  lade_messwerte;
VAR       dateiname:string;
BEGIN
  clrscr;
  writeln('Die Daten welcher Messung sollen geladen und gezeigt werden?');
  writeln('Name ohne . und endung eingeben');
  REPEAT
  liesstring('Dateibezeichnung, max. 8 Zeichen eingeben: ',dateiname);
  UNTIL (length(dateiname)<9) and (length(dateiname)>0);
  dateiname:='a:\'+dateiname+'.mes';
  ASSIGN(m_datei,dateiname);
  {$I-}
  reset(m_datei);
  {$I+}
  IF ioresult = 0
   THEN
    BEGIN
    read(m_datei,zaehlung);
    close(m_datei);
    zaehlungsdatei:=zaehlung.messungsname;
    END
   ELSE
    BEGIN
    writeln('Diese Datei existiert nicht!');
    writeln('Weiter mit ENTER!');
    readln;
   END;
END;


PROCEDURE messergebnis_zeigen(i,j,k:byte;kr:kreuzungs_typ;za:zaehl_typ);
VAR       richtung : string; zeit,zeit2 : real;
BEGIN
  IF j=1 THEN richtung:='links ';
  IF j=2 THEN richtung:='gerade';
  IF j=3 THEN richtung:='rechts';
  zeit:=(k DIV 4) + ((k MOD 4) *15)/100;
  k:=k+1;
  zeit2:=(k DIV 4) + ((k MOD 4) *15)/100;
  write('Str. ',i,' Richt.',richtung,' ',zeit:5:2,'-',zeit2:5:2,' PKW',za.zaehlfeld[i,j,k,1]:3);
  write(' LKW',za.zaehlfeld[i,j,k,2]:3);
  write(' LZ',za.zaehlfeld[i,j,k,3]:3);
  write(' Bus',za.zaehlfeld[i,j,k,4]:3);
  write(' Krad',za.zaehlfeld[i,j,k,5]:3);
  write(' Rad',za.zaehlfeld[i,j,k,6]:3);
  writeln;

END;




PROCEDURE  zeige_an;
VAR i,j,k,counter:byte;
BEGIN
  counter:=1;
  write('Anzeige der Messdaten!, weiter mit ENTER');readln;
  clrscr;
  FOR i:=1 TO kreuzung.typ DO
    FOR j:=1 TO 3 DO
      FOR k:=(kreuzung.allgemeine_angaben.anfang*4) TO (kreuzung.allgemeine_angaben.ende*4-1) DO
      BEGIN
      IF pruefung(i,j,kreuzung)
        THEN
          BEGIN
            messergebnis_zeigen(i,j,k-1,kreuzung,zaehlung);
            counter:=counter+1;
            IF counter=20 THEN
                            BEGIN
                              write('Zwischenhalt, weiter mit ENTER');
                              readln;
                              counter:=1;
                            END;
          END;
      END;
    writeln('Weiter mit ENTER!');
    readln;
END;







PROCEDURE zeige_messwerte;
BEGIN
  IF kreuzungsdatei='noch keine'
    THEN
      BEGIN
        writeln('Erst eine Kreuzung laden! ');
        writeln('Weiter mit ENTER!');
        readln;
      END
    ELSE
      BEGIN
        lade_messwerte;
        zeige_an;
      END;
END;


PROCEDURE analyse_1;
  TYPE a1_typ=ARRAY[0..23,1..6] OF Integer;
  VAR  a1:a1_typ;
       i,j,anf,ende,a,b,c,d,c1,max,h1,anfa:integer;

  PROCEDURE zeichne_balken(h,i:integer);
    VAR x,y,n:integer;
    BEGIN
     gotoxy(1,24);
     write('Gesamt:');
     gotoxy(i*4+8,24);
     IF h > 0 THEN
       FOR n:=1 TO h DO
         BEGIN
           write('²');
           x:=wherex - 1;
           y:=wherey - 1;
           gotoxy(x,y);
         END;
    END;


  BEGIN
    clrscr;
    max:=0;
    write (kreuzung.allgemeine_angaben.bezeichnung);
    write   (' Datum : ',kreuzung.allgemeine_angaben.datum.tag,'.');
    write   (kreuzung.allgemeine_angaben.datum.monat,'.');
    writeln (kreuzung.allgemeine_angaben.datum.jahr);
    write   ('Zeit  : Von ',kreuzung.allgemeine_angaben.anfang);
    writeln ('Uhr bis ',kreuzung.allgemeine_angaben.ende,' Uhr');

    writeln ('Wieviel Fahrzeuge passieren pro Stunde die Kreuzung?');

    FOR i := 0 TO 23 DO
      FOR j := 1 TO 6 DO a1[i,j]:=0;
    anf:=kreuzung.allgemeine_angaben.anfang*4;
    ende:=kreuzung.allgemeine_angaben.ende*4-1;
    FOR a:=1 TO 4 DO
     FOR b:=1 TO 3 DO
      FOR c:=anf TO ende DO
        FOR d:=1 TO 6 DO
          BEGIN
          c1:=c DIV 4;
          a1[c1,d]:=a1[c1,d]+zaehlung.zaehlfeld[a,b,c,d];

          END;
    write('Stunde: ');
    FOR i:=(anf DIV 4) TO ((ende DIV 4)) DO write(i:4);
    writeln;
    write('PKW   : ');
    FOR i:=(anf DIV 4) TO ((ende DIV 4)) DO write(a1[i,1]:4);
    writeln;
    write('LKW   : ');

    FOR i:=(anf DIV 4) TO ((ende DIV 4)) DO write(a1[i,2]:4);
    writeln;
    write('LZ    : ');
    FOR i:=(anf DIV 4) TO ((ende DIV 4)) DO write(a1[i,3]:4);
    writeln;
    write('Bus   : ');
    FOR i:=(anf DIV 4) TO ((ende DIV 4)) DO write(a1[i,4]:4);
    writeln;
    write('Krad  : ');
    FOR i:=(anf DIV 4) TO ((ende DIV 4)) DO write(a1[i,5]:4);
    writeln;
    write('Rad   : ');
    FOR i:=(anf DIV 4) TO ((ende DIV 4)) DO write(a1[i,6]:4);
    writeln;
    write('Summe : ');
    FOR i:=(anf DIV 4) TO ((ende DIV 4)) DO
      BEGIN
        write((a1[i,1]+a1[i,2]+a1[i,3]+a1[i,4]+a1[i,5]+a1[i,6]):4);
        IF (a1[i,1]+a1[i,2]+a1[i,3])>max THEN max:=(a1[i,1]+a1[i,2]+a1[i,3]);
      END;
    writeln;
    max:=max div 10;
    anfa:=1;
    FOR i:=(anf DIV 4) TO ((ende DIV 4)) DO
       BEGIN
         h1:=(a1[i,1]+a1[i,2]+a1[i,3]) DIV max;
         zeichne_balken(h1,anfa);
         anfa:=anfa+1;
       END;
    gotoxy(5,25);
    writeln('Weiter mit ENTER!');
    readln;
END;


PROCEDURE analyse_2;
  TYPE a1_typ=ARRAY[0..23,1..3] OF Integer;
  VAR  a1:a1_typ;
       i,j,anf,ende,a,b,c,d,c1,h1,h2,anfa,max:integer;


  PROCEDURE zeichne_balken(h,i:integer);
    VAR x,y,n:integer;
    BEGIN
     gotoxy(1,24);
     write('Gesamt:');
     gotoxy(i*4+8,24);
     IF h > 0 THEN
       FOR n:=1 TO h DO
         BEGIN
           write('²');
           x:=wherex - 1;
           y:=wherey - 1;
           gotoxy(x,y);
         END;
    END;


  BEGIN
    clrscr;
    write (kreuzung.allgemeine_angaben.bezeichnung);
    write   (' Datum : ',kreuzung.allgemeine_angaben.datum.tag,'.');
    write   (kreuzung.allgemeine_angaben.datum.monat,'.');
    writeln (kreuzung.allgemeine_angaben.datum.jahr);
    write   ('Zeit  : Von ',kreuzung.allgemeine_angaben.anfang);
    writeln ('Uhr bis ',kreuzung.allgemeine_angaben.ende,' Uhr');
    writeln;
    writeln ('Wie sind die Richtungen am Tag ausgelastet?');
    writeln;
    FOR i := 0 TO 23 DO
      FOR j := 1 TO 3 DO a1[i,j]:=0;
    anf:=kreuzung.allgemeine_angaben.anfang*4;
    ende:=kreuzung.allgemeine_angaben.ende*4-1;
    FOR a:=1 TO 4 DO
     FOR b:=1 TO 3 DO
      FOR c:=anf TO ende DO
        FOR d:=1 TO 6 DO
          BEGIN
          c1:=c DIV 4;
          a1[c1,b]:=a1[c1,b]+zaehlung.zaehlfeld[a,b,c,d];
          END;
    write('Stunde: ');
    FOR i:=(anf DIV 4) TO ((ende DIV 4)) DO write(i:5);
    writeln;
    write('links   : ');
    FOR i:=(anf DIV 4) TO ((ende DIV 4)) DO write(a1[i,1]:5);
    writeln;
    write('gerade  : ');
    FOR i:=(anf DIV 4) TO ((ende DIV 4)) DO write(a1[i,2]:5);
    writeln;
    write('rechts  : ');
    FOR i:=(anf DIV 4) TO ((ende DIV 4)) DO write(a1[i,3]:5);
    writeln;
    write('Summe   : ');
    max:=0;
    FOR i:=(anf DIV 4) TO ((ende DIV 4)) DO
      BEGIN
        write((a1[i,1]+a1[i,2]+a1[i,3]):5);
        IF (a1[i,1]+a1[i,2]+a1[i,3])>max THEN max:=(a1[i,1]+a1[i,2]+a1[i,3]);
      END;
    max:=max div 10;
    writeln;
    anfa:=1;
    FOR i:=(anf DIV 4) TO ((ende DIV 4)) DO
       BEGIN
         h1:=(a1[i,1]+a1[i,2]+a1[i,3]) DIV max;
         zeichne_balken(h1,anfa);
         anfa:=anfa+1;
       END;
    gotoxy(5,25);
    writeln('Weiter mit ENTER!');
    readln;
END;








PROCEDURE analyse;
  BEGIN
   IF kreuzungsdatei='noch keine'
     THEN writeln('keine geladene Kreuzungsdatei')
     ELSE
       BEGIN
        analyse_1;
        analyse_2;
       END;
    writeln('Weiter mit ENTER!');
    readln;
  END;

PROCEDURE kr_zeigen;
  BEGIN
   IF kreuzungsdatei='noch keine'
     THEN writeln('keine geladene Kreuzungsdatei')
     ELSE anzeigen_alles;
   writeln('Weiter mit ENTER!');
   readln;
  END;

PROCEDURE me_zeigen;
  BEGIN
   IF kreuzungsdatei='noch keine'
     THEN writeln('keine geladene Kreuzungsdatei')
     ELSE zeige_an;
   writeln('Weiter mit ENTER!');
   readln;
  END;




BEGIN
  kreuzungsdatei:='noch keine';
  zaehlungsdatei:='noch keine';
  einleitung;
  clrscr;
  REPEAT
    clrscr;
    schluss:=false;
    beschreibung;
    writeln;
    writeln('             ************     Men    *************       ');
    writeln('k fr das Erfassen und Speichern einer neuen Kreuzung');
    writeln('          (neue *.ver-Datei )');
    writeln('d fr das Laden und Anzeigen der gespeicherten Daten einer Kreuzung ');
    writeln('r fr Anzeigen der momentan geladenen Kreuzung ');
    writeln('e fr das Erfassen von Messwerten fr eine vorhandene Kreuzung');
    writeln('          (neue *.mes-Datei)');
    writeln('z fr das Laden und Zeigen der gespeicherten Daten einer Messung');
    writeln('m fr Anzeigen der momentan geladenen Messung ');
    writeln('a fr eine kurze Analyse (Summen) von Messdaten');
    writeln;
    writeln('s fr das Schlieáen des Programms');
    writeln;
    write  ('Ihre Wahl: ');readln(ent);
    ent:=upcase(ent);
    clrscr;
    CASE ent OF
      'K' :  BEGIN
              allgemeine_erfassung;
              speichern;
             END;
      'D' :  gespeichertes_zeigen;
      'E' :  messwerte;
      'S' :  schluss:=true;
      'Z' :  zeige_messwerte;
      'A' :  analyse;
      'R' :  kr_zeigen;
      'M' :  me_zeigen;
      ELSE
            BEGIN
              write('ungltige Eingabe, weiter mit ENTER');readln;
            END;
     END {of case};

  UNTIL schluss;
END.