Форум программистов, компьютерный форум, киберфорум
Священные войны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.93/75: Рейтинг темы: голосов - 75, средняя оценка - 4.93
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
06.08.2016, 22:03
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от pav1uxa Посмотреть сообщение
Это на сколько же должен быть извращен мозг, чтобы 2 предыдущих варианта казались более наглядными, удобными и гибкими чем эти:
Я этих "правильных" вариантов понаделал не одну сотню, уже мозоли на пальцах. А теперь серьёзно. Извращение - это с какой стороны посмотреть... Вот например кто-то привык с детства к определённым вещам и думает что это норма. Поймите: для простых задачек вроде этой может быть лучше стандартный вариант(хотя он и не правилен по сути, т.к. не соответствует Тьюринговой машине), но если вам встретится задачка посложнее, то возникнут проблемки. Например нам нужно запрограммировать робота. У него может быть, например, 4 состояния: повёрнут вправо, влево, вперёд, назад. Из этих состояний он может двигатся в каждом из 4 направлений на один шаг. Это несложно сделать в традиционной манере, но предположен что наш робот должен взаимодействовать с другими роботами, соответственно отвечая на их возможные действия своими. Вот сдесь традиционныйподход начинает буксовать, и чем сложнее задача тем сильнеесадится на брюхо "классика". Наоборот: при автоматном подходе чем сложнее задача тем он выгоднее. Здесь на робота достаточно навесить все возможные ответные переходы из состояния в состояние в блоках конкретных состояний и всё. Если не нравится goto можно программировать по так называемой switch-технологии, но с goto код быстрее.

Добавлено через 9 минут
Цитата Сообщение от pav1uxa Посмотреть сообщение
Это на сколько же должен быть извращен мозг
И ещё. Чтобы понять автоматную программу не используют исходный текст, а используют графы переходов(ГП) похожие на UML-диаграммы, и описание интерфейса данного конкретного автомата. Автомат может иметь в себе вложенные автоматы, а также использовать информацию о состояниях других автоматов формируя своё поведение исходя из их анализа. Также возможен выбор собственного поведения в зависимости от того состояния в котором пребывал этот автомат на предыдущем шаге. Это открывает практически безграничные возможности, это надо прочуствовать.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.08.2016, 22:03
Ответы с готовыми решениями:

Чем плох управляемый С++?
Я дико извиняюсь за подобную тему... но дело в том, что мне сегодня задали этот вопрос и, собственно, я не смог на него ответить. Сам я...

Чем плох uCoz?
Добрый день! Хотел бы услышать объективные мнения специалистов, на тему "Почему юКоз нельзя использовать для создания полноценного...

Чем плох make?
Дали написать реферат по make файлам и соответственно указать его минусы, а значит сравнить его с такими утилитами как CMake, но для меня...

195
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
06.08.2016, 22:07
Цитата Сообщение от CoderHuligan Посмотреть сообщение
но если вам встретится задачка посложнее, то возникнут проблемки
Ну вот и давай сюда эту задачку посложнее, со своим вариантом решения. Тогда будет о чем поговорить, а до тех пор все это просто пустая болтовня
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
06.08.2016, 22:08
Если в традиционном стиле один цикл более менее понятен как в данном примере, то предположим надо обработать трёхмерный обьект, да ещё по сложному сценарию. Сколько вложенных циклов будет при традиционном подходе? Как их понять? Да никак, только дебаггер врубать и то не факт что вьедешь. А здесь не будет никаких вложенных циклов, так то вот:-))
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
06.08.2016, 22:27
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Вот например кто-то привык с детства к определённым вещам и думает что это норма.
Ну да. Я бы как раз вот это к goto отнес.
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Поймите: для простых задачек вроде этой может быть лучше стандартный вариант
Ну Вы только что привели этот вариант, якобы в нем goto удобнее и нагляднее и его легче дополнить. Я показал Вам обратное, Вы мне уже говорите что конкретно эта задача оказывается все-таки не подходит. Так покажите пример который подходит. Только так чтобы, после того как я его переделаю на "человеческий лад", Вы бы не сказали - "ну да, это задача слишком простая, не совсем подходит, вот если бы была другая..." И не в виде каких то там абстрактных 3d роботов, а пример реального кода.
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Сколько вложенных циклов будет при традиционном подходе?
В правильно оформленном коде сколько бы не было циклов - все понятно и наглядно.

А вот если вместо этих циклов налепить меток - читабельность упадет в разы.

Не по теме:

Заметьте, я даже не утверждал что goto это плохо и не нужно его применять. Просто не нужно утверждать обратное, если доказать нечем.

0
0 / 0 / 0
Регистрация: 07.08.2016
Сообщений: 3
07.08.2016, 15:34
Код с goto трудно форматировать, так как он может нарушать иерархичность выполнения (парадигму структурного программирования) и потому отступы, призванные отображать структуру программы, не всегда могут быть выставлены правильно. goto также мешает оптимизации компиляторами управляющих структур.
Формально доказано (теорема Бёма — Якопини), что применение goto не является обязательным, то есть не существует такой программы с goto, которую нельзя было бы переписать без него с полным сохранением функциональности (однако, возможно, с потерей эффективности).
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
07.08.2016, 16:49
Цитата Сообщение от Voivoid Посмотреть сообщение
Ну вот и давай сюда эту задачку посложнее
Переписать функцию tcp_input() из 4.4BSD без goto, но так чтобы код остался столь же эффективным как и исходный:https://github.com/denghuancon... cp_input.c
Цитата Сообщение от pav1uxa Посмотреть сообщение
А вот если вместо этих циклов налепить меток - читабельность упадет в разы.
Я ж говорил, что тексты программ читать не нужно, а нужно создавать сооответствующие спецификации.
Цитата Сообщение от Valentinus Hogo Посмотреть сообщение
Код с goto трудно форматировать, так как он может нарушать иерархичность выполнения (парадигму структурного программирования) и потому
Как по писанному в учебниках...
0
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
07.08.2016, 18:36
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Переписать функцию tcp_input() из 4.4BSD без goto
Очевидно, что на плюсах нельзя переписать одну функцию, оставив весь остальной сишный код без изменений. Надо переписывать все. Так что давай какую-нибудь другую задачу и постарайся уж чтобы и твой код там тоже фигурировал
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
07.08.2016, 19:43
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Переписать функцию tcp_input() из 4.4BSD без goto, но так чтобы код остался столь же эффективным как и исходный:https://github.com/denghuancon... cp_input.c
Очень смешно Код на сях 94 года. Тут многие форумчане моложе чем этот код

Тут раздел C++, а не C, и за окном 2016 год, а не 1994.

Это как если Вы скажете мне что при производстве автомобилей гвозди не нужно использовать, а я дам Вам телегу и скажу - ну вот, попробуйте мне ее без гвоздей сделать. Только чтобы она также работала.
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
07.08.2016, 19:46
На тему goto есть комикс актуальный
1
07.08.2016, 21:42

Не по теме:

Цитата Сообщение от pav1uxa Посмотреть сообщение
я дам Вам телегу и скажу - ну вот, попробуйте мне ее без гвоздей сделать. Только чтобы она также работала
Не поверите, но первые телеги появились раньше чем гвозди
Цитата Сообщение от pav1uxa Посмотреть сообщение
Очень смешно Код на сях 94 года
А тут соглашусь, проще весь код переписать чем одну отдельно взятую функцию

