OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 05 Декабрь, 2019 20:04

Часовой пояс: UTC + 3 часа




Начать новую тему Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 47 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Про GOTO
СообщениеДобавлено: Воскресенье, 30 Январь, 2011 12:38 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 557
http://forum.oberoncore.ru/viewtopic.php?p=59061#p59061 Улыбнитесь :-)
Валерий Лаптев http://karataev.nm.ru/

Там же http://karataev.nm.ru/goto.html Про GOTO
Заметка для тех, кто знает, что такое оператор goto и особенно для тех, кто его переводит как "пошел на...".
Цитата:
Все чаще со временем стал сталкиваться с правилами (внутрифирменными стандартами) кодирования, в которых было радикально черным цветом выведено: оператор goto запрещен. Сначала на это мало обращал внимание, думал что мало ли какая моча в голове у человека была, повзрослеет - одумается. Ан нет. Запрет на goto продолжает процветать. И меня это раздражает.
...
В конце сформулирую свою позицию так. Каждому инструменту - свое место. И если где-то должен стоять оператор goto, то именно он там и должен стоять. А не его суррогаты. Работать, в конце концов, придется твоей программе, а не мнению твоего руководителя.

Степанов называет GOTO - "красивый оператор".

Цитата:
Приходилось пользоваться даже не просто оператором goto, а вычисляемым оператором goto, когда место перехода вычисляется в зависимости от текущего состояния
Так программировал конечные автоматы на PL/1 на ЕС ЭВМ, с использованием массива переменных типа метка.
Программировался интерпретатор Бейсика с использованием диалоговой системы JEC разработки ЛГУ в 1983 году.
ПЭВМ-ов еще было.


Последний раз редактировалось ==== Воскресенье, 30 Январь, 2011 13:18, всего редактировалось 3 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про GOTO
СообщениеДобавлено: Воскресенье, 30 Январь, 2011 13:09 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8209
Откуда: Троицк, Москва
Мракобесная тема.

Все-таки я против универсальной свободы слова на форуме по конкретной теме.
Ведь глупо же разрешать астрологу проповедовать свою астрологию на форуме для астрономов.

Может, прописать в Правилах прямой запрет на подобные темы? Как не соответствующие ценностям сообщества, для которого форум предназначен.

Французская академия ввела же когда-то запрет на обсуждение вечного двигателя.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про GOTO
СообщениеДобавлено: Воскресенье, 30 Январь, 2011 13:14 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 557
Info21, обратитесь к автору Каратаеву Евгению Анатольевичу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про GOTO
СообщениеДобавлено: Воскресенье, 30 Январь, 2011 13:16 

Зарегистрирован: Пятница, 24 Апрель, 2009 16:28
Сообщения: 531
Откуда: Москва
Info21 писал(а):
Мракобесная тема.
Это ж "тоже народонаселение".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про GOTO
СообщениеДобавлено: Воскресенье, 30 Январь, 2011 13:18 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4539
Откуда: Россия, Орёл
я думаю, этот важный вопрос, можно будет разобрать в FAQ


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про GOTO
СообщениеДобавлено: Воскресенье, 30 Январь, 2011 13:25 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 557
Смотрите Правила конференции OberonCore

Редакция № 2 (предварительная) от 29.01.2011 г.

Цитата:
3. Права и обязанности участников

1) Участники имеют право на свободное высказывание собственного мнения по всем темам форума. Никто не может быть принужден к отказу от собственного мнения.

2) Сообщения отражают мнения их авторов. Участники Конференции необязательно разделяют убеждения друг друга, но берут на себя взаимные обязательства высказывать только корректные и аргументированные возражения и не допускать личных выпадов в адрес собеседника.


