Практическое задание №12
Тема: Программная реализация несложного алгоритма
Цель: изучить на основе готовой программы операторы циклической структуры языка Pascal и научиться составлять программы с использованием операторов цикла «ДО» и «ПОКА».
Оборудование и материалы: практическое задание, компьютер, программа Турбо Паскаль.
Теоретические сведения к практическому заданию
Цикл – это многократные повторяемые действия. В Турбо Паскале существует 3 основных вида циклов:
-цикл с параметром
-цикл с предусловием
-цикл с постусловием
Цикл с параметром
Оператор имеет следующий формат: For i:=A to B do S; где
i – счетчик цикла, является переменной порядкового типа данных.
А – начальное значение, В – конечное значение счетчика цикла.
S – тело цикла (повторяющиеся действия).
Цикл работает следующим образом: переменной i присваивается начальное значение A, если A<=B, то выполняется тело цикла S, после чего значение счетчика цикла i автоматически увеличивается на 1 и опять сравнивается с B. Цикл будет повторяться до тех пор, пока значение счетчика i не станет больше B. Если тело цикла S состоит из нескольких операторов, то они заключаются в операторные скобки (begin…end). Если в операторе for.. to последнее значение счетчика цикла меньше первого, то тело цикла не выполняется ни одного раза.
Блок-схема выглядит следующим образом:
Существует еще одна разновидность цикла с параметром: For i:=A downto B do S; где A>=B
Цикл работает аналогично предыдущему, но после выполнения тела цикла, значение счетчика цикла автоматически уменьшается на 1. Если A<B, то цикл не выполнится ни разу.
Цикл с предусловием
Цикл с параметром следует применять, когда заранее известно, сколько раз необходимо повторить те или иные действия. Однако во многих случаях циклические действия необходимо выполнять пока не будет достигнут определенный результат. В этом случае используются другие разновидности циклов: цикл с предусловием и цикл с постусловием.
Цикл с предусловием (цикл «пока») имеет следующий формат: While условие do S;
В качестве условия можно использовать любое логическое выражение, которое может быть либо истиной (true) ли ложью (false). S – тело цикла.
Сначала проверяется условие, если оно – истина, то выполняется тело цикла S и опять проверяется условие. Цикл будет повторяться до тех пор, пока условие – истина, как только условие станет ложным – происходит выход из цикла. Если изначально условие – ложь, то тело цикла не выполнится ни разу. В отличии от цикла с параметром в этом виде цикла не предусмотрено автоматическое изменение переменной цикла, поэтому в теле цикла S должны быть команды, изменяющие значение переменной цикла. В противном случае при запуске произойдет так называемое зацикливание программы (т.е. выполнение бесконечного цикла).
Если тело цикла S состоит из нескольких операторов, то они заключаются в операторные скобки (begin…end).
Блок-схема выглядит следующим образом:
Цикл с постусловием
Формат оператора: Repeat S Until условие; где
S – тело цикла, условие – любое логическое выражение.
Принципиальное отличие оператора repeat...until (повторять до тех пор, пока) от оператора while...do в том, что проверка условия производится не перед началом выполнения оператора, а в его конце, когда решается вопрос, повторить ли еще раз действия. Поэтому тело этого цикла всегда выполняется по крайней мере один раз. Кроме того цикл будет повторяться, когда условие – ложно, как только условие станет истинным – происходит выход из цикла.
Блок-схема цикла с постусловием:
Тестирование готовой программы
Цикл с параметром
Задача №1: Найти сумму всех натуральных чисел от 1 до 100
Решение задачи:
Определяем:
Параметр цикла – переменная i;
Начальное значение параметра цикла – i:=1;
Конечное значение параметра цикла – i:=100;
Начальное значение суммы – s:=0;
Рабочий блок – s:=s+i
Проверка окончания цикла – 1<100;
Формула изменения параметра цикла – i:=i+1.
Программа будет выглядеть следующим образом:
program zadacha1_12; | Название программы |
var i, s: integer; | Описание переменных |
Begin | Начало программы |
s: = 0; | Начальное значение суммы |
For i:=1 to 100 do | Начало цикла «ДО», указывается начальное значение параметра цикла i=3, конечное значение параметра цикла 100 |
s: = s + i; | Вычисление суммы чисел |
writeln(‘сумма от 1 до 100’, ‘=’,s); | Вывод искомой суммы |
End. | Завершение программы |
Цикл с предусловием
Program zadacha2_12; | Название программы |
var i, s: integer; | Описание переменных |
Begin | Начало программы |
s: = 0; i:=l; | Начальное значение суммы и параметра цикла |
while i <=100 do | Начало цикла «ПОКА» |
begin | Начало тела цикла «ПОКА» |
s: = s + i; | Вычисление суммы чисел |
i: = i + 1; | Изменение параметра цикла с указанием шага параметра |
end; | Завершение тела цикла «ПОКА» |
writeln('cyммa от 1 до 100', '=', s); | Вывод искомой суммы |
End. | Завершение программы |
Цикл с постусловием
Program zadacha3_12; | Название программы |
var i, s: integer; | Описание переменных |
Begin | Начало программы |
s: = 0; i:=l; | Начальное значение суммы и параметра цикла |
repeat | Начало цикла «ПОКА» |
begin | Начало тела цикла «ПОКА» |
s: = s + i; | Вычисление суммы чисел |
i: = i + 1; | Изменение параметра цикла с указанием шага параметра |
end; | Завершение тела цикла «ПОКА» |
until i > n; | Проверка условия выхода из цикла |
writeln('cyммa от 1 до 100', '=', s); | Вывод искомой суммы |
End. | Завершение программы |
Задача №2: составить программу для вычисления значения суммы
.
Решение задачи:
Определяем:
1. Параметр цикла – переменная k;
2. Начальное значение параметра цикла – k:=4;
3. Конечное значение параметра цикла – k:=12;
4. , где S – промежуточная сумма и
.
5. Начальное значение промежуточной суммы – S:=0;
6. Рабочий блок – .
7. Проверка окончания цикла – ;
8. Формула изменения параметра цикла – k:=k+1.
Program zadacha2_12; | Название программы |
var k, s, z, x: integer; | Описание переменных |
Begin | Начало программы |
if x = 4 then writeln('Нет решения'); else | Проверка знаменателя на 0, если знаменатель равен нулю, то выводится текст «Нет решения», если не равен нулю– то выполняется цикл |
Begin | Начало цикла «ДО» |
S:=0 | Начальное значение суммы |
FORk=4 TO12 do | указывается начальное значение параметра цикла k=4, конечное значение параметра цикла 12 и шаг изменения параметра цикла |
S=S+x^2*(k+1)/(x-4); | Вычисление промежуточной суммы |
End; | Завершение цикла «ДО» |
z=31*x^2+5*S; | Вычисление итоговой суммы |
writeln('cyммa z = ', z); | Вывод искомой суммы |
End. | Завершение программы |
Содержание задания
Задание №1
Составить программу для решения задачи, используя цикл «ДО».
Условие задачи: Написать программу подсчета суммы S первых 1000 членов гармонического ряда 1+1/2+1/3+1/4+...1/N
Программа:
Ответ: _______
Задание №2
Составить программу для вычисления значения суммы (Задача 2), используя цикл «ПОКА»:
Программа:
Записать свои данные в таблицу:
Значения исходных данных | Значения искомых данных |
Задание №3
Ответьте на контрольные вопросы к практическому заданию
Задание №4
1. Сделайте вывод о проделанном практическом задании.
2. Сдайте отчет преподавателю.
Контрольные вопросы
1. Какая программа называется циклической?
2. Какие существуют циклы в языке Паскаль?
3. Какой формат записи имеет цикл с параметром? Как он работает и в каких случаях применяется?
4. Какой формат записи имеет цикл с предусловием? Как он работает.
5. Какой формат записи имеет цикл с постусловием? Как он работает.