Написать программу перевода целого числа a из цифрового формата в прописной - Pascal ABC
Формулировка задачи:
Добрый день. Знаю, что такое уже было на вашем форуме, но оно было не полностью, а как доделать я не сильно знаю.
Задача:
Написать программу перевода целого числа a из цифрового формата в прописной. a < 1012 Пример: a = 123 ⇒ cто двадцать три.
Вот код, который я обнаружил на этом сайте:
Листинг программы
- var s:string;
- n:integer;
- begin
- repeat
- write('Введите число от 1 до 1000 n = ');
- read(n);
- until (n>0)and(n<=1000);
- case n div 1000 of
- 1000:s:='одна тысяча';
- else
- begin
- s:='';
- case n div 100 of
- 1:s:='сто';
- 2:s:='двести';
- 3:s:='триста';
- 4:s:='четыреста';
- 5:s:='пятьсот';
- 6:s:='шестьсот';
- 7:s:='семьсот';
- 8:s:='восемьсот';
- 9:s:='девятьсот';
- end;
- case n mod 100 div 10 of
- 2:s:=s+' двадцать';
- 3:s:=s+' тридцать';
- 4:s:=s+' сорок';
- 5:s:=s+' пятьдесят';
- 6:s:=s+' шестьдесят';
- 7:s:=s+' семьдесят';
- 8:s:=s+' восемьдесят';
- 9:s:=s+' девяносто';
- end;
- case n mod 100 of
- 10:s:=s+' десять';
- 11:s:=s+' одиннадцать';
- 12:s:=s+' двенадцать';
- 13:s:=s+' тринадцать';
- 14:s:=s+' четырнадцать';
- 15:s:=s+' пятнадцать';
- 16:s:=s+' шестнадцать';
- 17:s:=s+' семнадцать';
- 18:s:=s+' восемнадцать';
- 19:s:=s+' девятнадцать';
- else
- case n mod 10 of
- 1:s:=s+' один';
- 2:s:=s+' два';
- 3:s:=s+' три';
- 4:s:=s+' четыре';
- 5:s:=s+' пять';
- 6:s:=s+' шесть';
- 7:s:=s+' семь';
- 8:s:=s+' восемь';
- 9:s:=s+' девять';
- end;
- end;
- end;
- end;
- writeln(s);
- end.
Решение задачи: «Написать программу перевода целого числа 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д