Последний раз редактировалось ==== Воскресенье, 30 Январь, 2011 13:36, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про GOTO
СообщениеДобавлено: Воскресенье, 30 Январь, 2011 13:28 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 557
Info21 писал(а):
Французская академия ввела же когда-то запрет на обсуждение вечного двигателя.
Кибернетику запрещала АН СССР, и какой получили результат?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про GOTO
СообщениеДобавлено: Воскресенье, 30 Январь, 2011 13:54 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 2046
Геннадий Тышов писал(а):
...
Цитата:
Приходилось пользоваться даже не просто оператором goto, а вычисляемым оператором goto, когда место перехода вычисляется в зависимости от текущего состояния
Так программировал конечные автоматы на PL/1 на ЕС ЭВМ, с использованием массива переменных типа метка.
Программировался интерпретатор Бейсика с использованием диалоговой системы JEC разработки ЛГУ в 1983 году.
ПЭВМ-ов еще было.
Это не имеет отношения к описанному в этом сообщении (что имя ветки м.б. переменной алгоритма, представленного силуэтом)?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про GOTO
СообщениеДобавлено: Воскресенье, 30 Январь, 2011 13:59 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1333
Откуда: Украина, Киев
Геннадий Тышов писал(а):
Кибернетику запрещала АН СССР, и какой получили результат?
Не надо делать такие обобщения. Тут я согласен с большинством участников, высказывающимися против GOTO. Тему ф топку.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про GOTO
СообщениеДобавлено: Воскресенье, 30 Январь, 2011 14:04 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 557
Драконограф писал(а):
Это не имеет отношения к описанному в этом сообщении (что имя ветки м.б. переменной алгоритма, представленного силуэтом)?
К Дракону не относится. В Делфи нет переменных типа метки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про GOTO
СообщениеДобавлено: Воскресенье, 30 Январь, 2011 14:22 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 2046
Геннадий Тышов писал(а):
Драконограф писал(а):
Это не имеет отношения к описанному в этом сообщении (что имя ветки м.б. переменной алгоритма, представленного силуэтом)?
К Дракону не относится. В Делфи нет переменных типа метки.
Я не говорил, что это есть в ДРАКОНе (в авторском определении) :) - в данном случае указывалась возможность именно расширить шампур-метод, чтобы описывать вычисления меток.
В Дельфи, по-моему, нет также цикла Дейкстры (который позволяет заменить адресную арифметику меток обычными условными переходами на ЯВУ). Так тоже можно программировать автоматы - это показано, скажем, в этом примере - а в текстовой записи в книге /Поликарпова, Шалыто, 2010/, использованной для его подготовки (см. Си-программу на с. 92-93 этой выдержки). Однако этот же текст показывает, что можно выбирать состояния автомата через переключатель (а через функцию main там фактически организован аналог "зацикленно-силуэтного" ЦД). И зачем же тогда нужен явный безусловный переход (по константам ли, по переменным)?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про GOTO
СообщениеДобавлено: Воскресенье, 30 Январь, 2011 14:26 
Аватара пользователя

Зарегистрирован: Воскресенье, 08 Июль, 2007 00:38
Сообщения: 778
Откуда: Москва
Геннадий Тышов писал(а):
Цитата:
...
В конце сформулирую свою позицию так. Каждому инструменту - свое место. И если где-то должен стоять оператор goto, то именно он там и должен стоять. А не его суррогаты.


Я знаю, где место оператору goto - в ассемблере, и только там.

Если конструкция, заменяющая оператор goto, выглядит несуразным нагромождением, то возможны две причины:
  • программист не освоил азов структурного программирования
  • нет или не использована заменяющая конструкция, адекватная задаче

С конечным автоматом - как раз второй случай. Надо использовать цикл Дейкстры, а если его нет в языке программирования, то оператор switch/case в цикле.

Кстати, я не исключаю, что есть важные задачи, для которых пока нет адекватной заменяющей конструкции для goto. Тогда надо ее создавать, а не возвращаться к каменному топору.

To Info21: Цензура (в т.ч. последующая) вредна, так как даже абсурдная мысль в результате обсуждения может привести к полезной идее. Без академической свободы наука невозможна. Просто нужно выделять специальное место для таких обсуждений - не помойку вроде "Опять двадцать пять", где всё свалено в одну кучу, а нормально структурированные разделы и форумы. Например, goto явно относится к теме "Структурное программирование".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про GOTO
СообщениеДобавлено: Воскресенье, 30 Январь, 2011 14:29 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 557
Ярослав Романченко писал(а):
Не надо делать такие обобщения.

Это не обобщение, а вопрос. Вы на него не отвечаете.
Ярослав Романченко писал(а):
Тему ф топку.

Я поделился своим опытом, которому уже 28 лет, не знаю сколько вам лет.
Опыт использован в ИС Дракон для написания транслятора маршрутной части Дракон-схемы в программный код.

