Деление двух длинных чисел, как реализовать с помощью объектов в Delphi? |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
Деление двух длинных чисел, как реализовать с помощью объектов в Delphi? |
serogan |
Сообщение
#1
|
Группа: Пользователи Сообщений: 1 Пол: Женский Репутация: 0 |
В FAQ'е (длинная арифметика) нашла функции для деления двух длинных чисел. Можете объяснить, как реализовать это в Delphi, желательно как объекты? Заранее спасибо.
|
volvo |
Сообщение
#2
|
Гость |
Здесь: Длинная арифметика что, НЕ объекты?
Вот тут было показано, как заставить этот модуль работать в Дельфи: Hugeobj (читаем до конца) + в Drkb тоже кое-что было по-моему, если хочешь - скачай, посмотри.. |
Гость |
Сообщение
#3
|
Гость |
Но в Hugeobj только умножение , деления нет (оно есть выше, но вроде не через объекты). А как можно переделать ?
|
Айра |
Сообщение
#4
|
Профи Группа: Пользователи Сообщений: 731 Пол: Женский Репутация: 25 |
Мне тоже нужно это деление. Я нашла в DRKB модуль, начала компилировать, но в тех скобках, где есть HugeIntCarry возникает ошибка "Left side cannot be assigned to". Например:
procedure HugeInt_Inc(var a: HugeInt); Почему и как можно исправить? Сообщение отредактировано: Айра - |
volvo |
Сообщение
#5
|
Гость |
Цитата Почему и как можно исправить? Давай по-порядку:1) "почему" - потому, что HugeIntCarry описывается, как типизированная константа (как видно, для совместимости с ранними версиями Паскаля, ведь в классическом Паскале нельзя описать переменную, и сразу же ей присвоить начальное значение, это возможно только с типизированной константой), а в Дельфи по умолчанию, константа - она и есть константа, в смысле, постоянная... 2) а вот теперь - "как исправить"... Очень просто, включить разрешение менять типизированные константы во время работы программы... Или в настройках проекта: "Project -> Options -> вкладка Compiler -> поставить галку на Assignable Typed Constants", или (что предпочтительнее - ибо не надо лазить по настройкам) первой строкой модуля: {$J+}... И будет тебе счастье |
Айра |
Сообщение
#6
|
Профи Группа: Пользователи Сообщений: 731 Пол: Женский Репутация: 25 |
Спасибо, volvo! Все откомпилировалось.
|
volvo |
Сообщение
#7
|
Гость |
Цитата(Гость @ 2.02.2007 22:42) деления нет (оно есть выше, но вроде не через объекты). А как можно переделать ? Вот так попробуй: DLINNA.PAS ( 6.76 килобайт ) Кол-во скачиваний: 626 Файл D.IN содержит: Цитата 2785600000000 354 Тестовая программа: program Project1; |
Айра |
Сообщение
#8
|
Профи Группа: Пользователи Сообщений: 731 Пол: Женский Репутация: 25 |
volvo, мне кажется, вы уже поняли, кто был гостем
Не смейтесь, но я не знаю где создать файл с расширение in... Я попробовала добавить код из DRKB, но у меня не получилось его использовать , а HugeObj добавила нормально. В общем, я опять прошу о помощи... p.s. не... посмеяться надо мной все-так нужно))) |
volvo |
Сообщение
#9
|
Гость |
Цитата мне кажется, вы уже поняли, кто был гостем Естественно, у меня IP адреса перед глазами Цитата я не знаю где создать файл с расширение in... В папке с проектом... В принципе, это важно только для EXE-файла, так что будем говорить так: файл D.IN должен лежать там же, где лежит EXE-файл...Прикрепить тебе проект полностью? (я не думаю, что теперь будут проблемы, это всего-навсего консольное приложение... ) |
Айра |
Сообщение
#10
|
Профи Группа: Пользователи Сообщений: 731 Пол: Женский Репутация: 25 |
Цитата файл D.IN должен лежать там же, где лежит EXE-файл... Это я поняла. Но расширение in я встретила впервые, и не знаю как сделать такой файл... позор)))... А особых изменений в использовании dlinna по сравнению с HugeObj ведь нет, все также... p.s. не по теме, а как вы делаете такие вещи типа "добавлено через ... минут" Сообщение отредактировано: Айра - |
volvo |
Сообщение
#11
|
Гость |
Цитата Но расширение in я встретила впервые, и не знаю как сделать такой файл... Я создавао обычный текстовый файл, и потом переименовывал (у меня расширения ни для каких типов файлов не скрываются, так что это совсем просто)... А в самом крайнем случае - создай любой TXT файл, только имя его укажи при Assign, какая разница, как он называться будет? Цитата а как вы делаете такие вещи типа "добавлено через ... минут" Теперь это делается автоматически, если ты добавляешь еще одно сообщение к своему же (именно добавляешь, т.е. отсылаешь еще один пост, а не редактируешь) в течении 20 минут (если Altair поменял, по умолчанию стояло 10 минут) |
Айра |
Сообщение
#12
|
Профи Группа: Пользователи Сообщений: 731 Пол: Женский Репутация: 25 |
Цитата создай любой TXT файл А я так делала. При работе программы был просто черный экран с мигающим курсором, ничего не выводилось ни вводилось((( Добавлено через 2 мин. А я так делала. При работе программы был просто черный экран с мигающим курсором, ничего не выводилось ни вводилось((( Проверка Нов целом я поняла как оно должно работать. Спасибо. А можно вы мне как-нибудь объясните сам техт модуля. Я не все в нем понимаю, а интересно |
volvo |
Сообщение
#13
|
Гость |
1) Как называются у тебя входной/выходной файл?
2) Вот мой проект, попробуй - что выдаст в файле d.txt: test.rar ( 3.15 килобайт ) Кол-во скачиваний: 456 |
Айра |
Сообщение
#14
|
Профи Группа: Пользователи Сообщений: 731 Пол: Женский Репутация: 25 |
Еще раз спасибо! До свидания. Утро уже как ни как. p.s. а цитаты все равно потом убирала, сразу не догадалась))) Сообщение отредактировано: Айра - |
Айра |
Сообщение
#15
|
Профи Группа: Пользователи Сообщений: 731 Пол: Женский Репутация: 25 |
Входной я назвала d1.text, а выходной - d.text.
А теперь еще посмейся. Я тогда не догадалась, что нужно открыть и посмотреть свой выходной файл, думала результат на экране будет))) В общем я все проверила. Работает. Вот что выдает: Цитата 2785600000000 354 results: 7868926553 //целая часть 238 //остаток Потом я во входном файле делала два больших числа. И получила вот что: Цитата 48600000000000000000000 200000000000 results: 243000005000 // по-моему программа ошиблась, или просто для двух больший чисел есть своя погрешноть... 4 |
volvo |
Сообщение
#16
|
Гость |
Нет... Просто я что-то не так портировал. Исходная программа (без объектов) считает как положено...
Сейчас проверю... |
volvo |
Сообщение
#17
|
Гость |
Да, так и есть... Модуль, строка №242 -
ost:=c; заменить на ost.X^:=c.X^; (с объектами первая форма не проходит...) Дельфи запускать лень, но в FPC (в режиме совместимости с Дельфи) работает как положено |
Айра |
Сообщение
#18
|
Профи Группа: Пользователи Сообщений: 731 Пол: Женский Репутация: 25 |
Спасибо! Я исправила.
Теперь у меня такой вопрос. Мои длинные числа (это факториалы вычисленные с помощью HugeObj) имеют тип TLargeInt. Числа в dlinna имеют тип TObj. Компил-р пишет, что типы не совместимы. Как можно это исправить? Сообщение отредактировано: Айра - |
volvo |
Сообщение
#19
|
Гость |
Убрать использование TLargeInt и пользоваться только TObj, или наоборот, убрать TObj, и пользоваться только TLargeInt... Эти 2 типа несовместимы и не будут... Пользуйся только одним из двух модулей...
Показать, как вычисляется факториал с использованием TObj? |
Айра |
Сообщение
#20
|
Профи Группа: Пользователи Сообщений: 731 Пол: Женский Репутация: 25 |
Буду пользоваться dlinna.
Цитата Показать, как вычисляется факториал с использованием TObj? Было бы неплохо. Я пыталась переделать функцию из HugeObj, но думаю одной сменой типа не обойтись И еще... В HugeObj для того, чтобы можно было выводить результат в memo (ввиде текста) Алена дала мне функцию Function HugeToStr: String. В dlinna наверно тоже что-то такое нужно добавить? Сообщение отредактировано: Айра - |
Текстовая версия | 8.09.2024 3:54 |