Практика программирования (Бейсик, Си, Паскаль)


Задачи, советы и ответы - часть 17


begin

s:='0.';

i:=l;

repeat

q:=m*10 div n;

p:=m*10 mod n;

rest[i]:=p;

if p=0 then begin

frac_to_str:==s+chr (q+48) ;

exit;

end;

for j:=l to i-1 do

if p=rest[j] then

begin insert(' (',s,j+2); frac_to_str:=s+')';

exit;

end;

inc(i);

s:=s+chr(q+48);

m:=p;

until p=0;

end;

begin

writeln('Введите числитель и знаменатель дроби :');

readln(m,n);

writeln(m,'/',n, ' = ', frac_to_str(m,n));

readln; end.

Задание 3.11. Перевод чисел в римскую систему счисления

Составить функцию символьного (строкового) типа, аргументом которой является натуральное число из интервала [1, 3999]. Функция должна возвращать строку с эквивалентным значением в формате римской системы счисления. Напомним, что в римской системе счисления используются большие латинские буквы — M(1000), O (500), C(100), L (50), X(10), V(5) и I(1). Если меньшая "цифра" находится левее "большей", то она вычитается (например: IV == V-I = 4, IX= X- I= 9, XL = L - X- 40). Если меньшая "цифра" расположена правее, то она прибавляется (например: VI = = V+ I= б, XI = X+ I= I I, LX = L + X = 60). Для некоторых "цифр" римская система допускает наличие до трех идущих подряд одинаковых

цифр —

I I= I + I = 2,

I I I = I + I+ I= 3,

XXX = X + X + X = 30,

ССС == C+ C+ C= 300,

MMM = M+ M+ M + 3000.

Совет 1 (общий)

Заведем два массива — символьный с наиболее характерными сочетаниями римских "цифр" и числовой с соответствующими значениями этих сочетаний. Оба массива разумно расположить в порядке убывания числовых значений (табл. 3.1).

Таблица 3.1. Расположение массива в порядке убывания числовых названий

Индекс элемента

Символьный массив

Числовой массив

0

M

1000

1

CM

900

2

D

500

3

CD

400

4

С

100

5

ХС

90

6

L

50

7

XL

40

8

X

10

9

IX

9

10

V

5

11

IV

4

12

I

1

Начинаем вычитать из переводимого числа первый элемент числового массива и вычитаем до тех пор, пока результат остается положительным. Каждый раз, когда вычитание возможно, к результирующей строке присоединяем соответствующее символьное значение. И так продолжаем экспериментировать с каждым элементом числового массива. Кстати, сумма всех элементов равна 3999, чем и объясняется ограничение на допустимый диапазон обрабатываемых чисел.




- Начало -  - Назад -  - Вперед -



Книжный магазин