Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2014, 17:33   #11
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Цитата:
Кроме того цикл может содержать как условие продолжение, так и условие выхода.
Нету такого в структурном программировании. По сути цикл это и есть if
Цитата:
Любую схему алгоритма можно представить в виде композиции вложенных блоков begin и end, условных операторов if, then, else, циклов с предусловием (while) и может быть дополнительных логических переменных (флагов).
НО!!
Цитата:
break, continue и exit нельзя считать отступлением от структурного программирования, если это не ухудшает читаемость программы и не приводит к запутыванию логики алгоритма.
Против
Цитата:
В то же время попытки избавиться от этих операторов (для того, чтобы формально соблюсти «классические правила») могут привести к ухудшению читаемости программы.
Облегчая работу человеку, усложняем ее для компилятора(и людям которые их пишут).
Несоблюдение стандартных схем программ влечет не только усложнение компиляторов, но лишает возможности в принципе на какие либо сложные эквивалентные преобразования для оптимизации и проверку на пустоту(см. пустая схема программы) схемы программы.

Последний раз редактировалось Kostia; 12.02.2014 в 17:37.
Kostia вне форума Ответить с цитированием
Старый 12.02.2014, 18:47   #12
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Цитата:
Если правильно понимаю, конструкцияновых Delphi: for X in Y do
и C++ foreach как раз для этого придумали.
Вы предложили обычные переборные циклы, которые по сути тоже, что и со счетчиком (просто с неявным).
С выходом из середины: http://ru.wikipedia.org/wiki/%D0%91%...B8.D0.BD.D1.8B
Arigato вне форума Ответить с цитированием
Старый 12.02.2014, 21:32   #13
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Забыть? Ну забыл, запустил разок, увидел, что не работает, исправил. Ужас то какой.
BOBAH13 вне форума Ответить с цитированием
Старый 13.02.2014, 08:26   #14
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

например у нас игрушка, мы обрабатываем каждый шаг, пока на инпут не поступит exit.

вариант с бряком
Код:
for(;;)
{
  if(input == exit)
    break;
  ProcessWorld();
}
Без бряка как то пострёмней выходит. мы должны заводить дополнительную переменную, да ещё мы не можем сразу выйти из цикла, нужен дополнительный if else. А если условий выхода больше то всё ещё хуже.

Код:
var continue;
while(continue)
{
  if(input == exit)
    continue = false;
 else
   ProcessWorld();
}
P.S. и во втором варианте конечного цикла тоже можно забыть из него выйти :D
the_deer_one вне форума Ответить с цитированием
Старый 13.02.2014, 09:06   #15
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Что-то я не понял - а почему нельзя так:
while(input != exit)
ProcessWorld();
waleri вне форума Ответить с цитированием
Старый 13.02.2014, 10:30   #16
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

waleri а мы там ещё условие после ProcessWorld() проверяем, что мы не продули.

что бы не получилось так
Код:
while(input != exit)
{
  do
  {
    status = ProcessWorld();
  } while(staus.IsHeroAlive)
}
the_deer_one вне форума Ответить с цитированием
Старый 13.02.2014, 12:06   #17
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

the_deer_one, мне кажется, ваш пример не удался

Бывает ситуация, когда надо сделать множество проверок, при выполнении одной из них прекратить дальнейшие действия и перейти к коду ниже. Тут может быть вариант с циклом в одну итерацию:
Код:
error = "";
do {
  if (<сложная_проверка1>) {
    error="Ошибка 1";
    break;
  }
  if (<сложная_проверка2>) {
    error="Ошибка 2";
    break;
  }
...
  if (<сложная_проверкаN>) {
    error="Ошибка N";
    break;
  }
} while (false);
if (error!="") {
  ..
}
Опять же, зависит от языка, можно и обработку исключений реализовать. Если такой механизм поддерживается, то логичнее его использовать, если нет, то вариант выше.

Или в некоторых языках можно использовать что-то вроде:
Код:
switch (true){
  case <сложная_проверка1>:
    error="Ошибка 1";
    break;
  case <сложная_проверка2>:
    error="Ошибка 2";
    break;
...
  case <сложная_проверкаN>:
    error="Ошибка N";
    break;
}
Хотя по сути от первого варианта не отличается.

Да и если условий выхода из цикла очень много, то без break не обойтись. В общем, не вижу ничего плохого в его использовании там, где это оправдано.

Последний раз редактировалось Arigato; 13.02.2014 в 12:10.
Arigato вне форума Ответить с цитированием
Старый 13.02.2014, 13:27   #18
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Цитата:
Сообщение от Kostia Посмотреть сообщение
Почему бы к goto не вернуться?
К goto не нужно "возвращаться", его нужно использовать в тех случаях, когда он удобнее, читаемее и рефакторабельнее других вариантов. Например, break одновременно из нескольких циклов, или маленький кусок с очень сложной логикой. Лично я использую его в среднем раз в год.
ds.Dante вне форума Ответить с цитированием
Старый 13.02.2014, 13:33   #19
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Цитата:
Сообщение от ds.Dante Посмотреть сообщение
break одновременно из нескольких циклов
Опять же все зависит от языка, в некоторых есть конструкции для выхода из вложенных циклов. Хотя все это обертки над goto.
Arigato вне форума Ответить с цитированием
Старый 14.02.2014, 00:39   #20
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Несоблюдение стандартных схем программ влечет не только усложнение компиляторов, но лишает возможности в принципе на какие либо сложные эквивалентные преобразования для оптимизации и проверку на пустоту(см. пустая схема программы) схемы программы.
Это как это так может быть? Откуда эта сферическая мысль в вакууме выдрана? Обычно сначала разрабатывается концепция языка, затем пишется транслятор и только потом прихожу я. И тут вопрос - как мои действия могут усложнить разработку компилятора, если он уже написан? Что это еще за программистская машина времени?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Основные управляющие конструкции языка Delphi. Конструкция присваивания. Условная конструкция. Конструкция множественного выбора. nadyaH Помощь студентам 3 23.11.2013 22:19
конструкция if else Emperator12 Общие вопросы Delphi 7 26.09.2012 08:19
конструкция if else Emperator12 Общие вопросы Delphi 2 23.09.2012 11:36
Конструкция if GBAXA Общие вопросы Delphi 5 04.08.2010 15:12
Конструкция try..except anGeee Общие вопросы Delphi 2 21.05.2009 11:34