powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Чем плох безусловный переход??
109 сообщений из 109, показаны все 5 страниц
Чем плох безусловный переход??
    #32961161
buffoon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сабж собссно..
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32961195
buffoon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
чем плохо использовать в программе безусловный переход к метке??
типа goto мояметка
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32961213
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ничем.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32961225
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Плохой читаемостью программы (когда таких переходов несколько) и как следствие, увеличение числа ошибок и затруднение диагностики.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32961313
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Особенно, когда переходы не только вперед, но и назад


PS Когда-то видел программу на древнем BASIC, в котором еще не было процедур и проблема решалась путем GOTO на первый оператор "процедуры" с последующим возвратом с последнего оператора к месту вызова. Читабельность - обалденная, без раскраски не разберешся


PPS В некоторых случаях подобные операторы допустимы, например, для выхода из нескольких вложенных циклов наружу (в Oracle PL/SQL такое есть), но лучше подобными вещами пользоваться пореже (лично я не пользуюсь совсем)
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32961533
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Позвольте несколько слов в защиту goto.

1) Иногда без него трудно обойтись. К примеру, довольно трудно выйти из двух и более вложенных циклов без использования goto.
2) Без него не будет полиморфизма.
3) Целевой машинный код в конечном счете будет содержать goto, какие-бы вы не использовали структурно-обьектно-функциональные компилляторы.
4) Некоторые считают что структурное программирование - это отсутствие операторов goto. Но на самом деле, если вы пишете код и не используете этот оператор из этого вовсе не следует что вы - структурно программируете.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32961686
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сам по себе goto не плох, но совет обходиться без него умный. Без него можно обойтись, поэтому если кажется, что он нужен, значит, структура программы плохо продумана. Когда стараешься обходиться без goto, то приучаешь себя лучше представлять структуру программы, что ведёт к повышению мастерства программирования. Это главное, устальные доводы за и против менее существенны.

Второе основание - программисты высокой квалификации обычно обходятся без него. Поэтому если такой увидит у небя gotы, то это произведёт плохое впечатление.


1) Иногда без него трудно обойтись. К примеру, довольно трудно выйти из двух и более вложенных циклов без использования goto.

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


2) Без него не будет полиморфизма.

Не берусь предполагать, что должно означать это заявления. Кому нужен полиморфизм, лучше пользоваться языком, имеющим поддержку объектно-ориентированного программирования. Тогда goto опять будет не нужен.


3) Целевой машинный код в конечном счете будет содержать goto, какие-бы вы не использовали структурно-обьектно-функциональные компилляторы.

А это никого не волнует.


4) Некоторые считают что структурное программирование - это отсутствие операторов goto. Но на самом деле, если вы пишете код и не используете этот оператор из этого вовсе не следует что вы - структурно
программируете.

Выше я попытался объяснить своими словами и на своём опыте, почему полезно учиться обходиться без goto. Не "некоторые считают, что...", а это просто афоризм, в котором это имееется ввиду. Он конечно не охватывает всех приёмов структурного программирования.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32961766
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton1) Иногда без него трудно обойтись. К примеру, довольно трудно выйти из двух и более вложенных циклов без использования goto.
Некоторые языки поддерживают соответствующую форму break. Кроме того, практически всегда хватает уже существующих флаговых переменных итп.

mayton2) Без него не будет полиморфизма.
Можно расшифровать?

mayton3) Целевой машинный код в конечном счете будет содержать goto,
Цель - не в том, чтобы удалить его из машинного кода. Цель - писать "хорошие" в некотором смысле программы.

Лично я, если не изменяет память, не использовал goto с тех пор, как появилось finally (там, где оно появилось). Это было последнее специализированное решение, закрывшее нишу для "общего" goto на уровне выше ассемблера.

mayton4) Некоторые считают что структурное программирование - это отсутствие операторов goto. Но на самом деле, если вы пишете код и не используете этот оператор из этого вовсе не следует что вы - структурно программируете.
Это факт. Я на RSDN как-то развлекся тем, что показал пример абсолютно классического спагетти-кода, использующего только while/if.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32961773
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Partisan MНе берусь предполагать, что должно означать это заявления. Кому нужен полиморфизм, лучше пользоваться языком, имеющим поддержку объектно-ориентированного программирования. Тогда goto опять будет не нужен.
Для реализации полиморфизма (на не ОО-языке) goto не нужен. Более того, рискну сказать, что им невозможно реализовать полиморфизм, оставаясь в то же время в рамках общей концепции ООП.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32961781
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buffoonчем плохо использовать в программе безусловный переход к метке?? типа goto мояметка
Одним: к настоящему моменту для всех (обычных) задач, где это требовалось, есть лучшие решения. Соответственно, если речь не идет о низкоуровневом программировании (включая сюда тщательную оптимизацию), и не идет о языках, не поддерживающих необходимые конструкции - следует применять именно эти, лучшие решения.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32961822
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если полезть в историю, то я читал, что особенные войны с goto начались тогда, когда выяснилось, что первые компиляторы паскаля обладали серьезной глючностью с серией goto (сам я в эту версию не верю)

К вопросу о элегантности: действительно ли goto хуже, чем куча флагов в тройном цикле? Тем более, что чем больше на цикле условий, тем медленне он. Лучше уж один понятный goto.

________________________________________________________
Глюк - это высокоорганизованная система не поддающихся определению частиц
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32961921
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
много лет пишу на delphi и с++.
goto использовал в delphi может быть раза два.
и то, по глупости.

но идея такова - если надо, goto не табу, но надо ли?

автор
К вопросу о элегантности: действительно ли goto хуже, чем куча флагов в тройном цикле? Тем более, что чем больше на цикле условий, тем медленне он. Лучше уж один понятный goto.
к вопросу об элегантности.
элегантна ли конструкция из трех циклов с произвольным завершением какого либо из них?
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32961942
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вы приведите код, когда goto необходим и нельзя обойтись другими средствами. Вам же ясно объяснили все плюсы/минусы goto и в каких случаях его есть смысл использовать.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32961986
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гоуту есть конечно за что ругать. Но все таки есть ситуёвины когда он незаменим. Например выход из цикла или вложенного цикла. При определенных условиях break / continue не катят. Вот когда часто используем гоуту - то это считается плохим стилем. Но я часто использую гоуту потому , что он позволяет упростить все таки некотрые участки кода, хоть и говорят , что он ведет к плохой читабельности программы. Да , ведет , но когда много меток используют...
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32962010
Фотография VidmakCase
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я лично далеко не могу назвать себя опытным программистом. Но goto не использовал никогда. (Не вру.. в 3-м класе, када BASIC учил и еще када на асме что-от там пытался состряпать).
И мне например сложно представить ситуацию когда он действительно нужен...
Тут вот говорили во вложеных цыклах. Я не вижу проблемы.

Еще прозвучало мнение, что вешать дополнительные условия на циклы нехорошо. В плане скорости или как? Тогда возникает вопрос а что в цикле вы goto без проверки условия выполяете?
Хотелось бы увидеть пример который нельзя (неудобно/медленно) зделать без goto?

Думается мне что даже на асме можно без него обойтись. : (Но тут я не уверен).
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32962013
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_k
элегантна ли конструкция из трех циклов с произвольным завершением какого либо из них?

Завершение очень даже не произвольное, а совершенно читабельное.
Использовать можно все, главное к месту и в меру, чтобы это не вредило читабельности.
Сейчас затрудняюсь найти, но видел тексты, которые были написаны по всем правилам структурного программирования, даже слишком по провилам и данные произведения были совершенно нечитабельны, никакой goto не сравнится.

Просто у многих людей живет какое-то религиозное предубеждение против GOTO, обоснованное обычно просто тем, что "GOTO писать плохо"
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32962031
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VidmakCase
Думается мне что даже на асме можно без него обойтись. : (Но тут я не уверен).

И правильно!
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32962035
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сахават Юсифов VidmakCase
Думается мне что даже на асме можно без него обойтись. : (Но тут я не уверен).

И правильно!

И как же? Или вы считаете, что условный переход -- это что-то другое?
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32962056
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_k
goto использовал в delphi может быть раза два.
и то, по глупости.

но идея такова - если надо, goto не табу, но надо ли?

