[Back to MISC SWAG index] [Back to Main SWAG index] [Original]
}
From: BRIAN PAPE
Subj: YEAR ( ROMAN )
This is from last semester's computer bowl. Only problem is that it
converts from Roman to Arabic. :)
LCCC Programming Team
East Central College Computer Bowl
03-21-93
"Computer Killers"
Brian Pape
Brian Grammer
Mike Lazar
Christy Reed
Matt Hayes
Coach Steve Banjavcic
Program #2-3
Time to Completion: 3:47
}
program roman;
USES PRINTER;
const
num = 'IVXLCDM';
value : array[1..7] of integer = (1,5,10,50,100,500,1000);
var
i : byte;
s : string;
sum : integer;
begin
assign(lst,'');rewrite(lst);
writeln('Enter the Roman Numerals: ');
readln(s);
i := length(s);
while (i>=1) do
begin
if i > 1 then
begin
if pos(s[i],num) <= (pos(s[i-1],num)) then
begin
sum := sum + value[pos(s[i],num)];
dec(i);
end
else
begin
sum := sum + value[pos(s[i],num)] - value[pos(s[i-1],num)];
dec(i,2);
end; { else }
end
else
begin
sum := sum + value[pos(s[1],num)];
dec(i);
end; { else }
end; { while }
WRITELN(LST);
writeln(LST,'Roman numeral: ',s);
writeln(LST,'Arabic value: ',sum);
end. { }
{*
*
* ROMAN.C - Converts integers to Roman numerals
*
* Written by: Jim Walsh
*
* Compiler : Microsoft QuickC v2.5
*
* This Program Is Released To The Public Domain
*
* Additional Comments:
*
* Ported to TP v6.0 by Daniel Prosser.
*}
VAR
Value, DValue, Error : INTEGER;
Roman : STRING[80];
BEGIN
Roman := '';
IF ParamCount = 2 THEN
VAL(ParamStr(1), Value, Error)
ELSE
BEGIN
Write ('Enter an integer value: ');
ReadLn (Value);
END; { ELSE }
DValue := Value;
WHILE Value >= 1000 DO
BEGIN
Roman := Roman + 'M';
Value := Value - 1000;
END; { WHILE }
IF Value >= 900 THEN
BEGIN
Roman := Roman + 'CM';
Value := Value - 900;
END; { IF }
WHILE Value >= 500 DO
BEGIN
Roman := Roman + 'D';
Value := Value - 500;
END; { WHILE }
IF Value >= 400 THEN
BEGIN
Roman := Roman + 'CD';
Value := Value - 400;
END; { IF }
WHILE Value >= 100 DO
BEGIN
Roman := Roman + 'C';
Value := Value - 100;
END; { WHILE }
IF Value >= 90 THEN
BEGIN
Roman := Roman + 'XC';
Value := Value - 90;
END; { IF }
WHILE Value >= 50 DO
BEGIN
Roman := Roman + 'L';
Value := Value - 50;
END; { WHILE }
IF Value >= 40 THEN
BEGIN
Roman := Roman + 'XL';
Value := Value - 40;
END; { WHILE }
WHILE Value >= 10 DO
BEGIN
Roman := Roman + 'X';
Value := Value - 10;
END; { WHILE }
IF Value >= 9 THEN
BEGIN
Roman := Roman + 'IX';
Value := Value - 9;
END; { IF }
WHILE Value >= 5 DO
BEGIN
Roman := Roman + 'V';
Value := Value - 5;
END; { WHILE }
IF Value >= 4 THEN
BEGIN
Roman := Roman + 'IV';
Value := Value - 4;
END; { IF }
WHILE Value > 0 DO
BEGIN
Roman := Roman + 'I';
DEC (Value);
END; { WHILE }
WriteLn (DValue,' = ', Roman);
END.
{--------------------- Begin of function -----------------------------}
Function Roman (Number: Integer): String;
{ Converts Number to the Roman format.
If (Number < 1) Or (Number > 3999), the returned string will be empty!
}
Var
TempStr : String; { Temporary storage for the result string }
Begin
TempStr := '';
If (Number > 0) And (Number < 4000) Then
Begin
{ One 'M' for every 1000 }
TempStr := Copy ('MMM', 1, Number Div 1000);
Number := Number MOD 1000;
If Number >= 900 Then
{ Number >= 900, so append 'CM' }
Begin
TempStr := TempStr + 'CM';
Number := Number - 900;
End
Else
{ Number < 900 }
Begin
If Number >= 500 Then
{ Number >= 500, so append 'D' }
Begin
TempStr := TempStr + 'D';
Number := Number - 500;
End
Else
If Number >= 400 Then
{ 400 <= Number < 500, so append 'CD' }
Begin
TempStr := TempStr + 'CD';
Number := Number - 400;
End;
{ Now Number < 400!!! One 'C' for every 100 }
TempStr := TempStr + Copy ('CCC', 1, Number Div 100);
Number := Number Mod 100;
End;
If Number >= 90 Then
{ Number >= 90, so append 'XC' }
Begin
TempStr := TempStr + 'XC';
Number := Number - 90;
End
Else
{ Number < 90 }
Begin
If Number >= 50 Then
{ Number >= 50, so append 'L'}
Begin
TempStr := TempStr + 'L';
Number := Number - 50;
End
Else
If Number >= 40 Then
{ 40 <= Number < 50, so append 'XL' }
Begin
TempStr := TempStr + 'XL';
Number := Number - 40;
End;
{ Now Number < 40!!! One 'X' for every 10 }
TempStr := TempStr + Copy ('XXX', 1, Number Div 10);
Number := Number Mod 10;
End;
If Number = 9 Then
{ Number = 9, so append 'IX' }
Begin
TempStr := TempStr + 'IX';
End
Else
{ Number < 9 }
Begin
If Number >= 5 Then
{ Number >= 5, so append 'V' }
Begin
TempStr := TempStr + 'V';
Number := Number - 5;
End
Else
If Number = 4 Then
{ Number = 4, so append 'IV' }
Begin
TempStr := TempStr + 'IV';
Number := Number - 4;
End;
{ Now Number < 4!!! One 'I' for every 1 }
TempStr := TempStr + Copy ('III', 1, Number);
End;
End;
Roman := TempStr;
End;
[Back to MISC SWAG index] [Back to Main SWAG index] [Original]