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

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Длинная арифметика. Деление длинного числа на короткое., Помогите найти ошибку в программе.
сообщение
Сообщение #1


Новичок
*

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

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


Нашел программу, которая должна считать частное от деления длинного числа на короткое, но она не работает, помогите найти ошибку пожалуйста.
В общем вот текст программы:
const osn = 10000;
max = 2502;
type
Tlong = array[0..max] of longint;

procedure swap( var a,b;
size: integer);
var
p: pointer;
begin
getmem(p,size);
move(a, p^, size);
move(b,a, size);
move(p^, b, size);
freemem(p, size);
end;


procedure delenie( a:Tlong;
b:longint;
var c:Tlong);
var
p:longint;
i, j, ost: integer;
begin
fillchar(c, sizeof©, 0);
p:=0;
i:=1;
j:=a[0];
while i<j do
begin
swap (a[i], a[j], sizeof(a[i]));
inc(i);
dec(j);
end;
ost:=0;
for i:=1 to a[0] do
begin
c[i]:=(longint(ost)*osn + a[i]) div b;
ost:=(longint(ost)*osn + a[i]) mod b;
end;
if c[1]=0 then
begin
c[0]:=a[0]-1;
for i:=1 to c[0] do c[i]:=c[i+1];
c[c[0]+1]:=0;
end;
if c[1]<>0 then c[0]:=a[0];
i:=1;
j:=c[0];
while i<j do
begin
swap(c[i],c[j], sizeof(a[i]));
inc(i);
dec(j);
end;
end;

.

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


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

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


Турбо-Паскаль не позволяет возвращать значения типа "массив". Поменяй функцию на процедуру:

procedure delenie(a: Tlong; b:integer; var result : TLong);
var i, ost: integer;
const base = 10;
begin
ost:=0;
fillchar(result, sizeof(result), 0);
for i:= a[0] downto 1 do
begin
result[i]:=(a[i] +ost*base);
ost:= result[i] mod b;
result[i]:= result[i] div b;
end;
result[0]:=a[0];
while result[result[0]] = 0 do dec (result[0]);
end;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Gordey   Длинная арифметика. Деление длинного числа на короткое.   18.06.2011 19:19
Unconnected   А где описание TLong?   18.06.2011 19:41
Gordey   Да, забыл. Поправил. Также добавил процедуру swap.   18.06.2011 19:44
Unconnected   Загляни сюда, процедура, похожая на твою, там. Инт…   18.06.2011 20:10
Gordey   Так, можно сказать, оттуда и брал)) :cool: :good:…   18.06.2011 20:20
Gordey   Можно задать и другой вопрос. Помогите написать др…   18.06.2011 22:47
Unconnected   То, что у тебя, и что по ссылке - немного различае…   19.06.2011 0:16
Gordey   Да, поскольку там нету деления длинного на коротко…   19.06.2011 0:20
Unconnected   Для короткого точно так же сработает) (надо только…   19.06.2011 0:23
Gordey   Я понимаю, что там точно также работает, только пр…   19.06.2011 0:28
Unconnected   Первая ссылка гугла: const base = 10; Function di…   19.06.2011 0:48
Gordey   У меня выдает ошибку, что неправильный тип результ…   19.06.2011 0:59
Unconnected   const base = 10; type tlong=array[0..5] of longint…   19.06.2011 1:41
Gordey   При попытке посчитать выдает "error34:Invalid…   19.06.2011 2:33
Unconnected   Что за паскаль? Приложи весь код.   19.06.2011 2:37
Gordey   Turbo Pascal 7.0. {$A+,B-,D+,E+,F-,G-,I+,L+…   19.06.2011 13:46
IUnknown   Турбо-Паскаль не позволяет возвращать значения тип…   19.06.2011 13:57
Gordey   При подстановке 666666666666 и 6 дает ответ 111111…   19.06.2011 14:15
IUnknown   Так а кто сказал, что у тебя base = 10? У тебя дан…   19.06.2011 15:35
Gordey   Я все исправил, Владимир, я исправил base на 10000…   19.06.2011 16:48


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

 





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