Текущий архив: 2004.12.05;
Скачать: CL | DM;
ВнизРабота с указателями Найти похожие ветки
← →
Frozzen (2004-11-18 22:22) [0]Подскажите пожайлусто.
function CompareItems(Item1, Item2: Pointer): Integer;
var a, b : TSide;
begin
a := Item1;
b := Item2;
if a.p = b.p then Result := 0 else
if a.p > b.p then Result := 1 else
Как нибуть можно иначе, наподобе (Items1 as TSide).p
Или только так a := Item1; и ...
← →
Defunct © (2004-11-18 22:36) [1]TSide(Item1).P
← →
Frozzen (2004-11-18 22:38) [2]спасибо
← →
Гаврила © (2004-11-18 23:01) [3]Result:=TSide(Item1).P - TSide(Item2).P;
%-)))
← →
GuAV © (2004-11-18 23:03) [4]Гаврила © (18.11.04 23:01) [3]
Result:=TSide(Item1).P - TSide(Item2).P;
Ха, а если P - стока ? или Int64 ? :-)
← →
Defunct © (2004-11-18 23:06) [5]> Ха, а если P - стока ? или Int64 ? :-)
Result := Integer( TSide(Item1).P > TSide(Item2).P );
← →
GuAV © (2004-11-18 23:12) [6]Defunct © (18.11.04 23:06) [5]
Result := Integer( TSide(Item1).P > TSide(Item2).P );
Это Вы по-злому :->
← →
Игорь Шевченко © (2004-11-18 23:12) [7]Вы б хоть код читали...
← →
GuAV © (2004-11-18 23:15) [8]Игорь Шевченко © (18.11.04 23:12) [7]
Вы б хоть код читали...
Вы про телепатию Гаврилы ? Или про что ?
← →
Игорь Шевченко © (2004-11-18 23:27) [9]GuAV © (18.11.04 23:15) [8]
Я про [3] а в особенности про [5]
← →
GuAV © (2004-11-19 00:04) [10]Ну так
if a.p = b.p then Result := 0 else
if a.p > b.p then Result := 1 else
...
догадываемся телепатически
что эта функция должна возвращать положительное значение если TSide(Item1).P > TSide(Item2).P,
нуль если = и отрицательное если <.
(возможно это для сортировки, например LV). Предполагаем что P - Integer это [3]
← →
Defunct © (2004-11-19 01:14) [11]> особенности про [5]
домысливать логику функции я не стал.
то что в [5] покрывает, то что написано в вопросе.
С домыслами GuAV [10]
Result := Integer( TSide(Item1).P > TSide(Item2).P );
Result := Result - Integer( TSide(Item1).P < TSide(Item2).P );
← →
Игорь Шевченко © (2004-11-19 01:28) [12]Defunct © (19.11.04 01:14) [11]
> Result := Integer( TSide(Item1).P > TSide(Item2).P );
> Result := Result - Integer( TSide(Item1).P < TSide(Item2).P
> );
Сравни по ясности с
if TSide(Item1).P > TSide(Item2).P then
Result := 1
else if TSide(Item1).P < TSide(Item2).P then
Result := -1
else
Result := 0;
Как ты думаешь, сколько времени потребуется программисту (вне зависимости от квалификации), чтобы понять, что оба фрагмента кода выполняют одно и то же ?
К тому же второй код выполняется быстрее.
← →
Defunct © (2004-11-19 02:18) [13]> Как ты думаешь, сколько времени потребуется программисту (вне зависимости от квалификации), чтобы понять, что оба фрагмента кода выполняют одно и то же ?
Не знаю, задача не имеет решения ;>
← →
GuAV © (2004-11-19 02:44) [14]Игорь Шевченко © (19.11.04 1:28) [12]
К тому же второй код выполняется быстрее.
И к тому же по F7 понятно что происходит :)
← →
Defunct © (2004-11-19 02:47) [15]> К тому же второй код выполняется быстрее.
> И к тому же по F7 понятно что происходит :)
К тому же если это функция защиты, то ее проще взломать ;)
← →
VMcL © (2004-11-19 07:23) [16]>>GuAV ©
>>Defunct ©
Хакеры доморощенные :-)
← →
Игорь Шевченко © (2004-11-19 11:26) [17]Defunct © (19.11.04 02:18) [13]
Задача имеет одно-единственное решение. Код должен быть ясный и понятный. Иногда в ущерб производительности, но всегда ясный и понятный программисту, вне зависимости от квалификации последнего.
← →
Verg © (2004-11-19 12:21) [18]
if TSide(Item1).P = TSide(Item2).P then
Result := 0
else
Result := ord(TSide(Item1).P > TSide(Item2).P) * 2 - 1;
← →
Sha © (2004-11-19 13:49) [19]> Гаврила © (18.11.04 23:01) [3]
> Result:=TSide(Item1).P - TSide(Item2).P;
Этот код ошибочен для целых чисел
(в нем не учитывается возможность целочисленного переполнения)
Страницы: 1 вся ветка
Текущий архив: 2004.12.05;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.049 c