Программа написания чисел прописью
Алгоритм.
В русском языке:
- каждая десятичная цифра в позиционной записи числа имеет уникальное имя собственное (числительное), которое однозначно определяется местоположением (номером позиции, разрядом) цифры,
- словесное название числа образуется последовательностью слов-числительных в порядке убывания разрядности цифр.
Вывод: для каждой цифры, в числовой записи, существует ровно десять уникальных названий. Эти названия удобно разместить в специальных справочных массивах содержащих ровно по десять символьных (строковых) переменных, причем в качестве индексов использовать числа 0, 1, 2,..,9.
Проводим последовательное, от старших к младшим разрядам, выделение цифр из заданного целого числа, что удобно делать путем операции целочисленного деления (div). Выделенная цифра (вернее целое число из диапазона [0,9]) используется как индекс для соответствующего справочного массива названий этой цифры.
Program propis;
Type T=array[0..9] of string[20]; {Описание структуры переменных для
справочников-названий цифр:
sZ00 – массив с названием сотен, т.е. цифры Z в числе Z00,
sZ0 - массив с названием десятков,
s1Z - массив с названием чисел второго десятка, т.е. 10, 11, 12, ...,19
sZ- массив с названием единиц }
Const sz00: T=('', 'сто', 'двести', 'триста', 'четыреста', 'пятьсот',
'шестьсот', 'семьсот', 'восемьсот', 'девятьсот');
sz0: T=('', '', 'двадцать', 'тридцать', 'сорок', 'пятьдесят',
'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто');
s1z: T=('', 'одиннадцать', 'двенадцать', 'тринадцать', 'четырнадцать',
'пятнадцать', 'шестнадцать', 'семнадцать', 'восемнадцать',
'девятнадцать');
sz: T=('ноль', 'один', 'два', ' три', 'четыре', 'пять'
,'шесть', 'семь', 'восемь', 'девять');
Var N, i, j: integer;
s: string; {строка, в которой будет размещено словесное название числа N }
Begin
N:=852; {N – исходное число, т.е. исходные данные ! }
if (N<0) or (N>999) then {контроль диапазона допустимости исходных данных}
begin Writeln(‘Заданное число вне допустимого диапазона’); Exit end;
j:=N; {создаем j копию числа N}
i:=j div 100; {выделяем i- количество сотен в числе N}
s:=sz00[i]; { внесение в строку S соответствующее цифре i название
из справочного массива }
j:=j-i*100; i:=j div 10; { удаляем из числа сотни и выделяем i-цифру десятков }
if i=1 then {особая ситуация: десяток - один} s:=s+' '+s1z[j-10]
else {количество десятков 0, 2, 3, ...9 }
begin
s:=s+' '+sz0[i]; { добавляем к строке S название десятков }
i:=j-i*10; {удаляем из числа десятки, т.е. остаются i-единицы }
if i<>0 then {если количество единиц значимое то добавляем их название }
s:=s+' '+sz[i];
end;
{особо выделяем ситуацию «чистого нуля!» } if N=0 then s:=sz[0];
writeln(N,'=',s); {печать на экран результата}
End.
Результат на экране: 852=восемьсот пятьдесят два
Дата добавления: 2021-12-14; просмотров: 400;