как то раз я пытался автомат изобразить.
есть последовательность экранных форм {f1, f2, f3,...,fn}
и надо записать переходы при нажатии соответствующих кнопок на
из любого на f1
из любого на fn
из fk на fk-1
из fk на fk+1

по-моему, писать это структурными операторами (for, while) жутко не удобно.
с гото тескт получался проще.
а графический R-язык, разработанный в 80 годы в институте
кибернетики им. Глушкова в отделе Вельбицкого был в самый раз.
-)))))
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32962151
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
помню , раньше тоже юзал goto на паскале немножко ,
потом приходилось пользоваться на ассемблере , ну там уже никуда без него .

сейчас вообще goto не пользуюсь ,


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32962673
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я только один случай знаю, где использование GOTO оправдано в целях эффективности и читабельности. Соответственно, только в этом случае и использую. Случай такой: выход из множественного цикла по какому-то условию, если при этом условии также нужно опустить часть кода после цикла.

for ...
for ...
if .... then GOTO METKA
next
next
............<несколько строк кода>
METKA:

Да, и то, только в том случае, если выброс исключения с его отловом не представляется более красивым.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32962901
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вижу завязалась полемика.
Ну что-ж. Скажу свое мнение.

Я не противник и не сторонник использования goto. Предлагаю просто и прагматично подойти к вопросу. Если язык содержит в себе специальный оператор, то не пользоватся им - по крайней мере глупо. Можно сколько угодно много ссылатся на авторитетов структурного программирования но в конечном счете не они будут решать насколько эффективен тот код, который вы создаете.

1) Господит Softwarer упомянул об использовании оператора break. Рассмотрим пример разрыва цикла по условию. Для реализации возьмем С-подобный язык.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
int a[ 10 ];

// инициализация вектора A

for(int i= 0 ;i< 10 ;i++)
{
	if (condition(a[i])) break;
}

Что-ж неплохо.

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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
int a[..][..][..];

// инициализация трехмерного вектора A

bool iscondition=false;

for(int i= 0 ;i< 10 ;i++)
{
 for(int j= 0 ;j< 10 ;j++)
 {
  for(int k= 0 ;k< 10 ;k++)
  {  
   if (condition(a[i][j][k])){
      iscondition=true;
      break;
   }
  }
  if (iscondition) break;
 }
 if (iscondition) break;
}

Довольно странно. Правда? Появились избыточные синтаксические конструкции .. со всеми вытекающими последствиями, глюками, очепятками. И это - плата за так называемый структурный подход. Можно проверку условия condition() вставить в выражение for, но от этого тоже мало что изменится. Код по прежнему неудобочитаем.

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

2) Отвечаю на вопрос, касаемо полиморфизма.

Классический С обладал его зачатками. Достаточно вспомнить как спользовались "указатели на функции". Фактически это была попыта сделать goto управляемым на этапе выполнения (позднее связывание).

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

Когда вы создаете вектор указателей на обьекты то это можно интерпретировать как: создать множество операторов goto на ... данные.

И здесь без безусловных переходов не обойтись.

В заключение хочу сказать.

- Используйте goto только там где без него нельзя обойтись.
- Не берите на себя роль священной инквизиции, пытаясь утвердить какие-либо каноны в программировании. Ни к чему все это.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32963061
Фотография VidmakCase
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelikk Сахават Юсифов VidmakCase
Думается мне что даже на асме можно без него обойтись. : (Но тут я не уверен).

И правильно!

И как же? Или вы считаете, что условный переход -- это что-то другое?

Ну как бы да...Как я понимаю речь в топике идет о БЕЗУСЛОВНОМ ПЕРЕХОДЕ.
И я пока не могу представить ситуацию на асме где мне потребовалось бы jmp.
(Не могу наверное потому, что на Асме чичего не пишу уже давно... С тех пор как пытался написать всою ОС (Я думаю такая заморочка была не у меня одного.))

Но вообще то принципиальной разници нету. Преход себе и все, что jmp что je какой-нть.

Я таки хочу увидеть пример когда БЕЗУСЛОВНЫЙ переход выглядить красиво, просто, нужно... Хоть как-то?
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32963076
Фотография VidmakCase
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JibSkeartпомню , раньше тоже юзал goto на паскале немножко ,
потом приходилось пользоваться на ассемблере , ну там уже никуда без него .

Ну я бы не согласился с мнением "никуда без него".
О! Вот помню где надо - это загрузочный сектор дискеты... Там первая JMP стоит, которая перепрыгиват через данные о дискетке на код
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32963110
aZm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тем и плох, что понять логику приложения труднее.

Я, во всяком случае, им не пользуюсь :) хватает конструкций и без него

---
Vae victis!
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32963122
Фотография VidmakCase
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВижу завязалась полемика.

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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
int a[..][..][..];

// инициализация трехмерного вектора A

bool iscondition=false;

for(int i= 0 ;i< 10 ;i++)
{
 for(int j= 0 ;j< 10 ;j++)
 {
  for(int k= 0 ;k< 10 ;k++)
  {  
   if (condition(a[i][j][k])){
      iscondition=true;
      break;
   }
  }
  if (iscondition) break;
 }
 if (iscondition) break;
}

Довольно странно. Правда? Появились избыточные синтаксические конструкции .. со всеми вытекающими последствиями, глюками, очепятками. И это - плата за так называемый структурный подход. Можно проверку условия condition() вставить в выражение for, но от этого тоже мало что изменится. Код по прежнему неудобочитаем.


Абсолютно с вами соглсен, касательно этого кода.
У меня такой вопрос. Просто не могу представить зачем надо такая конструкция? А если могу, то почему ее неьзя засунуть в процедуру и написать внутри выход из процедуры.

Даже если надо то
mayton
Даже если предположить что существует некий оператор breakAll который разрывает выполнение вложенных циклов, в конечном счете он будет реализован как переход по метке.
Так и breake, я так думаю, тоже потом скомпилируется как переход по метке. Мы же говорим не о том как оно станет потом, а о исходном коде.

Вообщем не хочу дальше показывать свое возможное ламерство. Но в заключение скажу, по моему таки GOTO не у прощает а усложняет код, (в крайнем случае для понимания)
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32963175
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
int a[..][..][..];

// инициализация трехмерного вектора A

bool iscondition=false;

for(int i= 0 ;i< 10 ;i++)
{
 for(int j= 0 ;j< 10 ;j++)
 {
  for(int k= 0 ;k< 10 ;k++)
  {  
   if (condition(a[i][j][k])){
      iscondition=true;
      break;
   }
  }
  if (iscondition) break;
 }
 if (iscondition) break;
}
...
И это - плата за так называемый структурный подход.
...
Код по прежнему неудобочитаем.


Поэтому в замечательном языке java есть форма записи break/continue metka;
В этой записи явно говориться из какого цикла выйти и итерацию какого цикла продолжить. При этом break/continue это ни аналоги goto, т.к. goto просто показывает "куда идти".
Как мне кажется, в этом случае никакой "платы за структурный подход" делать не приходится, всё читаемо :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
boolean iscondition=false;
firstFor: 
for(int i= 0 ;i< 10 ;i++) {
    for(int j= 0 ;j< 10 ;j++)  {
        for(int k= 0 ;k< 10 ;k++)  {  
            if (condition(a[i][j][k])){
                iscondition=true;
                break firstFor;
            }
        }
   }
}
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32963296
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посностью согласен!

Но вопрос муссировался в контексте C++/Delphi как следует из вышеуказанных постов.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32963350
eys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Це#

for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
for(int k=0;k<10;k++)
{
if (condition(a [j][k])){
i = int.MaxValue;
j = int.MaxValue;
break;
}
}
}
}

