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

       

Программы с совместным использованием циклов repeat и while do


Пример 3.

Если мы сложим все цифры какого-либо числа, затем - все цифры найденной суммы и будем повторять это много раз, мы наконец получим однозначное число (цифру), называемое цифровым корнем данного числа. Например, цифровой корень числа 561 равен 3 (5 + 6 + 1 = 12; 1 + 2 = 3).

Составьте программу для нахождения числового корня числа.

Соображения  по составлению программы

Ясно, что в программе должен быть цикл, который определяет сумму цифр числа. В свою очередь, этот цикл должен также выполняться до тех пор, пока значение суммы цифр не станет равным одной цифре, т.е. станет меньше 10, но остается больше 0. Для этого надо организовать еще один цикл, который будет являться внешним

по отношению к циклу, подсчитывающему сумму цифр.

Одна тонкая особенность! Каждый раз после выполнения внутреннего цикла подсчета суммы цифр, значение этой суммы надо присваивать переменной, в которой содержится первоначальное число, т. е. заменять число на его сумму, проверять условие (не является ли сумма меньше десяти) и продолжать цикл уже с новым числом - суммой, если условие не выполняется. А ту переменную, в которой накапливалась сумма надо каждый раз не забывать обнулять.

Итак, если введенное число было присвоено переменной n, а сумма его цифр переменной s, то после подсчета суммы цифр, переменная  должна получить значение s (n:= s), проверить условие (n < 10), если оно еще не выполняется, тогда обнулить переменную s (s:= 0) и продолжить цикл подсчета суммы цифр.

Внешний цикл по проверке значения суммы организуем с помощью операторов repeat ... until

n < 10, а внутренний по подсчету суммы цифр с помощью операторов while

... do.

Программа

Program



Problem3; { Цифровой корень числа }

    uses WinCrt;

    var

       n, a, s : integer;

    begin

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

       a := n;

      repeat

         s := 0;

           while n <> 0 do

               begin

                  s := s + n mod 10; n := n div 10

               end;

         n := s

       until n < 10;

      writeln('Цифровой корень числа ', a, ' равен ', n)

    end.



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