Вы находитесь на странице: 1из 5

Тема: Программирование циклических структур на языке Паскаль.

Теоретическая часть.
Идея цикла возникла в XIX веке.
Цикл позволяет многократно выполнить некоторое множество действий, задаваемых операторами,
составляющими его тело.
В Паскале имеется несколько видов оператора цикла.

1. Оператор цикла с предусловием. While...Do...


Данный оператор имеет вид: WHILE логическое выражение DO оператор (тело цикла);
При выполнении оператора WHILE вначале
вычисляется значение логического выражения.
Если это значение истинно, выполняется 1
Лог. выражение ложь
оператор, следующий за служебным словом DO, (условие
затем управление передается на начало цикла - продолжения
Выход из цикла
WHILE, вычисление значения логического цикла)
выражения проверяется вновь и т. д., до тех пор,
пока оно не примет значение «ложь». Если истина
выражение принимает значение «ложь» при Оператор –
первой же проверке, то оператор не выполнится ни тело цикла
разу.
В состав логического выражения входят:
параметр(ы) цикла (счетчик), стандартные
операции, знаки сравнения и логические операции.
Например: a > 10, j = 1, (С = 5) or (k >0), a*b =
12.5, i <= 15.
Оператор тела цикла может быть любым, в том
числе и составным оператором:
begin
Оператор _l; Оператор цикла с предусловием While...Do...
Оператор _2;  Процесс повторяется, пока логическое выражение -
... «истина»!
Оператор _n;  Оператор (тело цикла) может не выполнится ни одного
end; раза!
Пример 1. Частный случай:
While True Do Оператор; Здесь оператор будет выполняться
бесконечно. Например, на рис.1. представлена программа, которая
будет выводить на экран «SOS», пока пользователь не выполнит 1
ЛК по , или: Программа > Завершить для выхода из
программы
Вопрос 1: что надо изменить в программе, чтобы слово «SOS» выводилось по строке?
Рис.1. «Бесконечный» цикл
Пример 2. Применение оператора цикла с предусловием:
Выводить числа от 1 до 10 (пока < 10), с шагом 3.
Var k: integer; { Пояснения к программе }
BEGIN
k: = 1; {задается начальное значение k – параметра логического выражения }
WHILE k < 10 Do { вычисляется значение логического выражения k < 10 }
BEGIN { если значение k < 10 - «истиа», выполняется оператор BEGIN…
End; } { если «ложь» - управление передается следующему оператору
после } { оператора – тела цикла - WriteLn (‘Всего доброго!’) }
WriteLn ('Значение счетчика равно ', k);
k:= k + 3; {значение переменной логического выражения увеличиваем на шаг = 3}
End; {конец оператора – тела цикла, управление передается строке WHILE}
Writeln (‘Всего доброго!’)
End.
1
Вопрос 2: Какие значения примет переменная k ?
Задание 1: Измените программу так, чтобы на экран выводились четные числа до 20 включительно.
Задание 2: Измените программу так, чтобы на экран выводились числа от -3 до +3 с шагом 0,5?

2. Оператор цикла с постусловием Repeat...Until...


Оператор цикла с постусловием имеет вид Оператор –
REPEAT оператор(ы;) UNTIL логическое выражение ; тело цикла
или:
REPEAT statement UNTIL expession; Ложь Истина
Логическое
Здесь вначале выполняется оператор-тело цикла, а затем выражение
вычисляется значение логического выражения (expression).
Процесс повторяется, пока выражение expression Выход из цикла
принимает значение «ложь». Как только это значение
станет истинным, выполнение цикла прекращается.

В цикле repeat-until... операторные скобки begin...end могут быть опущены. Таким образом, в
общем случае оператор repeat...until имеет следующий вид:
repeat
Оператор _l;  Процесс повторяется, пока выражение - «ложь»!
Оператор_2;  Оператор (тело цикла) выполняется хотя бы один
Оператор _n; раз!
until логическое выражение;
Точка с запятой перед зарезервированным словом UNTIL необязательна.
В приведенном ниже частном случае, как и в примере 1, цикл выполняется бесконечно.
repeat
Оператор;
until False;

