blikk info infothek forum galerie sitemap

Überschrift

anfang zurueck weiter ende nach oben

{

Name: Manuel T. und Hannes P.

Datum: 06.02.2007

Schule: Gewerbeoberschule Bozen "Max Valier"

Programm: Wandle eine roemische Zahl in das dezimale System um!

Lizenz: GNU

}

 

PROGRAM automat;       {Programmname ist automat}

TYPE

  zust = (Z0,M1,M2,M3,D1,C1,C2,C3,L1,X1,X2,X3,

         V1,I1,I2,I3,CM,CD,XC,XL,IX,IV,ENDE,FEHL);

  {Aufzaehlungstyp}

PROCEDURE SchreibeZust(z : zust);  {Prozedur zum testen des Programmes}

BEGIN

  CASE z OF

    Z0 : Write('Z0 ');

    M1 : Write('M1 ');

    M2 : Write('M2 ');

    M3 : Write('M3 ');

    D1 : Write('D1 ');

    C1 : Write('C1 ');

    C2 : Write('C2 ');

    C3 : Write('C3 ');

    L1 : Write('L1 ');

    X1 : Write('X1 ');

    X2 : Write('X2 ');

    X3 : Write('X3 ');

    V1 : Write('V1 ');

    I1 : Write('I1 ');

    I2 : Write('I2 ');

    I3 : Write('I3 ');

    CM : Write('CM ');

    CD : Write('CD ');

    XC : Write('XC ');

    XL : Write('XL ');

    IX : Write('IX ');

    IV : Write('IV ');

    ENDE : Write('ENDE ');

    FEHL : Write('FEHL ');

  END;         {Of CASE}

END;           {Der Procedur}

 

FUNCTION roem2dez(roemzahl:STRING):INTEGER;      {Funktionsname = roem2dez}

VAR

  roem : STRING;     {Variable wird kopiert}

  zustand : zust;    {Variable darf nur Elemente des Typs enthalten}

  i : INTEGER;       {Zaehler der FOR - Schleife}

  s : INTEGER;       {Summe - es wird immer dazugezaehlt}

  zeichen : CHAR;

BEGIN

  roem := roemzahl + '=';       {An die roemische Zahl wir ein = angehaengt}

  zustand := Z0;                {Ausgangszustand ist Z0 (Zustand Null)}

  s := 0;                       {Summe wird initialisiert}

  i := 1;

  WHILE (i <= Length(roem)) AND

        (zustand <> ENDE)  AND

      (zustand <> FEHL)  DO BEGIN

    zeichen := roem[i];

    Write(zeichen,' ');

    CASE zustand OF

      Z0: BEGIN

            CASE zeichen OF

              'M': BEGIN

                     s := s + 1000;

                     zustand := M1;

                   END;

              'D': BEGIN

                      s := s + 500;

                      zustand := D1;

                   END;

              'C': BEGIN

                     zustand := C1;

                   END;

              'L': BEGIN

                     s := s + 50;

                     zustand := L1;

                   END;

              'X': BEGIN

                     zustand := X1;

                   END;

              'V': BEGIN

                     s := s + 5;

                     zustand := V1;

                   END;

              'I': BEGIN

                     zustand := I1;

                   END;

              '=': BEGIN

                     zustand := Ende;

                   END;

            END;

            SchreibeZust(zustand);

          END;

      M1: BEGIN

            CASE zeichen OF

              'M': BEGIN

                     s := s + 1000;

                     zustand := M2;

                   END;

              'D': BEGIN

                      s := s + 500;

                      zustand := D1;

                   END;

              'C': BEGIN

                     zustand := C1;

                   END;

              'L': BEGIN

                     s := s + 50;

                     zustand := L1;

                   END;

              'X': BEGIN

                     zustand := X1;

                   END;

              'V': BEGIN

                     s := s + 5;

                     zustand := V1;

                   END;

              'I': BEGIN

                     zustand := I1;

                   END;

              '=': BEGIN

                     zustand := ENDE;

                   END;

            END;

            Schreibezust(zustand);

          END;

      M2: BEGIN

            CASE zeichen OF

              'M': BEGIN

                     s := s + 1000;

                     zustand := M3;

                   END;

              'D': BEGIN

                      s := s + 500;

                      zustand := D1;

                   END;

              'C': BEGIN

                     zustand := C1;

                   END;

              'L': BEGIN

                     s := s + 50;

                     zustand := L1;

                   END;

              'X': BEGIN

                     zustand := X1;

                   END;

              'V': BEGIN

                     s := s + 5;

                     zustand := V1;

                   END;

              'I': BEGIN

                     zustand := I1;

                   END;

              '=': BEGIN

                     zustand := ENDE;

                   END;

            END;

            Schreibezust(zustand);

          END;

      M3: BEGIN

            CASE zeichen OF

              'M': BEGIN

                     zustand := FEHL;

                   END;

              'D': BEGIN

                      s := s + 500;

                      zustand := D1;

                   END;

              'C': BEGIN

                     zustand := C1;

                   END;

              'L': BEGIN

                     s := s + 50;

                     zustand := L1;

                   END;

              'X': BEGIN

                     zustand := X1;

                   END;

              'V': BEGIN

                     s := s + 5;

                     zustand := V1;

                   END;

              'I': BEGIN

                     zustand := I1;

                   END;

              '=': BEGIN

                     zustand := ENDE;

                   END;

            END;

            Schreibezust(zustand);

          END;

      D1: BEGIN

            CASE zeichen OF

              'M': BEGIN

                     zustand := FEHL;

                   END;

              'D': BEGIN

                     zustand := FEHL;

                   END;

              'C': BEGIN

                     zustand := C1;

                   END;

              'L': BEGIN

                     s := s + 50;

                     zustand := L1;

                   END;

              'X': BEGIN

                     zustand := X1;

                   END;

              'V': BEGIN

                     s := s + 5;

                     zustand := V1;

                   END;

              'I': BEGIN

                     zustand := I1;

                   END;

              '=': BEGIN

                     zustand := ENDE;

                   END;

            END;

            Schreibezust(zustand);

          END;

 

Naechste Seite

nach oben