![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Приветствую всех.
Перейду сразу к делу. Код:
// Получаем префикс времени
function GetTimePrefix(N: Integer): String;
const
pref: array [0..6] of string = (' г. ', ' м. ', ' н. ', ' д. ', ' ч. ', ' мин. ', ' сек. ');
del: array [0..6] of Integer = (31536000, 2592000, 604800, 86400, 3600, 60, 1);
var
a: array [0..6] of Integer;
i: integer;
begin
Result := '';
a[6] := N;
for i := 0 to 5 do
begin
a[i] := a[6] div del[i];
a[6] := a[6] mod del[i];
if a[i] <> 0 then
Result := Result + IntToStr(a[i]) + pref[i]
end
end;После строки Код:
for i := 0 to 5 do Код:
for i := 0 to N do В чем причина?! Более в коде под "i" никакой другой переменной нет. Поясните, пожалуйста |
|
#2
|
||||
|
||||
|
А зачем тебе это?
Компилятор оптимизирующий, он понимает что убывающий цикл преобразуется в более эфективный машинный код чем возрастающий. Результат-то у тебя верный, чего тебе еще нужно? |
|
#3
|
|||
|
|||
|
Цитата:
Проблема как раз в том, что мне необходима моя реализация алгоритма, так как от направления зависит результат вычислений. Не вдаваясь в подробности алгоритма, вопрос адресован конкретно по этому на мой взгляд необъяснимому и непонятному поведению компилятора. Насчет преобразования хотелось бы поподробней, ибо он такое не всегда совершает. К примеру, в конструкции: Код:
for i := 0 to FileList.Count - 1 do
begin
FileNameLabel.Caption := 'Файл: ' + FileList.Strings[i];
DetalProgressBar.Position := 0;
DetalProgressBar.Hint := ExtractFileName(FileList.Strings[i]);
ByteS := 0;
TimeBuf := Now();
Windows.CopyFileEx(
PChar(UpdatePath+FileList.Strings[i]),
PChar(AppPath+FileList.Strings[i]),
@ProgressRoutine,
nil,
nil,
0
);
if IsCanceled then Break;
end; |
|
#4
|
||||
|
||||
|
Если я написал что результат верный - значит я проверил. От направления, кста, результат вычислений не зависит.
Отключи оптимизацию - будет по порядку. Но это не верный путь. |
|
#5
|
|||
|
|||
|
Цитата:
Спорить не буду. Отключил - не помогло |
|
#6
|
|||
|
|||
|
Используй указатели.
Код:
PSomeItem = ^TSomeItem; TSomeItem = class Data : TSomeData; Next : PSomeItem; end; Итерация Код:
var Elem : PSomeItem; begin Elem := FirstSomeItem; while Elem <> nil do begin // blah blah Elem := Elem.Next; end; |
|
#7
|
||||
|
||||
|
Эх, откуда ж вы такие беретесь-то, неверующие.
РАЗ: Выдержка из хелпа: Цитата:
Код скопипастил из вашего поста, ничего не менял только добавил вызов. ДВА: Проход со включенной оптимизацией - ![]() ТРИ: Проход с отключенной оптимизацией - ![]() Если у вас не изменилось - обновите драйвер hands.sys |