home *** CD-ROM | disk | FTP | other *** search
- /***********************************************
- Programm BP4: int_roman
- ************************************************/
-
- include "MATCH.1"
- include "MATCH.2"
-
- predicates
- literal(symbol, stringlist)
- int_roman(string, string)
- replace(string, string)
- equiv(string, string)
- ten(string, string)
- konvert(char,string)
- main
- repeat
-
- goal
- main.
- include "MATCH.3"
-
- clauses
- literal(romans, ["IV", "IX", "XL", "XC", "CD", "CM",
- "M", "D", "C", "L", "X", "V", "I" ] ).
-
- equiv("0",""). equiv("1","I"). equiv("2","II").
- equiv("3","III"). equiv("4","IV"). equiv("5","V").
- equiv("6","VI"). equiv("7","VII"). equiv("8","VIII").
- equiv("9","IX"). equiv("10","X").
- equiv("40","XL"). equiv("50","L").
- equiv("90","XC"). equiv("100","C").
- equiv("400","CD"). equiv("500","D").
- equiv("900","CM"). equiv("1000","M").
-
- ten("I","X"). ten("V","L"). ten("X","C").
- ten("L","D"). ten("C","M"). ten("D","*").
- ten("M","*"). ten("*","*").
-
- replace("0",""):-!.
- replace("",""):- !.
- replace(A, B) :-
- frontstr(1, A, X, Rest),
- ten(X, X1),
- replace(Rest, Rest1),
- concat(X1, Rest1, B).
-
- int_roman("0",""):- !.
- int_roman("","0"):- !.
- int_roman(N, Roman) :-
- bound(N), !,
- match(N, [rtab(1), len(1)], [Rest, T]),
- equiv(T, RX),
- int_roman(Rest, RomRest),
- replace(RomRest, Rom1),
- concat(Rom1, RX, Roman).
- int_roman(N, R) :-
- bound(R),
- literal(romans, Rom),
- match(R, [any(Rom), rtab(0)], [A, Rest]),
- equiv(N1, A),
- int_roman(N2, Rest),
- str_int(N2, N2N),
- str_int(N1, N1N),
- NN = N1N + N2N,
- str_int(N, NN).
-
- main :-
- makewindow(1,7,7,"DEZIMAL - ROEMISCH",0,0,25,80),
- repeat,
- clearwindow,
- write("## Wahl der Konvertierungsrichtung ##"),
- nl, nl,
- write(" A Dezimal --> Roemisch"), nl,
- write(" B Roemisch --> Dezimal"), nl, nl,
- write("(Ende mit <Ctrl-Break>)"),
- readchar(Inp),
- nl, nl,
- write(" Zu transformierende Zahl: "),
- readln(Param),
- konvert(Inp,Param),
- fail.
-
- konvert('a',Param) :-
- int_roman(Param,Res), !,
- nl, nl,
- write("Roemisches Aequivalent von ",
- Param," ist ",Res ),
- readchar(_).
- konvert('A',Param) :-
- konvert('a',Param), !.
- konvert('b',Param) :-
- int_roman(Res,Param), !,
- nl, nl,
- write("Dezimales Aequivalent von ",
- Param," ist ",Res ),
- readchar(_).
- konvert('B',Param) :-
- konvert('b',Param), !.
-
-
- repeat.
- repeat:- repeat.
- /************** Ende BP4 **********************/
-