Форум: "Потрепаться";
Текущий архив: 2003.05.15;
Скачать: [xml.tar.bz2];
ВнизКак по 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c