Написать программу перевода целого числа a из цифрового формата в прописной - Pascal ABC
Формулировка задачи:
Добрый день. Знаю, что такое уже было на вашем форуме, но оно было не полностью, а как доделать я не сильно знаю.
Задача:
Написать программу перевода целого числа a из цифрового формата в прописной. a < 1012 Пример: a = 123 ⇒ cто двадцать три.
Вот код, который я обнаружил на этом сайте:
Решение задачи: «Написать программу перевода целого числа a из цифрового формата в прописной»
textual
Листинг программы
var
st: string;
n, i: int64;
c: array[1..4]of int64;
s: array[1..4, 1..3]of string;
begin
s[1, 1] := 'миллиард';
s[1, 2] := 'миллиарда';
s[1, 3] := 'миллиардов';
s[2, 1] := 'миллион';
s[2, 2] := 'миллиона';
s[2, 3] := 'миллионов';
s[3, 1] := 'тысяча';
s[3, 2] := 'тысячи';
s[3, 3] := 'тысяч';
s[4, 1] := '';
s[4, 2] := '';
s[4, 3] := '';
write('Введите число до 2 147 483 647 n=');
readln(n);
st := '';
c[1] := n div 1000000000;
c[2] := (n mod 1000000000) div 1000000;
c[3] := (n mod 1000000) div 1000;
c[4] := n mod 1000;
for i := 1 to 4 do
write(c[i], ' ');
writeln;
for i := 1 to 4 do
if c[i] <> 0 then
begin
if c[i] div 100 <> 0 then
case c[i] div 100 of
1: st := st + 'сто';
2: st := st + 'двести';
3: st := st + 'триста';
4: st := st + 'четыреста';
5: st := st + 'пятьсот';
6: st := st + 'шестьсот';
7: st := st + 'семьсот';
8: st := st + 'восемьсот';
9: st := st + 'девятьсот';
end;
if (c[i] mod 100) div 10 <> 1 then
begin
case (c[i] mod 100) div 10 of
2: st := st + ' двадцать';
3: st := st + ' тридцать';
4: st := st + ' сорок';
5: st := st + ' пятьдесят';
6: st := st + ' шестьдесят';
7: st := st + ' семьдесят';
8: st := st + ' восемьдесят';
9: st := st + ' девяносто';
end;
case c[i] mod 10 of
1: if i = 3 then st := st + ' одна' else st := st + ' один';
2: if i = 3 then st := st + ' две' else st := st + ' два';
3: st := st + ' три';
4: st := st + ' четыре';
5: st := st + ' пять';
6: st := st + ' шесть';
7: st := st + ' семь';
8: st := st + ' восемь';
9: st := st + ' девять';
end;
end
else
case (c[i] mod 100) of
10: st := st + ' десять';
11: st := st + ' одиннадцать';
12: st := st + ' двенадцать';
13: st := st + ' тринадцать';
14: st := st + ' четырнадцать';
15: st := st + ' пятндцать';
16: st := st + ' шестнадцать';
17: st := st + ' семнадцать';
18: st := st + ' восемнадцать';
19: st := st + ' девятнадцать';
end;
if (c[i] mod 100 >= 10) and (c[i] mod 100 <= 19) then st := st + ' ' + s[i, 3] + ' '
else
case c[i] mod 10 of
1: st := st + ' ' + s[i, 1] + ' ';
2..4: st := st + ' ' + s[i, 2] + ' ';
5..9, 0: st := st + ' ' + s[i, 3] + ' ';
end;
end;
writeln(st);
readln;
end.
Объяснение кода листинга программы
- В программе используется переменная
st, которая представляет собой строку. Она инициализируется пустой строкой. - Переменные
nиiиспользуются для хранения введенного пользователем числа и его част. Они инициализируются значением 0. - Массив
cиспользуется для хранения частного числа. Он инициализируется нулевыми значениями. - Массив
sиспользуется для хранения строк, представляющих целые числа. Он инициализируется нулевыми значениями. - Строка
s[1, 1]представляет первую цифру введенного числа. Значение этой строки устанавливается равным 'миллиард'. Аналогично, строкиs[1, 2]иs[1, 3]представляют вторую и третью цифры числа соответственно. - Строки
s[2, 1]..s[2, 3]представляют четвертую, пятую и шестую цифры числа соответственно. - Строка
s[3, 1]представляет первую цифру введенного числа. Значение этой строки устанавливается равным 'тысяча'. Аналогично, строкиs[3, 2]иs[3, 3]представляют вторую и третью цифры числа соответственно. - Строка
s[4, 1]представляет первую цифру введенного числа. Значение этой строки устанавливается равным пустой строке. - Строки
s[4, 2]иs[4, 3]представляют вторую и третью цифры числа соответственно. - Программа выполняет следующие действия:
- Выводит сообщение для запроса ввода числа.
- Считывает введенное число.
- Инициализирует переменную
stпустой строкой. - Вычисляет частные числа для каждой цифры введенного числа и сохраняет их в массиве
c. - Вычисляет количество цифр введенного числа и сохраняет его в переменной
n. - Использует цикл
forдля вывода каждой цифры числа в формате 'цифра', если она не равна нулю. - Если последняя цифра числа больше или равна 10, то добавляет к строке
stсоответствующую строку из массиваs. - Если последняя цифра числа находится между 10 и 19, то добавляет к строке
stсоответствующую строку из массиваs, используя операторif. - Выводит итоговую строку
st.