Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.007 c
4-10504
Syscom
2003-06-01 21:15
2003.08.04
Блокировка Alt+Ctrl+Del


1-10176
AndreyAs
2003-07-17 15:51
2003.08.04
Rave Reports по-русски


14-10435
EvgeniyR
2003-07-17 11:54
2003.08.04
Отправка SMS-сообщений


14-10412
alexshell
2003-07-17 13:08
2003.08.04
Где взять доку и примеры по разработке сервисов NT?


7-10470
Pahsik
2003-05-24 04:12
2003.08.04
Добавление юзера к файлу





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский