PROGRAM zeichen(input,output);

{$B- umlegen der Standart-Eingabe auf TERminal. }

{ Liest eine Folge von Textzeilen und zaehlt die vorgefundenen }
{ Zeichen nach Kategorien.                                     }

VAR gross, klein, ziffer, punktuation, spezial : SET OF char;
    g, k, z, p, s, undefiniert                 : integer;
    zeichen                                    : char;

BEGIN { zeichen }


{ Initialisieren }

gross       := ['A'..'Z'];
klein       := ['a'..'z'];
ziffer      := ['0'..'9'];
punktuation := ['.', ',', ':', ';', '-', '!', '"', '(', ')', '_', '''', '?'];
spezial     := ['#', '$', '%', '&', '=', '[', ']', '+', '*', '>', '<', '/', '^'];

g           := 0;
k           := 0;
z           := 0;
p           := 0;
s           := 0;
undefiniert := 0;


{ Text uebernehmen und auswerten }

writeln ('Geben Sie den zu untersuchenden Text ein:');

WHILE NOT eof DO
  BEGIN
    WHILE NOT eoln DO
      BEGIN
        read (zeichen);
        IF NOT (zeichen IN gross+klein+ziffer+punktuation+spezial)
          THEN undefiniert := succ(undefiniert)
          ELSE
            IF zeichen IN gross
              THEN g := succ(g)
              ELSE
            IF zeichen IN klein
              THEN k := succ(k)
              ELSE
            IF zeichen IN ziffer
              THEN z := succ(z)
              ELSE
            IF zeichen IN punktuation
              THEN p := succ(p)
              ELSE
            s := succ(s)
      END;
    readln
  END;


  { Ergebnis ausdrucken }

  writeln;
  writeln ('Gefunden wurden:');
  writeln (g:5,' Grossbuchstaben');
  writeln (k:5,' Kleinbuchstaben');
  writeln (z:5,' Ziffern');
  writeln (p:5,' Satzzeichen');
  writeln (s:5,' Sonderzeichen');
  writeln (undefiniert:5,' sonstige Zeichen');
  writeln ('------');
  writeln (g+k+z+p+s+undefiniert:5,' Zeichen insgesamt')

END.  { zeichen }
