Форум: "Начинающим";
Текущий архив: 2009.10.18;
Скачать: [xml.tar.bz2];
ВнизПомогите решить проблему Найти похожие ветки
← →
Lex_okha © (2009-08-19 20:41) [0]Проблема в следующем.
Имеется рабочая программа на паскале.
копирую и вставляю в делфи, графику и выводы переобозначиваю как надо. Проблема только в дном месте в программе при входе в одну из процедур переобозначаюся переменные! совершенно произвольными цифрами типа 1.4е-314 или типа такого числа близкие к нулю при выходе изпроцедуры значения цифр возвращается в нормальное(предположительно), так как первые две част использующие эту процедуру работаю вроде бы как надо, а когда дело доходит до более больших цифр и дальнейшего времени то комп зависает с ошибкой нехвтки памяти!!! после того как он загребает 1 гиг файла подкачки.
В чем может быть причина?
процедур описана так
procedure Mersonhi(
n,rt:integer;
var y:vector;
var mstb:vector;
var hc:real;
hmin:real;
eps:real;
var t:real;
var flag:integer;
var hp:real);
label 2;
var i,iter:integer;
y1,y2,f0,f1,f2:vector;
err,temp,h:real;
ok:boolean;
убирал "lable 2" некоторые цифры стали нормальные, но переменные: err,eps,hmin все равно меняются!
Заранее спасибо.
← →
Palladin © (2009-08-19 20:44) [1]у тебя ошибка в программе
← →
Сергей М. © (2009-08-19 20:50) [2]
> переобозначаюся переменные! совершенно произвольными цифрами
> типа 1.4е-314
Что за ахинея ?
Как это "переобозначаются" ?
Что вообще ты понимаешь под этим термином ?
И в каком букваре написано что символ "e" - это цифра ?
> переменные: err,eps,hmin все равно меняются
Сами по себе что ли ? Не пори чушь.
← →
Lex_okha © (2009-08-19 20:54) [3]Уважаемый Сергей М.
типа 1.4е-314
Это если расписать словами ПРИМЕР:
переменной err присваивается значение 1,4 умножить на 10 в -314 степени
я так понимаю это число приравненное к нулю!
почему так сам не понимаю на паскале этот вариант работает как часы. вот и спрашиаю совет сожет кто чего знает?
Palladin
в программе ошибок не вдел... хотя это и немоя пога мне в ней надо разобраться. на паскале её копия как я говорил работает.
← →
Lex_okha © (2009-08-19 20:58) [4]Сергей М.
могу выложить скрины пошагового запуска программы. при входе в эту процедуру происходит такая Чушь!
я не знаю но если убрать метку (lable 2 ) то 3 или 4 величины не меняются как жто может быть связано?? может метка описывается как то по другому? я с ними не работал незнаю.
← →
Сергей М. © (2009-08-19 20:58) [5]
> переменной err присваивается значение 1,4 умножить на 10
> в -314 степени
Это не цифра, число.
Разницу между цифрой и числом вдалбливают еще В 1-м классе церковно-приходской школы.
Само по себе что ли присваивается ?
← →
Lex_okha © (2009-08-19 21:01) [6]Да само по себе.
и только в этой процедуре.
P.s. мозги малость закипают...
← →
Palladin © (2009-08-19 21:04) [7]
> в программе ошибок не вдел... хотя это и немоя пога мне
> в ней надо разобраться. на паскале её копия как я говорил
> работает.
а суслика ты видел?
← →
Lex_okha © (2009-08-19 21:08) [8]Palladin
Если умный помоги советом буду признателен, если поговориь не с кем включи радио или телевизор и поговори с ним, как один "дядя" из Таганрога!!!
;)
P.s. Сусликов уж давно не видал, покажешь?
← →
Palladin © (2009-08-19 21:12) [9]
> [8] Lex_okha © (19.08.09 21:08)
совет: лопата в руки и искать суслика, я тебе не кашпировский, да и врядли кто то тут им является...
← →
Palladin © (2009-08-19 21:13) [10]нота бене: лопату прекрасно заменит отладчик и клавиши F7, F8
← →
Lex_okha © (2009-08-19 21:16) [11]Palladin
В отладчике как раз таки это и было замечено! ;)
А какую инфу надо для того чтоб кто либо мог помочь в этом вопросе?
← →
Lex_okha © (2009-08-19 21:32) [12]procedure Mersonhi(
n,rt:integer;
var y:vector;
var mstb:vector;
var hc:real;
hmin:real;
eps:real;
var t:real;
var flag:integer;
var hp:real);
{ label 2; }
var i,iter:integer;
y1,y2,f0,f1,f2:vector;
err,temp,h:real;
ok:boolean;
begin
iter:=0;
flag:=0;h:=hc;
repeat
iter:=iter+1;
prav(t,y,f0);
for i:=1 to n do y1[i]:=y[i]+h*f0[i]/3.0;
prav(t+h/3,y1,f1);
for i:=1 to n do y1[i]:=y[i]+(f0[i]+f1[i])*h/6;
prav(t+h/3,y1,f1);
for i:=1 to n do y1[i]:=y[i]+(f0[i]+3*f1[i])*h/8;
prav(t+h/2,y1,f2);
for i:=1 to n do y1[i]:=y[i]+(f0[i]-3*f1[i]+4*f2[i])*h/2;
prav(t+h,y1,f1);
err:=1e-30;
for i:=1 to n do begin
y2[i]:=y[i]+(f0[i]+4*f2[i]+f1[i])*h/6;
temp:=abs(0.2*(y1[i]-y2[i])/mstb[i]);
if temp>err then err:=temp;
end{for};
ok:=err<eps;
if ok then begin
t:=t+h; y:=y2
end{if};
if ok or (iter<2) then begin h:=h*exp(ln(0.8*eps/err)/5.0);
end;
if (h>hp) then begin
h:=hp; { goto 2 }
end;
if (h<hp) then
begin
h:=h/2;
if h<hmin then begin
flag:=13; exit
end{if};
end;
{2:}until ok;
hc:=h;
end;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.10.18;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c