:) Щютка, хотя в каждой шутке .... :)
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32963831
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
щюта щюткой, однако сам так делал на с++ :-)
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32963924
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Частный случай однако.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32963951
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не плохо и ни хорошо, это возможность языка.
Из личного опыта - был случай, когда стоял выбор - реализовать функцию с использованием и без использования goto. Сделал оба варианта, сравнил. Вариант с goto оказался гораздо более читабелен, понятен и скорострелен. Разумеется, его я и выбрал. Если бы пришлось использовать язык который не поддерживает goto, то никуда не денешься, пришлось бы оставить кривоту кода. Код без goto был украшен подпорками по самое не хочу, и при внесении изменений кода там был бы кошмар потому что пришлось бы отслеживать не только логику кода, но и логику как выполнить goto без goto.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32964184
k e k s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну яЭто не плохо и ни хорошо, это возможность языка.
Из личного опыта - был случай, когда стоял выбор - реализовать функцию с использованием и без использования goto. Сделал оба варианта, сравнил. Вариант с goto оказался гораздо более читабелен, понятен и скорострелен. Разумеется, его я и выбрал. Если бы пришлось использовать язык который не поддерживает goto, то никуда не денешься, пришлось бы оставить кривоту кода. Код без goto был украшен подпорками по самое не хочу, и при внесении изменений кода там был бы кошмар потому что пришлось бы отслеживать не только логику кода, но и логику как выполнить goto без goto.

полностью согласен с ну_я.
Я смотрю, в большинстве народ, прочитав coding convetions, почему-то запоминают помечание "не следует, там где можно обойтись без.." как "нельзя ни в коем случае". Причем из соглашений по коду они запоминают в основном только это правило и могут при случае развести теорию на целую книгу "Чем опасен гоу-ту и как с ним бороться". А на практике у таких чувачков получается иногда не читаемый код, именно потому- что всеми спосбами стараются соблюсти это неписанное правило забывая про другие.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32964229
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В борьбе за чистоту кода было создано целое направление. "Функциональное программирование". Оно проповедует в частности отказ от оператора присвоения "=". Из языков могу отметить:

- Haskell (Hugs)
- Eiffell
- Caml
- Erlang

У Haskell есть довольно неплохой компиллятор со средой. ( Кому интересно - могу дать ссылки).

Erlang - уже много лет используется фирмой Ericson для управления процессами в сетях мобильной связи. Причем с мощным параллелизмом.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32964344
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВ борьбе за чистоту кода было создано целое направление. "Функциональное программирование". Оно проповедует в частности отказ от оператора присвоения "=". Из языков могу отметить:

- Haskell (Hugs)
- Eiffell
- Caml
- Erlang

У Haskell есть довольно неплохой компиллятор со средой. ( Кому интересно - могу дать ссылки).

Erlang - уже много лет используется фирмой Ericson для управления процессами в сетях мобильной связи. Причем с мощным параллелизмом.

Киньте ссылкой
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32964437
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Lelikk

Щас при себе нету. Завтра скину
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32964478
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
int a[..][..][..];

// инициализация трехмерного вектора A

bool iscondition=false;

for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
for(int k=0;k<10;k++)
{
if (condition(a [j][k])){
iscondition=true;
break;
}
}
if (iscondition) break;
}
if (iscondition) break;
}



Вот я с самого начала написал, что если стараться обходиться без goto, то структура программы будет лучше укладываться в голове, что способствует повышению мастерства программирования. Вышеприведённый пример без goto можно было бы написать так:

Код: plaintext
1.
2.
3.
4.
5.
for (int i =  0 ; i <  10  && !iscondition; i ++)
    for (int j =  0 ; j <  10  && !iscondition; j ++)
        for (int k =  0 ; k <  10  && !iscondition; k ++)
            if (condition (a [i][j][k])  iscondition = true;

...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32964566
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Partisan M

Вот я с самого начала написал, что если стараться обходиться без goto, то структура программы будет лучше укладываться в голове, что способствует повышению мастерства программирования. Вышеприведённый пример без goto можно было бы написать так:

Код: plaintext
1.
2.
3.
4.
5.
for (int i =  0 ; i <  10  && !iscondition; i ++)
    for (int j =  0 ; j <  10  && !iscondition; j ++)
        for (int k =  0 ; k <  10  && !iscondition; k ++)
            if (condition (a [i][j][k])  iscondition = true;



Вы считаете таким уж хорошим выходом из за одного перехода тормозить циклы столькими баластными условиями? Все-таки goto здесь читается лучше!
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32964590
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну что же господа!

Большая половина не имеет ничего против гоуту. Он есть и никто не заставляет его пихать в код.

Да здравствует ГоуТу. Очень важный и полезный инструмент. Его нужно применять с головой и тогда все будет ок. Мне непонятны потуги противников этого оператора. Что пытаетесь доказать то? Единственный момент плох , когда очень часто на одном участке используется помногу Goto , а в других моментах не надо лисапеды изобретать.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32964595
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник

Его нужно применять с головой и тогда все будет ок.


ну я попытался объяснить, но хотя с одной стороны из меня учитель не лучший, но с другой стороны, некоторых легче пристрелить, чем научить. К счтастью, программисты нужны всякие.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32964656
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Безусловный переход - великолепное, мощьное, красивое средство.
В языках типа бейсика

Дело в том, что программист, разбираясь в вашем коде не сделает безусловный переход так-же хорошо, как откомпиленная прога
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32964710
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelikk[quot mayton
- Haskell (Hugs)
- Eiffell
- Caml
- Erlang

У Haskell есть довольно неплохой компиллятор со средой. ( Кому интересно - могу дать ссылки).

Erlang - уже много лет используется фирмой Ericson для управления процессами в сетях мобильной связи. Причем с мощным параллелизмом.

Киньте ссылкой[/quot]

К функциональным языкам примыкают языки спецификаций
вот можно глянуть
http://www.cs.concordia.ca/~alagar/
ссылка на RSL Group
http://www.iist.unu.edu/raise/

RSL на русском

http://www.ergeal.ru/txt/archive/cs/rsl/index.htm
http://www.ispras.ru/~RedVerst/RedVerst/Lectures%20and%20training%20courses/MSU%20course%20Formal%20specification%20of%20software/RMain.html

пролог типа тоже без гоуто
)))))))))))))))))))))))))))))))))))))
http://www.softcraft.ru/paradigm/dp/dp06-05.shtml
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32965001
Siebentearbeith
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дайте и мне шашкой помахать :)

ЛёликкК вопросу о элегантности: действительно ли goto хуже, чем куча флагов в тройном цикле? Тем более, что чем больше на цикле условий, тем медленне он. Лучше уж один понятный goto.

Согласен.
Заметьте, "тем медленне он".

Вопрос надо ставить так: чего хотите? Скорости или читабельности?
Если о скорости нет речи - лучше без гото во вложенных циклах.

Если нужна скорость. Гото, статические переменные в локальных областях видимости, прямые джампы на приращённые на загрузку из стека указатели функций, вообще отказ от функций из-за загрузки стека - код ваш будет ужастным по виду, зато всё будет летать и никто вас не догонит :)

И ещё.То, что не отвалилось в процессе эволюции - нужно.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32965068
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VidmakCase JibSkeartпомню , раньше тоже юзал goto на паскале немножко ,
потом приходилось пользоваться на ассемблере , ну там уже никуда без него .

Ну я бы не согласился с мнением "никуда без него".
О! Вот помню где надо - это загрузочный сектор дискеты... Там первая JMP стоит, которая перепрыгиват через данные о дискетке на код

Ну да , просто я не так выразился ,
я хотел сказать , что чаше всего я наверное им там пользовался .
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32965194
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinБезусловный переход - великолепное, мощьное, красивое средство.
В языках типа бейсика

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

Видимо это плохой программист
Мне например все равно, написан код с goto или без.
И раз он все еще существует, занчит он нужен!
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32965806
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если у тебя строчек так тысяч пять - шесть?

goto, ИМХО, используется потому, что это фактически asm без никто :)
Ну типа JMP
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32965819
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я goto никогда не использовал. Не потому, что я его не люблю. Просто необходимости небыло.

Кстати, интересно, а кокой код быстрее будет:
Код: plaintext
1.
2.
3.
4.
while TRUE do
begin
// сдесь код
end;
или
Код: plaintext
1.
2.
3.
{забыл как метка на паскале зовётся :)))} lbl;
// здесь код
goto lbl;
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32965826
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Lelikk

Обещал ссылки... Вот.

Haskell

http://haskell.org - сайт разработчиков
http://haskell.readscheme.org/
http://www.cs.nott.ac.uk - много статей по ФП
http://www.absoluteastronomy.com/encyclopedia/H/Ha/Haskell_programming_language.htm
http://www.willamette.edu/~fruehr/haskell/evolution.html



