![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
goto и вложенные циклы
tippa © (2010-02-24 17:38:00)есть цикл1, а в нем цикл2. При наступлении какого-то условия во 2 цикле нужно перейти к следующей итерации в первом цикле. Вроде через goto самое очевидное. Ho goto - это же "зло". А по другому и не знаю как?
oldman (2010-02-25 14:19:00) [1]
> tippa (24.02.10 17:38)
> есть цикл1, а в нем цикл2. При наступлении какого-то условия
> во 2 цикле нужно перейти к следующей итерации в первом цикле
если система такая:
begin цикл1
begin цикл2
end цикл2
end цикл1
то нормальный exit из цикла2 по условию спасет Вас?
Германн (2010-02-25 01:27:00) [2]
> Германн © (25.02.10 01:19) [20]
Блин, смайлик забыл поставить! :(
Устал очень сегодня.
Германн (2010-02-25 01:19:00) [3]
> нет, goto это не зло
>
+1
Как и, к примеру, алкоголь. Принятая "в меру" доза в подходящий момент в подходящих условиях - это добро. А вот не в меру, не ко времени или в немеряном количестве - это зло!
Сам лично использовал в одной из своих программ goto. Поскольку все прочие варианты были гораздо менее читаемые (т.е. не влезали в один экран).
KilkennyCat (2010-02-25 00:35:00) [4]
> sniknik © (25.02.10 00:25) [16]
с Сase (если память не изменяет в Актшион скрипт) cходство вообще явное: отсутствие брека позволит пройти все тело кэйса. Классический гоуту, только красиво оформленный.
KilkennyCat (2010-02-25 00:32:00) [5]
> в общем мысль понял, но чувство, что где то на
аналогично. я так же хотел написать, но не смог сформулировать.
Игорь Шевченко (2010-02-25 00:27:00) [6]sniknik © (25.02.10 00:21) [15]
Не, я про исключения, раскрутку стека, переключение потоков выполнения. Это действительно, на мой взгляд, без goto не реализуемо. Причем, goto в нарушение всех канонов стуктурного программирования.
Ни break, ни continue не могут перейти за границы блока begin/end
sniknik (2010-02-25 00:25:00) [7]> А вот Case
кстати забыл, if ... else ..., тоже goto только называется по-другому, ну а как же, там же все на джампах условных/безусловных. т.е. суть одна - goto.
sniknik (2010-02-25 00:21:00) [8]> И опять же, называется по-другому
тогда break, continue в циклах exit в процедуре это все goto, только называется по-другому... тот же самый безусловный переход, в конец/начало цикла, и к месту вызова процедуры...
в общем мысль понял, но чувство, что где то на., обманули осталось...
KilkennyCat (2010-02-24 23:29:00) [9]А вот Case можно тоже рассматривать как GoTo (в некоторых языках)
Jeer (2010-02-24 23:19:00) [10]Мне всегда нравилось в конце асм процедуры верхнего уровня вместо
...
CALL Proc2
Return
делать
goto Proc2
:)
Игорь Шевченко (2010-02-24 23:07:00) [11]sniknik © (24.02.10 21:57) [11]
> goto из одной процедуры в другую, в произвольное место (в
> середину), с выходом из нее соответственно по адресу вызова
> первой.
И твой пример и KilkennyCat © [9] имеют отношение не к алгоритмам, а только к способам их реализации.
Обработка исключительных ситуаций без goto не работает. Только называется иначе.
Многопоточность, реализуемая пользователем, без goto не работает. И опять же, называется по-другому (setjmp/longjmp в C), Fiber-функции в Windows.
sniknik (2010-02-24 21:57:00) [12]> ????
goto из одной процедуры в другую, в произвольное место (в середину), с выходом из нее соответственно по адресу вызова первой. это типа более полно использовать код.
в дельфи нельзя скорее всего, на бейсике возможно (или было возможно. может они уже одумались...)
и, да, сам я это не назвал бы алгоритмом, скорее одним из методов (кривым/запутанным) решения задачи, но преподносили мне это именно под "алгоритмическим соусом".
Игорь Шевченко (2010-02-24 21:56:00) [13]
> 7. если сюда пришли при помощи именно goto и только goto
> и никаким иным образом
Что-то мне это напоминает...Оператор COME FROM в языке INTERCAL
KilkennyCat (2010-02-24 21:27:00) [14]Элементарно
1. ля-ля-ля
2. трам-пам-пам
3. goto 7
....
7. если сюда пришли при помощи именно goto и только goto и никаким иным образом, выдать сообщение "Привет, мир! я - Великий ГоуТу!"
это навскидку. Могу исчо придумать, более серъезных. На более низком уровне.
Игорь Шевченко (2010-02-24 21:22:00) [15]
> Существует алгоритм с гоуту, без гоуту невозможный
????
KilkennyCat (2010-02-24 20:54:00) [16]а также доказано, к википедии не стоит относиться серъезно. Существует алгоритм с гоуту, без гоуту невозможный.
Вася (2010-02-24 20:16:00) [17]
> 12 © (24.02.10 18:23) [4]
>
> Формально доказано, что применение GOTO не является обязательным
> (то есть не существует такой программы с GOTO, которую нельзя
> было бы переписать без этого оператора с полным сохранением
> функциональности) (однако с потерями эффективности
А также не существует ни одной программы без GOTO, которую нельзя было бы бы переписать с этим оператором (при этом с увеличением эффективности)
12 (2010-02-24 18:36:00) [18]
> for i:= 0 to 9 do
> begin
> CallProc;
> Продолжаем работу первого цикла;
> end;
>
> end;
>
> procedure CallProc(AParam:integer);
> begin
> for j:= 0 to 10 do
begin
if Какое-то условие then exit else
> begin
>
> end;
end;
всмысле
12 (2010-02-24 18:23:00) [19]Формально доказано, что применение GOTO не является обязательным (то есть не существует такой программы с GOTO, которую нельзя было бы переписать без этого оператора с полным сохранением функциональности) (однако с потерями эффективности
http://ru.wikipedia.org/wiki/GOTO
var
i, j : Integer;
begin
j:=-1;
for i:= 0 to 9 do
begin
repeat
inc(j);
until Какое-то условие;
Продолжаем работу первого цикла;
end;
j:=0;
for i:= 0 to 9 do
begin
while Какое-то условие do
begin
inc(j);
end;
Продолжаем работу первого цикла;
end;
for i:= 0 to 9 do
begin
for j := 0 to 9 do CallProc(j);
Продолжаем работу первого цикла;
end;
end;
procedure CallProc(AParam:integer);
begin
if Какое-то условие then exit else
begin
end;
end;
Игорь Шевченко (2010-02-24 17:53:00) [20]
> Ho goto - это же "зло".
нет, goto это не зло