IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Hugeobj, что с ним сделать?
сообщение
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 731
Пол: Женский

Репутация: -  25  +


Как я и обещала, очередной вопрос...
Мне нужно вычислить факториалы (до 100 хватит), как это сделать уже нашла (спасибо volvo (модуль для работы с длинной арифметикой)). Но я не знаю куда деть hugeobj.pas? без нее ведь не работает...

Объясните пожалуйста! rolleyes.gif

p.s. sorry, но таже проблема со скачанной библиотекой Crt... wink.gif

p.s.2 в Delphi ведь можно все это реализовать...

Сообщение отредактировано: Айра -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Насчет HugeInt - его тоже можно скомпилировать в Дельфи (просто забрось в папку с проектом, и подключи в Uses), но для этого его придется немного поправить:
  1. Procedure Add(Const B: TLargeInt);
    и все подобные, где также используется спецификатор Const - его надо удалить;
  2. В одной из процедур могут быть проблемы с переменной цикла J - оптимизатор может с ней натворить проблем, после цикла переменная может хранить все, что угодно - а этого допустить нельзя, поэтому переделываем цикл For -> While:

    { A := A * B }
    Procedure TLargeInt.Mul(B: TLargeInt);
    Var
    C: TLargeInt;
    i, j: Index; T: Inter;
    Begin
    If GetLen - 1 > maxLen - B.GetLen Then {Overflow('Mul');}
    C.Init(0); C.SetLen(GetLen + B.GetLen - 1);
    For i := 1 To GetLen Do
    Begin
    T := 0;
    j := 1;
    // For j := 1 To B.GetLen Do
    While j <= B.GetLen Do // <--- Вот тут
    Begin
    T := C.Get(i + j - 1) + Inter(Get(i)) * B.Get(j) + T;
    C.Put(i + j - 1, T mod Base); T := T div Base;

    Inc(j); // <--- Не забываем увеличить переменную
    End;

    If T > 0 Then
    Begin
    If i + j - 1 = maxLen Then ErrorMsg(vliOverflow, 'Mul');
    C.Put(i + j, T);
    If i + j > C.GetLen Then C.SetLen(i + j)
    End
    End;

    { In case A=0 and/or B=0 }
    While (C.GetLen > 1) And (C.Get(C.GetLen) = 0) Do C.DecLen;
    Self := C
    End;

Все остальное в принципе должно работать.

Насчет CRT - смотри в DRKB: "Системные функции и WinAPI" -> "Windows" -> "Консольные приложения" -> "CRT для консольного приложения"

Сообщение отредактировано: Алена -
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 26.04.2024 6:14
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name