Паскаль цикл while break

Паскаль цикл while break thumbnail

Паскаль - Урок 6: Циклы while, for, repeat

Вчера мы узнали о понятии циклы в паскале в общих чертах, сегодня узнаем о каждом из циклов в паскале поподробней и увидим как они задаются. Будем разбирать цикл 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;

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

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

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

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

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

Паскаль - Урок 6: Циклы while, for, repeat

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

Пример:

Задача: вычислить сумму ряда 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. Цикл с постусловием выполняется до тех пор, пока условие не станет истинно, если условие ложно, цикл продолжается.

Предыдущий урок

Дата: 2012-01-06 19:31:43 Просмотров: 290478

Теги: Паскаль Pascal циклы уроки

Источник

Оператор безусловного перехода goto

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

Позже большинство программистов отказались от регулярного использования оператора goto, однако бывают случаи, когда он может быть полезен.

Необходимо знать, что всегда можно обойтись без оператора goto. Его использование затрудняет чтение и понимание программы.

Оператор goto осуществляет переход к оператору, помеченному специальной меткой, которая отделяется от самого оператора двоеточием. В качестве метки может быть использовано любое целое число без знака, содержащее более четырех цифр, или любое имя. Чтобы можно было использовать метку, она должна быть в обязательном порядке объявлена в разделе меток в описательной части программы. Этот раздел начинается служебным словом label, после которого через запятую перечисляются метки.

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

goto метка;

label goback; var num: real; begin goback: write (‘Введите число: ‘); readln (num); if num < 0 then goto goback; num := sqrt (num); write (‘Квадратный корень: ‘, num:5:2); readln end.

Операторы break и continue

Бывает, что цель выполнения цикла достигается раньше, чем он будет прекращен по условию выхода. Так, например, в программе для определения простоты числа цикл будет выполняться n div 2-1 раз, хотя то, что число не является простым, может быть обнаружено на первых шагах цикла. Чтобы уменьшить количество шагов цикла, можно воспользоваться оператором goto, либо сформировать сложное условие выполнения (прекращения) цикла.

Однако существуют специальные операторы, использующиеся для прерывания хода выполнения цикла. Оператор break выполняет полный выход из цикла, т.е. все возможные итерации цикла прерываются. Оператор continue прерывает только текущую итерацию. Break и continue являются процедурами, хотя обычно их называют операторами.

Читайте также:  Команды процессора цикл выполнения команд

Операторы break и continue выполняются в любом из видов циклов (repeat, while, for) и действительны только для внутреннего цикла. Например, если нужно обеспечить принудительный выход из двойного цикла, оператор break должен быть расположен как во внутреннем, так и во внешнем цикле. Операторы break и continue по сути являются видоизмененными операторами goto с известной точкой, в которую осуществляется переход.

В примере у пользователя пять раз запрашивается число только в том случае, если он не вводит ноль.

var num: real; i: integer; begin for i := 1 to 5 do begin write (‘Введите число: ‘); readln (num); if num = 0 then break; writeln (num) end; readln end.

В примере запрашиваются пять чисел и суммируются только положительные из них.

var num, sum: real; i: integer; begin sum := 0; for i := 1 to 5 do begin write (‘Введите число: ‘); readln (num); if num < 0 then continue; sum := sum + num end; write (sum:10:2); readln end.

Принудительное прекращение программы

Обычно программа завершает свою работу по достижении последнего оператора (т.е. при выходе на оператор end с точкой). Если возникает необходимость прекратить выполнение программы где-либо внутри нее, то можно воспользоваться процедурой halt, которая вызывается как отдельный оператор. Эту процедуру можно вызвать, задав в круглых скобках параметр в виде целого неотрицательного числа от 0 до 255. Это значение возвращается в операционную систему в виде кода ошибки (ERRORLEVEL) и может быть проанализирована DOS в случае запуска данной программы из командного файла. Отсутствие параметра в процедуре halt соответствует значению параметра 0 (нормальное завершение программы).

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

Источник

Циклы не прекращаются, пока условие в скобках не будет равно false. Однако часто случается так, что итерации циклов необходимо контролировать и в языке Паскаль для этого есть несколько операторов: break, continue, goto и exit. Рассмотрим их по подробнее и разберемся как можно контролировать процесс повторяющегося цикла.

Многие операторы прерывания в Паскале обеспечивают досрочный выход из блока кода. Однако недостаток в том, что этих операторов несколько, и они используются в разных конструкциях. К примеру, тот же break может быть использован только в циклах. Применение в других контекстах не предусмотрено.

Оператор goto

Оператор goto работает в связке с метками. Синтаксис этого оператора следующий: goto имя метки; Здесь указывается – перейти на то место кода, где установлена метка. Оператор goto указывает на какую метку нужно перейти, которая может быть установлена в любом участке кода.

Пример:

label go_here; // объявляем метку для оператора goto

var digit: real;

begin

go_here: // устанавливаем метку – сюда будет возвращаться алгоритм

write (‘Введите цифру: ‘);

readln (digit);

if digit < 0 then // если число больше нуля то возвращаемся на метку

goto go_here;

digit := sqrt(digit);

write (‘Квадратный корень числа равен: ‘, num:5:2);

readln

end.

Пример: бесконечный цикл

label here;

var i: integer

begin

here: // метка

for i:=0 to 3 do begin

write(i);

if i>2 then goto here; // переход на метку

end;

end.

//Вывод: 0123012301230123… и так до бесконечности

Здесь если пользователь вводит число меньше нуля, то программа снова запрашивает у него ввод цифры. Это будет происходить до тех пор, пока пользователь не введет число равное нулю или больше.

Оператор continue

Данный оператор предназначен для пропуска итераций в цикле. Если итераций предусмотрено 5, то с помощью continue их можно уменьшить на определенное количество.

Пример:

var

digit, total: real;

i: integer;

begin

digit := 0;

for i := 1 to 8 do begin

write (‘Введите цифру: ‘);

readln (digit);

if digit < 0 then

continue; // Если введено число меньше нуля, то итерация пропускается.

total := digit + digit;

end;

write (total:10:2);

readln

end.

Пример: Уменьшение числа итераций

var i: integer;

begin

for i:=0 to 15 do begin

if i>8 then continue;

write(i);

end;

end.

// Вывод: 9 10 11 12 13 14 15

Оператор exit

Оператор exit служит для принудительного выхода из блока кода и возвращения в основной поток алгоритма. Если его поставить в основном потоке, то принудительно будет завершена основная программа.

Пример:

var

chislo: integer;

begin

write(‘Введите любое число ‘);

readln(chislo);

if chislo < 0 then

begin

writeln(‘Fatal ERROR!’);

exit; // принудительный выход из программы и прекращение выполнения дальнейших инструкций

end;

writeln(‘Корень квадратный = ‘, sqrt(chislo));

readln

end.

В отличии от операторов break и continue, exit и goto можно использовать не только в цикле, но и процедурах, функциях, основном потоке программы.

Пример:

var x,t: integer;

procedure sum(y) begin

if y<1 then exit; // если y равен нулю, то выход из процедуры

x:= y*y;

end;

begin

again: // если был принудительный выход из процедуры, то операция повторяется

write(«Введите число»);

read(t);

if sum(t) then exit; проверка на выполнение процедуры

else goto again;

end.

//Если процедура выполнится, то будет принудительный выход из программы. В ином случае программа запросит повтор ввода числа

Следует запомнить тот факт, что оператор exit принудительно останавливает выполнение бого блока кода, в котором он находится.

Читайте также:  Смерть ахилла троянский цикл

Оператор break

Данный оператор выполняет ту же функцию, что и exit, но только в пределах цикла. Обычно его используют в связке с каким-либо условием. Если оно соблюдается или нет, то break останавливает цикл, а алгоритм продолжает выполнения дальнейших операторов.

Пример:

var

number: real;

j: integer;

begin

for j := 1 to 5 do begin

write (‘Напишите какое-нибудь число: ‘);

readln (number);

if number = 0 then

break; // если вводимое число равно нулю, то происходит выход из цикла и переход в основной контекст программы

writeln (number)

end;

readln;

end.

Пример:

var

stroka : String;

begin

while True do // бесконечный ввод строки

begin

ReadLn(S);

if S = » then // если строка не пустая, то цикл продолжает выполнение

Break; // при пустой строке выход из цикла

WriteLn(S);

end;

end.

Можно ли использовать break вне циклов?

Вне циклов, то есть, в функциях и блоках кода break не несет смысловой нагрузки. Его наличие приведет к ошибке. Для выхода из блока кода используют оператор exit.