0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
07.08.2016, 21:56
Кто нибудь может подытожить, чем пЛОХ goto?
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,046
Записей в блоге: 1
07.08.2016, 21:57
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Кто нибудь может подытожить
было уже
Цитата Сообщение от Croessmah Посмотреть сообщение
Коротко о том, чем же плох goto - ничем
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
07.08.2016, 22:02
Croessmah,
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Я, как правило, темы и комментарии до себя никогда не читаю, прежде чем писать свой комментарий. Лень)
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,046
Записей в блоге: 1
07.08.2016, 22:06
Ferrari F1, тогда и смысла отвечать Вам нет.
7
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
07.08.2016, 23:56
Цитата Сообщение от obivan Посмотреть сообщение
Ну лично я считаю, что все таки не очень гуд его юзать, хотя бы потому что мне кажется в больших проэктах если делать длинные "прыжки" то можно что то упустить,
obivan, я согласен. Это хорошее наблюдение в хоре голосов о "трудночитаемости". Как уже сказано, goto иногда облегчает жизнь и как пример, - выход из глубоко вложенных блоков. Но в большинстве случаев, это не хорошо. Инкапсуляция, это важное свойство программных объектов. Простите за кривую терминологию, но она проста и лаконична. Любой блок, это не только легкость чтения, это прежде всего область видимости, определяющая видимость и время жизни локальных объектов... Функция предоставляет интерфейс и скрывает реализацию. Это же надёжность и простота логики, независимость и следовательно, возможность повторного использования имён, простота отладки...
Свободный переход позволяет делать очень большие области и игнорировать блочный модульный подход. Локальные объекты в таких областях, набирают силу глобальных, со всеми их недостатками. Управляемость ресурсами тоже усложняется. Но ставить вопрос на уровне, хорошо - плохо, это примитивно, так же, как и разговор о вреде кошек и полезности слонов. Вот оператор следования, - запятая. Он позволяет написать половину кода через запятую. Более того, он позволяет часть кода упрятать в логические блоки. Но никто же не скажет, что это плохой оператор. Без него грустно. А использовать, его везде, где только можно, это надрыв. Истерический, имхо. Я согласен с Вами obivan, дело не только в читабельности.
2
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
08.08.2016, 08:59  [ТС]
В общем я понял, goto не плох, но использовать его надо с умом. В С++ он почти не используется, потому что есть множество способов его заменить, в итоге он применяется только для выхода из множества вложенных циклов, но в остальном только ухудшает читаемость и простоту кода.

Не по теме:

P.S. Кто лучший ответ поставил? ( Это был не я :scratch: )

0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
08.08.2016, 09:06
GbaLog-, а чем тебя не устроил именно мой ответ, что ты его не считаешь подходящим?
И я подозреваю, что это был тов. gru74ik
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
08.08.2016, 09:14  [ТС]
Ferrari F1, Да если бы не считал, то убрал бы эту отметку( да, я могу ), а вообще мне всё равно, я спасибки тем, кому хотел, расставил.
0
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
08.08.2016, 10:10
Цитата Сообщение от GbaLog- Посмотреть сообщение
множества вложенных циклов
Вложенные циклы тоже не нужны ( а тем более множество ).
0
 Аватар для Новичок
1682 / 1098 / 489
Регистрация: 17.07.2012
Сообщений: 5,361
08.08.2016, 12:03
Цитата Сообщение от GbaLog- Посмотреть сообщение
он применяется только для выхода из множества вложенных циклов
Недавно видел оригинальный способ решения этой проблемы без goto.
C++
1
2
3
4
5
[]() { // C++ 11
for (int i = 0; i < n; i++)
     for (int j = 0; j < n; j++)
          if (smth) return;
}();
5
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.08.2016, 12:03

чем плох mysql_query
Просматривал вакансию на пхп juniora наткнулся на такое требование &quot;В коде нет и намека на mysql_query(&quot;SELECT * ....&quot; я...

Чем плох void main?
Встретил мнение, что void main() - не канон и даже плохо. Но статья древняя, 1996 года, и даже автор открестился, сказав, что для новых...

Чем плох std::map?
std::map ?

Чем плох ProBuilder (Unity3D)?
Мне советовали не использовать ProBuilder, а моделить в какой-нибудь проге - текстурить и потом эспортировать в юнити. Аргументировали это...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru