Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как выйти из for цикла? 
:(
    Опции темы
Wowa
  Дата 16.7.2002, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Думал, что смогу отделаться через last, так не получилось :)
PM WWW   Вверх
Baa
Дата 16.7.2002, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: нет
Всего: 12



Цитата(Admin @ 17.7.2002, 00:33)
Думал, что смогу отделаться через last, так не получилось :)

break ;-)


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Максим
Дата 2.10.2002, 20:11 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Выход из цикла, помойму команда "EXIT";
  Вверх
Baa
Дата 2.10.2002, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: нет
Всего: 12



Цитата(Guest @ 02.10.2002, 13:11)
Выход из цикла, помойму команда "EXIT";

Exit совершает ничто иное как безусловный переход в конец процедуры (jmp end;) т.е. выход из неё.
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
 Exit;
 ShowMessage ('This will never happen!');
end;





--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Song
Дата 2.10.2002, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Sysman.ru
***


Профиль
Группа: Участник
Сообщений: 1095
Регистрация: 2.6.2002

Репутация: 2
Всего: 4



Если вызов Exit производится внутри цикла, то компилятор автоматически сначала подставляет Break.
Если вызов Exit идёт и блока try .. finally .. end то компилятор автоматически подставляет Abort
Так что не всё так безусловно.


--------------------
Прежде чем сказать "Невозможно", подумай, прав ли ты
PM WWW ICQ   Вверх
Baa
Дата 3.10.2002, 02:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: нет
Всего: 12



Цитата(Song @ 02.10.2002, 16:12)
Если вызов Exit производится внутри цикла, то компилятор автоматически сначала подставляет Break.
Если вызов Exit идёт и блока try .. finally .. end то компилятор автоматически подставляет Abort
Так что не всё так безусловно.

Буду знать...а переход и в том и в другом случае делается безусловный


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Baa
Дата 3.10.2002, 03:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: нет
Всего: 12



Цитата(Song @ 02.10.2002, 16:12)
Если вызов Exit производится внутри цикла, то компилятор автоматически сначала подставляет Break.
Если вызов Exit идёт и блока try .. finally .. end то компилятор автоматически подставляет Abort
Так что не всё так безусловно.

procedure TForm1.Button1Click(Sender: TObject);
begin
 while true do
 begin
   ShowMessage ('Test');
   Exit;
 end;
 ShowMessage ('This will never happen');
end;
А какая разница? Попробуй вместо Exit поставить break... Exit - это выход из процедуры без каких либо подставлений... Как проверить? смотрим код: jmp +$0a
А куда это мы прыгаем? правильно, прямо на ret в обход последней функции...Так что все таки это безусловный выход из процедуры.


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Song
Дата 3.10.2002, 06:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Sysman.ru
***


Профиль
Группа: Участник
Сообщений: 1095
Регистрация: 2.6.2002

Репутация: 2
Всего: 4



Нет, здесь вызов выхода из текущей обработки и выход обрабатывается одноврменно, через стёк т.е. через трассировку или подставкой чего-нить в код Вы не проверите, поэтому придется мне поверить на слово  :), т.е. на самом деле Break выполняется однако управление на ShowMessage() не передастся, так запрограммировано.


--------------------
Прежде чем сказать "Невозможно", подумай, прав ли ты
PM WWW ICQ   Вверх
Baa
Дата 3.10.2002, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: нет
Всего: 12



Вобщем, так или иначе, если мы хотим, чтобы все, что идет после цикла выполнилось Exit никак не подходит :)


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Ampersand
Дата 3.10.2002, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 20.5.2002

Репутация: нет
Всего: нет



Вообще Паскаль задумывался как строгий, структурный язык. Соответственно, всякие вольности типа выхода из процедуры в любой точке и произвольное прекращение цикла в нем не допускаются... В Дельфях можт уже все испортили, не знаю... А вообще в данном случае классика - замена for на while. Еще можно попробовать принудительно переменную цикла увеличить до верхней границы. На крайняк goto...
PM MAIL WWW   Вверх
Vit
Дата 4.10.2002, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Цитата(Ampersand @ 03.10.2002, 07:38)
В Дельфях можт уже все испортили, не знаю...

1) Exit и Break появились в Turbo Pascal (не то в 6.0, не то в 7.0)
2) На чистом Паскале можно программировать наверное лишь чистую математику, да простейшие cgi. В связи с полным отсутствием интерфейса, экспорта функций, объектов и т.п. использование чистого классического Паскаля практически невозможно.
3) В настоящее время существует лишь одна распространённая реализация Паскаль сделанная Борландом (только не надо говорить что есть еще много - есть то они есть, да пользователей их пренебрежительно мало), следовательно стандарт  Паскаля De Facto определяют версии от Borland (точно так же как Basic определяется MS)


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
rhf
Дата 4.10.2002, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 13.8.2002

Репутация: нет
Всего: нет



2 Ampersand, вообщето break (выход из цикла) и exit (выход из процедуры/функции) идут из старого доброго паскаля и я рад, что никто ничего НЕ испортил и НЕ выкинул их из Object Pascal. И давайте не будем вспоминать про goto :)
PM MAIL   Вверх
Vit
Дата 4.10.2002, 02:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Цитата(rhf @ 03.10.2002, 09:27)
2 Ampersand, вообщето break (выход из цикла) и exit (выход из процедуры/функции) идут из старого доброго паскаля

Нет, не идут! В спецификации Паскаля их нет. Они появились, как я уже говорил, в Tp6 (это примерно 1993 год), до этого их ни в одной реализации вообще не было. А так называемый Object Pascal появился примерно тогда-же в том же TP6 c появлением Turbo Vision, ни в стандарте Паскаля, ни в одной реализации Паскаля до того никаких объектов вообще не было. Добавление объектов и разработка спецификации Object Pascal целиком заслуга Борланд, другие реализации Object Pascal появились только лет через 5 после Object Pascal от Борланд и практически базировались на последнем.


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Song
Дата 4.10.2002, 02:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Sysman.ru
***


Профиль
Группа: Участник
Сообщений: 1095
Регистрация: 2.6.2002

Репутация: 2
Всего: 4



Моя версия Tp7
Ну уж никак не <=Tp5 :-)


--------------------
Прежде чем сказать "Невозможно", подумай, прав ли ты
PM WWW ICQ   Вверх
Vit
Дата 4.10.2002, 02:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Цитата(Song @ 03.10.2002, 10:40)
Моя версия Tp7
Ну уж никак не <=Tp5 :-)

Это точно, в TP5.5 абсолютно точно не было ни объектов, ни exit, ни break (только Halt был для любителей :) )


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1348 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.