ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

pascal : Числа подсчитываются неверно ?
  #1  
Старый 31.07.2008, 22:23
hoty
Познающий
Регистрация: 20.05.2008
Сообщений: 81
Провел на форуме:
224517

Репутация: 32
Question pascal : Числа подсчитываются неверно ?

Это сортировка Методом Хоара :
На входе :
a: массив чисел - integer;
l,r - границы сортируемой части массива (l=1;r=n);
c,m - количество сравнений, пересылок элементов.

Цитата:
procedure sort (var a: array of integer; l,r: integer; var c,m: integer);
var i,j, x,t: integer;
begin

x:=a[L]; {novii element X}
i:=L; j:=R; {prisvaivautsya L,R rabochie chasti massiva }

while i<=j do
begin
while a[i]<x do begin i:=i+1; {C}c:=c+1; end;
while a[j]>x do begin j:=j-1; {C}c:=c+1; end;
{C}c:=c+2;
if i<=j then begin
t:=a[i]; a[i]:=a[j]; a[j]:=t; {M}m:=m+3;
i:=i+1; j:=j-1;
end;
end;

if L<j then sort(a,L,j,c,m); {sortirovka chasti L,J}
if i<R then sort(a,i,R,c,m); {sortirovka chasti i,R}

end;

Вопрос : почему если n (кол-во элементов массива)
< 200 то результат c нормально отображается.
> 200 (300 и более, то при подсчете числа c результат уходит в -, т.е, например, -5123 ?

Как исправить это ? Необходимо, чтобы считалось c правильно при 400 и более.


p.s: аналогичное происходит с возведение x в степень 2 :
если написать x*xто если пишем больше 100 считает в минус.
если же написать так x=exp(2*ln(x)), то считает, практически любые числа правильно.

Последний раз редактировалось hoty; 31.07.2008 в 22:29..
 
Ответить с цитированием

  #2  
Старый 31.07.2008, 23:02
desTiny
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщений: 1,152
Провел на форуме:
3008839

Репутация: 1502


По умолчанию

переполнение. смени тип:поставь extended или longint вместо integer. или реализуй собственное прибавление единицы типа длинной арифметики или просто двух longint'ов
__________________
Bedankt euch dafür bei euch selbst.

H_2(S^3/((z1, z2)~(exp(2pi*i/p)z1, exp(2pi*q*i/p)z2)))=Z/pZ
 
Ответить с цитированием

  #3  
Старый 31.07.2008, 23:41
hoty
Познающий
Регистрация: 20.05.2008
Сообщений: 81
Провел на форуме:
224517

Репутация: 32
По умолчанию

to desTiny :
применял longint, при n>200 c считало неверно.
применил extended работает, при n=400 и более :-)
пасиб :-)
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