Собственно среда с языком у меня есть (hugs98-Nov2003-2.msi) но к сожалению
не могу найти, откуда я ее качал. Но если у вас достаточно толстый почтовый
канал - то могу отправить по мылу (8Mb).

Caml

http://merjis.com/developers/ocaml_tutorial



F#

http://research.microsoft.com/projects/ilx/fsharp.aspx - Функциональный язык с компиллером под платформу .Net
http://blogs.msdn.com/dsyme/archive/2005/03/07/388489.aspx



P.S. Ищу транслятор Eiffel. Пока не смог нигде выкачать для Windows.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32965846
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Partisan M
Вот я с самого начала написал, что если стараться обходиться без goto, то структура программы будет лучше укладываться в голове, что способствует повышению мастерства программирования. Вышеприведённый пример без goto можно было бы написать так:

Код: plaintext
1.
2.
3.
4.
for (int i =  0 ; i <  10  && !iscondition; i ++)
    for (int j =  0 ; j <  10  && !iscondition; j ++)
        for (int k =  0 ; k <  10  && !iscondition; k ++)
            if (condition (a [i][j][k])  iscondition = true;



Хм.. ну я говорил в одном из своих постов что перенос проверки условия в выражение for ничего не меняет. По прежнему, условие выхода из цикла "распылено" по всему исходнику. И сопровождать такой код - геморрой.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32965879
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
P.S. Ищу транслятор Eiffel. Пока не смог нигде выкачать для Windows.
А тут его нету?
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32965883
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DocAl mayton
P.S. Ищу транслятор Eiffel. Пока не смог нигде выкачать для Windows.
А тут его нету?

Thnx.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32965925
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizкак то раз я пытался автомат изобразить.
есть последовательность экранных форм {f1, f2, f3,...,fn}
и надо записать переходы при нажатии соответствующих кнопок на
из любого на f1
из любого на fn
из fk на fk-1
из fk на fk+1

по-моему, писать это структурными операторами (for, while) жутко не удобно.
с гото тескт получался проще.
Ага. Классическое спагетти получается, прямо из любого учебника семидесятых годов.

Для подобных случаев существует понятие "таблица решений" - как явная ее реализация, так и какая-нибудь из неявных.[/quot]
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32965956
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton1) Господит Softwarer упомянул об использовании оператора break.
Господин Softwarer упомянул и о такой существующей кое-где конструкции, как break <метка>.

mayton2) Отвечаю на вопрос, касаемо полиморфизма.

Классический С обладал его зачатками. Достаточно вспомнить как спользовались "указатели на функции". Фактически это была попыта сделать goto управляемым на этапе выполнения (позднее связывание).
Хм. Давайте я подкину Вам еще информацию:

- понятие "вычисляемого GOTO" (таблицы переходов) существует с пятидесятых, кажется, годов; с шестидесятых - точно.

- понятие "указателя на функцию" появилось отнюдь не в C и не является ближайшим наследником вычисляемого GOTO. Существующий сейчас наследник вычисляемого GOTO - это SWITCH.

Важно отметить, что это - два принципиально разных механизма. Различаются они тем, что функция получает параметры, в то время как GOTO не способен их передать (можно только пользоваться глобальными переменными).

Соответственно, если указатели на функции можно рассматривать как инструмент полиморфизма при собственной реализации ООП, GOTO - нельзя рассматривать как даже грубую аналогию ООП-механизма (в нем нереализуемо собственно понятие "объекта").

maytonтаблица содержит адреса переходов (на самом деле адреса команд call) на реализации самих функций для данного обьекта. Это суть - безусловный переход на вызов метода.
call нельзя рассматривать как аналог jmp.

call - это аналог inline (то есть подстановки в место вызова тела вызываемой подпрограммы). Единственное исключение из этой аналогии - бесконечная рекурсия, что обычно малоинтересно.

jmp - куда более "общий", чем call, механизм. Можно сказать, что вызов подпрограммы является одним из "правильных" вариантов goto (наряду с goto в реализации цикла итп).
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32965971
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUs
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
boolean iscondition=false;
firstFor: 
for(int i= 0 ;i< 10 ;i++) {
    for(int j= 0 ;j< 10 ;j++)  {
        for(int k= 0 ;k< 10 ;k++)  {  
            if (condition(a[i][j][k])){
                iscondition=true;
                break firstFor;
            }
        }
   }
}

Можно и на C:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
boolean iscondition=false;
for(int i= 0 ;!iscondition&&(i< 10 );i++) {
    for(int j= 0 ;!iscondition&&(j< 10 );j++)  {
        for(int k= 0 ;k< 10 ;k++)  {  
            if (condition(a[i][j][k])){
                iscondition=true;
                break;
            }
        }
   }
}

Можно и без флага:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
for(int i= 0 ;i< 10 ;i++) {
    for(int j= 0 ;j< 10 ;j++)  {
        for(int k= 0 ;k< 10 ;k++)  {  
            if (condition(a[i][j][k])){
                i = j = k =  10 ;
            }
        }
   }
}

Я уже говорил - если смотреть на реальный код, оказывается, что существуют альтернативы. Ситуации, где GOTO резко лучше - как минимум, очень редки.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32966177
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinА если у тебя строчек так тысяч пять - шесть?

goto, ИМХО, используется потому, что это фактически asm без никто :)
Ну типа JMP

А кто тебе предлагает прыгать по всей программе?
Предлагается использовать goto локально, для решения задач, вроде выхода из циклической конструкции. Здесь общий объем кода ни на что не влияет. Как раз чем накрученней условия циклов, тем сложнее читать.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32966193
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinА я goto никогда не использовал. Не потому, что я его не люблю. Просто необходимости небыло.

Кстати, интересно, а кокой код быстрее будет:
Код: plaintext
1.
2.
3.
4.
while TRUE do
begin
// сдесь код
end;
или
Код: plaintext
1.
2.
3.
{забыл как метка на паскале зовётся :)))} lbl;
// здесь код
goto lbl;


Вообще, с машинной точки зрения беусловный переход будет быстрее, чем любое условие. Но в данном примере все зависит от компилятора. Хороший компилятор замент цикл простым jmp. А плохой...
По крайней я проверил, что Delphi заменяет на jmp. Так что разности в производительности нет. А насчет читабельности -- то здесь неудачный пример, здесь как раз goto и не нужен.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32966230
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

А кто-нибудь хочет попробовать практически сравнить два варианта -
с goto и без ?.

У меня есть переписанный с бейсика на с++ тестовый вариант сборки
пентамино, годов этак конца 80-х (Если кто помнит, алгоритм давался
в журнале "Наука и Жизнь").
Было предложено переписать его без использования goto,
правда с параноидальными требованиями

Параноидальные требования
1. Запрещается использовать подпрограммы/функции
2. Не допускается дублирование кода


Я попробовал это сделать, но запутался и бросил.

Если кто-нибудь изъявит желание переписать этот кусок,
могу сюда забросить исходник (он маленький).
Потом сравним.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32966374
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelikk SarinА если у тебя строчек так тысяч пять - шесть?

goto, ИМХО, используется потому, что это фактически asm без никто :)
Ну типа JMP

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

А чем halt плох?

В принципе в случаях, когда производительность нужна ЛЮБОЙ ценой и for i := 1 to 50
заменяется на 50 команд. А все функции переписываются каждый раз с начала наверное goto очень хорошая вещь.

Хотя, каждому своё. Я goto не юзаю. Но кричать на каждом углу не юзайте goto не хочу.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32966418
Dubrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
...
У Haskell есть довольно неплохой компиллятор со средой. ( Кому интересно - могу дать ссылки).
...


Давай, интересно, что есть нового в нашем несовершенном мире (или не нового).
---
С уважением, Dubrov.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32966460
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dubrov mayton
...
У Haskell есть довольно неплохой компиллятор со средой. ( Кому интересно - могу дать ссылки).
...


Давай, интересно, что есть нового в нашем несовершенном мире (или не нового).
---
С уважением, Dubrov.

Смотри мой пост на предыдущей странице.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32966593
basic крут
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ZrenByПривет.

А кто-нибудь хочет попробовать практически сравнить два варианта -
с goto и без ?.

Параноидальные требования
1. Запрещается использовать подпрограммы/функции
2. Не допускается дублирование кода




Брасай, любопытно посмотреть, как извращались на бейсике, где нет методов.

