Форум: "Основная";
Текущий архив: 2004.02.17;
Скачать: [xml.tar.bz2];
ВнизОптимизация кода. Найти похожие ветки
← →
Владислав (2004-02-06 14:22) [40]PVOzerski © (05.02.04 10:50) [27]
"for i:=1 to 1000 do
for j:=1 to 1000 do
if x[i,j]="Найденный долгожданный элемент массива!!!" then
begin
MyProcedure(i,j);
goto 1;
end;
1:"
Дык все ж просто ;)
procedure Test;
var
i: Integer;
j: Integer;
LFound: Boolean;
begin
for i := 1 to 1000 do
begin
for j := 1 to 1000 do
begin
LFound := x[i,j] = "Найденный долгожданный элемент массива!!!";
if LFound then
Break
end;
if LFound then
Break
end;
// прочие действия
end;
← →
Владислав (2004-02-06 14:25) [41]А это автору ;)
begin
repeat
if a = b then
begin
//..........
if c = s then
begin
Break
end;
//..........
end
until True
end;
← →
Плохиш (2004-02-06 14:34) [42]>Владислав © (06.02.04 14:25) [41]
Интересно, а если c <> s так и будем в цикле крутиться?
← →
Владислав (2004-02-06 14:36) [43]> Плохиш (06.02.04 14:34) [42]
Не, не будем.
← →
Владислав (2004-02-06 14:37) [44]RTFM
← →
Плохиш (2004-02-06 14:38) [45]>Владислав © (06.02.04 14:36) [43]
> Не, не будем.
И в каком месте Вашего кода об этом написано?
← →
Владислав (2004-02-06 14:38) [46]Repeat statements
When expression returns True, the repeat statement terminates
← →
Плохиш (2004-02-06 14:41) [47]>Владислав © (06.02.04 14:38) [46]
Опс... :-)
repeat
until true;
Более глупое использование цикла repeat трудно придумать 8-)
← →
Владислав (2004-02-06 14:43) [48]Ага :)
Только если между циклами огромное количество кода и нет комментариев, такой код читается не намного лучше goto :)
← →
Verg (2004-02-06 14:46) [49]
>
> Плохиш (06.02.04 14:41) [47]
> >Владислав © (06.02.04 14:38) [46]
> Опс... :-)
>
> repeat
> until true;
>
> Более глупое использование цикла repeat трудно придумать
> 8-)
Зря так думаешь. Это нормальный ход.
Кстати, довольно распространенный.
← →
Плохиш (2004-02-06 14:47) [50]>Verg © (06.02.04 14:46) [49]
Сuntil true
илиuntil false
?
← →
Verg (2004-02-06 14:52) [51]
> Плохиш (06.02.04 14:47) [50]
> >Verg © (06.02.04 14:46) [49]
>
> С until true или until false ?
И тот и другой.
и
repeat .... break ... until true;
тоже.
Оптимизатор и камня на камне не оставит от самого такого цикла, а break свою ф-цию нормально выполнит.
← →
Verg (2004-02-06 14:56) [52]
> Плохиш (06.02.04 14:47) [50]
Вот смотри, например.
begin
If a=b then
begin
GetMem(чего-нибудь)
try
..........
If c=s then
begin
Goto lala
end;
..................
...................
finally
FreeMem(Того же);
end;
..........
end;
lala:;
Вот. Эта конструкция вообще на этапе компиляции не проканает.
А с repeat-until true И break вместо goto будет все "пучком". Красиво и надежно.
← →
Skier (2004-02-06 15:00) [53]
> Скажите пожалуйста никак нельзя обойтись без метки lala;
Без меток всегда можно обойтись.
← →
Sandman25 (2004-02-06 15:37) [54]Навеяло [53].
От каких еще штук можно избавиться?
От for помогает while.
От while помогает repeat until с предварительным if.
От repeat помогает while с предварительным копированием тела цикла.
От if без else помогает
while () do
begin
...
break;
end;
От if c else можно избавиться с помощью меток.
while () do
begin
// then
goto A;
end;
// else
A:
Только от присвоения не могу избавиться. Хотя, наверное, можно применить какой-нибудь FillChar или Move :)
Страницы: 1 2 вся ветка
Форум: "Основная";
Текущий архив: 2004.02.17;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.011 c