Нужен ли оператор break в конструкции case of?

В С-подобных языках программирования оператор break прерывает выполнение оператора switch – аналога case of. В Паскале не требуется устанавливать break в case, компилятор сам выходит из этого блока, если находит совпадение.

Пример:

label again; // метка для перехода

var chosen_digit: integer;

begin

again: // переход на метку сюда

readLn(chosen_digit);

case chosen_digit of

1: write(«1»); // В отличие от С-подобных языков оператор break не требуется

2: write(«2»);

3: write(«3»);

4: write(«4»);

5: write(«6»);

6: write(«6»);

else begin

write(«Число должно быть не более 6»);

goto again; // если число не отвечает требованию, то ввод заново

end;

end.

Здесь при выполнении одного из case, алгоритм не будет продолжать дальнейшее выполнение. В С-подобных языках вывелись бы остальные числа после совпадения.

В Паскале нет оператора return

Процедуры в Паскале ничего не возвращают. Функции возвращают! В других языках для возврата результата используют оператор return. Паскаль устроен немного по другому. Для возврата используют локальную переменную, которая соответствует значению функции.

Пример:

var a: real;

Summa(x: real, y: real);

begin

Summa:=x+y; // это и будет возвращаемое значение

end;

begin

a:=Summa(5,5);

write(a); // 10

end.

Как выйти из функции без оператора exit?

Никак! В других языках достаточно написать return. В паскале для этого применяется только оператор exit.

Пример:

var b: real;

Addition(c: real, d: real);

var z: integer

begin

z:=c+d;

if z=0 then exit // если z равно нулю, то выход из функции без возврата значения

else Addition:=z; // это и будет возвращаемое значение

end;

begin

b:=Addition(0,0);

write(a); // переменная не инициализирована

end.

Отличие оператора exit от break

Казалось бы, они выполняют одну и ту же функцию. Однако есть ситуации, когда exit обладает катастрофическими последствиями для алгоритма. Эти ситуации возникают , когда в функции есть цикл.

Если выйти из цикла посредством оператора exit, то выход осуществится и из функции или процедуры. А нам нужно, чтобы выход произошел из цикла и только. Тут и применяется оператор break, который останавливает цикл, а функция продолжает свое выполнение. Если в цикле поставить exit, то код будет выполняться в основном потоке, а выполнение функции остановится.

Пример: exit в цикле процедуры

procedure (s: Sring)

var i:integer;

begin

for i:=0 to 10 do begin

if i=4 then exit // полный выход из процедуры

write(s);

end;

write(«Продолжение процедуры»); // проигнорируется

end;

begin

(«hello»); // hello будет написано 4 раза

end.

Пример: Та же функция, только с break

procedure (s: Sring)

var i:integer;

begin

for i:=0 to 10 do begin

if i=4 then break //только выход из цикла

write(s);

end;

write(«Продолжение процедуры»); // выполнится

end;

begin

(«hello»); // hello будет написано 4 раза и Продолжение процедуры

end.

Итог

Следует запомнить тот факт, что отдельные операторы прерывания обладают своими особенностями. Break завершает выполнение цикла, но не функции или процедуры. Exit полностью закрывает контекст функции или процедуры.

Оператор goto используется в связке с меткой. Он переводит алгоритм в точку установленной метки. Его можно сравнить с циклом. Однако у него более гибкая работа. Он может перевести алгоритм в любую точку программы – из функции в основной контекст, и наоборот.

Оператор continue призван для пропуска итераций цикла. Его применяют исключительно в циклах. Он не прерывает весь алгоритм цикла, но только одну итерацию. В функциях, процедурах и основном блоке его применение не допустимо, также, как и оператора break. Универсальным оператором остается exit, но его следует применять осторожно, так как он осуществляет выход из текущего блока.

Источник

Паскаль цикл while break

Операторы цикла в паскале

Циклы – одна из самых больших тем в паскале , по совместительству одна из самых сложных.

Но так как сам по себе язык паскаль довольно простой , то и циклы не будут такими трудными для понимания.

Что такое цикл , для чего он нужен , как используется и другое

Что такое цикл. Цикл – это повторения определенного участка кода N количество раз. Циклы также можно встретить в повседневной жизни и при этом довольно часто. Например : мыть посуду пока она не закончится.

