PROGRAM lager (input,output);

{ Gibt eine Uebersicht ueber den neuen Stand eines Lagers }
{ abhaengig vom alten Stand und den Lagerbewegungen. }

TYPE lagerteil =
       RECORD
         nummer   : Integer; { Lagernummer des Artikels }
         bestand  : integer; { Bestand auf Lager }
         gekauft  : integer; { neu hinzugekommene Anzahl }
         verkauft : integer  { Anzahl der verkauften Exemplare }
       END;

VAR artikel    : lagerteil;  { auf neuen Stand zu bringen }
    veraendert,              { zeigt Bestandsveraenderung an }
    zunahme    : boolean;    { Richtung der Bestandsveraenderung }

BEGIN { lager }

{ Tabellenkopf drucken }

writeln; writeln;
writeln ('(Eingabewerte) Artikel-   Lager-');
writeln ('(A   B  C  D )  nummer   bestand');
writeln ('----+--+--+--+ ========  =======');
writeln;

{ Bestand ermitteln und melden }

WITH artikel DO
  BEGIN { Bestand bearbeiten }
    readln (nummer,bestand,gekauft,verkauft);
    WHILE nummer <> 0 DO { Ende: Artikelnummer Null }
      BEGIN { Artikel auswerten }

        { Artikeldaten auf neuem Stand bringen }

        IF gekauft <> verkauft THEN
          BEGIN
            veraendert := true;
            IF gekauft > verkauft THEN
               zunahme := true
            ELSE
               zunahme := false
          END
        ELSE
          veraendert := false;
        bestand := bestand + gekauft -verkauft;
        gekauft  := 0;
        verkauft := 0;

        { Artikeldaten ausgeben }

        write ('                 ',nummer:4,'       ',bestand:3);
        IF veraendert = true THEN
           IF zunahme = true THEN
             writeln ('       zugenommen')
           ELSE
             writeln ('       abgenommen')
         ELSE
           writeln;

        { Naechsten Artikel uebernehmen }

        readln (nummer,bestand,gekauft,verkauft);
      END { Artikel auswerten }
  END { Bestand bearbeiten }
END.  { lager }