Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Алгоритмы _ Реализация числовых структур данных

Автор: Calling 14.02.2008 2:32

Здравствуйте! Задали нам лабу, которую я никак не могу понять как делать. Задание такое: Найти остаток от деления одного длинного целого на другое. При этом нельзя использовать базовые типы (арифметика многократной точности) и программную реализацию рациональных чисел.
Я даже понятия не имею с чего начинать. Похожее задание делал одногруппник (только там с умножением 2х длинных целых), работал со строками. Помогите пожалуйста с этим заданием если сможете unsure.gif

Автор: andriano 14.02.2008 12:42

Начать следует с того, что более конкретно сформулировать, чем можно пользоваться и чем - нельзя.
Создать программу, не использующую ни одной переменной (а как еще можно воспринимать запрет на ВСЕ базовые типы?), достаточно проблематично. Без базового числового типа не сделаешь даже цикл.

Автор: Calling 14.02.2008 15:39

Цитата(andriano @ 14.02.2008 8:42) *

Начать следует с того, что более конкретно сформулировать, чем можно пользоваться и чем - нельзя.
Создать программу, не использующую ни одной переменной (а как еще можно воспринимать запрет на ВСЕ базовые типы?), достаточно проблематично. Без базового числового типа не сделаешь даже цикл.

задание звучит так: Лабораторная работа включает задания по программной реализации точных вычислений, которые не могут быть непосредственно выполнены с использованием базовых типов алгоритмического языка (арифметика многократной точности) и программной реализации рациональных чисел. При реализации заданных структур данных можно использовать любые базовые типы алгоритмического язык. И вариант задания, который я писала выше.

Автор: volvo 14.02.2008 15:48

В таком случае тебе надо просто найти в FAQ-е тему Длинная Арифметика, и воспользоваться тем, что там написано. Ни с одним пунктом твоего задания это не будет конфликтовать...

Автор: Calling 14.02.2008 20:23

ок спасибо, поищу

Автор: andriano 15.02.2008 2:29

Цитата(Calling @ 14.02.2008 11:39) *

задание звучит так:
...
Вот теперь вполне вменяемое задание - никаких противоестественных ограничений на использование типов.
Цитата
И вариант задания, который я писала выше.
Увы, первоначально описанный "вариант" имеет очень мало общего с тем, что приведено позже.

Ну а самый разумный совет по данной теме уже был приведен: искать либо здесь, либо поисковыми системами по словосочетанию "длинная арифметика".

Автор: Calling 15.02.2008 16:27

Цитата(andriano @ 14.02.2008 22:29) *

Увы, первоначально описанный "вариант" имеет очень мало общего с тем, что приведено позже.


Я имела ввиду вариант: Найти остаток от деления одного длинного целого на другое.
Почитала FAQ, но не совсем поняла как делать задание. Пожалуйста, не могли бы вы хотя б набросок сделать этой проги. Извините за такую наглость, просто я дуб-дерево unsure.gif

Автор: andriano 15.02.2008 23:56

Деревья программы не пишут.
Не нужно им это.
Если тебе нужно, значит, ты не дерево, и надо затратить хоть немного собственных усилий для того, чтобы что-то получилось.
Основная идея достаточно проста и полностью совпадает с тем, как мы проводим вычисления с помощью карандаша и бумаги.
Числа мы представляем в виде набора цифр. Для любой пары цифр нам известны таблица умножения и таблица сложения. Пользуясь этими таблицами, а также известным алгоритмом (например в столбик), мы можем проводить вычисления над многозначными числами. Точно так же происходят вычисления и в длинной арифметике - число представляется массивом, а каждый элемент массива - своеобразная цифра. Если в качестве длинных чисел использовать строки, то один знак - десятичная цифра. Если пользоваться примером из FAQ, каждое число массива - это 10000-чная цифра, т.е. цифра, значение которой лежит в диапазоне от 0 до 9999.