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


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


for(a2=0; a2<10; а2++)

for(al=0; al<10; al++)

for(a0=0; a0<10; a0++)

if(a2+al+a0==n) printf("%4d",100*a2+10*al+a0);

getch(); }

Программа 2_10.pas

program numbers;

{ Генерация чисел с заданной суммой цифр }

var

а2,al,aO,n:integer; begin

write('Введите число в диапазоне от 0 до 27 : ');

readln(n);

writeln('Список чисел, сумма цифр которых равна ',n, ' :');

for a2:=0 to 9 do

for al:=0 to 9 do

for a0:=0 to 9 do

if (a2+al+a0)=n then write(100*a2+10*al+a0:4);

readln;

end.

Задание 2.11. Вывод числа словами

Составить строковую функцию num_to_3tr(n), аргументом которой является целое число (|n| < 1000). Возвращаемое значение должно быть строкой, в которой величина п представлена словами. Например:

num_to_str(-87) = "минус восемьдесят семь".

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

Очевидно, что придется завести набор строк с символьными эквивалентами некоторых чисел. Конечно, нежелательно, чтобы в таком массиве было использовано 1000 констант — "ноль", "один"....."девятьсот девяносто девять". Однако без минимального набора из трех массивов — малые числа ("ноль", "один", ..., "девятнадцать"), десятки ("двадцать", "тридцать", "девяносто") И СОТНИ ("сто", "двести"..... "девятьсот") — нам не обойтись. Перед анализом цифр числа у него целесообразно удалить знак и, в случае необходимости, приклеить в начале результирующей строки значение "минус".

Совет 2 (Си)

Для правильной работы функции num_to_str следует подключить заголовочный файл string.h. Обратите внимание на объявление локальной переменной Result в теле функции. Если исключить из этого описания спецификатор static, то переменная Result превратится в локальную строку и память под нее будет выделена только на время работы функции. Поэтому нет никакой гарантии, что сформированный в ней результат работы функции сохранится после возврата в головную программу. Попробуйте удалить описатель static и сравните значение Result в теле функции с тем, что выдаст головная программа, например при N=999.




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