Программирование. Циклы Pascal-Паскаль

Социальные сети 17.04.2024
Социальные сети

Очень часто возникает необходимость выполнить один и тот же оператор (или группу операторов) несколько раз. Для этого в языке Pascal предусмотрены операторы циклов.

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

Форма записи: while <условие> do <оператор>;

Здесь while (пока), do {делать) - зарезервированные слова.

В качестве оператора может быть любой простой или составной оператор. Здесь <оператор> выполняется только в том случае и до тех пор, пока истинно <условие>, которое проверяется каждый раз после выполнения оператора. Если с самого начала условие имеет значение false , оператор цикла не выполнится ни разу.

Блок-схема алгоритма работы такого оператора приведена на рис. 1.

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

Пример

I способ

. Вычисление факториала числа п (т.е. произведения 1 2 ... п ):

Program Fact_1;

Const n=5;

Var i, fact:integer;

Begin

i:=1; Fact:=1;

while i <=n do {заголовок цикла}

begin {начало цикла}

fact:= fact*i;

i:= i + 1

end; {конец цикла}

WriteLn("факториал", n, " = ",Fact:10)

End .

2. Оператор цикла с постусловием. Блок-схема алгоритма работы Оператора приведена на рис.2.

Форма записи:

Repeat

<оператор1>; <оператор2>;

Until <условие>;

Здесь Repeat {повторять до тех пор), Until (пока не будет выполнено условие) - зарезервированные слова.

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

Пример:

II способ

. Вычисление факториала числа п (т.е. произведения 1 2 ... п ):

Program Fact_2;

Const n=5;

Var i, fact:integer;

Begin

i:=1; Fact:=1;

Repeat

begin { начало цикла }

fact:= fact*i;

i:= i + 1

end; { конец тела цикла }

Until i >n; { условие }

WriteLn(‘ Факториал ", n, " = ",Fact:10)

End .

Здесь I – это счетчик повторов, который необходимо изменять вручную в цикле.

3. Оператор цикла с параметром.

Этот цикл позволяет повторять действия заведомо известное количество раз.

Счетчик – это переменная, которая считает количество повторов цикла. В таком цикле происходит автоматическое увеличение показателя счетчика ровно на 1.

Форма записи:

FOR счетчик= нач_значение TO конечное_значение DO

BEGIN

. . . .

END ;

Если необходимо, чтобы параметр уменьшался на 1, то исполь зуют слово Downto (начальное значение больше конечного значения).

Пример:

III способ

Вычисление факториала числа п (т.е. произведения 1 2 ... п ):

Program Fact_3;

Const n=5;

Var i, fact:integer;

Begin

Fact:=1;

for i:=1 to n do

begin { начало цикла }

fact:= fact*i;

end; { конец цикла }

WriteLn (" Факториал ", n, " = ",Fact:10)

End.

В качестве оператора можно использовать любой простой или со ставной оператор.

При использовании этого оператора цикла нужно помнить следующие правила:

1) в качестве параметра можно использовать простую переменную, описанную в этом же блоке;

2) параметр должен иметь дискретный тип;

3) начальное и конечное значения должны иметь тот же тип, что и параметр;

4)в теле цикла (операторе) явное изменение значения параметра (например, оператором присваивания) может привести к бесконечному циклу;

5) нельзя в теле цикла изменить начальное и конечное значения па раметра, если они заданы переменными;

6) после завершения работы цикла значение параметра становится равным конечному значению параметра, если цикл не был прерван оператором перехода.

САМОСТОЯТЕЛЬНО

1. Напишите программу, которая выводит на экран в зонном формате числа:

7 49

5 25

3 9

1 1

2. Решить задачу тремя способами (с помощью разных видов цикла):

Через сколько лет L величина вклада достигнет желаемой суммы S (руб.), при начальном вкладе V (руб.), если ежегодный процент, гарантированный банком, составляет 10% от величины вклада.

Исполнить алгоритм при S = 100000 руб., V = 10000 руб.

Цикл – это многократно повторяющиеся фрагменты программ. Алгоритм циклической структуры – это алгоритм, содержащий циклы.
В ТР существует три оператора цикла:

  • цикл с предусловием;
  • цикл с постусловием;
  • цикл с параметром.

Для всех циклов характерны следующие особенности:

  • значения переменных используемых в цикле, и не изменяющиеся в нем д.б. определены до входа в цикл;
  • вход в цикл возможен только через его начало;
  • выход их цикла осуществляется как в результате его естественного окончания, так и с помощью операторов перехода.

Оператор цикла с предусловием в Паскале

Оператор цикла с предусловием реализует следующую базовую конструкцию:

Формат записи:
While L do OP;
где:
While - пока не;
do – выполнить;
L – выражение логического типа;
OP –

Рис. 9.3. Структурная схема оператора цикла с предусловием

Работа оператора: Вычисляется значение логического выражения, если вычисленное значение истинно, то выполняется оператор OP после чего повторяется проверка условия и выполнение операторов тела цикла. В противном случае осуществляется выход из цикла.

Вычисление значения логического выражения предшествует выполнению операторов тела цикла, поэтому этот оператор цикла называется циклом с предусловием.

Пример 9.3. Составить программу вычисления функции y для заданного значения x.

где: C=2,7; n=2; a=0.5; 0

Program Ex_2;
Uses crt;
Var
y, C, a, t:real;
n:integer;
Begin
clrscr;
Writeln("Введите C, a, n"); Read(C, a, n);
Writeln("Результат:");
Writeln("t’:5,’y’:15);
t:=0;
While t<1 do
Begin
y:=C*exp(a*t)*cos(n*t);
Writeln(t:4:1,’ ‘:5, y:10);
t:=t+0.1;
End;
End.

Оператор цикла с постусловием в языке Паскаль

Оператор цикла с постусловием реализует следующую конструкцию:

Формат записи:
Repeat
OP
Until L;
где:
Repeat - повторять;
Until – пока не;
L – выражение логического типа;
OP – тело цикла; оператор (простой или составной).

Рис. 9.4. Структурная схема оператора цикла с постусловием

Работа оператора : Выполняетсяоператор OP после чего вычисляется значение логического выражения L , если вычисленное значение False , то снова выполняется оператор OP в противном случае осуществляется выход из цикла.

Вычисление значения логического выражения следует после выполнения операторов тела цикла, поэтому этот оператор цикла называется циклом с постусловием.

В отличие от цикла с предусловием, в цикле с постусловием тело цикла выполняется о крайней мере один раз не зависимо от условия.
В операторе цикла с постусловием ключевые слова Repeat и Until играют роль операторных скобок.
Пример 9.4. Составить программу вычисления функции y для заданного значения x.


где: C=2,7; n=2; a=0.5; 0

Program Ex_2;
Uses crt;
Var
y, C, a, t:real;
n:integer;
Begin
clrscr;
Writeln("Введите C, a, n");
Read(C, a, n);
Writeln("Результат:"); Writeln("t’:5,’y’:15);
t:=0;
Repeat
y:=C*exp(a*t)*cos(n*t);
Writeln(t:4:1,’ ‘:5, y:10);
t:=t+0.1;
Untile t>=1;
End.

Оператор цикла с параметром в языке Паскаль

Оператор цикла с параметром реализует следующую базовую конструкцию:

Рис. 9.5. Структурная схема оператора цикла с параметром.

Формат записи :
1. For P:=Pn to Pk do OP;
2. For P:=Pk downto Pn do OP;
где:
For - для;
to – до;
downto – уменьшая до
do – выполнить;
OP – тело цикла; оператор (простой или составной);
P - параметр цикла, переменная порядкового типа;
Pn, Pk – начальное и конечное значение параметра.

Работа оператора : Вычисляется начальное значение параметра цикла Pn и присваивается параметру P . Проверяется условие P ? Pk, и если оно True выполняютсяоператоры тела цикла OP . После чего наращивается значение P на единицу и опять проверяется условие P ?Pk . Если условие False осуществляется выход из цикла.
В операторе с downto шаг изменения параметра цикла равен –1 .

Примеры записи:

For i:=1 to n do n:=sqr(i)+1;
For s:=’A’ to ‘Z’ do R:=R+ord(s)/127;
For L:=False to True do H:= (False or L) And Not (L);

Пример 9.5. Составить программу вычисления функции y для заданного значения n.


где: C=2,7; a=0.5; t=0,1; 0

Program Ex_3;
Uses crt;
Var
y, C, a, t:real;
n:integer;
Begin
clrscr;
Writeln("Введите C, a, t");
Read(C, a, n);
Writeln("Результат:");
Writeln(‘n’:5,’y’:15);
For n:=1 to 10 do
Begin
y:=C*exp(a*t)*cos(n*t);
Writeln(n:4,’ ‘:5, y:10);
end;
End.

Основа программирования - циклы, например, for. Pascal. Как и любой компьютерный язык, он также содержит такие конструкции в своём синтаксисе.

Назначение циклических операторов

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

Язык программирования Pascal включает несколько таких конструкций:

  • for - повтор с параметром;
  • while - повтор с предусловием;
  • repeat ... until - повтор с постусловием.

Несмотря на кажущуюся простоту и очевидность циклических конструкций, начинающие программисты сталкиваются с рядом проблем при их реализации. Наибольшие сложности вызывает постановка условий выхода из цикла. В этом отношении счётный оператор for является самым незамысловатым.

Структура

Чтобы записать конструкцию повтора с параметром, нужно набрать следующий код:

FOR {a} := {b} TO {c} DO {d}.

В примере зарезервированные слова языка для удобства написаны заглавными буквами, на практике можно использовать строчное начертание. Используемые переменные и операторы приведены в фигурных скобках. Они означают:

  • { a} - переменная любого счётного типа, чаще всего INTEGER;
  • { b}, { c} - выражения счётного типа, такого же, как и { a} ;
  • { d} - произвольный оператор/операторы языка, называемые также телом цикла.

Отрабатывая конструкцию for , Pascal рассчитывает значение { b} , присваивает { a} := { c} , после чего запускается повтор действий:

  • проверка условия { b} <= { c} , при выполнении которого цикл останавливает свою работу;
  • запуск оператора {d} ;
  • увеличение значения {a} на единицу, то есть { a} := { a} + 1 .

Поскольку количество повторений внутри тела for известно, данную конструкцию относят к детерминированным циклам.

Пример

Чтобы понять, как будет выполняться for , далее, приведён пример, кода на языке паскаль для «чайников».

  • s:= 0;
  • for a:= 1 to 5 do
  • begin
  • s:= s + a;
  • end;
  • writeln(s);

Разбираясь в написанных инструкциях, можно записать значения в каждой итерации:

  • 1-я итерация: a = 1; s = 1 ;
  • 2-я итерация: a = 2; s = 3 ;
  • 3-я итерация: a = 3; s = 6 ;
  • 4-я итерация: a = 4; s = 10 ;
  • 5-я итерация: a = 5; s = 15 .

В итоге пользователь увидит на экране число «15» - сумму чисел от 1 до 5.

Чтобы сделать первую программу более универсальной, следует заменить числа 1 и 5 переменными.

Частые ошибки

При использовании цикла for , Pascal требует внимательного отношения к значениям { a}, { b}, { c} . Если не выполнять правила написания программ, компилятор сообщит об ошибке. Таких правил пять.

  1. Счётчик (параметр цикла) { a} задаётся целым числом.
  2. Значения { b} и { c} также должны иметь целочисленный тип. Например, нужно просчитать значения угла, заданного в радианах от 0 до p. Но следующая запись кода будет неверной for a:= 0 to pi do. Решение - использовать функции округления trunc () или round (). Первая отбрасывает дробную часть вещественного числа, вторая - округляет его до ближайшего целого.
  3. Если пользователь ошибся и указал {b} < {c} , оператор {d} ни разу не отработает.
  4. После выполнения цикла счётчик { a} может иметь любое значение. Хотя это противоречит логике, но на практике { a} <> { c} . Вывод: не рекомендуется обращаться к { a} после выполнения конструкции for .
  5. В теле цикла (то есть после слова do ) не рекомендуется использовать какие-либо операторы, изменяющие значения параметра { a} . Следование данному правилу ошибки не вызовет, но будет нарушена логика программы.

Следующее правило является общепринятым и соответствует «хорошему тону» в программировании: чтобы было удобно работать с кодом, необходимо записывать операторы тела цикла не с первой колонки. Например, делая 2-3 пробела слева или используя клавишу Tab.

Данное предписание применимо не только к языку паскаль. Для «чайников» оно позволяет быстро найти и исправить ошибку в инструкциях.

Типичные задачи

Допустим, необходимо выполнить вида f(x) = 3* x + 15 , то есть получить таблицу из M значений функций в диапазоне [x 1 ; x 2 ], где x 1 и x 2 - минимальное и максимальные значения аргумента. Решать эту и подобные задачи помогает конструкция for . Pascal рекомендует записать программный код следующим способом:

  • for a:= 1 to M do
  • begin
  • x:= x1+(x2-x1)*(a-1)/(M-1);
  • f:= 3*x + 15;
  • writeln (x, ‘ ’, f);
  • end.

Поскольку шаг изменения x не задан, значение аргумента рассчитывается в ходе программы при каждой итерации с помощью формулы: x:= x1+(x2- x1)*(a-1)/(M-1).

Цикл в цикле

Ввиду того, что внутри конструкции разрешается использовать любые операторы, допускается поместить в её тело ещё один цикл for . Pascal имеет стандартное описание для данной задачи, сходное с другими языками программирования:

  • FOR {a} := {b} TO {c} DO
  • FOR {a1} := {b1} TO {c1} DO

Чтобы конструкция работала верно, необходимо соблюдать условие: счётчики в каждом цикле должны быть разные. Иначе внутренний цикл будет менять значение параметра внешнего цикла, что приведёт к логическим ошибкам.

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

В языке программирования Паскаль существует три вида циклических конструкций.

Цикл for

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

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

Цикл for существует в двух формах:

for счетчик: = значение to конечное_значение do тело_цикла;

for счетчик: = значение downto конечное_значение do тело_цикла;

Счетчик – это переменная любого из перечисляемых типов (целого, булевого, символьного, диапазонного, перечисления). Начальные и конечные значения могут быть представлены не только значениями, но и выражениями, возвращающими совместимые с типом счетчика типы данных. Если между начальным и конечным выражением указано служебное слово to , то на каждом шаге цикла значение параметра будет увеличиваться на единицу. Если же указано downto , то значение параметра будет уменьшаться на единицу.

Количество итераций цикла for известно именно до его выполнения, но не до выполнения всей программы. Так в примере ниже, количество выполнений цикла определяется пользователем. Значение присваивается переменной, а затем используется в заголовке цикла. Но когда оно используется, циклу уже точно известно, сколько раз надо выполниться.

"Количество знаков: " ) ; readln (n) ; for i : = 1 to n do write ("(*) " ) ; readln end .

Цикл while

Цикл while является циклом с предусловием. В заголовке цикла находится логическое выражение. Если оно возвращает true , то тело цикла выполняется, если false – то нет.

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

var i, n: integer ; begin write ("Количество знаков: " ) ; readln (n) ; i : = 1 ; while i <= n do begin write ("(*) " ) ; i : = i + 1 end ; readln end .

Цикл repeat

Цикл while может не выполниться ни разу, если логическое выражение в заголовке сразу вернуло false . Однако такая ситуация не всегда может быть приемлемой. Бывает, что тело цикла должно выполниться хотя бы один раз, не зависимо оттого, что вернет логическое выражение. В таком случае используется цикл repeat – цикл с постусловием.

В цикле repeat логическое выражение стоит после тела цикла. Причем, в отличие от цикла while , здесь всё наоборот: в случае true происходит выход из цикла, в случае false – его повторение.

В общих чертах, сегодня узнаем о каждом из циклов в паскале поподробней и увидим как они задаются. Будем разбирать цикл while с предусловием , цикл for с параметром и цикл repeat - until с постусловием .

1. Цикл с параметром в Паскале - FOR

Цикл FOR задаёт определённое условие по которому программа будет работать до его выполнения, допустим нужно нам 5 (или n) раз зациклить программу, то это легко сделать с помощью данного цикла. У цикла FOR есть характерная черта - счетчик который обычно обозначается буквой i или j.

Внешний вид цикла с параметром в паскале:

for i:= 1 to n do // присваиваем i сначала одному, потом двум, трем, ..., n

После 1-го прохода переменной i присваиваем 1, после второго присваиваем 2 и так до тех пор, пока не дойдем до n. to - это до.. в порядке возрастания, также есть downto - до.. в порядке убывания.

Блок - схема цикла с параметром:

2. Цикл с предусловием в Паскале - WHILE

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

Структура цикла с предусловием:

WHILE DO begin end;

Логическое выражение, истинность которого проверяется вначале выполнения циклического оператора;

Любые выполняемые операторы языка.

Порядок выполнения цикла:

Пока условие истинно выполняется тело цикла. Как только условие становится ложно выполнение цикла прекращается.

Блок - схема цикла с предусловием:


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

Пример:

Задача: вычислить сумму ряда 1+1.5+2+2.5+3+3.5+ .. + 30

program example-while;

Var sum:real; n:real; BEGIN sum:=0; n:=1; while n

3. Цикл с постусловием - Repeat - until.

Этот оператор аналогичен оператору цикла с предусловием, но отличается от него тем, что проверка условия производится после выполнения тела (действий) цикла. Это обеспечивает его выполнение хотя бы один раз в отличие от ранее разобранных циклов.

Обратите внимание на то, что данный оператор цикла предполагает наличие нескольких операторов в теле цикла, то есть можно выполнять несколько действий, поэтому служебные слова Begin и End не нужны.

Последовательность операторов, входящих в тело цикла выполняется один раз, после чего проверяется соблюдение условия, записанного следом за служебным словом Until. Если условие не соблюдается, цикл завершается. В противном случае - тело цикла повторяется ещё раз, после чего снова проверяется соблюдение условия.

Блок - схема цикла с постусловием:

Формат записи, структура цикла:
REPEAT UNTIL ;

Пример:

Program test2; Var b:Real; Begin b:=100; Repeat b:=b/2; Until b

Выводы:

1.Цикл с параметром используется переменная, называемая параметром цикла или счётчиком. Перед выполнением цикла параметру (счётчику) устанавливается начальное значение. После выполнения шага цикла значение параметра увеличивается на единицу. Цикл продолжается до тех пор пока параметр не достигнет своего конечного значения, которое указывается после to (downto).

2. Цикл с предусловием выполняется до тех пор, пока условие выполнения не станет ложным, и продолжается, если условие истинно.

3. Цикл с постусловием выполняется до тех пор, пока условие не станет истинно, если условие ложно, цикл продолжается.

Рекомендуем почитать

Наверх