Длинная арифметика. Деление длинного числа на короткое., Помогите найти ошибку в программе. |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Длинная арифметика. Деление длинного числа на короткое., Помогите найти ошибку в программе. |
Gordey |
18.06.2011 15:19
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 11 Пол: Мужской Репутация: 0 |
Нашел программу, которая должна считать частное от деления длинного числа на короткое, но она не работает, помогите найти ошибку пожалуйста.
В общем вот текст программы: const osn = 10000;. Сообщение отредактировано: Gordey - 18.06.2011 15:46 |
Unconnected |
18.06.2011 15:41
Сообщение
#2
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
А где описание TLong?
-------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Gordey |
18.06.2011 15:44
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 11 Пол: Мужской Репутация: 0 |
Да, забыл. Поправил. Также добавил процедуру swap.
Сообщение отредактировано: Gordey - 18.06.2011 15:45 |
Unconnected |
18.06.2011 16:10
Сообщение
#4
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Загляни сюда, процедура, похожая на твою, там.
Интересный swap, экономичный) Сообщение отредактировано: Unconnected - 18.06.2011 16:10 -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Gordey |
18.06.2011 16:20
Сообщение
#5
|
Новичок Группа: Пользователи Сообщений: 11 Пол: Мужской Репутация: 0 |
Так, можно сказать, оттуда и брал))
Не понимаю в чем ошибка, при делении вообще ничего не выдает, глючит. |
Gordey |
18.06.2011 18:47
Сообщение
#6
|
Новичок Группа: Пользователи Сообщений: 11 Пол: Мужской Репутация: 0 |
Можно задать и другой вопрос. Помогите написать другую программу, также вычисляющую частное от деления.
|
Unconnected |
18.06.2011 20:16
Сообщение
#7
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
То, что у тебя, и что по ссылке - немного различается, по-моему..
-------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Gordey |
18.06.2011 20:20
Сообщение
#8
|
Новичок Группа: Пользователи Сообщений: 11 Пол: Мужской Репутация: 0 |
Да, поскольку там нету деления длинного на короткое, а только длинное на длинное, мне это не совсем подходит(
Сообщение отредактировано: Gordey - 18.06.2011 20:20 |
Unconnected |
18.06.2011 20:23
Сообщение
#9
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Для короткого точно так же сработает) (надо только подать короткое в формате длинного, т.е. в массиве)
-------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Gordey |
18.06.2011 20:28
Сообщение
#10
|
Новичок Группа: Пользователи Сообщений: 11 Пол: Мужской Репутация: 0 |
Я понимаю, что там точно также работает, только процедура деления по ссылке использует процедуру вычитания, которая неправильно там написана, как следствие - неправильная процедура деления.
Насчет моей программы. Может все дело в процедуре swap? Николай, не поможете ли нормально ее написать, чтобы она меняла местами элементы массива? Добавлено через мин. Хотя, если честно, я не знаю... Программа вроде правильно работает, если число делится на короткое без остатка...( Добавлено через мин. Как и следовало ожидать неправильна процедура swap.. Сообщение отредактировано: Gordey - 18.06.2011 20:49 |
Unconnected |
18.06.2011 20:48
Сообщение
#11
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Первая ссылка гугла:
const base = 10; , как раз длинное на короткое, TLong тот же самый (в нулевом элементе хранится длина числа). И ещё массив заполняется числом с конца, то есть в первом элементе единицы, во втором - десятки.. -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Gordey |
18.06.2011 20:59
Сообщение
#12
|
Новичок Группа: Пользователи Сообщений: 11 Пол: Мужской Репутация: 0 |
У меня выдает ошибку, что неправильный тип результата(
|
Unconnected |
18.06.2011 21:41
Сообщение
#13
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
const base = 10; Отработало правильно.. -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Gordey |
18.06.2011 22:33
Сообщение
#14
|
Новичок Группа: Пользователи Сообщений: 11 Пол: Мужской Репутация: 0 |
При попытке посчитать выдает "error34:Invalid function result type"
Да, кстати, у меня прописаны процедуры, считывающая, выписывающая длинные числа. |
Unconnected |
18.06.2011 22:37
Сообщение
#15
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Что за паскаль? Приложи весь код.
-------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Gordey |
19.06.2011 9:46
Сообщение
#16
|
Новичок Группа: Пользователи Сообщений: 11 Пол: Мужской Репутация: 0 |
Turbo Pascal 7.0.
{$A+,B-,D+,E+,F-,G-,I+,L+,N+,O-,P-,Q-,R-,S+,T-,V+,X+} На основную программу не смотри, она мне не нужна. Сообщение отредактировано: Gordey - 19.06.2011 9:48 |
IUnknown |
19.06.2011 9:57
Сообщение
#17
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Турбо-Паскаль не позволяет возвращать значения типа "массив". Поменяй функцию на процедуру:
procedure delenie(a: Tlong; b:integer; var result : TLong); |
Gordey |
19.06.2011 10:15
Сообщение
#18
|
Новичок Группа: Пользователи Сообщений: 11 Пол: Мужской Репутация: 0 |
При подстановке 666666666666 и 6 дает ответ 111111111111, но при подстановке 123456789123456789 и 10 выдает 10347079502350683, что явно не правильно, мне же надо , чтобы процедура умела делить 10^10000 на 239, или типа того. Спасибо всем, кто помогает)
Сообщение отредактировано: Gordey - 19.06.2011 10:16 |
IUnknown |
19.06.2011 11:35
Сообщение
#19
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Так а кто сказал, что у тебя base = 10? У тебя данные в типе TLong хранятся в каком основании? 10000? Вот и работай с ним:
{ A - делимое, B - делитель, Result - частное, результат функции - остаток от деления } Ты чего, в столбик никогда не делил? |
Gordey |
19.06.2011 12:48
Сообщение
#20
|
Новичок Группа: Пользователи Сообщений: 11 Пол: Мужской Репутация: 0 |
Я все исправил, Владимир, я исправил base на 10000 и ost на longint. Все Работает! Всем спасбо!)
|
Текстовая версия | 1.06.2024 8:20 |