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