Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2010, 12:38   #11
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Цитата:
Была операция вида массив[длина_массива-a], причем а могло принимать значение нуль.
Немножко не понял. Уточни, в какой это процедуре.

Цитата:
Sibedir, возможно в Вашем случае была аналогичная причина.
Сомневаюсь. У меня там какое-то мракобесие было. Ошибка возникала при считывании данных из файла и именно на определенном файле. Операция в цикле проходила 8287824784 раз, а потом Error. Я даже установил на каком именно "байте" она спотыкается, но чем он такой примечательный так и не понял. С другими файлами все нормально было в 1000 случаях из 1000.
Sibedir вне форума Ответить с цитированием
Старый 30.11.2010, 14:41   #12
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

AddLeft, она там использовалась не напрямую. Ошибка возникает не всегда.

Вот новый код:
Код:
// Выделение байт с левой части байтовой последовательности
// ByteSpace - байтовая последовательность
// Quan - количество выделяемых байт слева
// B - байт, каким будет инициализирована добавляемая область
// Процедура защищена
procedure AddLeft(var ByteSpace: TByteSpace; Quan: Integer; B: Byte);
var
    i, a: Integer;
begin

    // Проверка входящего параметра
    If Quan<1 then Exit;

    // Добавим новую область к уже имеющейся
    i:= Length(ByteSpace.Left)+Quan;
    SetLength(ByteSpace.Left, i);

    // Инициализация новой области
    a:=Length(ByteSpace.Left)-1;
    for i:=0 to Quan-1 do
    begin

        // Побайтно
        ByteSpace.Left[a-i]:=B;
    end;
end;
////////////////////////////////////////////////////////////////////////////////
Вот новое умножение:
Код:
// Умножение
procedure MulBigNum (Op1, Op2: TBigNum; var Res: TBigNum);
var
    Dop: TBigNum;
    i, Count: Integer;
    buf: Byte;
begin

    // Инициализация
    InitBigNum(Res);

    // Выровняем множители
    AlignBigNum(Op1, Op2);

    // Выровняем результат
    AlignBigNum(Op1, Res);

    // Число первого числа
    Count:=GetCountC(Op1);

    // Умножаем столбиком
    Dec(Count);
    for i := 0 to Count do
    begin

          // Получим разряд множителя
          buf:=ReadByte(Op2.Category, i);

          // Произведем умножение
          MulR(Op1, Dop, buf);

          // Осуществим сдвиг зяпятой
          Dop.Divider:=Dop.Divider+(Dop.Divider-i);

          // Копим результат
          AddNonC(Res, Dop, Res);
    end;
end;
////////////////////////////////////////////////////////////////////////////////
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процедура с параметром динамическим массивом. VintProg Общие вопросы Delphi 12 11.06.2010 13:12
задача с параметром for bonys91 Помощь студентам 4 01.04.2009 11:35
Цикл с параметром DaniyMilner Общие вопросы C/C++ 5 11.03.2009 20:09
поиск с параметром? Alexi БД в Delphi 3 09.03.2009 17:10
Запрос с параметром odi_noki Microsoft Office Access 2 17.12.2008 20:07