Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оператор GOTO, за или против 
:(
    Опции темы
 
Оператор GOTO
Нет, это бред, который мешает мыслить!!! [ 11 ]  [55.00%]
Да, это неотъемлемая чать программирования!!! [ 9 ]  [45.00%]
Всего проголосовавших: 20
В этом опросе возможен один вариант ответа
Гости не могут голосовать 
Chingachguk
Дата 19.1.2004, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

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



По поводу корректности.

Изначально я имел в виду именно то, что проверку можно (или имеет смысл) выполнять после выполнения каких-то действий внутри второго цикла. Скажем, я бы мог уточнить свой пример таким образом:

Цитата

for(int Pivo = 20; Pivo > 0; Pivo--)
{
  DrinkOnePivo(true);
  for(int Vodka = 20; Vodka > 0; Vodka--)
  {
      DrinkOneVodka(true);
      if ( !CanIAnswerMyNameGood(Pivo,Vodka) )
          goto IsEnough;
  }
}
IsEnough:


В самом деле, какой смысл проверять, можешь ли ы шевелить языком, если не выпил хотя бы буылочку пивка ? ;)

По поводу бысродействия.

В самом деле, если при первых же итерациях цикл должен прекратиться, то твой вариант работает быстрее. Но ! Как правило, цикл в среднем выполняется хотя бы до половины (внешний) - в реальной работе. Если же ситуация такова, что в большинстве случаев он завершается очень быстро - нужно писать алгоритм, учитывающий это:

Цитата

if ( !CanIAnswerMyNameGood() )
          goto IsEnough;
for(int Pivo = 20; Pivo > 0; Pivo--)
{
  DrinkOnePivo(true);
  for(int Vodka = 20; Vodka > 0; Vodka--)
  {
      DrinkOneVodka(true);
      if ( !CanIAnswerMyNameGood() )
          goto IsEnough;
  }
}
IsEnough:


Возможно, ты можешь сказать, что время проверки во внешнем цикле несущественно (всего 1:20 проверок). Однако я могу привести и такой пример:

Цитата

for(int Pivo = 200; !CanIAnswerMyNameGood() && Pivo > 0; Pivo--)
{
  DrinkOnePivo(true);
  for(int Vodka = 2; Vodka > 0; Vodka--)
  {
      DrinkOneVodka(true);
      if ( !CanIAnswerMyNameGood() )
          goto IsEnough;
  }
}
IsEnough:


Однако я не думаю, что стоит на этом заострять внимание - ведь, как я написал выше, я имел в виду то, что я бы хотел рассматривать тот случай, когда проверки можно выполнять только внутри внутреннего цикла.



--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
M@xim
Дата 26.1.2004, 11:15 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Мой аккадемик препод настоятельно рекомендовал не пользоваться этой ошибкой природы.
Побочный эффект may be , а если длина кода уж действительно 1..... строк то закольцованность.
А для консольных прог это реалити.
Это факт.
  Вверх
GRON
Дата 3.2.2004, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Считаю, что программер, часто использующий goto делает это от того, что не в состоянии подумать немного и родить нормальночитаемый и безглючный код без него. У меня раньше тоже был огромный соблазн сделать это, тогда я не всавлял goto потому что хотел потренировать мозги и обойтись без легкого способа (бесплатный сыр сами знаете где бывает), теперь понимаю, что это еще и вредно.
PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Продвижение и оптимизация сайтов | Следующая тема »


 




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


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

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