Паскаль. Основы программирования

       

Циклы в циклах


Рассмотрим еще один пример, где уже приходиться использовать два цикла, один внутри другого.

Пример 5. Составить программу вывода всех натуральных чисел, меньших n, квадрат суммы цифр которых равен заданному числу m.

Сущность задачи такова. Вводится натуральное число, до которого надо выводить все натуральные числа, удовлетворяющие заданному условию. Пусть, например, пользователь введет число - 21.

Второе число, которое надо ввести пользователю - это число, которому равен квадрат суммы цифр натуральных чисел.

Понятно, что это число должно быть точным квадратом, оно может быть: 4, 9, 16, 25, 36 и т.д.

Допустим, что пользователь ввел число 4.

Надо найти все натуральные числа от 1 до 21, квадрат суммы цифр которых равна 4. Начинаем из чисел: 1, 2, 3, 4, 5, ..., 21, выбирать те, которые удовлетворяют заданному условию.

Первое из них - 2, так как 22 = 4, второе - 11, так как (1 + 1)2 = 22

= 4, третье - 20, так как (2 + 0)2 = 22 = 4.

Других натуральных чисел до 21, удовлетворяющих такому условию нет.

Все отобранные числа надо вывести на экран, т. е. 2, 11 и 20.

Алгоритм

1. Раздел описаний.



Переменные: n, m, k, a, p, s. Тип целый.

n - для границы значений натуральных чисел, m - для числа, с которым сравнивается квадрат суммы цифр (точный квадрат), k - для натуральных чисел от 1 до n, a - для запоминания натурального числа, перед тем, как будет определяться сумма его цифр, p - для цифр числа, s - для суммы цифр.

2. Раздел операторов.

Ввод значений n и m. Установить первоначальное значение для k (эта переменная "перебирает" все натуральные числа от 1 до n, k := 1).

Цикл, пока

k <= n.

В цикле: установить первоначальные значения для суммы s (s:=0); запомнить число в переменную a (a := k).

Цикл для подсчета суммы цифр, пока k <> 0.

В цикле: выделять по одной цифре числа, известным способом; прибавлять по одной цифре к сумме; уменьшать число на последнюю цифру и на порядок.

Закончить цикл для подсчета суммы цифр.

Проверка выполнения условия.


Если

квадрат суммы цифр равен заданному числу,

       тогда

вывести это натуральное число на экран.

Перейти к проверке следующего числа.

Закончить основной цикл проверки чисел.

3. Закончить программу.

По этому алгоритму составим программу.

Program Problem5;

     uses WinCrt;

     var

        n, m, k, a, p, s : integer;

     begin

        write('Введите натуральное число, до которого ');

        write('выводить искомые числа '); readln(n);

        writeln('Введите число, с которым сравниваете квадрат');

        write('его суммы цифр. Оно должно быть точн. квадрат. '); readln(m);

        write('Искомые числа: ');

        k := 1;

           while k <= n do

              begin

                 s := 0; a := k;

                 while k <> 0 do

                    begin

                       p := k mod 10;

                       s := s + p; 

                       k := k div 10

                    end;

                  if sqr(s) = m then write(a, ' ');

                  k := a + 1

              end

   end.

В программе два цикла. Один - внешний, для натуральных чисел, второй - внутренний, для подсчета суммы цифр числа.


Содержание раздела