Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.25;
Скачать: CL | DM;

Вниз

Проблемы с массивом!!!   Найти похожие ветки 

 
Raph ©   (2004-02-11 15:23) [0]

Есть два динамических массива. массив MyBIgDInMassX заполняется правильно , а в массиве MyBIgDInMassY шагов через 70-80-90 начинает муссорится начало ( там появляются числа типа 1*е-380). помогите пожалуйста найти ошибку в коде!

type
TmassFLoat=array[0..99999999] of real;
PTmassFLoat=^TmassFLoat;
var
Form1: TForm1;
MyBIgDInMassY:PTmassFLoat;
MyBIgDInMassX:PTmassFLoat;
procedure TForm1.Button1Click(Sender: TObject);
var i,j,mm:integer;
Xz,Yz:real;
Size2:integer;
begin
Size2 := Round(2*Height/60*2*Width/60)+20;
GetMem(MyBIgDInMassX,Size2);
GetMem(MyBIgDInMassY,Size2);
Yz:=1;
repeat
Xz:=1;
repeat
MyBIgDInMassY^[mm]:=Yz ;
MyBIgDInMassX^[mm]:=Xz;
xz:=xz-60/Height ;
until xz<-1;
yz:=yz-60/Width;
until yz<-1;
mm :=0;
for i:=0 to round(2*Height/60) do
for j:=0 to round(2*Width/60) do
begin
StringGrid1.Cells[i,j]:=floattostr(MyBIgDInMassX^[mm])+" "+floattostr( MyBIgDInMassY^[mm]);
inc(mm);
end;
FreeMem( MyBIgDInMassY);
FreeMem( MyBIgDInMassX);

end;


 
Тимохов ©   (2004-02-11 15:26) [1]

Это не ошибка.


 
Anatoly Podgoretsky ©   (2004-02-11 15:29) [2]

Для Real такое появлятся не может


 
Тимохов ©   (2004-02-11 15:30) [3]

Это нормально.
Вот http://www.delphikingdom.ru/helloworld/reals.htm почитайте.


 
Тимохов ©   (2004-02-11 15:31) [4]


> Anatoly Podgoretsky © (11.02.04 15:29) [2]
> Для Real такое появлятся не может

А для double?
Double имхо = Real


 
Anatoly Podgoretsky ©   (2004-02-11 15:33) [5]

Тимохов © (11.02.04 15:31) [4]
А на что я по твоему опирался?


 
Тимохов ©   (2004-02-11 15:36) [6]


> Anatoly Podgoretsky © (11.02.04 15:33) [5]

Разве double не мусорится?
Я думал, что он работает при представлении чисел с правующей точкой весьма стандартно.


 
Raph ©   (2004-02-11 15:41) [7]

а как с эти работать?
массив очень нужен!! Ведь там ошибка возникает!!

> StringGrid1.Cells[i,j]:=floattostr(MyBIgDInMassX^[mm])+"
> "+floattostr( MyBIgDInMassY^[mm]);


 
Тимохов ©   (2004-02-11 15:44) [8]

Воспользуйся фкнцией формат
Например так
format("%.2f", [YourValue])


 
Raph ©   (2004-02-11 15:55) [9]

Ладно с выводом массива как-то разбрусь! Но мне нужно два ПРАВИЛЬНО заполненных динамических массива! ( а изменение типа real на другие вещественные ничего не дает)


 
Тимохов ©   (2004-02-11 15:57) [10]

Что значит правильно?

Почитайте ссылочку - вещественные числа обладают особенностью иметь грязь... и не только в дельфи.


 
Raph ©   (2004-02-11 16:03) [11]

там где по логике должны стоять 1,1,1,1,1,1,1 и т.д стоят 1,2543252434е-380 абсолютно все!! Это что нормально ?! Мне нужно два динамических массива со значениями от -1 до1 с определенным шагом. Как это сделать если так как это сделанно?


 
Raph ©   (2004-02-11 16:04) [12]

Не так как сделанно?


 
Тимохов ©   (2004-02-11 16:05) [13]


> !! Это что нормально ?!

Это не нормально - это Ваша ошибка в алгоритме. Ищите:)))


 
Тимохов ©   (2004-02-11 16:07) [14]

Где определяется значение mm?


 
Тимохов ©   (2004-02-11 16:10) [15]

Также
Size2 := Round(2*Height/60*2*Width/60)+20;
рисковая операция
скорее надо так (не до конца уверен, но ядея понятна)
Size2 := 2*ceil(Height/60)*2*ceil(Width/60)


 
Raph ©   (2004-02-11 16:12) [16]

там так :
mm:=0;
Yz:=1;
repeat
Xz:=1;
repeat
MyBIgDInMassY^[mm]:=Yz ;
MyBIgDInMassX^[mm]:=Xz;

inc(mm);
xz:=xz-60/Height ;
until xz<-1;
yz:=yz-60/Width;
until yz<-1;


 
Тимохов ©   (2004-02-11 16:14) [17]

Так приведи полностью код "как там".


 
Raph ©   (2004-02-11 16:18) [18]

procedure TForm1.Button1Click(Sender: TObject);
var i,j,mm:integer;
Xz,Yz:real;
Size2:integer;
begin
Size2 := 2*ceil(Height/60)*2*ceil(Width/60);
GetMem(MyBIgDInMassX,Size2);
GetMem(MyBIgDInMassY,Size2);
mm:=0;
Yz:=1;
repeat
Xz:=1;
repeat

MyBIgDInMassX^[mm]:=Xz;
MyBIgDInMassY^[mm]:=Yz ;
inc(mm);
xz:=xz-60/Height ;
until xz<-1;
yz:=yz-60/Width;
until yz<-1;
//StringGrid1.ColCount:=round(2*Height/60);
//StringGrid1.RowCount:=round(2*Width/60);
mm :=0;
for i:=0 to round(2*Height/60) do
for j:=0 to round(2*Width/60) do
begin
StringGrid1.Cells[i,j]:=format("%.2f", [MyBIgDInMassX^[mm]])
+" "+format("%.2f", [MyBIgDInMassY^[mm]]);
inc(mm);
end;
FreeMem( MyBIgDInMassY);
FreeMem( MyBIgDInMassX);

end;


 
Raph ©   (2004-02-11 16:20) [19]

type TmassFLoat=array[0..99999999] of real;
PTmassFLoat=^TmassFLoat;
var MyBIgDInMassY:PTmassFLoat;
MyBIgDInMassX:PTmassFLoat;


 
Тимохов ©   (2004-02-11 16:29) [20]

Size2 := 2*ceil(Height/60)*2*ceil(Width/60) * sizeof(real)
И как у тебя это раньше работало?


 
Raph ©   (2004-02-11 16:36) [21]

спасибо ! Работало не знаю каак! Я использую opengl , там имеется ссылка что исключений вроде как не возникает в некоторых случаях! Большое спасибо!



Страницы: 1 вся ветка

Текущий архив: 2004.02.25;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.033 c
8-80044
Демон
2003-10-24 23:36
2004.02.25
Плейлист


1-79864
MetalFan
2004-02-10 15:00
2004.02.25
Как скопировать выделенный текст...


3-79605
tesseract
2004-01-28 13:19
2004.02.25
Проблема с ADO + MSAccess


1-79900
MainKaif
2004-02-10 09:21
2004.02.25
Консольные команды.


4-80347
Kinder
2003-12-16 20:21
2004.02.25
Выдираем из файла определённую иконку