
PROGRAM Noten (input, output); {Blatt 4 - berechnet Notenschnitte}

CONST   NameLaenge=31;
        LF=CHR(10);
        MaxStud=10;
        MaxNot=5;

TYPE    Zeichenfolge= ARRAY [1..NameLaenge] OF CHAR;
        EinStudi=RECORD
           Name: Zeichenfolge;
           NLaenge: INTEGER;
           Noten: ARRAY [1..MaxNot] OF REAL;
           Schnitt: REAL;
        END;

VAR     StudAnz:      INTEGER;
        PruefSchnitte: ARRAY [1..MaxNot] OF REAL;
        AlleStudis:    ARRAY [1..MaxStud] OF EinStudi;
        i,j:          INTEGER; {allgemeiner Schleifenzhler}

PROCEDURE Einlesen(VAR Feld: Zeichenfolge; Maximum: INTEGER; VAR Position: INTEGER);
{Liest ab Position Zeichen ins Feld, bis entweder RETURN gedrckt wird,
 oder Maximum erreicht ist}
VAR     Zeichen: CHAR;
BEGIN
     REPEAT
           IF Position=Maximum THEN
              Zeichen:=LF
           ELSE
              READ(Zeichen);
           IF Zeichen<>chr(13) THEN BEGIN
              Feld[Position]:=Zeichen;
              Position:=Position+1;
           END;
     UNTIL Zeichen=LF;
     Position:=Position-1;
END { Einlesen };

PROCEDURE Ausgeben(Feld: Zeichenfolge);
{Gibt Feld zeichenweise aus, bis LF erreicht ist.}
VAR   i:INTEGER;
BEGIN
     i:=0;
     REPEAT
           i:=i+1;
           WRITE(Feld[i]);
     UNTIL Feld[i]=LF;
     WRITELN('');
END;


BEGIN {Hauptprogramm}
      WRITELN ('Anzahl der Studenten (max. 10)');
      READLN(StudAnz);
      If StudAnz>MaxStud then StudAnz:=10;

      FOR i:=1 TO MaxNot DO  {Initialisieren der Variablen}
          PruefSchnitte[i]:=0;

      FOR i:=1 TO StudAnz DO
          WITH AlleStudis[i] DO BEGIN
               NLaenge:=1;Schnitt:=0;
               WRITELN ('Bitte Namen eingeben...');
               Einlesen (Name,NameLaenge,NLaenge);

               WRITELN ('Bitte geben sie die ',MaxNot,' Noten ein');
               FOR j:=1 TO MaxNot DO BEGIN
                   ReadLn(Noten[j]);
                   Schnitt:=Schnitt+Noten[j];
                   PruefSchnitte[j]:=PruefSchnitte[j]+Noten[j];
               END;
               Schnitt:=Schnitt/MaxNot;
          END;

      FOR i:=1 to MaxNot DO
           PruefSchnitte[i]:=PruefSchnitte[i]/MaxNot;

      FOR i:=1 to StudAnz DO
          WITH AlleStudis[i] DO BEGIN
               WRITE('Notenschnitte des Studenten ');
               Ausgeben(Name);
               FOR j:=1 to MaxNot DO
                  WRITE(Noten[j]);
               WRITELN('');
               WRITELN('Ergibt den Schnitt',Schnitt);
          END;

      FOR i:=1 TO MaxNot DO
          WRITELN('Schnitt der ',i,'ten Prfung: ',PruefSchnitte[i]);

END {Blatt3.pas}
.
