Задано некоторое натуральное число, не превышающее миллиона. Требуется записать его словами - Turbo Pascal
Формулировка задачи:
Решение задачи: «Задано некоторое натуральное число, не превышающее миллиона. Требуется записать его словами»
//Заводим 2 массива
c:array[1..2]of integer;{массив тысяч(0-999) и единиц(0-999)}
s:array[1..3]of string;{массив склонений тысяч}
//заполняем массив S
s[1]:='тысяча';
s[2]:='тысячи';
s[3]:='тысяч';
//вводим число от 0 до 1 миллиона с проверкой диапазона
repeat
write('Введите число от 0 до 1 000 000 n=');
readln(n);
until(n>=0)and(n<=1000000);
//если 1000000 или ноль то сразу пишем
if n=1000000 then st:='один миллион'
else if n=0 then st:='ноль'
else //иначе
begin
st:='';
c[1]:=n div 1000; //выделяем тысячи
c[2]:=n mod 1000; //выделяем единицы
for i:=1 to 2 do //переволим тысячи и единицы в число прописью
if c[i]<>0 then
begin
if c[i] div 100<>0 then //если не меньше 100
case c[i] div 100 of //делим на 100, определяем первую цифру
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 //и если не 1 то
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=1 then st:=st+' одна' else st:=st+' один'; //подбираем слово
2:if i=1 then st:=st+' две' else st:=st+' два'; //для тысяч и единиц
3:st:=st+' три'; //для цифр >1 одинаково
4:st:=st+' четыре';
5:st:=st+' пять';
6:st:=st+' шесть';
7:st:=st+' семь';
8:st:=st+' восемь';
9:st:=st+' девять';
end;
end
else //если вторая цифра=1
case (c[i] mod 100) of //если 2 последние цифры 11..19
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 i=1 then //если тысячи
begin
//если 11..19 то + 'тысяч'
if(c[i] mod 100>=10) and (c[i] mod 100<=19) then st:=st+' '+s[3]+' '
else //иначе
case c[i] mod 10 of
1:st:=st+' '+s[1]+' ';//1=тысяча
2..4:st:=st+' '+s[2]+' ';//2..4=тысячи
5..9,0:st:=st+' '+s[3]+' ';//5..9=тысяч
end;
end;
end;
end;
writeln(st);//выводим ответ
Объяснение кода листинга программы
Этот код на Turbo Pascal предназначен для преобразования натурального числа в текст, используя словарь слов для каждой тысячи, сотни и единицы.
Сначала объявляются два массива: c для хранения тысяч и единиц, и s для хранения слов, используемых при описании чисел.
Затем в цикле вводится число от 0 до 1 000 000. Если это число равно 1 000 000, то выводится слово один миллион. Если число равно 0, то выводится слово ноль. В противном случае число разбивается на тысячи и единицы, и эти цифры затем преобразуются в слова, которые выводятся в формате прописью.
Цифры обрабатываются в порядке их появления: сначала тысячи, затем сотни, затем единицы. Если последняя цифра числа равна 1, то вместо слова одна используется слово один, и так далее.
Если вторая цифра числа равна 1, то также обрабатывается в соответствии с правилами, но вместо слова один используется слово десять, одиннадцать, и т.д., в зависимости от значения последней цифры.
Наконец, выводится итоговое слово, которое представляет собой преобразованное число.