В операторе While...Do... проверка выполняется в начале цикла, то в цикле Repeat...Until... проверка


выполняется в последнюю очередь, и Тело цикла в любом случае выполняется хотя бы один раз.
При составлении программы часто перед началом цикла задают начальное значение параметру
цикла (или счетчику - переменной, участвующей в логическом выражении), а внутри тела цикла
включают оператор, изменяющий параметр цикла на шаг. Шаг может быть и отрицательным.

Пример 3. Цикл с постусловием:


Uses CRT; Var С: Real;
BEGIN
C:= -1
Repeat
Write('Значение параметра цикла равно ', C);
WriteLn;
C := C + 0.2;
Until C = 1; END.
Вопрос 3: Какие значения примет переменная C?
Вопрос 4: почему в Примере 2 параметр цикла имеет тип Integer?
3. Операторы цикла со счетчиком. For...To...Do... и
For...Downto...Do...

3.1. FOR j := выражение1 TO выражение 2 DO оператор;

Здесь переменная j, называемая управляющей переменной, или


Счетчик, или Параметр цикла.
FOR – для, ТО - до DO – выполнить. Тело цикла (оператор) будет
выполняться столько раз, пока Счетчик ( j:= ) примет все значения от начального
(выражение1), до конечного (выражение 2) с шагом 1.

2
Счетчик (например, j) является произвольным идентификатором (переменной), который
объявляется как переменная любого скалярного типа (к скалярным относятся целый, символьный,
булев и перечислимые типы).
При выполнении оператора For сначала вычисляется значение выражения 1 , затем вычисляется
значение выражения 2, далее управляющая переменная цикла последовательно пробегает все
значения от выражения 1 до выражения 2 с шагом 1. В том случае, когда значение выражения 1
оказывается больше значения выражения 2, тело цикла не будет выполняться вовсе. Эти значения
остаются неизменными в ходе выполнения всего цикла For. Рассматриваемый вариант цикла For
эквивалентен следующей последовательности операторов:
j := значение 1; k := значение 2;
For j:= 1 To 2 Do While j <= k Do
begin begin
оператор; ⇒ оператор;
end; inc(j); { увеличение J на 1 }
end;
в предположении, что при каждом выполнении оператора не изменяются значения j и k.
Пример 4:
var j: integer;
begin
For j:= 1 To 10 Do
begin
Writeln('квадрат ', j ,' равен', j*j)
end;
end.

var j, k: integer;
begin
j := 1; k := 10;
while j <= k do
begin
Writeln('квадрат ', j ,' равен', j*j);
inc(j); {увеличение J на 1}
end;
end.

Задание 3: Напишите программы для вычисления кубов чисел от 1 до 15 двумя способами.

3.2. Вариант FOR...DOWNTO...DO... цикла for аналогичен циклу for...to...do... за исключением того,
что в нем управляющая переменная на каждом шаге выполнения не увеличивается, а уменьшается на
единицу:
For j := выражение1 Downto выражение 2 Do оператор;
Рекомендации при составлении программ циклической структуры:
Используйте цикл for в том случае, когда точно знаете, сколько раз должно быть выполнено тело
цикла. В противном случае обратитесь к циклам repeat или while.
Используйте repeat, если необходимо, чтобы тело цикла выполнялось, по крайней мере один раз.
Используйте while, если хотите, чтобы проверка была произведена прежде, чем будет выполняться
тело цикла.

Задание 4: Напишите программы для вычисления Корня квадратного чисел от 10 до 4 двумя


способами.
Отчет по работе:
 Запишите конспект теоретической части.
 Письменно ответьте на вопросы 1-4, выполните задания 1-3.

3
Тема. Программирование алгоритмов циклических структур на языке Паскаль.
Практическая работа
Пример 1. Цикл с постусловием
x
Задание: Составить алгоритм и программу для табуляции y = 5 ⋅ cos + e a ⋅x ,
b
где а = 2, b = 9, x ∈[1, 9], ∆ x = 0,25 (x принимает значения: 1, 1.25, 1.5, … 9, т.е. от 1 до 9 с
шагом 0,25).