А условия действительно параноидальные :) В тот и смысл, что функции убирают дублирование кода и упрощают процесс написания кода, делают его лекго читаемым и т.п.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32966665
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
basic крут
Брасай, любопытно посмотреть, как извращались на бейсике, где нет методов.


Правда, тут уже извраты не бейсика, а с :).

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
#include<cstdio>
#include<cassert>

const long AX =  15 ;
const long AY =   4 ;

//Тут всякая мутотень
const          long W_[ 12 ]={ 0 , 2 , 6 , 14 , 22 , 30 , 38 , 46 , 62 , 78 , 94 , 110 };
const unsigned long F_[ 126 ]  =  {0x01010102,0xff000100,0x01020304,0x00000000,
0x00000000,0x01020304,0x01020101,0x00000102,0x01020101,0x0000fffe,0x00000102,
0x01020101,0x01020202,0x00ff0001,0x01010102,0x00010202,0x00010202,0x010000ff,
0x01010102,0x00fffefe,0x00010202,0x01010102,0x00010202,0x01000001,0x01010100,
0x00010202,0x00010202,0x01010100,0x01000001,0x00010202,0x00000102,0x01020202,
0x01020000,0x00000102,0x01020202,0x0000fffe,0x01020202,0x00000102,0x00010102,
0x01010202,0x00010102,0x0100ffff,0x01010202,0x00fffffe,0x01010202,0x00010102,
0x00000001,0x01020303,0x01010101,0x00fffefd,0x00010203,0x01010101,0x00010203,
0x01000000,0x01000000,0x00010203,0x01010101,0x00010203,0x01020303,0x000000ff,
0x01020303,0x00000001,0x00010102,0x01010000,0x01010202,0x00010100,0x00010102,
0x01000101,0x01020201,0x0000ffff,0x00000101,0x01020100,0x00010101,0x01000102,
0x00000101,0x01020201,0x00010101,0x010100ff,0x01010102,0x0100ffff,0x01010102,
0x00010201,0x01010102,0xff000101,0x01010102,0x00fffeff,0x01010202,0xff000001,
0x00010102,0x0100ff00,0x01010202,0x010000ff,0x00010102,0x01010201,0x01020203,
0x00ff0000,0x01010203,0xff000000,0x01020203,0x00000100,0x01010203,0x01000000,
0x01010101,0xff000102,0x01000000,0x01010203,0x01010101,0x0100fffe,0x00000001,
0x01020302,0x01020203,0x00000101,0x01010203,0x00ffffff,0x01020203,0x0000ffff,
0x01010203,0x00010101,0x00010101,0x0100fffe,0x00000101,0x01020203,0x01010000,
0xff000102,0x00010101,0x01010203};
const long L_[ 12 ]={ 1 , 2 , 4 , 4 , 4 , 4 , 4 , 8 , 8 , 8 , 8 , 8 };const char C_[]="*XITZUVWLPFYN";
long       A_[ 60 ];

long cnt( 0 ),pfc,cur,xo[ 13 ],yo[ 13 ],key[ 12 ],knd[ 12 ];

#define A(x,y) (*(A_+(y)*AX+(x)))
#define X(n,k,c) (c?(long)((signed char)((F_[W_[(n)]+(k<< 1 )  ]>>( 32 - 8 *(c)))&0xFF)): 0 )
#define Y(n,k,c) (c?(long)((signed char)((F_[W_[(n)]+(k<< 1 )+ 1 ]>>( 32 - 8 *(c)))&0xFF)): 0 )
#define Log(f)                                                              \
  fprintf((f),"fig.# %d\n",cnt);for(int y= 0 ;y<AY;++y){for(int x= 0 ;x<AX;++x){\
  fputc(C_[A(x,y)],(f));}fputc('\n',(f));}fputc('\n',(f));

//Тут мутотень закончилась, дальше можно работать

int main(){
  assert(AX*AY ==  60 );
  assert(AX>AY);

  long i,x,y;
  
  pfc = - 1 ; cur =  0 ; xo[ 0 ] =  0 ; yo[ 0 ] =  0 ; goto label2070;

label2070:
  key[cur] = - 1 ; goto label2180;

label2090:
  for(i =  0 ; i <= pfc; ++i)if(key[cur]==key[i])goto label2180;

label2140:
  long x_[ 5 ],y_[ 5 ];
  for(i =  0 ; i <  5 ; ++i){
    x_[i] = xo[cur] + X(key[cur], knd[cur], i);
    y_[i] = yo[cur] + Y(key[cur], knd[cur], i);
    if(!i)continue;
    if((x_[i]< 0 )||(y_[i]< 0 )||(x_[i]>=AX)||(y_[i]>=AY)||(A(x_[i],y_[i])))goto label2160;
  }
  for(i =  0 ; i <  5 ; ++i)A(x_[i], y_[i]) = key[cur] +  1 ;
  for(x =  0 ; x < AX; ++x)for(y =  0 ; y < AY; ++y)if(!A(x,y)){
    xo[pfc +  2 ] = x; yo[pfc +  2 ] = y; goto label2260;
  }

label2260:
  ++pfc; cur = pfc +  1 ; if(pfc <  11 )goto label2070;
  ++cnt;
  Log(stdout);
  goto label2240;

label2160:
  ++knd[cur]; if(knd[cur] < L_[key[cur]])goto label2140;

label2180:
  ++key[cur]; knd[cur] =  0 ; if(key[cur] <  12 )goto label2090;
  if(pfc <  0 ){fprintf(stdout,"Complete\n");return  0 ;};

label2240:
  for(i =  0 ; i <  5 ; ++i)A(xo[pfc] + X(key[pfc], knd[pfc], i),
                          yo[pfc] + Y(key[pfc], knd[pfc], i))= 0 ;
  --pfc; cur = pfc +  1 ; goto label2160;
}
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32966993
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне вспоминается анекдот:

Сидит программер. Что-то кодит. К нему подходит юзер.
Ю: Что ты делаешь?
П: Пишу программу
Ю: А что она делает?
П: Не знаю. Щас скомпилим, запустим и узнаем...


P.S. ZrenBy вдохновил.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32967141
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
))))
тогда уже не "таблица решений", а матрица перехода автомата из состояния в состояние.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32967143
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiebentearbeithДайте и мне шашкой помахать :)
...

И ещё.То, что не отвалилось в процессе эволюции - нужно.

угу.
вот, к примеру, арифметический иф (с переходом на три ветвления) в фортране отвалился.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32967376
Siebentearbeit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SarinХотя, каждому своё. Я goto не юзаю. Но кричать на каждом углу не юзайте goto не хочу.

Круто, подписываюсь под этим :)
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32967517
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sarin Lelikk SarinА если у тебя строчек так тысяч пять - шесть?

goto, ИМХО, используется потому, что это фактически asm без никто :)
Ну типа JMP

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

А чем halt плох?

В принципе в случаях, когда производительность нужна ЛЮБОЙ ценой и for i := 1 to 50
заменяется на 50 команд. А все функции переписываются каждый раз с начала наверное goto очень хорошая вещь.

Хотя, каждому своё. Я goto не юзаю. Но кричать на каждом углу не юзайте goto не хочу.

Halt плох тем, что он не завершает, а убивает программу.
А расписать for на 50 строк кода глупо. Так как весь короткий цикл при исполнении процессором уже декодирован и выполняется гораздо быстрее и не по коду.
Кстати, если в функции исполняется приличный кусок кода, то экономить на вызове функции смысла не имеет.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32967659
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то в словах Sarin-a есть резон. Представьте себе код, в котором в целях повышения производительности исключен нормальный выход. К примеру ... это может быть видеокодек или трассировщих лучей. Для останова такого процесса используется какое-нибудь внешнее воздействие. Например установка внешнего флага bStopThread в состояние true.

За примерами далеко ходить не надо. Возьмите любую задачу с погружением в глубокую рекурсию.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32967747
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вроде halt с чем-то спутал.
Есть какая-то команда выхода из цикла :)
Склероз.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32967830
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinЯ вроде halt с чем-то спутал.
Есть какая-то команда выхода из цикла :)
Склероз.

