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

Вниз

Break для всех циклов   Найти похожие ветки 

 
McSimm2   (2003-07-18 13:25) [0]

нет никакой функции, что бы можно прервать выполнение всех циклов в процедуре?. У меня цикл крутится в цикле. Я флаг выставляю, но помоему эт как то не круто....


 
Виктор Щербаков ©   (2003-07-18 13:28) [1]

Может механизм обработки исключительных ситуаций подойдет?


 
McSimm2   (2003-07-18 13:32) [2]

Как его реализовать ?


 
ZrenBy ©   (2003-07-18 13:34) [3]

goto


 
Юрий Зотов ©   (2003-07-18 13:34) [4]

На выбор:
1. Виктор Щербаков © (18.07.03 13:28).
2. Внешний цикл в виде while или repeat.
3. Break во внешнем цикле.
4. Пресловутый GoTo.
5. Exit, если надо выйти из процедуры.


 
Serginio   (2003-07-18 13:34) [5]

Goto


 
McSimm2   (2003-07-18 13:35) [6]

5 - то что надо


 
VAleksey ©   (2003-07-18 13:39) [7]

+ к 5 можно еще Abort по ситуации.


 
Виктор Щербаков ©   (2003-07-18 13:45) [8]

VAleksey © (18.07.03 13:39)
Дык это тоже относится к Виктор Щербаков © (18.07.03 13:28) :-)


 
Spawn ©   (2003-07-18 13:45) [9]

Или Exit


 
KDS ©   (2003-07-18 15:47) [10]

Abort если процедуры вложены одна в другую и Exit если все цыклы в одной процедуре


 
Семен Сорокин ©   (2003-07-18 19:23) [11]

McSimm2 (18.07.03 13:25)
а два раза Break не подойдет?


 
Marser ©   (2003-07-18 21:49) [12]

Два раза Break


 
Serginio   (2003-07-18 21:51) [13]

Halt, TerminateProcess.


 
Marser ©   (2003-07-18 21:58) [14]


> Serginio (18.07.03 21:51)
> Halt, TerminateProcess.

Добрый ты :-) Так все циклы в программе прервутся и не только они...


 
Набережных С. ©   (2003-07-19 06:47) [15]

Кнопка reset


 
Anatoly Podgoretsky ©   (2003-07-19 08:48) [16]

Пересмотреть алгоритм/дизайн


 
Borealis   (2003-07-20 15:31) [17]


> Serginio (18.07.03 21:51)
> Halt, TerminateProcess

Кстати, почему замечательная процедура Halt, вдруг отказывается работать в "событиях" FormActivate и FormShow?


 
Ihor Osov'yak ©   (2003-07-20 15:49) [18]

2 Borealis (20.07.03 15:31)

Формальный ответ:

Нажать F1 для Halt, и прочитать, что "To perform a normal termination of a Delphi VCL non-console application, call Application.Terminate."

Ответ по существу.

Halt инициализирует процесс немедленного уничтожения обьектов приложения, в тч и формы, с которой он вызвался. То есть, обьект разрушаем, а фактически продолжаем выподнять его методы. Гарантированные ексепшены с рантайм эрорами.. Целый воз.. Если интересуют подробности - плиз "use debug dcu" + усиленное юзание F7 и F8 (трассировка)..



 
Marser ©   (2003-07-20 21:57) [19]

Действительно, чем Exit не подходит?


 
iZEN ©   (2003-07-20 22:46) [20]


try
while...
for...
raise BreakOnException.Create("Выход из цикла");
...
except
on e: BreakOnException do begin
ShowMessage("Спокойненько вышли из цикла!");
end;
end;


 
old_monkey   (2003-07-21 17:21) [21]

Вообще-то это один из двух вариантов,
где красивее всего будет с goto.
Конечно можно:
...
if (что-то там) then begin ie := 1; break end;
...
ie := 0;
end // конец внутреннего цикла
if (ie = 1) then break end;
...
end // конец внешнего цикла

Второй случай - когда в счетном цикле что-то ищем, и если не нашли присваиваем переменной 0, а не конечное значение.
И здесь можно:

for i := 1 to 1000 do
begin
...
if (что-то там) then break end;
...
end
if i = 1000 then i := 0 end;

Но видели бы вы, во что это транслируется!

Когда-то, когда компьтеры были большими (не помню, что за язык был, то ли PL-1, то ли какая-то версия Fortran, да и вряд ли эти названия вам что говорят), break мог быть с меткой, причем метилась строка начала цикла(!).


 
old_monkey   (2003-07-21 17:28) [22]

Да, еще забыл.
Иногда (когда внешний цикл while), красивее каждый цикл заворачивать в отдельную функцию.
while internal_cycle() = 0 do и т.д.
Прием, распространенный в С.


 
Sandman25 ©   (2003-07-21 17:30) [23]

old_monkey (21.07.03 17:21)

>break мог быть с меткой, причем метилась строка начала цикла(!).

В Java сейчас так же. А в Паскале приходится использовать Goto.




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

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

Наверх




Память: 0.51 MB
Время: 0.012 c
3-10097
vopros
2003-07-14 11:59
2003.08.04
Как в таблицу добавить поле


6-10340
Diatel
2003-05-30 07:43
2003.08.04
Интересный вопрос про ICMP


3-10142
N&N
2003-07-10 08:12
2003.08.04
Корректное удаление записей из таблицы


3-10123
abc
2003-07-14 21:29
2003.08.04
нужно ли устанавливать спец. драйвер для Oracle??


1-10237
Ivolg
2003-07-21 11:48
2003.08.04
Как открыть текстовый файл в Memo