{
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
|