Может throw ?
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32968749
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizтогда уже не "таблица решений", а матрица перехода автомата из состояния в состояние.
Это простой частный случай таблицы решений, вполне уместный в данном случае.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32969225
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton SarinЯ вроде halt с чем-то спутал.
Есть какая-то команда выхода из цикла :)
Склероз.

Может throw ?

Нет, он вроде в контексе Delphi
Можно raise или break
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32969340
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
break.
Вспомнил. Спасибо большое. Вообще склероз - болезнь чудная. Каждый день что-то новое.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32972310
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZrenByПравда, тут уже извраты не бейсика, а с :).
Остальное пропущу, приведу свой код. Что было - отмечено собачками. Найти отличия несложно.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>

const long AX =  15 ;
const long AY =   4 ;

//Тут всякая мутотень
const          long W_[ 12 ]={ 0 , 2 , 6 , 14 , 22 , 30 , 38 , 46 , 62 , 78 , 94 , 110 };
const unsigned long F_[ 126 ]  =  {0x01010102,0xff000100,0x01020304,0x00000000,
0x00000000,0x01020304,0x01020101,0x00000102,0x01020101,0x0000fffe,0x00000102,
0x01020101,0x01020202,0x00ff0001,0x01010102,0x00010202,0x00010202,0x010000ff,
0x01010102,0x00fffefe,0x00010202,0x01010102,0x00010202,0x01000001,0x01010100,
0x00010202,0x00010202,0x01010100,0x01000001,0x00010202,0x00000102,0x01020202,
0x01020000,0x00000102,0x01020202,0x0000fffe,0x01020202,0x00000102,0x00010102,
0x01010202,0x00010102,0x0100ffff,0x01010202,0x00fffffe,0x01010202,0x00010102,
0x00000001,0x01020303,0x01010101,0x00fffefd,0x00010203,0x01010101,0x00010203,
0x01000000,0x01000000,0x00010203,0x01010101,0x00010203,0x01020303,0x000000ff,
0x01020303,0x00000001,0x00010102,0x01010000,0x01010202,0x00010100,0x00010102,
0x01000101,0x01020201,0x0000ffff,0x00000101,0x01020100,0x00010101,0x01000102,
0x00000101,0x01020201,0x00010101,0x010100ff,0x01010102,0x0100ffff,0x01010102,
0x00010201,0x01010102,0xff000101,0x01010102,0x00fffeff,0x01010202,0xff000001,
0x00010102,0x0100ff00,0x01010202,0x010000ff,0x00010102,0x01010201,0x01020203,
0x00ff0000,0x01010203,0xff000000,0x01020203,0x00000100,0x01010203,0x01000000,
0x01010101,0xff000102,0x01000000,0x01010203,0x01010101,0x0100fffe,0x00000001,
0x01020302,0x01020203,0x00000101,0x01010203,0x00ffffff,0x01020203,0x0000ffff,
0x01010203,0x00010101,0x00010101,0x0100fffe,0x00000101,0x01020203,0x01010000,
0xff000102,0x00010101,0x01010203};
const long L_[ 12 ]={ 1 , 2 , 4 , 4 , 4 , 4 , 4 , 8 , 8 , 8 , 8 , 8 };const char C_[]="*XITZUVWLPFYN";
long       A_[ 60 ];

long cnt( 0 ),pfc,cur,xo[ 13 ],yo[ 13 ],key[ 12 ],knd[ 12 ];

#define A(x,y) (*(A_+(y)*AX+(x)))
#define X(n,k,c) (c?(long)((signed char)((F_[W_[(n)]+(k<< 1 )  ]>>( 32 - 8 *(c)))&0xFF)): 0 )
#define Y(n,k,c) (c?(long)((signed char)((F_[W_[(n)]+(k<< 1 )+ 1 ]>>( 32 - 8 *(c)))&0xFF)): 0 )
#define Log(f)                                                              \
  fprintf((f),"fig.# %d\n",cnt);for(int y= 0 ;y<AY;++y){for(int x= 0 ;x<AX;++x){\
  fputc(C_[A(x,y)],(f));}fputc('\n',(f));}fputc('\n',(f));

//Тут мутотень закончилась, дальше можно работать

int main(){
  assert(AX*AY ==  60 );
  assert(AX>AY);

  long i,x,y;
  long x_[ 5 ],y_[ 5 ];


  //@@@
  enum estate{ label2070, label2180, label2090, label2140, label2160,
               label2260, label2240};
  estate state;

  pfc = - 1 ; cur =  0 ; xo[ 0 ] =  0 ; yo[ 0 ] =  0 ; state = label2070; //@@@ goto label2070;

  //@@@
  while(  1 ){
  switch( state)
  {
//@@@label2070:
   case label2070:
     key[cur] = - 1 ; state = label2180; //@@@ goto label2180;
     break;

//@@@label2090:
   case label2090:
    for(i =  0 ; i <= pfc; ++i)
    {
      if(key[cur]==key[i])
      {
        state = label2180;
        //@@@goto label2180;
        break;
      }
    }
    if( state == label2180)
      break;

//@@@label2140:
  case label2140:
  {
  //@@@long x_[ 5 ],y_[ 5 ];
  for(i =  0 ; i <  5 ; ++i){
    x_[i] = xo[cur] + X(key[cur], knd[cur], i);
    y_[i] = yo[cur] + Y(key[cur], knd[cur], i);
    if(!i)continue;
    if((x_[i]< 0 )||(y_[i]< 0 )||(x_[i]>=AX)||(y_[i]>=AY)||(A(x_[i],y_[i])))
    {
      //@@@goto label2160;
      state = label2160;
      break;
    }
  }
  if(state == label2160)
    break;
  for(i =  0 ; i <  5 ; ++i)A(x_[i], y_[i]) = key[cur] +  1 ;
  for(x =  0 ; x < AX; ++x){
   for(y =  0 ; y < AY; ++y)
   {
    if(!A(x,y))
    {
      xo[pfc +  2 ] = x; yo[pfc +  2 ] = y; //@@@goto label2260;
      state = label2260;
      break;
    }
   }
   if(state == label2260) break;
  }
  if(state == label2260) break;

  }

//@@@label2260:
  case label2260:
  ++pfc; cur = pfc +  1 ; if(pfc <  11 ){ state = label2070; break; } //@@@goto label2070;
  ++cnt;
  Log(stdout);
  state = label2240;
  break;
  //@@@goto label2240;

//@@@label2160:
  case label2160:
  ++knd[cur]; if(knd[cur] < L_[key[cur]]){ state = label2140; break; } //@@@goto label2140;

//@@@label2180:
  case label2180:
  ++key[cur]; knd[cur] =  0 ; if(key[cur] <  12 ){ state = label2090; break;} //@@@goto label2090;
  if(pfc <  0 ){fprintf(stdout,"Complete\n");return  0 ;};

//@@@label2240:
  case label2240:
  for(i =  0 ; i <  5 ; ++i)A(xo[pfc] + X(key[pfc], knd[pfc], i),
                          yo[pfc] + Y(key[pfc], knd[pfc], i))= 0 ;
  --pfc; cur = pfc + 1; //@@@ goto label2160;
  state = label2160;
  } // end switch
  } // end while
}
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32972399
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну я
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
      state = label2260;
      break;
    }
   }
   if(state == label2260) break;
  }
  if(state == label2260) break;
...


Понятно, конечно, но ...
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32972869
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Ну я

