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

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

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;
      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(c), 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 - 18.06.2011 15:46
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Unconnected
сообщение 18.06.2011 20:16
Сообщение #2


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

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


То, что у тебя, и что по ссылке - немного различается, по-моему..


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 

- Текстовая версия 29.07.2025 4:53
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"