Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Оптимизация


1991 ©   (2008-12-16 14:57:00) 

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

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;


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


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

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


clickmaker   (2008-12-16 17:14:00) [2]

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


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


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


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


clickmaker   (2008-12-16 16:48:00) [4]

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

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


Ega23   (2008-12-16 15:58:00) [5]


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


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

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


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


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

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


Ega23   (2008-12-16 15:38:00) [7]

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


1991   (2008-12-16 15:15:00) [8]


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

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


Jeer   (2008-12-16 15:09:00) [9]

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

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:03:00) [10]

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

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


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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо