Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.15;
Скачать: CL | DM;

Вниз

Как по Break у выйти из нескольких блоков?   Найти похожие ветки 

 
RavenD   (2003-04-28 15:18) [0]

Привет, All!

пример:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
...
for i:=1 to 10 do begin
for l:=1 to 10 do begin
...
if(уловие)then Break;(выход из всех циклов)
...
end;
end
...

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
как по условию выйти из вескольких блоков?

Спасибо.


 
Digitman ©   (2003-04-28 15:21) [1]

никак.
Break с анализом сквозного условия должен присутствовать на всех уровнях вложенности циклов


 
Zelius ©   (2003-04-28 15:25) [2]

либо после каждого цикла проверять установленные флаги и брейкать дальше, либо Abort + try except


 
Zirus ©   (2003-04-28 15:26) [3]

label 1;

...

for i:=1 to 10 do begin
for l:=1 to 10 do begin
...
if(уловие)then goto 1;(выход из всех циклов)
...
end;
end
...
1:


 
palva   (2003-04-28 15:28) [4]

Можно использовать, извините за выражение, оператор goto


 
evvcom ©   (2003-04-28 15:29) [5]

Хотя употребление подобных ругательств не считается хорошим стилем...


 
circul ©   (2003-04-28 15:36) [6]

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


 
anfaenger   (2003-04-28 15:40) [7]


> RavenD (28.04.03 15:18)

Думаю, что лучше все нужные циклы написать в отдельной процедуре, а внутри её по условию использовать "Exit".
procedure Ausgang;
begin
...
for i:=1 to 10 do begin
for l:=1 to 10 do begin
...
if(уловие)then Exit;(выход из всех циклов)
...
end;
end;
...
end;


 
_Igorek   (2003-04-28 15:54) [8]

i := 11;
break;


 
Zz_   (2003-04-28 15:57) [9]

Давайте уж и я поучаствую.

for C := 1 to 100 do begin
I := ((C-1) div 10)+1;
J := ((C-1) mod 10)+1;

if (условие) break;
end;


 
anfaenger   (2003-04-28 16:01) [10]


> _Igorek (28.04.03 15:54)

А, если циклов не два, а очень много? А, если как раз значения этих переменных нужны для дальнейшего использования? Кроме того, при таком стиле, наверняка, можно нарваться на неприятности в поведении программы.


 
Polevi ©   (2003-04-28 16:17) [11]

raise


 
Snap ©   (2003-04-28 16:25) [12]

Ну сколько у тебя будет циклов? тисячи? миллионы? если циклов не больше 15 (что уже мало вероятно), то без особых проблем помогут флаги. (или флаг).


 
Игорь Шевченко ©   (2003-04-28 16:26) [13]

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


 
default ©   (2003-04-28 16:27) [14]

в книге какой-то помню было написано:
"математически доказано что метки заменимы во всех случаях кроме одного: выход из нескольких циклов" - стало быть в этом случае надо применять их


 
anfaenger   (2003-04-28 16:50) [15]


> Snap © (28.04.03 16:25)

А, если с помощью циклов сканируется некий многомерный массив и, если при каком-либо значении определённого поля нужно далее в программе использовать индексы этого массива, т.е переменные циклов? Всё-таки, наверное, проще использовать Goto или Exit в отдельной процедуре. Использование Goto, хотя и не рекомендуется, но при вложенных циклах, даже в Help"е Delphi приведён пример с инструкцией Goto.



Страницы: 1 вся ветка

Текущий архив: 2003.05.15;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.013 c
1-46777
tytus
2003-05-01 17:46
2003.05.15
caption


3-46669
vladimirS
2003-04-25 08:36
2003.05.15
как лучше установить права пользователям?


14-46976
Василий_
2003-04-24 19:30
2003.05.15
Систем 98Win


1-46707
DSR
2003-04-29 19:07
2003.05.15
Восстановление окна


3-46593
ЧК
2003-04-23 13:23
2003.05.15
Кто может ... UpdateSql