Структуризация хорошая. Еще бы неплохо узнать что этот код делает.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32973033
Фотография Green2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переформулирую вопрос чем плох безусловный переход для ассемблера?
Переформулирую вопрос чем плох безусловный переход для С и подобное?
Переформулирую вопрос чем плох безусловный переход для SQL :)?
--

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32973043
Фотография Green2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-бы поняли насчет SQL приведу пример для T-SQL:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
USE pubs
GO
DECLARE @tablename sysname
SET @tablename = N'authors'
table_loop:
   IF (@@FETCH_STATUS <> - 2 )
   BEGIN   
      SELECT @tablename = RTRIM(UPPER(@tablename)) 
      EXEC ("SELECT """ + @tablename + """ = COUNT(*) FROM " 
            + @tablename )
      PRINT " "
   END
   FETCH NEXT FROM tnames_cursor INTO @tablename
IF (@@FETCH_STATUS <> - 1 ) GOTO table_loop
GO
--

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32973050
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZrenBy ну я
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
      state = label2260;
      break;
    }
   }
   if(state == label2260) break;
  }
  if(state == label2260) break;
...


Понятно, конечно, но ...
Да и мне самому что-то сие покоя не дает. Вроде как подпадает под условие дублирования кода. Но если разрешить два плюса, то можно выбить из вложенного цикла через throw. Или через setjump - longjump.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32973059
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton2 Ну я

Структуризация хорошая. Еще бы неплохо узнать что этот код делает.
Мне тоже. Для техники трансформации кода это, конечно, до лампочки, но хотелось бы хоть для общей эрудиции.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32973115
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну я mayton2 Ну я

Структуризация хорошая. Еще бы неплохо узнать что этот код делает.
Мне тоже. Для техники трансформации кода это, конечно, до лампочки, но хотелось бы хоть для общей эрудиции.

Пентамино

Для 10x6 у меня выводит 9356 фигур
По ссылке - 2339 решений. 9356/2339 = 4 - отброшены симметричные отображения
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32973482
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Безусловный переход плох только в одном случае - если им злоупотребляют:

а). слишком "далёкие ссылки"
б). много переходов

В противном случае пользуйся наздоровье ;) Плох он только по тому что умный человек откритиковал _злоупотребление_ goto, а куча недоучек, не понимая смысл высказывания, развела болтовню что современные программеры его юзать не должны.

Ещё некоторые умники визжат о вреде #define.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32973856
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Green2Что-бы поняли насчет SQL приведу пример для T-SQL:
Хм. И зачем тут GOTO, кроме как "ничего другого нет"? Имхо, более нормально это будет выглядеть так:

Код: plaintext
1.
2.
3.
4.
5.
loop
  ...
  exit when tnames_cursor%notfound ;
end loop ;
...
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32973935
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Green2Что-бы поняли насчет SQL приведу пример для T-SQL:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
USE pubs
GO
DECLARE @tablename sysname
SET @tablename = N'authors'
table_loop:
   IF (@@FETCH_STATUS <> - 2 )
   BEGIN   
      SELECT @tablename = RTRIM(UPPER(@tablename)) 
      EXEC ("SELECT """ + @tablename + """ = COUNT(*) FROM " 
            + @tablename )
      PRINT " "
   END
   FETCH NEXT FROM tnames_cursor INTO @tablename
IF (@@FETCH_STATUS <> - 1 ) GOTO table_loop
GO


И действительно, зачем здесь goto ?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
use pubs
go

declare @s          nvarchar( 1000 )
declare @cnt        int
declare @table_name sysname
declare cr          cursor fast_forward for
   select table_name from information_schema.tables

open cr
while  1 = 1  begin
   fetch cr into @table_name
--   if(@@fetch_status != 0)break
   if(@@fetch_status = (- 1 ))break

   if(@@fetch_status != (- 2 ))begin
      set @s = N'select @cnt = count(*) from ' + @table_name
      exec sp_executesql @s, N'@cnt int out', @cnt = @cnt out

      set @s = @table_name + ' = ' + convert(varchar,@cnt)
      print @s
   end
end
close cr deallocate cr
go
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32973946
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИнтеграторЕщё некоторые умники визжат о вреде #define.
Эт тоже больная тема.
Кажется пора составлять чеклист когда попытка заменить макросы приводит к проблемам.
Эх, наболело...
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32973961
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZrenByИ действительно, зачем здесь goto ?
Для этого даже break не нужен :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
declare 
  cnt integer ;
  msg varchar2( 2000 );
begin
  for cr in (select table_name from user_tables order by table_name) loop
    begin            
      msg := '';
      execute immediate 'select count(*) into :cnt from ' || cr.table_name into cnt;
    exception
      when others then cnt := null ; msg := sqlerrm ;
    end;
    dbms_output.put_line ( rpad ( cr.table_name,  30  ) || lpad ( cnt,  10  ) || substr (msg,  1 ,  80 ));
  end loop;
end;          
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32974106
Фотография Green2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Однако чем плох goto для assembler :)
--

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32974110
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Green2Однако чем плох goto для assembler :)
Для ассемблера он плох одним: не поддерживается. Вместо него следует использовать jmp.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32974296
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
- Нет лучшего способа закомментировать фрагмент бинарного кода как поставить jmp вперед. (Сам пользовался при отладке)

- Некоторое количество операторов jmp на 1k ассемблерного кода способно довести до тихой истерики "юного начинающего крякера".
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32974554
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну я ИнтеграторЕщё некоторые умники визжат о вреде #define.
Эт тоже больная тема.
Кажется пора составлять чеклист когда попытка заменить макросы приводит к проблемам.
Эх, наболело...

Угу - больная для тех кто перечитал (и не так ничего и не понял :) ) всяких супер новых книг о мощи ООП
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32975210
Yanis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Некоторое количество операторов jmp на 1k ассемблерного кода
> способно довести до тихой истерики "юного начинающего крякера".

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32977449
roman74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
помню мне понравилась фраза из какой-то книги (щас не помню уже какой).

"Одно время велись жаркие споры - использовать ли опреатор goto.
Но исход спора между красотой стиля и элементарным удобством был предрешен."

Мож цитата и неточная - читал давно
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32977782
java solution
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
roman74помню мне понравилась фраза из какой-то книги (щас не помню уже какой).

"Одно время велись жаркие споры - использовать ли опреатор goto.
Но исход спора между красотой стиля и элементарным удобством был предрешен."

Мож цитата и неточная - читал давно

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

Я писал на бейсике и мне было хорошо с гоуТу, пока не узнал, что в нём есть процедуры и функции. Что бы использовать гоуТу в логике из if-else нужно быть совсем любителем "элементарных удобств". Оставался выход из дремучей иерархии for-for-for-for, но придумать код, где такие вложенности нужны, задача сама по себе не простая. Тем не менее бывает и такое. В этих случаях гоуТу использовал на ура.
Через 6 лет перешёл на java. break label; избавил и от этой необходимости.
Отсталась одна красота и удобства, а игрушки интересные только изворотливого мозгу были убранны полностью, не осталось даже предмета для спора.
Хотя на самом деле его и не было никогда. Был просто флейм скучающих людей.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32977824
roman74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я там чуть-чуть опечатался - не "красота стиля" а "чистота стиля". И мнение авторо было примерно такое же, что и у большинства из высказавшихся здесь.

Использовать как можно меньше. Но и не извращаться когда намного проще использовать готу. Он как раз и говорил про вложенные циклы.

И еще - по моему break label мало чем отличается от goto (разве что написанием)
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32978019
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roman74
И еще - по моему break label мало чем отличается от goto (разве что написанием)

Тихо ... Не говори так при поклонниках Жавы ! break label - это очень современно и принципиально отличается от goto А проепроцессор - это устарело и непрактично, причём настолько, что в конце концов разработчики Жавы написали его для себя

ЗЫ споры бессмысленны, здравомыслящий человек пользуется тем, чем ему удобно в конкретной ситуации, а не руководствуется высказываниями о стилях и современности ;)
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32978138
Лазутчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прочитав все 4-е страницы этого топика, я еще раз убедился, что goto оправдано использовать только для выхода из вложенных циклов (и только для этого!). Разработчики Java, выкинув goto, поступили действительно мудро. Вместо goto сделали две замечательных конструкции: break <label> и continue <label> и начинающим программистам Java, особенно тем, которые раньше на бейсике писали, не придет в голову использовать безусловный переход в неподходящих местах. Сами названия операторов (break, continue) говорят уже о том, что применять их нужно только в теле цикла.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32978224
java solution
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
roman74Я там чуть-чуть опечатался - не "красота стиля" а "чистота стиля". И мнение авторо было примерно такое же, что и у большинства из высказавшихся здесь.

Использовать как можно меньше. Но и не извращаться когда намного проще использовать готу. Он как раз и говорил про вложенные циклы.

И еще - по моему break label мало чем отличается от goto (разве что написанием)

Он отличается тем, что его нельзя использовать ни по какому другому назначению, кроме как выход из циклов. Так же как и continue label, который запускает следующую итерацию нужного цикла.
Так что о схожести с goto речь тут не идёт.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32978288
java solution roman74Я там чуть-чуть опечатался - не "красота стиля" а "чистота стиля". И мнение авторо было примерно такое же, что и у большинства из высказавшихся здесь.

Использовать как можно меньше. Но и не извращаться когда намного проще использовать готу. Он как раз и говорил про вложенные циклы.

И еще - по моему break label мало чем отличается от goto (разве что написанием)

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

А почему этот самый break label в Java, может прыгать только на верх, херомантия какая то.

Код: plaintext
1.
2.
3.
4.
5.
6.
label:
      for (;;){
          for (;;){
              break  label;
         }
     }

а если я хочу совсем выйти. Ну тоись вниз.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32978428
Анти Лазутчик
А почему этот самый break label в Java, может прыгать только на верх, херомантия какая то.

Код: plaintext
1.
2.
3.
4.
5.
6.
label:
      for (;;){ //1
          for (;;){ //2
              break  label;
         }
     }

а если я хочу совсем выйти. Ну тоись вниз.
break никуда не прыгает, это не гоуту. Он завершает выполнение цикла.
В данном случае 1-го.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32978448
тоись, ты хочешь сказать, что после выполнения break label; (в данном примере) мы не будем входить в тело 1-го цикла, то есть пропустим эту парочку(for; for) и пойдем дальше?
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32978460
Про Лазутчиктоись, ты хочешь сказать, что после выполнения break label; (в данном примере) мы не будем входить в тело 1-го цикла, то есть пропустим эту парочку(for; for) и пойдем дальше?

Я не хочу это сказать, я это уже сказал :)
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32979542
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анти ЛазутчикА почему этот самый break label в Java, может прыгать только на верх,
Он не прыгает наверх, он ссылается наверх. Прыгал бы - если бы в этом месте стоял goto. А break означает "выйти из цикла, помеченного label".
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #32979716
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ничем.
Спросил бы лучше "Чем плохи безусловные переходы?".
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #33044333
Фотография RatTail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я как-то набрел на вот такую вещицу (задача о назначениях на фортране):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
C THIS SUBROUTINE SOLVES THE FULL DENSITY LINEAR ASSIGNMENT PROBLEM
C ACCORDING TO 
C
C "A Shortest Augmenting Path Algorithm for Dense and Sparse Linear   
C Assignment Problems," Computing  38 ,  325 - 340 ,  1987 
C   
C by
C   
C R. Jonker and A. Volgenant, University of Amsterdam.
Переписал ее на VB один к одному . Работает как зверь! Матрицу 10000х10000
обсчитывает мгновенно. Интересно было бы сравнить это с Венгерским методом.
Авторы клянутся, что их алгоритм работает намного быстрее любого "классического".


НО ПОЛЮБУЙТЕСЬ НА ЭТОТ КОШМАР ИЗ GOTOS !!!!!!!!!!!!
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
Sub AssignmentProblem()
Const N =  5 
Dim i&, i0&, j&, j0&, j1&, h&, k&, z&, cnt&, s$, ss$
Dim m&, m0&, v0&, vj&, dj&, up&, min&, low&, last&
Dim c&(N, N), x(N), y(N), u(N), v(N)
Dim lab&(N), d&(N), free&(N), col&(N)

For i =  1  To N
For j =  1  To N
c(i, j) = Cells(i, j)
Next j
Next i

For i =  1  To N
x(i) =  0 
Next i

For j0 =  1  To N
j = N - j0 +  1 : vj = c(j,  1 ): i0 =  1 
For i =  2  To N
If c(j, i) < vj Then vj = c(j, i): i0 = i
Next i
v(j) = vj: col(j) = j
If x(i0) =  0  Then
x(i0) = j: y(j) = i0
Else
x(i0) = - 1  * Abs(x(i0)): y(j) =  0 
End If
Next j0

m =  0 
For i =  1  To N
If x(i) =  0  Then
m = m +  1 : free(m) = i: GoTo  40 
End If
If x(i) <  0  Then
x(i) = - 1  * x(i)
Else
j1 = x(i): min =  10  ^  9 
For j =  1  To N
If j = j1 Then GoTo  31 
If c(j, i) - v(j) < min Then min = c(j, i) - v(j)

 31 
Next j
v(j1) = v(j1) - min
End If

 40 
Next i

cnt =  0 
If m =  0  Then GoTo  999 

 41 
m0 = m: k =  1 : m =  0 

 50 
i = free(k): k = k +  1 : v0 = c( 1 , i) - v( 1 )
j0 =  1 : vj =  10  ^  9 

For j =  2  To N
h = c(j, i) - v(j)
If h < vj Then
If h >= v0 Then
vj = h: j1 = j
Else
vj = v0: v0 = h: j1 = j0: j0 = j
End If
End If
Next j

i0 = y(j0)
If v0 < vj Then
v(j0) = v(j0) - vj + v0
Else
If i0 =  0  Then GoTo  43 
j0 = j1: i0 = y(j1)
End If
If i0 =  0  Then GoTo  43 
If v0 < vj Then
k = k -  1 : free(k) = i0
Else
m = m +  1 : free(m) = i0
End If

 43 
x(i) = j0: y(j0) = i
If k <= m0 Then GoTo  50 
cnt = cnt +  1 
If (m >  0 ) And (cnt <  2 ) Then GoTo  41 
m0 = m
For m =  1  To m0
i0 = free(m)
For j =  1  To N
d(j) = c(j, i0) - v(j)
lab(j) = i0
Next j

up =  1 : low =  1 

 60 
last = low -  1 : min = d(col(up)): up = up +  1 

For k = up To N
j = col(k): dj = d(j)
If dj <= min Then
If dj < min Then
min = dj: up = low
End If
col(k) = col(up): col(up) = j: up = up +  1 
End If
Next k

For h = low To up -  1 
j = col(h)
If y(j) =  0  Then GoTo  70 
Next h

 55 
j0 = col(low): low = low +  1 
i = y(j0): h = c(j0, i) - v(j0) - min

For k = up To N
j = col(k): vj = c(j, i) - v(j) - h
If vj < d(j) Then
d(j) = vj: lab(j) = i
If vj = min Then
If y(j) =  0  Then GoTo  70 
col(k) = col(up): col(up) = j: up = up +  1 
End If
End If
Next k

If low = up Then GoTo  60 
GoTo  55 

 70 
For k =  1  To last
j0 = col(k): v(j0) = v(j0) + d(j0) - min
Next k

 80 
i = lab(j): y(j) = i: k = j: j = x(i): x(i) = k
If i0 <> i Then GoTo  80 
Next m
 999 

z =  0 
s = "Номера колонок: "
ss = "Выбранные значения: "
For i =  1  To N
u(i) = c(x(i), i) - v(x(i)): z = z + c(x(i), i)
s = s & y(i) & " ": ss = ss & c(i, y(i)) & " "
Next i
Debug.Print "МинСумма: " & z & vbCrLf & s & vbCrLf & ss
MsgBox "МинСумма: " & z & vbCrLf & s & vbCrLf & ss
End Sub
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #33044872
Несчастный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RatTail

Код: plaintext
1.
University of Amsterdam.



Остальные побочки скипнуты.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #33044878
Фотография RatTail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Несчастный RatTail

Код: plaintext
1.
University of Amsterdam.



Остальные побочки скипнуты.
Не понял; что, опять падлы у рассейских ученых что-то украли?
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #33044886
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2RatTail
- НЕ отвлекайся!!! Шай-бу! Шай-бу!
Для неинтересующихся тынц
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #33049671
bill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПозвольте несколько слов в защиту goto.

1) Иногда без него трудно обойтись. К примеру, довольно трудно выйти из двух и более вложенных циклов без использования goto.


В С++ для этого есть try...catch. В exeption заодно можно сказать, из-за чего вывалился.
...
Рейтинг: 0 / 0
Чем плох безусловный переход??
    #33050105
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bill maytonПозвольте несколько слов в защиту goto.

1) Иногда без него трудно обойтись. К примеру, довольно трудно выйти из двух и более вложенных циклов без использования goto.


В С++ для этого есть try...catch. В exeption заодно можно сказать, из-за чего вывалился.

Ого! Радикально! Как ты думаешь .. это упростит процесс ОТЛАДКИ такого кода?
...
Рейтинг: 0 / 0
109 сообщений из 109, показаны все 5 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Чем плох безусловный переход??
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]