Содержание:
While в Паскале — цикл с предусловием
Алгоритм: Отделяем и удаляем последовательно последнюю цифру, наращивая счетчик.
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 | ||||
|
|
Пример:
Введите целое число: 1234 Сумма цифр числа 1234 равна 10.
[Название файла: L3task3.pas
]
[Название файла:
L3task4.pas
]
Детальный разбор работы цикла While в Паскале рассмотрен в видеоуроке:
youTube
Блок-схема решения:
Решение на Паскале:
Результат: S = 1.157
[Название файла: L3task5.pas
]
Вложенные циклы в Паскале
Существует возможность использования вложенных циклов в Паскале, когда в теле одного цикла вместо оператора стоит другой цикл.
Рассмотрим пример:
Pascal | PascalABC.NET | ||||
|
|
Произведение в Паскале
Точно также, как существует сумматор для сложения, для умножения в паскале тоже существует специальная конструкция:
Произведение вычисляется по рекуррентному выражению:
P=P*Y,
где P – промежуточные произведения
Y — сомножители
Рассмотрим пример вычисления факториала числа в Паскале с использованием цикла while
.
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 < 0
, то задача решается по формуле:
nd = 1 / (n1 * n2 * n3 * … * nd)
Т.е., решая программу на Паскале, учитываем:
- в программе на языке Паскаль количество итераций (повторений) цикла
while
должно быть равно показателю степени числа по модулю; - если показатель степени — отрицательное число, то нужно впоследствии единицу разделить на результат.
[Название файла:
L3task6.pas
]
Пример результата:
Введите член последовательности 4 Введите член последовательности -1 Введите член последовательности 5 Введите член последовательности 7 Введите член последовательности 0 Сумма положительных чисел = 16
[Название файла: L3task7.pas
]
Ляп в таблице для примера
спасибо! исправлено
А можно ли менять параметр цикла вручную? Например:
var list: array [10] of string; i: integer; c: char;
begin
i:=1;
while i<=10 do
case i of
1: …
2: …
3: …
4: i:=i-1;
5: …
…
end;
i:=i+1;
end.
задача номер 6 как делать ? если нельзя пользоваться sqr и sqrt? если например из числа 64 можно получить как 2 в 6 степени, 4 в 3 степени. или 8 во 2 степени. мне кажется что ваша задача не совсем подходит для данного раздела. прошу покажите решение или пришлите на почту я 3 часа сидел и не смог сообразить как ее сделать.