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