Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.04;
Скачать: CL | DM;

Вниз

Ох эти цыклы!!!!   Найти похожие ветки 

 
Igor__ ©   (2003-08-14 07:40) [0]

Сначала код:
For i:=1 to n do
for j:=1 to m do
begin
if <условие> then goto l1;
end;
l1:

Где-то я слышал, что всегда можно обойтись без GOTO, но это ведь неправда. Или вы можете показать как выйти из двойного цыкла без GOTO???


 
Viktor Kushnir ©   (2003-08-14 08:07) [1]

VAr
vExit :boolean;

vexit := false;
For i:=1 to n do
Begin
for j:=1 to m do
begin
if <условие> then vExit := true else DoSome;
end;
If vExit then break;
End;


 
АлексейК   (2003-08-14 08:34) [2]

For i:=1 to n do
BEGIN
for j:=1 to m do
if <условие> then break; //завершение внутреннего цикла
if <условие> then break;//завершение внешнего цикла
END


 
Романов Р.В. ©   (2003-08-14 09:51) [3]

procedure A;
function B(Data: TData);
begin
for i := 0 to ...
for j := 0 to ...
if <условие> then Exit;
end;
begin
...
B(Data);
...
end;


 
Е-Моё имя ©   (2003-08-14 10:00) [4]

аааааа.....вона тут про какие циклы....
а то по трагизму в теме я уж другое подумал...))


 
NAlexey ©   (2003-08-14 10:18) [5]

>а то по трагизму в теме я уж другое подумал...))
А чё в курсе про другие цыклы?


 
Е-Моё имя ©   (2003-08-14 10:20) [6]

разные циклы бывают...


 
NAlexey ©   (2003-08-14 10:24) [7]

Ну да, можно обмануться судя по теме. Как будто автор очнувшись вздрагивае, глубоко так вздыхает, и - Ох уж эти циклы!!! :)


 
han_malign ©   (2003-08-14 10:27) [8]


i:=1;fCondition:=false;
while((i<=n)and not(fCondition))do begin
j:=1;
while((j<=m)and not(fCondition))do begin
fCondition:=CalcCondition(i,j);
inc(j);
end;
inc(i);
end;
if(fCondition)then ...

- вот это структурное программирование! А цикл FOR изначально предназначен для не прерываемых циклов, с постоянным шагом!!! Все остальные извращения с этим циклом - извращения и есть...

З.Ы. В качестве еще одного извращения:
k:=0;
while((k<(m*n))and not CalcCondition(k div m + 1,k mod m + 1))do inc(k);


 
Val ©   (2003-08-14 10:31) [9]

>han_malign © (14.08.03 10:27) [8]
.. FOR предназначен для не прерываемых циклов..
это спорное утверждение


 
Basja ©   (2003-08-14 10:54) [10]

For i:=1 to n do
for j:=1 to m do
begin
if <условие> then goto l1;
end;
l1:

а чо разве можно из тела цикла прыкать по мнеткам вне цикла?


 
panov ©   (2003-08-14 10:56) [11]

>Basja © (14.08.03 10:54) [10]
а чо разве можно из тела цикла прыкать по мнеткам вне цикла?

угу, можно


 
Basja ©   (2003-08-14 10:57) [12]


> panov

это же полный отстой


 
Val ©   (2003-08-14 11:00) [13]

>Basja © (14.08.03 10:57) [12]
поэтому и говорится обычно о крайне осторожном использовании goto


 
han_malign ©   (2003-08-14 11:07) [14]

>Val © (14.08.03 10:31) [9]
>это спорное утверждение
- в структурном программировании - это абсолютное утверждение, и если не нужны сюрпризы ("Всего-то три строки - не мог я напортачить, но ОТКУДА???"), лучше его придерживаться...

>а чо разве можно из тела цикла прыкать по мнеткам вне цикла?
- у них демакратия, делать можно все что угодно, но на свой страх и риск...

З.Ы. Еще одно извращение(не структурное, но сильно classное):
try
For i:=1 to n do
for j:=1 to m do
begin
if <условие> then Raise TObject.Create;
end;
except//или finally, кому как...
end;


 
ZernBy   (2003-08-14 11:15) [15]

>>han_malign ©

Мне как-то подсунули процедуру, использующую goto
и предложили переписать ее без goto с двумя условиями

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

Я просидел пару часов, и честно признаюсь,
что моих знаний не хватило для этого.

Не хочешь попробовать ?


 
Игорь Шевченко ©   (2003-08-14 11:17) [16]

Val © (14.08.03 11:00)

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


 
NAlexey ©   (2003-08-14 11:24) [17]

Ну тогда это для вабще обцикленых:

const
Max = 10;
var
I: Integer;
J: Integer;

procedure Cool;
begin
I := Max;
J := Max;
end;

begin
for I := 0 to Max do
for J := 0 to Max do
Cool;


 
Романов Р.В. ©   (2003-08-14 11:24) [18]


> ZernBy (14.08.03 11:15) [15]


А я как то писал программу на клавиатуре у которой клавиша "G" нажимается с 10 раза. У меня терпения нехватило. Естественно использовать оператор Goto я никак не мог.


 
ZrenBy ©   (2003-08-14 11:29) [19]

>>Романов Р.В. © (14.08.03 11:24) [18]

Несчастный, как-же ты begin-то писал?


 
pasha_golub ©   (2003-08-14 11:32) [20]

2NAlexey [17]
Компиялятор не пропустит!


 
NAlexey ©   (2003-08-14 11:33) [21]

Пропустит пропустит....


 
Романов Р.В. ©   (2003-08-14 11:34) [22]


> ZrenBy © (14.08.03 11:29) [19]

Ctrl+C Ctrl+V


 
АлексейК   (2003-08-14 13:40) [23]

А цикл FOR изначально предназначен для не прерываемых циклов, с постоянным шагом!!!
А переменнная i изначально предназначена для цикла FOR.


 
Anatoly Podgoretsky ©   (2003-08-14 15:01) [24]

Стоит ли идти на трюки за счет надежности?
Таких циклос быть не должно, смотри АлексейК (14.08.03 13:40) [23], выбран не тот инструмент, начинать надо с постановки.


 
Val ©   (2003-08-14 16:14) [25]

>han_malign © (14.08.03 11:07) [14]
Аргументы, пожалуйста, а не высокие слова о Структурном Программировании и Абсолюте.


 
Viktor Kushnir ©   (2003-08-14 17:19) [26]

В исходника (Папка Source) от 6 дельфий GOTO используется только 7 раз. Причем пару раз для выхода из For to do


 
Скорбящий ©   (2003-08-14 19:58) [27]

MXDSSQRY.pas

procedure TDSSQueryEditor.RemoveButtonClick(Sender: TObject);
...
for I := 0 to Items.Count - 1 do
begin
if Selected[I] then
begin
if (Reselect = -1) then Reselect := I;
for J := 0 to myMap.count-1 do
begin
DM := myMap[j];
if (DM.FieldName = Items.STRINGS[I]) then
begin
try
RemoveDimensionItem(fQParse, myMap, J);
DM.free;
bChanged := True;
Break;
except
showmessage(SRemoveFieldError);
end;
goto FastExit;
end;
end;
end;
...


 
Viktor Kushnir ©   (2003-08-15 07:35) [28]

Вот вот это оно и есть.


 
Alex Konshin ©   (2003-08-15 07:49) [29]

Некоторым религия не позволяет использовать goto, другим - есть сало (а если он еще и украинец, тогда как? :) ), третьим - материться.
Главная догма - нет никаких догм. В каждом конкретном случае решение может быть свое, и я не вижу никаких причин для исключения goto из своего словарного запаса. В некоторых ситуациях программа будет НАМНОГО понятнее с goto, чем без него, и городить огород из-за каких-то высосанных из пальца правил нет никакого смысла.



Страницы: 1 вся ветка

Текущий архив: 2003.09.04;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.015 c
3-10557
Rel_
2003-08-11 14:17
2003.09.04
Работа с датой


6-10862
Ghost
2003-06-30 15:14
2003.09.04
Проблема с подключением сетевого диска


1-10817
Dr. Well
2003-08-25 12:15
2003.09.04
Проблемма с указателем ... Не могу получить объект по ссылке


1-10736
Zed
2003-08-20 09:45
2003.09.04
Rак сохранить изображение целой формы


1-10716
isma
2003-08-20 12:13
2003.09.04
Вопрос по ListView?