Break вне цикла паскаль ошибка что делать

I try to create a for looping for my Bubble Sort Algorithm and use break as a condition if there is no more number to be sorted anymore. But then the compiler said that BREAK not allowed. Here is my code

Procedure Sort(var data : arr; j : integer);
var
    temp: integer;

begin
    temp := data[j];
    data[j] := data[j + 1];
    data[j + 1] := temp;
end;

Procedure sortDescending(var data : arr; n : integer);
var
    i, j : integer;
    marker : boolean;

begin
    for i := 1 to n do
    marker := false;
    begin
        for j := 1 to n do
        begin
            if(data[j] < data[j + 1]) then
            begin
                Sort(data, j);
                marker := true;
            end;
        end;
        if(marker = false) then
        begin
        break;
        end;
    end;
end;

Ken White's user avatar

Ken White

123k14 gold badges225 silver badges445 bronze badges

asked Jul 21, 2022 at 11:55

Muhammad Bayu Wicaksana's user avatar

4

Here’s your code.

for i := 1 to n do
marker := false;
begin
    for j := 1 to n do
    begin
        if(data[j] < data[j + 1]) then
        begin
            Sort(data, j);
            marker := true;
        end;
    end;
    if(marker = false) then
    begin
    break;
    end;
end;

Let’s add some whitespace after loops and indentation to make the issue clearer.

for i := 1 to n do
    marker := false;

begin
    for j := 1 to n do
    begin
        if (data[j] < data[j + 1]) then
        begin
            Sort(data, j);
            marker := true;
        end;
    end;

    if (marker = false) then
    begin
        break;
    end;
end;

Which is equivalent to:

for i := 1 to n do
    marker := false;

for j := 1 to n do
begin
    if (data[j] < data[j + 1]) then
    begin
        Sort(data, j);
        marker := true;
    end;
end;

if (marker = false) then
begin
    break;
end;

The break is not within a loop.

You likely meant to put begin before marker := false;.

for i := 1 to n do
begin
    marker := false;

    for j := 1 to n do
    begin
        if (data[j] < data[j + 1]) then
        begin
            Sort(data, j);
            marker := true;
        end;
    end;

    if (marker = false) then
    begin
        break;
    end;
end;

answered Aug 5, 2022 at 22:22

Chris's user avatar

ChrisChris

27k5 gold badges21 silver badges42 bronze badges

1

На чтение 7 мин. Опубликовано 21.03.2021

Циклы не прекращаются, пока условие в скобках не будет равно 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 принудительно останавливает выполнение бого блока кода, в котором он находится.

Данный оператор выполняет ту же функцию, что и 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;
function 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;
function 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 sign(s: Sring)
var i:integer;
begin
for i:=0 to 10 do begin
if i=4 then exit // полный выход из процедуры
write(s);
end;
write(«Продолжение процедуры»); // проигнорируется
end;

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

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

procedure sign(s: Sring)
var i:integer;
begin
for i:=0 to 10 do begin
if i=4 then break //только выход из цикла
write(s);
end;
write(«Продолжение процедуры»); // выполнится
end;

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

Итог

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

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

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

alina333

0 / 0 / 0

Регистрация: 10.11.2016

Сообщений: 9

1

12.11.2016, 14:11. Показов 2656. Ответов 14

Метки нет (Все метки)


День добрый, уважаемые форумчане! Находимся с дочерью на начальном уровне изучения Паскаля ) Спасибо данному форуму , очень помогает! Дали на дом задачу. Путем инетизысканий и приложения собственного творчества родилась вот такая программка (условие ее в теле программы). Учитель написала дочери, цитирую:» break; мы не используем в программах прерывание, т.к. оно нарушает пошаговость.» Отсюда вопрос:
Что она имела в виду? Программа же работает, результат выдает правильный, ошибок не выдает при компиляции. PS огромная просьба объяснить попроще, не углубляясь в дебри высокого программирования, мы еще чайники пока )

program summanechet; {Написать программу, которая находит наибольшее из чисел, кратных семи в
последовательности натуральных чисел. Гарантируется, что в последовательности есть хотя
бы одно такое число. Программа получает на вход натуральные числа, количество введённых
чисел неизвестно, последовательность чисел заканчивается числом 0 (0 — признак
окончания ввода, не входит в последовательность). Количество чисел не превышает 1000.
Введённые числа не превышают 30000. Программа должна вывести одно число: наибольшее
из чисел, кратных семи.}

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var
  c: integer;{c-вводимые числа}
  summa: integer;{значение максимального числа, кратного 7} 
  begin
  summa:=0;
  for var i:=1 to 1000 do begin
            Writeln('Введите двухзначное число. Для окончания ввода введите 0   '); readln(c);
               if abs (c)>30000 then Writeln('Ошибка ввода. Число не должно превышать 30000 по модулю ');
               if (c<10)and (c>0) or (c>99) then Writeln('Ошибка ввода. Число должно быть двухзначным ');
               if c=0 then break;
               if (c mod 2<>0) and (c<>0) and  (c>10) and (c<100) and (c<30000) and (c>-30000) then summa:=summa+c;
               end;       
      Writeln('Сумма чисел равна ',summa );
      end.

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

0

Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

12.11.2016, 14:11

Ответы с готовыми решениями:

Оператор break как оператор go to next
Подскажите, в этом примере break эквивалентна действию оператора go to next?

оператор Break
Дано 20 чисел. Вывести на экран порядковые номера элементов и элементы удовлетворяющие условию 0&lt;…

Оператор break
Подскажите, пожалуйста почему оператор break в строке 44 выдаёт ошибку, и как её исправить?…

оператор break
Здравствуйте! Я где-то слышал, что использовать оператор break для выхода из цикла — не хорошо. И…

14

Puporev

Почетный модератор

64270 / 47569 / 32739

Регистрация: 18.05.2008

Сообщений: 115,182

12.11.2016, 14:46

2

Pascal
1
2
3
4
5
6
7
8
9
10
11
var
c: integer;{c-вводимые числа }
max: integer;{значение максимального числа, кратного 7}
begin
max:=0;
repeat
read(c);//читаем числа, первое точно не 0, это гараетировано системой конртроля
if (c<>0)and(c mod 7=0)and(c>max) then max:=c;
until c=0;
write(max);
end.

1

bormant

Модератор

Эксперт Pascal/DelphiЭксперт NIX

7480 / 4352 / 2771

Регистрация: 22.11.2013

Сообщений: 12,470

Записей в блоге: 1

12.11.2016, 15:07

3

1) Программа не соответствует условию.
2) Программа далеко не оптимальна, хотелось бы увидеть условие для неё.
3) Использование Break/Continue, по мнению некоторых, противоречит теории формального доказательства правильности алгоритма. Любой циклический алгоритм можно переписать без них, но не всегда такой вариант будет удобен.
4) Обычно в учебных задачах исходные данные полагаются соответствующими описанию, дополнительных проверок не требуется.

Задача из комментария:

Pascal
1
2
3
4
5
6
7
8
var m, n: Integer;
begin
  {m:=0;}
  repeat
    Read(n); if (n mod 7=0) and (m<n) then m:=n;
  until n=0;
  WriteLn(m);
end.

Добавлено через 6 минут
Особым образом обрабатывать 0 как не входящее в последовательность число нет необходимости, поскольку гарантируется, что в последовательности есть натуральное число (>0), которое делится на 7, поэтому 0 не может быть максимумом, условие (m<n) для него всегда ложно.
Даже если бы гарантии наличия подходящего числа не было, 0 не менял бы первоначальное значение максимума и являлся бы индикатором отсутствия подходящего числа.
Но если бы искали минимум, пришлось бы добавить «and (n>0)».

Добавлено через 9 минут
m:=0; — не требуется, поскольку m — это глобальная переменная, такие числовые переменные инициалируются нулем при старте программы (операционная система заполняет нулями сегмент BSS, содержащий глобальные переменные). Иногда от учащихся требуют явной инициализации в коде программы — достаточно убрать фигурные скобки.

1

0 / 0 / 0

Регистрация: 10.11.2016

Сообщений: 9

12.11.2016, 15:39

 [ТС]

4

оеей, я балда! Условие к задаче вот такое:
Написать программу, которая находит сумму двухзначных нечётных чисел в
последовательности целых чисел. Программа получает на вход целые числа, количество
введённых чисел неизвестно, последовательность чисел заканчивается числом 0 (0 —
признак окончания ввода, не входит в последовательность). Количество чисел не превышает
1000. Введённые числа по модулю не превышают 30000. Программа должна вывести одно
число: сумму двухзначных нечётных чисел в последовательности.

0

bormant

Модератор

Эксперт Pascal/DelphiЭксперт NIX

7480 / 4352 / 2771

Регистрация: 22.11.2013

Сообщений: 12,470

Записей в блоге: 1

12.11.2016, 15:53

5

Pascal
1
2
3
4
5
6
7
8
var n, k: Integer;
begin
  {k:=0;}
  repeat
    Read(n); if Odd(n) and (n in [10..99]) then Inc(k);
  until n=0;
  WriteLn(k);
end.

Особой обработки для 0 опять не требуется.

Добавлено через 4 минуты
Проверка условия могла быть такой:

Pascal
1
if Odd(n) and (n>=10) and (n<=99) then ...

Добавлено через 3 минуты
Если нужно считать и отрицательные двузначные, то

Pascal
1
  if Odd(n) and (Abs(n) in [10..99]) then ...

0

Почетный модератор

64270 / 47569 / 32739

Регистрация: 18.05.2008

Сообщений: 115,182

12.11.2016, 15:55

6

Цитата
Сообщение от bormant
Посмотреть сообщение

Если нужно считать и отрицательные двузначные, то

Нужно ибо сказано

Цитата
Сообщение от alina333
Посмотреть сообщение

Введённые числа по модулю не превышают 30000.

0

0 / 0 / 0

Регистрация: 10.11.2016

Сообщений: 9

12.11.2016, 16:02

 [ТС]

7

bormant, Спасибо огромное! Я так понимаю что мы перемудрили,, точнее я Подошла к решению проблемы с точки зрения «тупого» юзера, вдруг он введет значения, которые не соответствуют условию. Ноль обрабатывали потому, что если его исключить из условия, тогда программа его воспринимала как число, которое нельзя вводить и выдавала ошибку ввода. Что такое Odd, n in [10..99] и Inc? Они не проходили еще такого

Добавлено через 7 минут
bormant, Подводя итоги про оператор break. Нужно просто тупо уяснить для себя что по классическим канонам его использовать нельзя, дабы не напрягать отношений с учителем?

0

Модератор

Эксперт Pascal/DelphiЭксперт NIX

7480 / 4352 / 2771

Регистрация: 22.11.2013

Сообщений: 12,470

Записей в блоге: 1

12.11.2016, 16:14

8

Odd — http://pascal.net.ru/Odd , (n mod 2<>0) или (n and 1<>0) дадут тот же результат
Inc — http://pascal.net.ru/Inc , k:=k+1
in [10..99] — принадлежит множеству от 10 до 99, включая границы, то же самое, что и (n>=10) and (n<=99)

Про Break — просто считайте его запрет дополнительным ограничением в условии задачи. Возможно, это врЕменное ограничение, возможно только для циклов for.

0

alina333

0 / 0 / 0

Регистрация: 10.11.2016

Сообщений: 9

12.11.2016, 16:33

 [ТС]

9

bormant, Спасибо! Но я так поняла постановку задачи, что использовать надо было именно те знания, которые им давали на уроке. Иначе учитель вряд ли бы поверил, что ребенок написал программу сам. Я и так там перемудрила с лишними проверками

Добавлено через 11 минут
bormant, У меня неправильный результат получается в вашей программке

Pascal
1
2
3
4
5
6
7
8
var n, k: Integer;
begin
  {k:=0;}
  repeat
    Read(n); if Odd(n) and (n in [10..99]) then Inc(k);
  until n=0;
  WriteLn(k);
end.

Может Inc(k) здесь не нужно? Я правильно поняла, что изначально все переменные в программе имеют нулевые значения, поэтому {k:=0;} в фигурных скобках, т.е их принудительно обнулять не нужно?

0

Модератор

Эксперт Pascal/DelphiЭксперт NIX

7480 / 4352 / 2771

Регистрация: 22.11.2013

Сообщений: 12,470

Записей в блоге: 1

12.11.2016, 17:05

10

alina333,
давайте посмотрим, на каких данных какой результат получился и почему он неправильный?

0

0 / 0 / 0

Регистрация: 10.11.2016

Сообщений: 9

12.11.2016, 19:00

 [ТС]

11

bormant, Ввела значения 52, 43,85. В ответе 2

0

Модератор

Эксперт Pascal/DelphiЭксперт NIX

7480 / 4352 / 2771

Регистрация: 22.11.2013

Сообщений: 12,470

Записей в блоге: 1

12.11.2016, 19:02

12

alina333,
вы забыли написать, почему по-вашему 2 — это неправильное количество нечетных двузначных чисел.
Я вижу только 2 таких числа: 43 и 85. Число 52, если правильно путаю, является четным.

0

Почетный модератор

64270 / 47569 / 32739

Регистрация: 18.05.2008

Сообщений: 115,182

12.11.2016, 19:07

13

Цитата
Сообщение от bormant
Посмотреть сообщение

