Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.011 c
3-46647
Pk
2003-04-24 16:52
2003.05.15
Импорт отчета QReport в другой формат (*.rtf, *.txt ...)


6-46871
RUS1
2003-03-18 13:19
2003.05.15
Что за хрень с компонентами NMStrm и NMStrmServ


14-46952
Kloksus
2003-04-26 12:04
2003.05.15
Нужно найти компонент


3-46604
ЧК
2003-04-23 14:36
2003.05.15
DbGrid не принимаеть больше 32657 items. А мне надо...


1-46770
Ламка
2003-04-30 17:42
2003.05.15
Перебор TStringList?




   Наверх