OberonCore https://forum.oberoncore.ru/ |
|
Про GOTO https://forum.oberoncore.ru/viewtopic.php?f=27&t=3215 |
Страница 1 из 3 |
Автор: | ==== [ Воскресенье, 30 Январь, 2011 12:38 ] |
Заголовок сообщения: | Про GOTO |
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 году. ПЭВМ-ов еще было. |
Автор: | Info21 [ Воскресенье, 30 Январь, 2011 13:09 ] |
Заголовок сообщения: | Re: Про GOTO |
Мракобесная тема. Все-таки я против универсальной свободы слова на форуме по конкретной теме. Ведь глупо же разрешать астрологу проповедовать свою астрологию на форуме для астрономов. Может, прописать в Правилах прямой запрет на подобные темы? Как не соответствующие ценностям сообщества, для которого форум предназначен. Французская академия ввела же когда-то запрет на обсуждение вечного двигателя. |
Автор: | ==== [ Воскресенье, 30 Январь, 2011 13:14 ] |
Заголовок сообщения: | Re: Про GOTO |
Info21, обратитесь к автору Каратаеву Евгению Анатольевичу. |
Автор: | Peter Almazov [ Воскресенье, 30 Январь, 2011 13:16 ] |
Заголовок сообщения: | Re: Про GOTO |
Info21 писал(а): Мракобесная тема. Это ж "тоже народонаселение".
|
Автор: | Евгений Темиргалеев [ Воскресенье, 30 Январь, 2011 13:18 ] |
Заголовок сообщения: | Re: Про GOTO |
я думаю, этот важный вопрос, можно будет разобрать в FAQ |
Автор: | ==== [ Воскресенье, 30 Январь, 2011 13:25 ] |
Заголовок сообщения: | Re: Про GOTO |
Смотрите Правила конференции OberonCore Редакция № 2 (предварительная) от 29.01.2011 г. Цитата: 3. Права и обязанности участников
1) Участники имеют право на свободное высказывание собственного мнения по всем темам форума. Никто не может быть принужден к отказу от собственного мнения. 2) Сообщения отражают мнения их авторов. Участники Конференции необязательно разделяют убеждения друг друга, но берут на себя взаимные обязательства высказывать только корректные и аргументированные возражения и не допускать личных выпадов в адрес собеседника. |
Автор: | ==== [ Воскресенье, 30 Январь, 2011 13:28 ] |
Заголовок сообщения: | Re: Про GOTO |
Info21 писал(а): Французская академия ввела же когда-то запрет на обсуждение вечного двигателя. Кибернетику запрещала АН СССР, и какой получили результат?
|
Автор: | Владислав Жаринов [ Воскресенье, 30 Январь, 2011 13:54 ] |
Заголовок сообщения: | Re: Про GOTO |
Геннадий Тышов писал(а): ... Это не имеет отношения к описанному в этом сообщении (что имя ветки м.б. переменной алгоритма, представленного силуэтом)?
Цитата: Приходилось пользоваться даже не просто оператором goto, а вычисляемым оператором goto, когда место перехода вычисляется в зависимости от текущего состояния Так программировал конечные автоматы на PL/1 на ЕС ЭВМ, с использованием массива переменных типа метка.Программировался интерпретатор Бейсика с использованием диалоговой системы JEC разработки ЛГУ в 1983 году. ПЭВМ-ов еще было. |
Автор: | Ярослав Романченко [ Воскресенье, 30 Январь, 2011 13:59 ] |
Заголовок сообщения: | Re: Про GOTO |
Геннадий Тышов писал(а): Кибернетику запрещала АН СССР, и какой получили результат? Не надо делать такие обобщения. Тут я согласен с большинством участников, высказывающимися против GOTO. Тему ф топку.
|
Автор: | ==== [ Воскресенье, 30 Январь, 2011 14:04 ] |
Заголовок сообщения: | Re: Про GOTO |
Драконограф писал(а): Это не имеет отношения к описанному в этом сообщении (что имя ветки м.б. переменной алгоритма, представленного силуэтом)? К Дракону не относится. В Делфи нет переменных типа метки.
|
Автор: | Владислав Жаринов [ Воскресенье, 30 Январь, 2011 14:22 ] |
Заголовок сообщения: | Re: Про GOTO |
Геннадий Тышов писал(а): Драконограф писал(а): Это не имеет отношения к описанному в этом сообщении (что имя ветки м.б. переменной алгоритма, представленного силуэтом)? К Дракону не относится. В Делфи нет переменных типа метки.![]() В Дельфи, по-моему, нет также цикла Дейкстры (который позволяет заменить адресную арифметику меток обычными условными переходами на ЯВУ). Так тоже можно программировать автоматы - это показано, скажем, в этом примере - а в текстовой записи в книге /Поликарпова, Шалыто, 2010/, использованной для его подготовки (см. Си-программу на с. 92-93 этой выдержки). Однако этот же текст показывает, что можно выбирать состояния автомата через переключатель (а через функцию main там фактически организован аналог "зацикленно-силуэтного" ЦД). И зачем же тогда нужен явный безусловный переход (по константам ли, по переменным)? |
Автор: | Сергей Прохоренко [ Воскресенье, 30 Январь, 2011 14:26 ] |
Заголовок сообщения: | Re: Про GOTO |
Геннадий Тышов писал(а): Цитата: ... В конце сформулирую свою позицию так. Каждому инструменту - свое место. И если где-то должен стоять оператор goto, то именно он там и должен стоять. А не его суррогаты. Я знаю, где место оператору goto - в ассемблере, и только там. Если конструкция, заменяющая оператор goto, выглядит несуразным нагромождением, то возможны две причины:
С конечным автоматом - как раз второй случай. Надо использовать цикл Дейкстры, а если его нет в языке программирования, то оператор switch/case в цикле. Кстати, я не исключаю, что есть важные задачи, для которых пока нет адекватной заменяющей конструкции для goto. Тогда надо ее создавать, а не возвращаться к каменному топору. To Info21: Цензура (в т.ч. последующая) вредна, так как даже абсурдная мысль в результате обсуждения может привести к полезной идее. Без академической свободы наука невозможна. Просто нужно выделять специальное место для таких обсуждений - не помойку вроде "Опять двадцать пять", где всё свалено в одну кучу, а нормально структурированные разделы и форумы. Например, goto явно относится к теме "Структурное программирование". |
Автор: | ==== [ Воскресенье, 30 Январь, 2011 14:29 ] |
Заголовок сообщения: | Re: Про GOTO |
Ярослав Романченко писал(а): Не надо делать такие обобщения. Это не обобщение, а вопрос. Вы на него не отвечаете. Ярослав Романченко писал(а): Тему ф топку. Я поделился своим опытом, которому уже 28 лет, не знаю сколько вам лет. Опыт использован в ИС Дракон для написания транслятора маршрутной части Дракон-схемы в программный код. Уверен, не все участники форума разделяют ваше мнение. |
Автор: | Валерий Лаптев [ Воскресенье, 30 Январь, 2011 14:34 ] |
Заголовок сообщения: | Re: Про GOTO |
По поводу конечных автоматов. Возможны САМЫЕ РАЗНООБРАЗНЫЕ реализации. Вот вам конечный автомат для перевода целых чисел из строки в двоичый вид. Код: // автомат-преобразователь для целых чисел // генерирует исключение // с установкой кода ошибки разбипается вызывающая функция! 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 Сами функции являются состояниями. Основной цикл смены состояний выродился в одну строку - никаких переключателей. |
Автор: | ==== [ Воскресенье, 30 Январь, 2011 14:37 ] |
Заголовок сообщения: | Re: Про GOTO |
К участникам форума Не надо реагировать на Goto, и возможно на другие темы, как бык на красную тряпку. В этом мире все имеет свою ценность. Откажемся от сектантского подхода и будем толерантными. Кстати, вопрос о толерантности должен быть отражен в правилах форума. |
Автор: | Борис Рюмшин [ Воскресенье, 30 Январь, 2011 14:47 ] |
Заголовок сообщения: | Re: Про GOTO |
Геннадий Тышов писал(а): Info21 писал(а): Французская академия ввела же когда-то запрет на обсуждение вечного двигателя. Кибернетику запрещала АН СССР, и какой получили результат?Например, Киевский институт кибернетики им. Глушкова. Прошу товарищей не смешивать обсуждение тем с обсуждениями новых правил. |
Автор: | Info21 [ Воскресенье, 30 Январь, 2011 15:07 ] |
Заголовок сообщения: | Re: Про GOTO |
Сергей Прохоренко писал(а): To Info21: Цензура (в т.ч. последующая) вредна, так как даже абсурдная мысль в результате обсуждения может привести к полезной идее. Без академической свободы наука невозможна. Вы будете мне объяснять, что такое академическая свобода?Допускать астрологов в астрономический форум для рекламы астрологии -- это академическая свобода? В Сети достаточно других мест. |
Автор: | Info21 [ Воскресенье, 30 Январь, 2011 15:12 ] |
Заголовок сообщения: | Re: Про GOTO |
Борис Рюмшин писал(а): Прошу товарищей не смешивать обсуждение тем с обсуждениями новых правил. Смешение происходит в поднятом вопросе о ценностях.Вставить соотв. текстик в FAQ и вписать запрет в Правила -- будет в самый раз. |
Автор: | Alexey Veselovsky [ Воскресенье, 30 Январь, 2011 15:14 ] |
Заголовок сообщения: | Re: Про GOTO |
Что именно хотим вставить в правило? Упоминание GOTO вообще? Я не считаю это целесообразным. |
Автор: | Борис Рюмшин [ Воскресенье, 30 Январь, 2011 15:24 ] |
Заголовок сообщения: | Re: Про GOTO |
Тему переместил, т.к. к программной инженерии она действительно отношения не имеет. Учитывая потенциальную флеймоопасность, я прошу воздержаться от резкости друг к другу. |
Страница 1 из 3 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |