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

Вниз

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

 
1991   (2008-12-16 14:57) [0]

Помогите с оптимизацией: Можно ли сократить не выполняя несколько раз проверок?

if ((mInId <> -1) and (mId = mInId))
        or ((cInId <> -1) and (cId = cInId))
     then
       cItem.Expand;
     if (mInId <> -1) and (mId = mInId) then
       fFocusItem := mItem;
     if (cInId <> -1) and (cId = cInId) and not Assigned(fFocusItem)
     then
       fFocusItem := cItem;


 
Jeer ©   (2008-12-16 15:00) [1]

А что беспокоит ?


 
1991   (2008-12-16 15:03) [2]

Может что лишнее написал. Например по 2 раза проверяются

if (mInId <> -1) and (mId = mInId)
и
if (cInId <> -1) and (cId = cInId)


 
Jeer ©   (2008-12-16 15:09) [3]

Так устроит ? :))

R1 := ((mInId <> -1) and (mId = mInId));
R2 := ((cInId <> -1) and (cId = cInId));

if (R1 or R2) then
      cItem.Expand;
if R1 then
   fFocusItem := mItem;
if R2 and not Assigned(fFocusItem)  then
   fFocusItem := cItem;

Если не учитывать событийность, то можно еще сократить, но..

А вообще-то, компилятору пофиг такие упражнения с исходниками.


 
1991   (2008-12-16 15:15) [4]


> Так устроит ? :))

Спасибо. Так выглядит действительно лучше..


 
Ega23 ©   (2008-12-16 15:38) [5]

Project -> Options -> Compiler -> Code Generation -> Optimization галку поставь.
:о)


 
Правильный$Вася   (2008-12-16 15:51) [6]


> Optimization галку поставь.

нельзя ж во всем на железку полагаться
иногда и самому думать надо
а то как батонокидательство будет


 
Ega23 ©   (2008-12-16 15:58) [7]


> нельзя ж во всем на железку полагаться
> иногда и самому думать надо
> а то как батонокидательство будет


Экономить не там надо (хотя и в такой ситуации лучше экономить).
А, например, в такой:

function ReverseString(const s : string) : string;
var
 i : Integerl
begin
 Result := "";
 for i:= Length(s) downto 1 do Result := Result + s[i];
end;


 
clickmaker ©   (2008-12-16 16:48) [8]

> А, например, в такой:
>
> function ReverseString

я бы через перестановку символов сделал.
Без использования дополнительной переменной, как в лабах задают -)


 
Ega23 ©   (2008-12-16 17:00) [9]


> я бы через перестановку символов сделал.
> Без использования дополнительной переменной, как в лабах
> задают -)


Я вот этого как-то понять не могу. Совсем без дополнительной переменной? Или таки один Char можно завести?


 
clickmaker ©   (2008-12-16 17:14) [10]

если исходную строку менять нельзя, то без переменной не получится. Ибо Result уже будет )
если var, то можно
либо так
Len := Length(s);
SetLength(Result, Len);
for i:=1 to Len do
 Result[i] := s[Len-i+1];


 
Правильный$Вася   (2008-12-16 17:42) [11]


> clickmaker ©   (16.12.08 17:14) [10]

у тебя вон и Len, и i
целая орда переменных :))



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

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

Наверх




Память: 0.49 MB
Время: 0.015 c
15-1228848341
Керк
2008-12-09 21:45
2009.02.01
SSL и Apache


15-1228647599
Jimmy
2008-12-07 13:59
2009.02.01
Информация о видео и аудио на DVD


2-1229713016
Nostalgia
2008-12-19 21:56
2009.02.01
однонаправленные списки


2-1229465866
Lelik
2008-12-17 01:17
2009.02.01
Поиск записи в запросе


15-1228746981
Putnik
2008-12-08 17:36
2009.02.01
Интернет-кафе