Уверен, не все участники форума разделяют ваше мнение.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про GOTO
СообщениеДобавлено: Воскресенье, 30 Январь, 2011 14:34 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3120
Откуда: Астрахань
По поводу конечных автоматов. Возможны САМЫЕ РАЗНООБРАЗНЫЕ реализации.
Вот вам конечный автомат для перевода целых чисел из строки в двоичый вид.
Код:
// автомат-преобразователь для целых чисел
// генерирует исключение
// с установкой кода ошибки разбипается вызывающая функция!
struct Data
{   int N;         // число
    int sign;
    byte B;         // основание системы счисления
};
const int notDigit = -1;
int digit(char ch, byte B = 10)
{ string digits = "0123456789abcdef";
  int d;            // возвращаемая цифра
  for(d = 0; d < B; ++d)
    if(ch == digits[d]) return d;
  string xdigits = "ABCDEF";      // если большая шестнадцатеричная
  for(d = 0; d < 6; ++d)
    if(ch == xdigits[d]) return d+10;
  return notDigit;         // символ - не цифра
}
// класс-преобразователь типа
class State;
typedef State (*function) (char ch, Data &D);
class State
{ public:
    State(function f = NULL): F(f) {}
    operator function() { return F; }
  private:
    function F;
};
// состояние – поступила очередная цифра
State s2(char ch, Data &D)
{   int d = digit(ch, D.B);
    if(d == notDigit)         // ОШИБКА - неправильный символ
   throw IllegalInteger();   // генерируется исключение
    else            // накапливаем
    { D.N = D.N * D.B + d;
      return s2;          // в состояние s2
    }
}
// состояние – после первого нуля!
State s1(char ch, Data &D)
{ if     ((ch == 'x')||(ch == 'X')) D.B = 16;
  else if((ch == 'b')||(ch == 'B')) D.B = 2;
  else                              // ОШИБКА - неправильный символ
    throw IllegalInteger();
  D.sign = +1;            // не десятичные - беззнаковые
  return s2;            // в состояние s2
}
// состояние – первый символ
State start(char ch, Data &D)
{ if(ch == '0')     return s1;   // в состояние s1
               // первый символ - знак
  else if (ch == '-') { D.sign = -1; D.B = 10; }           
  else if (ch == '+') { D.sign = +1; D.B = 10; }
  else               // первая цифра - десятичная
  { D.sign = +1;         // число положительное
    int d = digit(ch);
    if (d == notDigit)      // ОШИБКА - неправильный символ
       throw IllegalInteger();
    else            // если-таки десятичная цифра
    { D.B = 10; D.N = d; }
  }
  return s2;             // в состояние s2
}
// основная программа автомата
int Integer(const string &str)
{ Data D = {0};
  State s = start;
  typedef basic_string<char>::const_iterator Iterator;
  Iterator it = str.begin();
  while(it != str.end())      // основной цикл по сотстояниям
  {
   s = s(*it++, D);      // переходы по состояниям
  }
  return D.N * D.sign;
}

Состояний всего 3. Переводит числа: десятичные хх...хх, шестнадцатеричные 0хХХ..ХХ, двоичные 0bxx...xx
Сами функции являются состояниями. Основной цикл смены состояний выродился в одну строку - никаких переключателей.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про GOTO
СообщениеДобавлено: Воскресенье, 30 Январь, 2011 14:37 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 557
К участникам форума

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

Кстати, вопрос о толерантности должен быть отражен в правилах форума.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про GOTO
СообщениеДобавлено: Воскресенье, 30 Январь, 2011 14:47 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4352
Откуда: Россия, Орёл
Геннадий Тышов писал(а):
Info21 писал(а):
Французская академия ввела же когда-то запрет на обсуждение вечного двигателя.
Кибернетику запрещала АН СССР, и какой получили результат?

Например, Киевский институт кибернетики им. Глушкова.

Прошу товарищей не смешивать обсуждение тем с обсуждениями новых правил.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про GOTO
СообщениеДобавлено: Воскресенье, 30 Январь, 2011 15:07 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8209
Откуда: Троицк, Москва
Сергей Прохоренко писал(а):
To Info21: Цензура (в т.ч. последующая) вредна, так как даже абсурдная мысль в результате обсуждения может привести к полезной идее. Без академической свободы наука невозможна.
Вы будете мне объяснять, что такое академическая свобода?

Допускать астрологов в астрономический форум для рекламы астрологии -- это академическая свобода?

В Сети достаточно других мест.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про GOTO
СообщениеДобавлено: Воскресенье, 30 Январь, 2011 15:12 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8209
Откуда: Троицк, Москва
Борис Рюмшин писал(а):
Прошу товарищей не смешивать обсуждение тем с обсуждениями новых правил.
Смешение происходит в поднятом вопросе о ценностях.

Вставить соотв. текстик в FAQ и вписать запрет в Правила -- будет в самый раз.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про GOTO
СообщениеДобавлено: Воскресенье, 30 Январь, 2011 15:14 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Что именно хотим вставить в правило? Упоминание GOTO вообще? Я не считаю это целесообразным.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Про GOTO
СообщениеДобавлено: Воскресенье, 30 Январь, 2011 15:24 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4352
Откуда: Россия, Орёл
Тему переместил, т.к. к программной инженерии она действительно отношения не имеет. Учитывая потенциальную флеймоопасность, я прошу воздержаться от резкости друг к другу.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 47 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB