[МУЗЫКА]
[МУЗЫКА] Рассмотрим,
как можно разделить целое число на отдельные цифры.
Для этого мы можем использовать уже известные нам функции div – это
деление нацело, и mod – это вычисление остатка от деления.
Обращаю ваше внимание, что обе эти функции работают только для целых типов.
В качестве примера их использования рассмотрим число 123.
И первым делом, если мы запишем выражение 123 mod 10,
остаток от деления будет = 3, то есть мы получаем отдельно последнюю цифру числа.
Отбросим эту цифру, то есть выполним операцию 123 div 10,
получим 12, то есть две остальные цифры отдельно.
Далее снова применим ту же самую операцию к полученному числу.
Мы с вами рассматриваем выражение 12 mod 10, остаток от деления 12 на 10 у нас = 2.
И, если мы выполним операцию div, то получим 1.
Мы можем сделать ещё один шаг.
То есть мы рассмотрим выражение 1 mod 10,
это будет 1, и ещё один div 10 будет = 0.
То есть мы с вами завершили процесс выделения цифр.
Обращаю ваше внимание, что в данном случае мы получили цифры в обратном порядке:
сначала 3, затем 2, а потом 1.
И при помощи этих функций мы с вами будем разделять число на отдельные цифры.
Также рассмотрим некоторый новый приём организации надёжного ввода данных.
Когда мы с вами записываем ограничение на допустимость исходных данных, мы говорим,
что, допустим, число принадлежит к целому типу.
Но пользователь, вводя данные в нашу программу,
может ошибиться и случайно ввести не целое число, а вещественное.
Если мы помещаем результат в переменную целого типа, то тогда при попытке
это сделать у нас программа с вами выдаст сообщение об ошибке и аварийно завершится.
И мы с вами тогда попробуем сделать так, чтобы этого не происходило,
чтобы данные переспрашивались до тех пор, пока не будет введено правильное число.
Для этого мы с вами используем функцию,
которая округляет число до целого по правилам арифметики.
Эта функция называется round.
И мы будем проверять, что введено целое положительное число, то есть натуральное.
Если наше значение, которое мы ввели в переменную r вещественного типа,
является целым, то тогда round(r) = r.
Если же у него была дробная часть, то это условие будет неверным.
И в качестве примера рассмотрим программу, которая проверяет, что введено натуральное
число, а затем выводит на экран все цифры этого числа по отдельности.
Теперь рассмотрим программу, которая будет решать нашу задачу.
Программу я назову digits, то есть цифры.
Я использую переменные: r вещественного типа для организации надёжного ввода
данных, n и z — это переменные для самого числа и для очередной цифры.
Первым делом я организую цикл с постусловием,
который будет вводить данные и проверять, что данное введено правильно.
Этот цикл будет продолжаться, пока пользователь не введёт натуральное число,
то есть целое и положительное.
Я вывожу сообщение о том, что мне нужно натуральное n,
и читаю значение в переменную r.
Даже если поместить туда значение, у которого есть дробная часть,
оно будет прочитано.
Теперь я проверяю, правильные ли данные ввёл пользователь.
Цикл будет продолжаться до тех пор, пока не будет наше r числом положительным,
целым, то есть совпадающим с результатом округления этого числа до целого,
и, кроме того, оно не должно превышать величины maxint.
Мы с вами помним, что у вещественных чисел диапазон существенно шире, чем у целых.
Так вот, наша величина при преобразовании к целому типу должна в него поместиться.
То есть наше значение не должно выходить за границы этого типа.
Затем я привожу число к целому типу для того, чтобы можно было применять к
нему операции div и mod, потому что к вещественному типу они неприменимы.
Теперь я буду разделять число на цифры.
Первым делом я вывожу в сообщение о том, какое число у меня введено,
и дальше я вывожу слова «цифры числа», потому что внутри цикла цифры будут
выделяться по одной, и затем выводиться на экран.
Я не знаю, сколько цифр в моём числе, поэтому я использую цикл «пока».
Пока число больше 0, то есть пока при делении его на 10 мы не придём к 0,
я буду производить следующие действия.
Сначала я выполню операцию Z: = n mod 10.
Кстати, операций у меня много, поэтому перед ней был begin.
Теперь я полученную цифру выведу на экран.
И далее я отброшу её, я N: = n div 10,
то есть последняя цифра числа будет отброшена.
Затем я завершаю свой цикл словом end,
потому что там был begin, это составной оператор, много действий,
и наша программа завершается end., который соответствует самому первому begin.
Рассмотрим программу, которая разбивает число на отдельные цифры,
и при этом проверяется, что наше число является натуральным.
Напомню, что натуральное число — это целое и положительное.
Для ввода у нас используется переменная r вещественного типа, чтобы,
если пользователь ошибётся и введёт число, имеющее дробную часть,
наша программа не завершалась аварийно, а продолжала ввод.
Ввод у нас будет организован при помощи цикла с постусловием repeat until.
Ввод будет повторяться до тех пор, пока пользователь, действительно,
не введёт натуральное число.
То есть мы проверяем,
что число у нас положительное и совпадает с результатом округления его до целого.
И, кроме того, оно не превышает величины maxint, потому что у нас
с вами у целого типа диапазон существенно меньше, чем у вещественного.
После того, как мы ввели наше число, мы приводим его к целому типу,
то есть округляем, а затем разбиваем число на цифры, выводим исходное число,
показываем по отдельности все «цифры числа»,
и, пока оно будет > 0, мы отделяем одну цифру, используя операцию mod,
выводим её на экран и отбрасываем её,
используя операцию div, то есть целочисленное деление.
Запустим нашу программу.
Допустим, я ввожу натуральное число 1357.
И в результате работы программы получаются
цифры этого числа, которые выводятся на экран по одной.
Обращаю ваше внимание, что порядок получения цифр — обратный.
Теперь запустим программу ещё раз и посмотрим, что будет,
если я ввожу ненатуральное число.
Допустим, оно отрицательное.
Происходит повторный ввод, потому что у нас не выполнилось условие о том,
что число у нас должно быть > 0.
Теперь предположим, я возьму не целое число.
Опять повторный ввод,
потому что не целое число не может являться натуральным.
Теперь, если я возьму число действительно целое,
то получаю цифры этого числа по отдельности.
Таким образом, мы с вами научились обеспечивать надёжный ввод,
то есть при вводе числа, которое не является натуральным, мы можем обработать
случай, когда пользователь вводит нам вместо целого — вещественное число.
Наша программа переспрашивает данные до тех пор, пока не будут введены
правильные данные.
[МУЗЫКА]
[МУЗЫКА]