это неправильное количество нечетных

Так нужно сумму.

Цитата
Сообщение от alina333
Посмотреть сообщение

Программа должна вывести одно
число: сумму двухзначных нечётных чисел в последовательности.

Добавлено через 1 минуту
А ТCу влом поправить k:=k+n

0

bormant

Модератор

Эксперт Pascal/DelphiЭксперт NIX

7480 / 4352 / 2771

Регистрация: 22.11.2013

Сообщений: 12,470

Записей в блоге: 1

12.11.2016, 19:08

14

Цитата
Сообщение от Puporev
Посмотреть сообщение

нужно сумму

Война давно закончилась, а я всё эшелоны под откос пускаю

Pascal
1
2
3
4
5
6
7
8
var n: Integer; s: Longint;
begin
  {s:=0;}
  repeat
    Read(n); if Odd(n) and (Abs(n) in [10..99]) then s:=s+n;
  until n=0;
  WriteLn(s);
end.

0

0 / 0 / 0

Регистрация: 10.11.2016

Сообщений: 9

13.11.2016, 00:45

 [ТС]

15

Всем огромное спасибо за терпение! Впредь обязуюсь правильно вставлять текст программы в тело поста и не лениться думать

0

Процедуры прерываний

Обработка <Ctrl
+ Break>

Прерывание
исполнения программы можно вызвать
нажатием комбинации клавиш Ctrl
+
Break
(применяется,
если программа «зависла»)

Процедура Break

Осуществляет
принудительный выход из цикла.

Если цикл организован
с помощью оператора FOR,
WHILE
или REPEAT,
применение процедуры Break
приводит к передаче управления следующему
(после тела цикла) оператору. Это
напоминает действие оператора GOTO,
осуществляющего переход к метке,
находящейся сразу после тела цикла.

При вызове
процедуры
Break
вне цикла
FOR,
WHILE
или
REPEAT
имеет место ошибка.

Процедура Continue

Осуществляет
переход к следующей итерации цикла.

Если цикл организован
с помощью оператора FOR,
WHILE
или REPEAT,
применение процедуры Continue
прерывает
текущую итерацию и инициирует переход
к следующей итерации. При
вызове процедуры
Continue
вне цикла
FOR,
WHILE
или
REPEAT
имеет место ошибка.

Процедура Exit

Осуществляет выход
из текущего блока программы.

Если текущим блоком
является тело программы, обращение к
процедуре Exit
инициирует
завершение программы.

Процедура
Halt(Cod)

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

Пример:

Найти первое
отрицательное число во входном потоке
из вещественных чисел (не более 100)

———————————————————————

Program L_6;

Var i: integer;

a: real;

begin

for
i:=1 to 100 do

begin

read(a);

if
a>=0
then
continue;
{при выполнении
условия изменяется

параметр
цикла и цикл повторяется сначала}

writeln(‘первое
отр. число =,а:5:2’);

Break
{выход
из
цикла}

end;

end.

———————————————————

Ответ:

4

2

1

-8

первое отр
число=-8.00

———————————————————-

Типизированные константы

Пример

.

.

const

Вид <идентификатор>
= <значение>

c1=value

Вид <идентификатор>
: <тип> = <значение>
c2:type=value

.

.

Здесь для
сравнения даны описания обычной(c1)
и типизированной(c2)
констант.

c1
и c2
– идентификаторы обычной и типизированной
констант

type
– тип константы, данный элемент
присутствует в описании только
типизированной константы – это и
является её основной внешней отличительной
особенностью;

value
– значение, присваиваемое константе
(как типизированной, так и нетипизированной)
при объявлении.

И те и другие
константы описываются в разделе
описаний констант
.

Константы вида
<идентификатор>=<значение>
изменять в программе нельзя.

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Раздел: Стандартные функции Паскаля

Основы программирования 2.0

Основы программирования
Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать.
Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь.
Подробнее…

Процедура Break в Паскале выполняет прерывание цикла. Синтаксис:


procedure Break;

Процедура Break выполняет переход к оператору, следующему после текущего блока цикла.

Код после вызова Break и окончанием блока цикла не выполняется. Состояние текущего цикла при этом прекращает отслеживаться.

Процедура Break может использоваться с циклами
FOR и
WHILE.

Учтите, что Break — это зарезервированное слово и оно не может быть переопределено.

Как прервать цикл в Паскале

Пример программы, которая использует процедуру Break для прерывания цикла, приведён ниже:

program breakproc;

{$mode objfpc}{$H+}

var i, j : byte;

