Вниз
Скачать: CL | DM;

Оптимизация кода.   Найти похожие ветки 

← →
Владислав ©   (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 вся ветка

Скачать: CL | DM;



Память: 0.54 MB
Время: 0.013 c
1-53595
dub
2004-02-07 01:09
2004.02.17
Как спрятать консолевое приложение?


1-53578
Norfolk
2004-02-07 12:19
2004.02.17
Генератор случайных чисел


14-53765
Goida
2004-01-27 16:55
2004.02.17
Почтовая программа на Delphi


1-53453
JediMaster
2004-02-06 13:00
2004.02.17
Простые числа


1-53638
bespasian
2004-02-06 17:18
2004.02.17
Выделить строку другим цветом в DBGrid.




   Наверх