Перевод десятичного числа в запись римскими цифрами

Автор: | 09.09.2019

Алгоритм перевода из одной формы записи в другую прост. За  основу была взята программа, написанная на Паскале и представленная а книге “Программирование на языке PascaL” на странице 148. Программа идёт под номером 9.5.7.

var n: 0..3999;
k:(M,CM,D,CD,C,XC,L,XL,X,IX,V,IV,I);
s:integer;
begin
write(‘Введите исходное арабское число:’);
readln(n);
write(‘Результат:’);
for k:=M to I do begin
case k of
M:s:=1000; CM:s:=900; D:s:=500;
CD:s:=400;C:s:=100;XC:s:=90;
L:s:=50;XL:s:=40;X:s:=10;
IX:s:=9;V:s:=5;IV:s:=4;
I:s:=1;
end;
while n-s>=0 do begin
n:=n-s;
case k of
M:write(‘M’); CM:write(‘CM’); D:write(‘D’);
CD:write(‘CD’);C:write(‘C’);XC:write(‘XC’);
L:write(‘L’);XL:write(‘XL’);X:write(‘X’);
IX:write(‘IX’);V:write(‘V’);IV:write(‘IV’);
I:write(‘I’);
end; {case}
end; {while}
end {for}
end.

Вариант данной программы на языке VBA:

Sub Perevod_Arab_Rim()
Dim Mas1() As String
Dim Mas2() As Integer
Dim a As String
Dim k As Integer, L As Integer, i As Integer, j As Integer
Dim n As Integer, Kol As Integer
a = “M,CM,D,CD,C,XC,L,XL,X,IX,V,IV,I,”
b = “1000,900,500,400,100,90,50,40,10,9,5,4,1,”
L = Len(a)
k = 1
j = 0
‘Заполнения массива числами
For i = 1 To L
If Mid(a, i, 1) = “,” Then
j = j + 1
ReDim Preserve Mas1(j)
Mas1(j) = Mid(a, k, i – k)
k = i + 1
End If
Next
 
‘Значения римских цифр
L = Len(b)
k = 1
j = 0
For i = 1 To L
If Mid(b, i, 1) = “,” Then
j = j + 1
ReDim Preserve Mas2(j)
Mas2(j) = Mid(b, k, i – k)
k = i + 1
End If
Next
 
Kol = j
 
‘j – Количество элементов в массиве Mas1
For j = 1 To 100
n = Int(InputBox(“Введите целое число.  Выход – 0”, “Перевод натурального числа в запись римскими цифрами”, 0))
If n = 0 Then Exit For
s = 0
c = “”
Do While n > 0
For i = 1 To Kol
If n >= Mas2(i) Then
    c = c + Mas1(i)
    s = Mas2(i)
    Exit For
End If
 
Next
n = n – s
 
Loop
 
MsgBox c
Next j
Application.DisplayAlerts = False
ThisWorkbook.Close
End Sub

И последний вариант программы на Питоне:

a=[“M”,”CM”,”D”,”CD”,”C”,”XC”,”L”,”XL”,”X”,”IX”,”V”,”IV”,”I”]
b=[1000,900,500,400,100,90,50,40,10,9,5,4,1]
print(a)
print (b)
kol=len(a)

print (“\n”,kol)
n=int(input(“Введите число\n” ))

s=0
c=””
for k in range(1,kol):
for i in range(0,kol):
if n>=b[i]:
c=c+a[i]
s=b[i]
print(n,b[i],a[i])
n=n-s
break
print (c)

Можете сравнить размер программ и синтаксис. 

Ссылки на архив этих программ. Отступы для Питона чувствительны.