Алгоритм перевода из одной формы записи в другую прост. За основу была взята программа, написанная на Паскале и представленная а книге “Программирование на языке 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)
Можете сравнить размер программ и синтаксис.
Ссылки на архив этих программ. Отступы для Питона чувствительны.