Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 001

/ вопрос открыт /

Здравствуйте!
У меня есть код(не выкладую, т.к. его всё равно читать ни-кто не будет), в котором есть цикл <<for ... then>>. Значит так, мне нужно "выйди" из этого цикла. Можно воспользоваться оператором break, но не могу, т.к. код не позволяет. Можно воспользоваться <<Goto>>, но я им не пользуюсь принципиально. Скажите, есть ещё какие нибудь способы покинуть этот цикл? Да, и чем больше, тем лучше... Благодарен за помощь...

padonak Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: padonak (статус: Посетитель)
Вопрос отправлен: 8 апреля 2010, 23:04
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 17; последнее сообщение — 8 апреля 2010, 23:34; участников в обсуждении: 4.
Ерёмин А.А.

Ерёмин А.А. (статус: *Администратор), 8 апреля 2010, 23:14 [#1]:

Что значит "код не позволяет"? Что-то новенькое.

Цитата (padonak):

Да, и чем больше, тем лучше...

Exit, Close, Application.Terminate, Halt(1), ...
padonak

padonak (статус: Посетитель), 8 апреля 2010, 23:19 [#2]:

Нет, код позволяет, просто "гемороя" много. Там я работаю с матрицей, и два вложеных цикла с процедурой. В общем: "if bool = false then break" у меня вобще никак не "пашет"...
IlluminatI

IlluminatI (статус: 2-ой класс), 8 апреля 2010, 23:19 [#3]:

>Exit, Close, Application.Terminate, Halt(1), ...
это все не к циклу относится, так что думаю не прокатит :)

padonak выложи код, и объясни, что значит "код не позволяет"? Все он позволяет, просто уметь надо :)
Вадим К

Вадим К (статус: Академик), 8 апреля 2010, 23:20 [#4]:

цикла for...then нет. приведите все таки хоть кусок кода (writeln, showmessage, разные расчетные куски можно выкинуть)
Галочка "подтверждения прочтения" - вселенское зло.
IlluminatI

IlluminatI (статус: 2-ой класс), 8 апреля 2010, 23:20 [#5]:

может тогда Continue ? Продолжит цикл с новым значением параметра
padonak

padonak (статус: Посетитель), 8 апреля 2010, 23:20 [#6]:

IlluminatI, я не думаю что ты в 500 строках кода рыться будешь...
IlluminatI

IlluminatI (статус: 2-ой класс), 8 апреля 2010, 23:21 [#7]:

не буду. выкинь оттуда всю чепуху типа выводов, расчетов, итп.
Вадим К

Вадим К (статус: Академик), 8 апреля 2010, 23:23 [#8]:

А, ну так так двойной цикл... он то конечно не позволяет выйти break.
if bool = false then break
а это вообще ошибка:)

в таких случаях обычно есть два варианта.
1) завести доппеременную и break дописать в конец первого цикла. Но это криво:)
2) два цикла вынести в отдельную функцию. С функции всегда можно выйти с помощью exit; с любого места. В результате никаких проблем.
Галочка "подтверждения прочтения" - вселенское зло.
padonak

padonak (статус: Посетитель), 8 апреля 2010, 23:24 [#9]:

for i := 1 to 22 do begin
for i2 := 1 to 22 do begin
if wq[i, i2] = step then begin
pr_mass(timer2); m3 := i; n3 := i2;
Application.ProcessMessages;
end;
end;
end;

Вот код, а процедура pr_mass очень ОЧЕНЬ объёмная. Если не трудно, вы напишите варианты, а я потом уже эксперементы производить буду. Да, и ещё, я могу в процедуре, узнать, стоит мне выполнять дальше провернку матрицы или достаточно(переменная bool)
padonak

padonak (статус: Посетитель), 8 апреля 2010, 23:26 [#10]:

два цикла вынести в отдельную функцию. С функции всегда можно выйти с помощью exit; с любого места. В результате никаких проблем >>> это всё прекрасно, но дело в том, что я не умею пользоваться исключительными ситуациями, придётся восполнять пробелы в памяти... Но спасибо, надеюсь сработает...
IlluminatI

IlluminatI (статус: 2-ой класс), 8 апреля 2010, 23:26 [#11]:

тогда Exit решает твою проблему. Из процедуры / функции можно выйти из любого места.
padonak

padonak (статус: Посетитель), 8 апреля 2010, 23:27 [#12]:

Ребят, спасибо! Плюс к репутации всем! За оперативность!!!
IlluminatI

IlluminatI (статус: 2-ой класс), 8 апреля 2010, 23:27 [#13]:

>я не умею пользоваться исключительными ситуациями

это не исключительная ситуация, простой код, типа:

if not(bool) then Exit;
padonak

padonak (статус: Посетитель), 8 апреля 2010, 23:28 [#14]:

Вадим, извеняюсь "Чтобы изменить репутацию этому пользователю, Вам нужно изменить репутацию ещё как минимум 1 пользователю."
padonak

padonak (статус: Посетитель), 8 апреля 2010, 23:29 [#15]:

IlluminatI, это я знаю, проблема в том, что мне Image очистить нужно, и значения для переменных в любом случае. Короче прийдётся весь алгоритм переделывать...
IlluminatI

IlluminatI (статус: 2-ой класс), 8 апреля 2010, 23:32 [#16]:

если нужно сделать что-то еще, можно же так написать:

if not(bool) then 
 begin
  // чистим Image...
  // обнуляем переменные...
  // шаманим...
  Exit;
 end;

или такое тоже не прокатит? :)
padonak

padonak (статус: Посетитель), 8 апреля 2010, 23:34 [#17]:

IlluminatI, да разберусь, всё норм. А я то думал "где собака зарыта", а вон оно где оказалось. спс

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:42
Выполнено за 0.03 сек.