Читайте также:  Цикл стихов маршака детки в клетке

Циклы имеют свои условия окончания , например : пока a больше b.

В языке программирования pascal предусмотрено 3 вида циклов. Первый цикл это for , второй – while, третий – repeat. Все они немного отличаются друг от друга и все же они довольно простые.

Цикл for :

Цикл for

Результат выполнения данной программы будет таким – на экран будут выведены цифры 1 , 2 , 3 , 4 и 5.

На картинке показано как именно записывается этот самый цикл for. Вначале пишется слово for далее мы обозначаем переменную – счетчик и задаем ей начальное значение , в нашем случае это переменная i ( i:= 1 ).

Её значение ( которое мы задали ) равно 1 , переменной – счетчику можно задать любое целое значение , например : 0,1,2,3 …

Важно запомнить , что переменная счетчик ( её тип ) должен быть целым !

Далее пишется слово to и после него целое число ( конечное значение переменной -счетчика ). В конце слово do ( делай ).

После слова do идет тело цикла ( команды ). Следует помнить о том , что в теле цикла выполняется только первая команда. Для того , чтобы в теле цикла выполнялось сразу несколько команд их следует заключать в блок begin end.

Цикл for Коротко о том , как работает этот цикл , в чем его преимущество и как его можно использовать. Вначале работы цикла переменная i равна 1 , далее выполняется первый шаг цикла . После того , как тело цикла будет выполнено , переменная счетчик возрастает на 1.

Поэтому после переменная i равна двум. И так далее пока i не станет равна 5 , при этом тело цикла выполнится , когда переменная i равна 5.

Пример его использования такой – например нам нужно заполнить массив значениями с клавиатуры. Это делается так , как показано на картинке ниже.

Цикл for

Цикл while :

Отличие цикла while от цикла for заключается в том , что цикл while не имеет переменную счетчика . Аналог работы программы , которая выводит циклом for 5 цифр будет выглядеть так :

Цикл while Как видно по картинке , в этом виде цикла есть только условие , в нашем случае это – пока i меньше либо равно 5 ( до цикла мы задали переменной i значение 1 ). Тело цикла заключается в блок begin end , так как они нужны для использования нескольких команд ( больше одной ) в цикле.

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

Немного о том , как работает данные цикл. Вначале работы цикла проверяется условие , если оно истинно , то выполняется тело цикла. После выполнения тела цикла снова проверяется условие , если оно истинно то тело выполнится ещё раз. И так далее пока условие не станет ложным. Как только условие становится ложным , тело цикла не выполняется и программа идет дальше.

Цикл repeat :

Данный вид цикла мало отличается от цикла while . Отличие заключается только в том , что цикл заканчивается , когда условие станет истинным , в отличии от цикла while , в котором цикл заканчивается при ложном условии. А также для использования нескольких команд , теперь нам не нужен блок begin end.

Цикл repeat Такой цикл закончится тогда , когда переменная i станет больше 5. Тело цикла записывается между словами repeat until.

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

Вложенные циклы :

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

Код

program mypascal;

uses

crt;

var

a: array[1..10,1..10] of integer;

i,i1:integer;

begin

for i:= 1 to 10 do

for i1:= 1 to 10 do

a[i,i1]:= random(11)+1;

end.

Break :

Команда break позволяет выйти из цикла в любое время и на любом шаге. Данная команда довольно часто используется , поэтому вам следует запомнить её. Для чего нужна команда break ? Допустим , мы имеем очень большой массив с числами ,в котором нам нужно найти всего одно отрицательное число ( меньше 0 ). Как только цикл находит первое отрицательное число мы можем выйти из него , так как остальные шаги в цикле будут бесполезны и займут очень большое время. Как это работает :

Код

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

program mypascal;

uses

crt;

var

a: array[1..1000] of integer;

i:integer;

begin

for i:= 1 to 1000 do

a[i]:= random(21)-10;

for i:= 1 to 1000 do

if ( a[i] < ) then

begin

writeln(a[i]);

break;

end;

end.

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

Continue :

Данная команда работает почти так же как и break , однако она не выходит из цикла , а лишь завершает шаг , на котором находится цикл. Если мы поставим команду contineu в середине тела цикла , то цикл будет выполнять лишь половину цикла. Узнать о работе с файлами в Паскаль

[Всего голосов: 12 Средний: 3.9/5]

Источник