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

> ВНИМАНИЕ!

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

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

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Деление двух длинных чисел, как реализовать с помощью объектов в Delphi?
сообщение
Сообщение #1





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

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


В FAQ'е (длинная арифметика) нашла функции для деления двух длинных чисел. Можете объяснить, как реализовать это в Delphi, желательно как объекты? Заранее спасибо. smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Здесь: Длинная арифметика что, НЕ объекты?

Вот тут было показано, как заставить этот модуль работать в Дельфи: Hugeobj (читаем до конца)

+ в Drkb тоже кое-что было по-моему, если хочешь - скачай, посмотри..
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Но в Hugeobj только умножение unsure.gif , деления нет (оно есть выше, но вроде не через объекты). А как можно переделать rolleyes.gif ?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Профи
****

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

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


Мне тоже нужно это деление. Я нашла в DRKB модуль, начала компилировать, но в тех скобках, где есть HugeIntCarry возникает ошибка "Left side cannot be assigned to". Например:
procedure HugeInt_Inc(var a: HugeInt);
{ a := a + 1 }
var

i: Integer;
h: Word;
begin

i := 0;
h := 1;
repeat
h := h + a[i];
a[i] := Lo(h);
h := Hi(h);
Inc(i);
until (i > HugeIntMSB) or (h = 0);
HugeIntCarry := h > 0; // вот тут например
{$IFOPT R+ }
if HugeIntCarry then
RunError(215);
{$ENDIF}
end; { HugeInt_Inc }


Почему и как можно исправить?

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


Гость






Цитата
Почему и как можно исправить?
Давай по-порядку:
1) "почему" - потому, что HugeIntCarry описывается, как типизированная константа (как видно, для совместимости с ранними версиями Паскаля, ведь в классическом Паскале нельзя описать переменную, и сразу же ей присвоить начальное значение, это возможно только с типизированной константой), а в Дельфи по умолчанию, константа - она и есть константа, в смысле, постоянная...

2) а вот теперь - "как исправить"... Очень просто, включить разрешение менять типизированные константы во время работы программы... Или в настройках проекта: "Project -> Options -> вкладка Compiler -> поставить галку на Assignable Typed Constants", или (что предпочтительнее - ибо не надо лазить по настройкам) первой строкой модуля:
{$J+}
// А дальше - без изменений

... И будет тебе счастье rolleyes.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Профи
****

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

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


Спасибо, volvo! Все откомпилировалось.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Цитата(Гость @ 2.02.2007 22:42)
деления нет (оно есть выше, но вроде не через объекты). А как можно переделать rolleyes.gif ?

Вот так попробуй:
Прикрепленный файл  DLINNA.PAS ( 6.76 килобайт ) Кол-во скачиваний: 597


Файл D.IN содержит:
Цитата
2785600000000
354


Тестовая программа:
program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils, Dlinna;

var
a, b, c, d: TObj;
f_out: text;

begin
{ TODO -oUser -cConsole Main : Insert code here }

assign(input,'d.in');reset(input);
assign(f_out, 'd.txt');rewrite(f_out);

a.Init; b.Init; c.Init; d.Init;

a.ReadLong(input);
a.WriteLong(f_out);
b.ReadLong(input);
b.WriteLong(f_out);
c.DivLongTwo(a,b,d);
writeln(f_out, 'results:');
c.WriteLong(f_out);
d.WriteLong(f_out);

close(f_out);
close(Input);

a.Done; b.Done; c.Done; d.Done;
end.

 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Профи
****

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

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


volvo, мне кажется, вы уже поняли, кто был гостем wink.gif wub.gif
Не смейтесь, но я не знаю где создать файл с расширение in...
Я попробовала добавить код из DRKB, но у меня не получилось его использовать wink.gif, а HugeObj добавила нормально.
В общем, я опять прошу о помощи...


p.s. не... посмеяться надо мной все-так нужно)))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Цитата
мне кажется, вы уже поняли, кто был гостем
Естественно, у меня IP адреса перед глазами smile.gif

Цитата
я не знаю где создать файл с расширение in...
В папке с проектом... В принципе, это важно только для EXE-файла, так что будем говорить так: файл D.IN должен лежать там же, где лежит EXE-файл...