//****************************************************************
// Так делать нельзя, потому что тогда прерывание цикла 
// с помощью Break не будет работать
//****************************************************************
{procedure Break;
begin
end;}

begin

  //Будут выведены 4 числа от 1 до 4
  for i := 1 to 10 do
    begin
      Write(i:3);
      if i = 4 then Break;
    end;

  WriteLn;

  //Будут выведены 3 числа от 1 до 3
  for i := 1 to 10 do
    begin
      if i = 4 then Break;
      Write(i:3);  //!!! Этот код после вызова Break 
                   //уже не будет выполнен !!!
    end;

  WriteLn;

  //Прерывание вложенного цикла
  for j := 11 to 15 do    //Цикл 1
    begin
      for i := 1 to 10 do //Вложенный цикл 2
        begin
          if i = 3 then
            Break;        //Прерывает вложенный цикл 2,
          Write(i:3);     //но цикл 1 будет выполнен до конца !!!
        end;
      Write(j:3);
    end;

  WriteLn;

  //Прерывание основного цикла
  for j := 11 to 15 do    //Цикл 1
    begin
      for i := 1 to 10 do //Вложенный цикл 2
        begin
          if i = 3 then
            Break;        //Прерывает вложенный цикл 2
          Write(i:3);
        end;
      if j = 13 then
        Break;            //Прерывает цикл 1
      Write(j:3);
    end;

  ReadLn;
end.

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

Также обратите внимание на то, как работает прерывание вложенного цикла: прерывается только вложенный цикл, а основной продолжает работать.

Также обратите внимание на нашу собственную процедуру Break в начале программы. Она закомментирована и не компилируется.

Однако, если вы её раскомментируете, то процедура Break будет переопределена. Ошибки компиляции это не вызовет — программа будет создана.

Но стандартная процедура Break не будет работать!!! То есть выйти из цикла с помощью процедуры Break вы не сможете, потому что вызываться будет уже не стандартная процедура из модуля SYSTEM, а ваша собственная процедура, объявленная в начале программы, которая не выполняет выход из цикла.

Как стать программистом 2.0

Как стать программистом 2.0

Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки…
Подробнее…

Помощь в технических вопросах

Помощь в технических вопросах

Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение — ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации.
Подробнее…

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

Операторы break и continue используются только внутри циклов.

Оператор break предназначен для досрочного завершения цикла. При его выполнении происходит немедленный выход из текущего цикла и переход к выполнению оператора, следующего за циклом. Оператор continue завершает текущую итерацию цикла, осуществляя переход к концу тела цикла. Например:

flag := False;

for var i:=1 to 10 do

begin

read(x);

if x<0 then continue; // пропуск текущей итерации цикла

if x=5 then

begin

flag := True;

break; // выход из цикла

end;

end;

Использование операторов break и continue вне тела цикла ошибочно.

Оператор exit предназначен для досрочного завершения процедуры или функции. Например

function Analyze(x: integer): boolean;

begin

if x<0 then

begin

Result := False;

exit

end;

end;

Вызов exit в разделе операторов основной программы приводит к ее немедленному завершению.

Следует отметить, что в PascalABC.NET (в отличие от Borland Pascal и Borland Delphi) break, continue и exit являются не процедурами, а именно операторами.

Читайте также

Оператор continue

Оператор continue
Оператор continue прерывает текущую итерацию цикла и начинает новую. В различных видах циклов этот оператор производит следующие действия:? в циклах while и do…while проверяется условие цикла и если оно равно true, то вновь выполняется тело цикла;? в цикле for изменяется

R.6.6.2 Оператор continue

R.6.6.2 Оператор continue
Оператор continue может встретиться только в операторе цикла и приводит к передаче управления в заголовок ближайшего из объемлющих операторов цикла, т.е. в конец цикла. Более точно можно сказать, что в каждом из операторов:    while (foo) {      do  {           for

ДРУГИЕ УПРАВЛЯЮЩИЕ ОПЕРАТОРЫ: break, continue, goto

ДРУГИЕ УПРАВЛЯЮЩИЕ ОПЕРАТОРЫ: break, continue, goto
     Операторы, определяющие циклические вычисления, которые только что обсуждались, и условные операторы (if, if-else, switch) являются важнейшими средствами управления выполнением программы на языке Си. Они должны использоваться для

ВЫХОД: exit( )

ВЫХОД: exit( )
     Функция exit( ) даст вам удобный способ «покинуть» программу. Она часто используется для прекращения работы программы при появлении ошибки. Если к exit( ) обратились из функции, вызванной главной программой, то прекращает работу вся программа, а не только эта

continue

continue
Команда continue может использоваться с любыми тремя формами цикла, но не со switch. Она приводит к тому, что управление программой игнорирует оставшиеся операторы цикла. Для цикла while или for начинается следующий шаг цикла. Для цикла do while проверяется условие выхода, а затем,

Оператор продолжения continue

Оператор продолжения continue
Синтаксис:continue;Действие:Оператор продолжения continue передает управление на следующую итерацию в операторах цикла do, for, while. Он может появиться только в теле этих операторов. Остающиеся в теле цикла операторы при этом не выполняются. В операторах

21.3.5. Команда exit — выход из системы

21.3.5. Команда exit — выход из системы
Для завершения сеанса работы в системе (при условии, что вы работаете в консоли) нужно использовать команду exit. Если не завершить сеанс работы, кто угодно сможет работать в системе под вашим именем (понятно, что во время вашего отсутствия

9.9 Оператор Continue

9.9 Оператор Continue
Операторcontinue ;вызывает передачу управления на управляющую продолжением цикла часть наименьшего охватывающего оператора while, do или for; то есть на конец петли цикла. Точнее, в каждом из оперторовwhile (…) (* do (* for (…) (* … … … contin: ; contin: ; contin: ; *) *) while (…); *)continue

18.8. Управление ходом выполнения циклов с помощью команд break и continue

18.8. Управление ходом выполнения циклов с помощью команд break и continue
Иногда в процессе работы возникает необходимость в прерывании или пропуске отдельных итераций цикла. При этом применяются определенные критерии. Для обеспечения подобных возможностей интерпретатор shell

18.8.3. Команда continue

18.8.3. Команда continue
Команда continue по своему действию напоминает команду break, за исключением одной существенной детали: она не прерывает цикл, а лишь приводит к пропуску текущей итерации

Save & Exit Setup

Save &amp; Exit Setup
Данный пункт служит для сохранения изменений, выполненных в BIOS Setup. При его выборе BIOS запоминает настройки, сделанные в BIOS Setup, в CMOS-памяти с таким расчетом, чтобы они вступили в силу при следующей загрузке системы. Если выйти из BIOS, не воспользовавшись данным

Exit Without Saving

Exit Without Saving
Выбрав данный пункт, можно отменить сделанные изменения. При этом в CMOS-память загрузится предыдущая рабочая конфигурация

Exit

Exit
В данной секции содержится несколько пунктов, позволяющих перед выходом из BIOS сохранить все измененные данные, отменить сделанные настройки или загрузить значения, принятые по умолчанию.• Exit &amp; Save Changes. Служит для записи всех сделанных изменений. Нужно нажать

Exit

Exit
В данной секции содержится несколько пунктов, с помощью которых перед выходом из BIOS можно сохранить все измененные данные, отменить их или загрузить настройки по умолчанию.• Save &amp; Exit Setup. Позволяет выйти из BIOS, записав сделанные изменения.• Exit Without Saving. Служит для

Меню Exit

Меню Exit
В меню Exit (рис. 3.7) вы найдете следующие команды:? Exit Saving Changes – выйти с сохранением изменений;? Exit Discarding Changes – выйти без сохранения изменений;? Load Setup Defaults – загрузить настройки по умолчанию;? Discard Changes – отменить изменения, но не выходить;? Save Changes – сохранить

 Break  (процедура)


Прерывает операторы циклов for, while или repeat.

Объявление

 procedure Break;

Режим

Windows, Real, Protected

Замечания

Немедленно выходит из ближайшего цикла for, while или repeat.

Это напоминает оператор goto, переходящий по метке, находящейся сразу после окончания оператора цикла.

Компилятор сообщает об ошибке, если вызов Break не был сделан внутри циклов for, while или repeat.

Ада

Аналогом псевдопроцедуры Break явлется оператор exit:

 exit [имя цикла] [when условие];

«Имя цикла» — это необязательный идентификатор, указывающий, из какого именно цикла выйти. Это необходимо, чтобы выйти сразу из двух и более циклов. «when условие» — это просто для удобства. Экономит пару строчек.

В отличие от Break в Borland Pascal, exit в языке Ада является зарезервированным словом и оператором. Его нельзя, например, переопределить:

 procedure Break;
 begin
   { Весёлой отладки !!! }
 end;

Мягко говоря, не понятно, что мешало в Паскале определить Break как оператор?

Смотри также

Пример


 { Пример программы для процедуры Break }

uses Crt;
var
  S : String;
begin
 while True do
 begin
   ReadLn(S);
   if S = » then
     Break;
   WriteLn(S);
 end;
end.

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

Procedure Sort(var data : arr; j : integer);
var
    temp: integer;

begin
    temp := data[j];
    data[j] := data[j + 1];
    data[j + 1] := temp;
end;

Procedure sortDescending(var data : arr; n : integer);
var
    i, j : integer;
    marker : boolean;

begin
    for i := 1 to n do
    marker := false;
    begin
        for j := 1 to n do
        begin
            if(data[j] < data[j + 1]) then
            begin
                Sort(data, j);
                marker := true;
            end;
        end;
        if(marker = false) then
        begin
        break;
        end;
    end;
end;

1 ответ

Вот твой код.

for i := 1 to n do
marker := false;
begin
    for j := 1 to n do
    begin
        if(data[j] < data[j + 1]) then
        begin
            Sort(data, j);
            marker := true;
        end;
    end;
    if(marker = false) then
    begin
    break;
    end;
end;

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

for i := 1 to n do
    marker := false;

begin
    for j := 1 to n do
    begin
        if (data[j] < data[j + 1]) then
        begin
            Sort(data, j);
            marker := true;
        end;
    end;

    if (marker = false) then
    begin
        break;
    end;
end;

Что эквивалентно:

for i := 1 to n do
    marker := false;

for j := 1 to n do
begin
    if (data[j] < data[j + 1]) then
    begin
        Sort(data, j);
        marker := true;
    end;
end;

if (marker = false) then
begin
    break;
end;

break не находится внутри цикла.

Вероятно, вы хотели поставить begin перед marker := false;.

for i := 1 to n do
begin
    marker := false;

    for j := 1 to n do
    begin
        if (data[j] < data[j + 1]) then
        begin
            Sort(data, j);
            marker := true;
        end;
    end;

    if (marker = false) then
    begin
        break;
    end;
end;


1

Chris
6 Авг 2022 в 01:22

Процедуры прерываний

Обработка <Ctrl
+ Break>

Прерывание
исполнения программы можно вызвать
нажатием комбинации клавиш Ctrl
+
Break
(применяется,
если программа «зависла»)

Процедура Break

Осуществляет
принудительный выход из цикла.

Если цикл организован
с помощью оператора FOR,
WHILE
или REPEAT,
применение процедуры Break
приводит к передаче управления следующему
(после тела цикла) оператору. Это
напоминает действие оператора GOTO,
осуществляющего переход к метке,
находящейся сразу после тела цикла.

При вызове
процедуры
Break
вне цикла
FOR,
WHILE
или
REPEAT
имеет место ошибка.

Процедура Continue

Осуществляет
переход к следующей итерации цикла.

Если цикл организован
с помощью оператора FOR,
WHILE
или REPEAT,
применение процедуры Continue
прерывает
текущую итерацию и инициирует переход
к следующей итерации. При
вызове процедуры
Continue
вне цикла
FOR,
WHILE
или
REPEAT
имеет место ошибка.

Процедура Exit

Осуществляет выход
из текущего блока программы.

Если текущим блоком
является тело программы, обращение к
процедуре Exit
инициирует
завершение программы.

Процедура
Halt(Cod)

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

Пример:

Найти первое
отрицательное число во входном потоке
из вещественных чисел (не более 100)

———————————————————————

Program L_6;

Var i: integer;

a: real;

begin

for
i:=1 to 100 do

begin

read(a);

if
a>=0
then
continue;
{при выполнении
условия изменяется

параметр
цикла и цикл повторяется сначала}

writeln(‘первое
отр. число =,а:5:2’);

Break
{выход
из
цикла}

end;

end.

———————————————————

Ответ:

4

2

1

-8

первое отр
число=-8.00

———————————————————-

Типизированные константы

Пример

.

.

const

Вид <идентификатор>
= <значение>

c1=value

Вид <идентификатор>
: <тип> = <значение>
c2:type=value

.

.

Здесь для
сравнения даны описания обычной(c1)
и типизированной(c2)
констант.

c1
и c2
– идентификаторы обычной и типизированной
констант

type
– тип константы, данный элемент
присутствует в описании только
типизированной константы – это и
является её основной внешней отличительной
особенностью;

value
– значение, присваиваемое константе
(как типизированной, так и нетипизированной)
при объявлении.

И те и другие
константы описываются в разделе
описаний констант
.

Константы вида
<идентификатор>=<значение>
изменять в программе нельзя.

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

 Break  (процедура)


Прерывает операторы циклов for, while или repeat.

Объявление

 procedure Break;

Режим

Windows, Real, Protected

Замечания

Немедленно выходит из ближайшего цикла for, while или repeat.

Это напоминает оператор goto, переходящий по метке, находящейся сразу после окончания оператора цикла.

Компилятор сообщает об ошибке, если вызов Break не был сделан внутри циклов for, while или repeat.

Ада

Аналогом псевдопроцедуры Break явлется оператор exit:

 exit [имя цикла] [when условие];

«Имя цикла» — это необязательный идентификатор, указывающий, из какого именно цикла выйти. Это необходимо, чтобы выйти сразу из двух и более циклов. «when условие» — это просто для удобства. Экономит пару строчек.

В отличие от Break в Borland Pascal, exit в языке Ада является зарезервированным словом и оператором. Его нельзя, например, переопределить:

 procedure Break;
 begin
   { Весёлой отладки !!! }
 end;

Мягко говоря, не понятно, что мешало в Паскале определить Break как оператор?

Смотри также

Пример


 { Пример программы для процедуры Break }

uses Crt;
var
  S : String;
begin
 while True do
 begin
   ReadLn(S);
   if S = » then
     Break;
   WriteLn(S);
 end;
end.

Раздел: Стандартные функции Паскаля

Основы программирования 2.0

Основы программирования
Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать.
Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь.
Подробнее…

Процедура Break в Паскале выполняет прерывание цикла. Синтаксис:


procedure Break;

Процедура Break выполняет переход к оператору, следующему после текущего блока цикла.

Код после вызова Break и окончанием блока цикла не выполняется. Состояние текущего цикла при этом прекращает отслеживаться.

Процедура Break может использоваться с циклами
FOR и
WHILE.

Учтите, что Break — это зарезервированное слово и оно не может быть переопределено.

Как прервать цикл в Паскале

Пример программы, которая использует процедуру Break для прерывания цикла, приведён ниже:

program breakproc;

{$mode objfpc}{$H+}

var i, j : byte;

//****************************************************************
// Так делать нельзя, потому что тогда прерывание цикла 
// с помощью Break не будет работать
//****************************************************************
{procedure Break;
begin
end;}

begin

  //Будут выведены 4 числа от 1 до 4
  for i := 1 to 10 do
    begin
      Write(i:3);
      if i = 4 then Break;
    end;

  WriteLn;

  //Будут выведены 3 числа от 1 до 3
  for i := 1 to 10 do
    begin
      if i = 4 then Break;
      Write(i:3);  //!!! Этот код после вызова Break 
                   //уже не будет выполнен !!!
    end;

  WriteLn;

  //Прерывание вложенного цикла
  for j := 11 to 15 do    //Цикл 1
    begin
      for i := 1 to 10 do //Вложенный цикл 2
        begin
          if i = 3 then
            Break;        //Прерывает вложенный цикл 2,
          Write(i:3);     //но цикл 1 будет выполнен до конца !!!
        end;
      Write(j:3);
    end;

  WriteLn;

  //Прерывание основного цикла
  for j := 11 to 15 do    //Цикл 1
    begin
      for i := 1 to 10 do //Вложенный цикл 2
        begin
          if i = 3 then
            Break;        //Прерывает вложенный цикл 2
          Write(i:3);
        end;
      if j = 13 then
        Break;            //Прерывает цикл 1
      Write(j:3);
    end;

  ReadLn;
end.

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

Также обратите внимание на то, как работает прерывание вложенного цикла: прерывается только вложенный цикл, а основной продолжает работать.

Также обратите внимание на нашу собственную процедуру Break в начале программы. Она закомментирована и не компилируется.

Однако, если вы её раскомментируете, то процедура Break будет переопределена. Ошибки компиляции это не вызовет — программа будет создана.

Но стандартная процедура Break не будет работать!!! То есть выйти из цикла с помощью процедуры Break вы не сможете, потому что вызываться будет уже не стандартная процедура из модуля SYSTEM, а ваша собственная процедура, объявленная в начале программы, которая не выполняет выход из цикла.

Как стать программистом 2.0

Как стать программистом 2.0

Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки…
Подробнее…

Помощь в технических вопросах

Помощь в технических вопросах

Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение — ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации.
Подробнее…

Понравилась статья? Поделить с друзьями:
  • Break switch ошибка
  • Bosch посудомоечная машина ошибка e61
  • Bosch пмм ошибка е21
  • Bosch ошибка е15 посудомоечная машина работает насос
  • Bosch ошибка h95