Программа: Блок-схема: Начало


program Cikl_P;
Uses CRT; а = 2; b=9
var
x=1
y,x:real;
const
a=2; Y: = 5*cos(x/b)+exp(a*x)
b=3;
Вывод x,
begin y
x:=1;
X: = x + 0.25
repeat
y:=5*cos(x/b)+exp(a*x); да
writeln('x =',x:7:2, ' y=',y:10:3); X>9 Конец
x:=x+0.25
until x>9 нет
end.
Самостоятельно:
Задание 1. Составить программу для расчета z = a sin x 2 + y/x
a = 2.5, y – произвольное значение, x ∈[3, 12], ∆ x = 0, 5
5
Задание 2. Составить программу для расчета s = 2 sin t + k − 2 ⋅ f
8
t, f – произвольное значение, k ∈[2.6, 3.6], ∆ k = 0, 2.
Пример 2. Цикл с параметром
Составить блок-схему и программу для вывода на экран фамилии студентов из списка,
расчета, сколько месяцев он учится и определение курса, на котором студент учится.
Входные данные: f - Ф.И.О., n -год и m - месяц поступления в университет, текущие: g - год
и t - месяц. Выходные данные: а – количество месяцев учебы, в – курс. Формулы:
a = (g - n)*12 - m + t;
b = [a / 12] +1; на языке Pascal: b = (a div 12) +1; начало

Программа: Блок-схема: ввод n


program CICL_2;
var i = 1, n,
f : string[15];
ввод f
a,b, i, n, m, g, t: integer;
begin ввод n,m,g,t
writeln('Введите количество студентов в списке');
a = (g – n)*12 – m + t
readln(N); b = a div 12 +1
writeln('Введите Ваши данные: ');
for i:= 1 to n do
Вывод: f, a, b
begin
writeln('Введите ФИО ');
конец
4
readln(f);
writeln('Введите год поступления в ВУЗ: ');
readln (n);
writeln('Введите месяц поступления в ВУЗ, например, 7 : ');
readln (m);
writeln('Введите текущий год: ');
readln (g);
writeln('Введите текущий месяц, например, 12: ');
readln (t);
a:= (g - n)*12 - m + t;
b:= (a div 12) +1;
writeln('Уважаемый, ', f, '! Вы являетесь студентом ' , b, ' курса ' );
writeln('Вы занимаетесь ', a, ' месяцев ' );
end;
end.

Задание 3:
1. Дописать программу так, чтобы выводилось количество месяцев и лет до окончания вуза.
2. Напишите программу для расчета лет в школе
3. Напишите программы при помощи операторов цикла с пред- и пост-условием.

Пример3: Вычислить факториал числа а = 5 (записывается так: а!).

program CICL_3;
var
i,f: integer;
const Факториал - это произведение чисел от 1 до
a=5; а. Например, 5! (факториал пяти) –
begin 5! =1*2*3*4*5.
f:=1;
for i:= 1 to a do
f := f * i;
writeln(f);
end.

До начала цикла присваиваем переменной f значение равное единице. Иначе бы при


умножении получили в результате ноль.

 Выполните Примеры 1-3 на компьютере в среде Pascal ABC.,


 Выполните Задания 1-3 в тетради и на компьютере в среде Pascal ABC.
Задания на дом
Написать программы для следующих задач:
1. Составить таблицу перевода расстояний в дюймах в сантиметры от 1 до 10 дюймов (1 дюйм
=2,54 см). Обозначить: D – расстояние в дюймах, S – в сантиметрах.
2. Составить таблицу значений, х принадлежит промежутку [1;10] с шагом 2 для вычисления
х2 , х .
3. Найти значение функции у=10/(Z+10), где Z находится в промежутке [А, В] с шагом С.
Ключ к заданию: Предусмотреть ввод А, В, С с клавиатуры.
4. Составить алгоритм для вычисления 15 значений S = A + B.
Отчет по работе представить преподавателю.
В работе использованы материалы