Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.064 c
2-1271244071
Константин
2010-04-14 15:21
2010.08.27
Есть ли в Delphi 7 директива компилятору по обрботке исключений..


15-1265084562
Дмитрий С
2010-02-02 07:22
2010.08.27
Что делать, если на шлюзе не хватает портов для трансляции?


15-1267615251
noob_one
2010-03-03 14:20
2010.08.27
Можно ли готовую dll прикомпилировать к программе?


2-1273989815
fallen_from_skies
2010-05-16 10:03
2010.08.27
создание программы для тестирования учащихся


2-1273822922
Гном45
2010-05-14 11:42
2010.08.27
Прибавить месяц





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский