На занятии изучается алгоритм работы с циклом с предусловием While в Паскале, рассматривается пример возведения в степень
While в Паскале — цикл с предусловием
Пример: Определить количество цифр в введенном целом числе, не превышающем 2000000.
Алгоритм: Отделяем и удаляем последовательно последнюю цифру, наращивая счетчик.
n | счетчик |
246 | 0 |
24 | 1 |
2 | 2 |
0 | 3 |
В чем сложность?: Заранее не определено и неизвестно, сколько цифр нужно убрать, т.е. сколько шагов необходимо сделать.
Как выполнить: Надо перестать отделять цифры, когда n = 0, т.е. надо выполнять пока n > 0
Блок-схема решения:
Блок-схема решения
Решение примера на Паскале:
Цикл while
в Паскале применяется для создания повторений с неизвестным заранее их числом. Повторения (итерации) будут осуществляться, пока истинно некоторое условие.
Блок-схема, соответствующая циклу while в Паскале:
while условие do {Пока условие истинно выполняется оператор} оператор;
- Здесь оператор, стоящий после служебного слова
do
, образует тело цикла и будет выполняться, пока значение"условия"
равноtrue
(истина). - Если операторов должно быть несколько, тогда необходимо применять составной оператор.
- Условие пересчитывается каждый раз при входе в цикл.
- Непосредственно
условием
циклаwhile
может быть переменная или логическое выражение. - Операторы тела цикла
while
выполнятся только в том случае, если условие будет истинно, если условие ложно — они игнорируются, и программа продолжается с тех операторов, которые стоят уже после конструкции. Таким образом, это существенное отличие цикла с предусловием от цикла с постусловием.
Рассмотрим использование цикла while
в Паскале на решенном примере:
Пример: Печатать «ноль» указанное количество раз
Показать решение:
Pascal | PascalABC.NET | ||||
|
|
Задача 3. Ввести целое число и найти сумму его цифр.
Пример:
Введите целое число: 1234 Сумма цифр числа 1234 равна 10.
[Название файла: L3task3.pas
]
Задача 4. Вычислять с использованием цикла while квадратные корни из чисел 900, 893, 886, 879 и т.д. до тех пор, пока это можно делать.
[Название файла: L3task4.pas
]
Детальный разбор работы цикла While в Паскале рассмотрен в видеоуроке:
Пример: найти сумму всех элементов последовательности:
которые по модулю больше 0,001:
Алгоритм:
Блок-схема решения:
Блок-схема решения
Решение на Паскале:
Решение на Паскале
Задача 5: Вычислить сумму элементов следующей последовательности с точностью 0,001:
Результат: S = 1.157
[Название файла: L3task5.pas
]
Вложенные циклы в Паскале
Существует возможность использования вложенных циклов в Паскале, когда в теле одного цикла вместо оператора стоит другой цикл.
Важно: Главным обстоятельством во вложенных циклах является использование разных переменных для счетчиков внутреннего и внешнего циклов
Рассмотрим пример:
Пример: Вывести таблицу умножения, используя вложенные циклы в паскале.
Показать решение:
Pascal | PascalABC.NET | ||||
|
|
Произведение в Паскале
Точно также, как существует сумматор для сложения, для умножения в паскале тоже существует специальная конструкция:
Произведение вычисляется по рекуррентному выражению:
P=P*Y,
где P – промежуточные произведения
Y — сомножители
Рассмотрим пример вычисления факториала числа в Паскале с использованием цикла while
.
Пример цикла While в Паскале для вычисления факториала 10! (10!=1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10)
1 2 3 4 5 6 7 8 9 10 11 12 | var fact, n : integer; begin fact := 1; {начальное значение факториала =0! } n := 1; {начальное значение для условия } while n<=10 do {условие } begin {начало тела конструкции с составным оператором } fact := fact*n; {вычисление факториала n! } n := n + 1 {n должно меняться в теле конструкции} end; {конец тела цикла } writeln(’10!= ’,fact); {вывод результата расчета } end. |
Здесь необходимо обратить внимание на то, что присваивание n := 1
стоит до цикла, если этого не сделать, то условие будет работать некорректно, так как переменная n
будет пуста.
Программа возведения в степень числа в Паскале
Для начала уточним, что есть формула вычисления степени на Паскале. Но мы не будем ее использовать, а разберем алгоритм решения задачи возведения в степень.
Для того чтобы возвести число в степень, его надо умножить само на себя ровно столько раз, чему равен показатель степени.
Таким образом, возведение числа n
в степень d
можно выразить так:nd = n1 * n2 * n3 * … * nd
, где нижние индексы просто указывают очередное по счету число n
.
Еще необходимо учесть следующее:
- число в нулевой степени равняется
1
- если показатель степени отрицателен, т.е.
d , то задача решается по формуле:
nd = 1 / (n1 * n2 * n3 * … * nd)
Т.е., решая программу на Паскале, учитываем:
- в программе на языке Паскаль количество итераций (повторений) цикла
while
должно быть равно показателю степени числа по модулю; - если показатель степени — отрицательное число, то нужно впоследствии единицу разделить на результат.
Задача 6. Вычислить в Паскале степень числа, используя цикл while.
[Название файла: L3task6.pas
]
Задача 7. Дана последовательность вещественных чисел, признак завершения которой — число 0 (оно не считается элементом последовательности). Найти сумму всех положительных элементов этой последовательности.
Пример результата:
Введите член последовательности 4 Введите член последовательности -1 Введите член последовательности 5 Введите член последовательности 7 Введите член последовательности 0 Сумма положительных чисел = 16
[Название файла: L3task7.pas
]
Факториал – произведение натуральных чисел от единицы до заданного числа. Имеет условное обозначение в виде восклицательного знака. n!=1*2*3*. *n (Например: 3!=1*2*3=6).
В Turbo Pascal факториал находится, как правило, двумя способами: с помощью цикла или с помощью рекурсии.
Вычисление факториала в pascal с помощью цикла
Данный способ нахождения факториала исключительно прост. В цикле от 1 до n умножается число само на себя. При этом необходимо учитывать условие, что 0!=1. Ниже представлена реализация программы с помощью цикла for. Аналогично используются repeat и while.
if (n=0) then writeln(‘0!=1’) else
if x=0 then fact:=1
Факториал числа – Вычисление с помощью цикла (1 способ)
Факториал – Нахождение факториала в паскале с помощью рекурсии (2 способ)
Задача
Факториал числа представляет собой произведение всех натуральных чисел от 1 до этого числа включительно. Например, факториал числа 7 выглядит так:
1 * 2 * 3 * 4 * 5 * 6 * 7
Факториал числа обозначается как само число после которого следует восклицательный знак. Например, 7!. Таким образом:
7! = 1 * 2 * 3 * 4 * 5 * 6 * 7 = 5040
С увеличением числа его факториал быстро возрастает. Так если 3! = 6, то уже 10! = 3628800. Поэтому для натуральных чисел больше 12-ти в языке программирования Паскаль просто так факториал вычислить нельзя.
Допустим, требуется определить факториал числа, которое ввел пользователь.
Решение
Переменной factorial сначала присваивается значение 1.
0! = 1 и 1! = 1.
Если пользователь ввел число больше единицы, то выполняется цикл, в теле которого на каждой итерации значение переменной factorial умножается на следующее натуральное число (переменную i ).
Обучение программированию идёт по пути от простого к сложному. Освоив типы данных и операторы языка, переходят к циклическим конструкциям. Задач на циклы существует бесчисленное количество: начиная от вывода цифр в столбик до подсчёта сумм по сложным формулам. Тем не менее у начинающих программистов остаётся вопрос: «Как вычислить факториал в «Паскале»?»
Реализовать задачу можно как минимум тремя способами. Отличаются они используемыми операторами.
Математические сведения
Перед тем как перейти к построению алгоритмов и написанию программ, следует изучить теорию. В математике факториалом называют произведение целого числа, для которого вычисляется выражение, на целые положительные числа меньше его.
Понять определение поможет пример. Пусть требуется выполнить нахождение факториала для числа 3. Решение: 3! = 3 * 2 * 1 = 6.
Обозначается действие восклицательным знаком, который ставится после числа. Важное замечание: факториал определён только для целых положительных чисел. Вместе с тем, введено понятия для нуля: 0! = 1.
Считать выражение для больших значений вручную – занятие долгое. Чтобы убыстрить процесс вычислений, используют компьютерные программы. Далее рассмотрены способы, как найти факториал в «Паскале».
Первый способ
Код ниже показывает вариант программы.
В примере используют составную конструкцию с условием, которое записывается перед телом цикла. Синтаксис записи:
Выполняется код следующим образом: программа проверяет истинность выражения , в случае положительной проверки переходит на .
Возвращаясь к программе, нужно обратить внимание на следующие строки:
- 2 – задаётся число n, для которого будет выполнен расчёт;
- 6 – заголовок цикла;
- 7 – начало цикла;
- 8 – вычисление переменной fact, которая хранит значение факториала числа n;
- 9 – увеличение переменной-счётчика на единицу;
- 10 – конец цикла.
Второй способ
Следующий предлагает вычислить факториал в «Паскале» с помощью оператора repeat.
Конструкция цикла: repeat until <условие>;
Чтобы понять, как работает программа, рассмотрим её построчно:
- 2 – константе n назначается число, для которого выполняется вычисление;
- 7 – начало цикла;
- 8, 9 – расчёт факториала и увеличения счётчика i;
- 10 – конец тела цикла;
- 11 – проверка условия, поскольку условие располагается после последовательности операторов, повтор действий будет выполнен как минимум один раз.
Третий способ
Последняя программа также дает возможность вычислить факториал в «Паскале» и является самой компактной по размеру. Причина – используемый оператор for, для которого увеличение счётчика i задаётся в параметрах цикла.
Работает код следующим образом (цифрами указаны строки листинга):
- 2 – константе n присваивают значение числа, для которого вычисляется факториал;
- 6 – задаются параметры цикла – начальное и конечное значения;
- 7 – начало цикла;
- 8 – вычисление переменной fact;
- 9 – конец цикла.
Замечание
Даже для чисел из первой десятки факториал имеет значение больше, чем допускает тип данных integer. Поэтому программа в «Паскале» покажет сообщение об ошибке. Исправить её просто – нужно заменить тип данных для переменной-результата на longint или использовать типы для хранения вещественных значений.
No related posts.
No related posts.