Прикрепить тебе проект полностью? (я не думаю, что теперь будут проблемы, это всего-навсего консольное приложение... smile.gif )
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Профи
****

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

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


Цитата
файл D.IN должен лежать там же, где лежит EXE-файл...

Это я поняла. Но расширение in я встретила впервые, и не знаю как сделать такой файл... позор)))...

А особых изменений в использовании dlinna по сравнению с HugeObj ведь нет, все также...

p.s. не по теме, а как вы делаете такие вещи типа "добавлено через ... минут"

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


Гость






Цитата
Но расширение in я встретила впервые, и не знаю как сделать такой файл...
Я создавао обычный текстовый файл, и потом переименовывал (у меня расширения ни для каких типов файлов не скрываются, так что это совсем просто)... А в самом крайнем случае - создай любой TXT файл, только имя его укажи при Assign, какая разница, как он называться будет? smile.gif

Цитата
а как вы делаете такие вещи типа "добавлено через ... минут"
Теперь это делается автоматически, если ты добавляешь еще одно сообщение к своему же (именно добавляешь, т.е. отсылаешь еще один пост, а не редактируешь) в течении 20 минут (если Altair поменял, по умолчанию стояло 10 минут)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Профи
****

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

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


Цитата
создай любой TXT файл

А я так делала. При работе программы был просто черный экран с мигающим курсором, ничего не выводилось ни вводилось(((

Добавлено через 2 мин.
Цитата(Айра @ 3.02.2007 5:01) *

А я так делала. При работе программы был просто черный экран с мигающим курсором, ничего не выводилось ни вводилось(((


Проверка smile.gif Нов целом я поняла как оно должно работать. Спасибо. А можно вы мне как-нибудь объясните сам техт модуля. Я не все в нем понимаю, а интересно rolleyes.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






1) Как называются у тебя входной/выходной файл?
2) Вот мой проект, попробуй - что выдаст в файле d.txt:
Прикрепленный файл  test.rar ( 3.15 килобайт ) Кол-во скачиваний: 431
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Профи
****

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

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



Еще раз спасибо! До свидания. Утро уже как ни как.

p.s. а цитаты все равно потом убирала, сразу не догадалась)))

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


Профи
****

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

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


Входной я назвала d1.text, а выходной - d.text.
А теперь еще посмейся. Я тогда не догадалась, что нужно открыть и посмотреть свой выходной файл, думала результат на экране будет)))

В общем я все проверила. Работает. Вот что выдает:
Цитата
2785600000000
354
results:
7868926553 //целая часть
238 //остаток

Потом я во входном файле делала два больших числа.
И получила вот что:
Цитата
48600000000000000000000
200000000000
results:
243000005000 // по-моему программа ошиблась, или просто для двух больший чисел есть своя погрешноть...
4
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Гость






Нет... Просто я что-то не так портировал. Исходная программа (без объектов) считает как положено...

Сейчас проверю...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Гость






Да, так и есть... Модуль, строка №242 -
         ost:=c;

заменить на
        ost.X^:=c.X^;

(с объектами первая форма не проходит...) smile.gif

Дельфи запускать лень, но в FPC (в режиме совместимости с Дельфи) работает как положено yes2.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Профи
****

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

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


Спасибо! Я исправила.

Теперь у меня такой вопрос. Мои длинные числа (это факториалы вычисленные с помощью HugeObj) имеют тип TLargeInt. Числа в dlinna имеют тип TObj. Компил-р пишет, что типы не совместимы. Как можно это исправить?

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


Гость






Убрать использование TLargeInt и пользоваться только TObj, или наоборот, убрать TObj, и пользоваться только TLargeInt... Эти 2 типа несовместимы и не будут... Пользуйся только одним из двух модулей...

Показать, как вычисляется факториал с использованием TObj?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Профи
****

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

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


Буду пользоваться dlinna.
Цитата
Показать, как вычисляется факториал с использованием TObj?

Было бы неплохо. Я пыталась переделать функцию из HugeObj, но думаю одной сменой типа не обойтись smile.gif

И еще... В HugeObj для того, чтобы можно было выводить результат в memo (ввиде текста) Алена дала мне функцию Function HugeToStr: String. В dlinna наверно тоже что-то такое нужно добавить?

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

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

 





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