2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Delphi массивы
Сообщение08.10.2006, 09:18 
Уважаемые программисты просьба помочь, вообщем ситуация заключается в следующем, вот программа по численному решению системы методом Рунге-Кутта, программа работает, но загвоздка возникла в следущем, не могу считать значения функций и шага в отдельные массивы, делфи выдает ошибку непонятную, я даже потом решил считывать отдельноо из каждого файла но увы косяки с функцией strtofloat

код:

const
k=1;T=10;g=1;
var
k11,k12,k21,k22,k31,k32,k41,k42,z,dz,y,dy,dt,lin:real;
f,yt,zt,lint:text;
n,i,j:integer;
zm,ym,linm:array[1..250] of real; //extended for strtofloat
begin
assign(f,'lab1.dat');rewrite(f);
assign(yt,'yt.dat');rewrite(yt);
assign(zt,'zt.dat');rewrite(zt);
assign(lint,'lint.dat');rewrite(lint);
dt:=0.001;lin:=0;
i:=1;
while lin<200 do begin
k11:=z*dt;
k12:=(k*g/(T*T)-y/(T*T))*dt;
k21:=(z+k12/2)*dt;
k22:=(k*g/(T*T)-(y+k11/2)/(T*T))*dt;
k31:=(z+k22/2)*dt;
k32:=(k*g/(T*T)-(y+k21/2)/(T*T))*dt;
k41:=(z+k32)*dt;
k42:=(k*g/(T*T)-(y+k31)/(T*T))*dt;
dy:=(k11+2*k21+2*k31+k41)/6;
dz:=(k12+2*k22+2*k32+k42)/6;
y:=y+dy;
z:=z+dz;
if n mod 800=0 then
begin
writeln(f,'при шаге=',lin:6:3,' функции y=',y:9:6,'; z=',z:9:6);
writeln(lint,lin:6:3);writeln(yt,y:9:6); writeln(zt,z:9:6);
linm[i]:=lin; ym[i]:=y; zm[i]:=z;// вот в этой строке вся загвоздка
end;
lin:=lin+dt;
n:=n+1;
i:=i+1;
end;
close(f);
close(zt);
close(yt);
close(lint);
{assign(yt,'yt.dat'); reset(yt);
assign(zt,'zt.dat'); reset(zt);
assign(lint,'lint.dat'); reset(lint);
While not eof(yt) do
begin
read(yt,tempstring);
u:=strtofloat(tempstring);
end;
close(zt);
close(yt);
close(lint);}
end.

 
 
 
 Re: Delphi массивы
Сообщение08.10.2006, 13:06 
Аватара пользователя
VSSISTU писал(а):
writeln(f,'при шаге=',lin:6:3,' функции y=',y:9:6,'; z=',z:9:6);
writeln(lint,lin:6:3);writeln(yt,y:9:6); writeln(zt,z:9:6);
linm[i]:=lin; ym[i]:=y; zm[i]:=z;// вот в этой строке вся загвоздка

zt -у Вас текстовый файл, его значениями являются строки а не числа.
Попробуйте так:
Var
s:string;
.........
s:=floattostr(z);
writeln(zt,S);

 
 
 
 
Сообщение08.10.2006, 17:14 
ну и какой извините в этом смысл, переводить число функции в строку, а зетем прописывать его в файл

 
 
 
 
Сообщение08.10.2006, 17:19 
Аватара пользователя
VSSISTU писал(а):
ну и какой извините в этом смысл, переводить число функции в строку, а зетем прописывать его в файл

Должен Вас сказать,что очень трудно понять,что Вы хотите спросить.
Изложите более ясно, тогда может Вам и помогут.

 
 
 
 
Сообщение08.10.2006, 18:28 
Woland спасибо за внимание, я сам додумался 8-)

 
 
 [ Сообщений: 5 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group