Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите решить проблему [D7, XP]


Lex_okha ©   (2009-08-19 20:41:00) 

Проблема в следующем.
Имеется рабочая программа на паскале.
копирую и вставляю в делфи, графику и выводы переобозначиваю как надо. Проблема только в дном месте в программе при входе в одну из процедур переобозначаюся переменные! совершенно произвольными цифрами типа 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  все равно меняются!

Заранее спасибо.


Lex_okha   (2009-08-19 21:32:00) [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;

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;


Lex_okha   (2009-08-19 21:16:00) [2]

Palladin
В отладчике как раз таки это  и было замечено! ;)
А какую инфу надо для того чтоб кто либо мог помочь в этом вопросе?


Palladin   (2009-08-19 21:13:00) [3]

нота бене: лопату прекрасно заменит отладчик и клавиши F7, F8


Palladin   (2009-08-19 21:12:00) [4]


> [8] Lex_okha ©   (19.08.09 21:08)

совет: лопата в руки и искать суслика, я тебе не кашпировский, да и врядли кто то тут им является...


Lex_okha   (2009-08-19 21:08:00) [5]

Palladin
Если умный помоги советом буду признателен, если поговориь не с кем включи радио или телевизор и поговори с ним, как один "дядя" из Таганрога!!!
;)
P.s. Сусликов уж давно не видал, покажешь?


Palladin   (2009-08-19 21:04:00) [6]


> в программе ошибок не вдел... хотя это и немоя пога мне
> в ней надо разобраться. на паскале её копия как я говорил
> работает.

а суслика ты видел?


Lex_okha   (2009-08-19 21:01:00) [7]

Да само по себе.
и только в этой процедуре.

P.s. мозги малость закипают...


Lex_okha   (2009-08-19 20:58:00) [8]

Сергей М.
могу выложить скрины пошагового запуска программы. при входе в эту процедуру происходит такая Чушь!

я не знаю но если убрать метку (lable 2 ) то 3 или 4  величины не меняются как жто может быть связано?? может метка описывается как то по другому? я с ними не работал незнаю.


Сергей М.   (2009-08-19 20:58:00) [9]


> переменной err присваивается значение 1,4 умножить на 10
> в -314 степени


Это не цифра, число.
Разницу между цифрой и числом вдалбливают еще В 1-м классе церковно-приходской школы.

Само по себе что ли присваивается ?


Lex_okha   (2009-08-19 20:54:00) [10]

Уважаемый Сергей М.
типа 1.4е-314
Это если расписать словами ПРИМЕР:
переменной err присваивается значение 1,4 умножить на 10 в -314 степени

я так понимаю это число приравненное к нулю!
почему так сам не понимаю на паскале этот вариант работает как часы. вот и спрашиаю совет сожет кто чего знает?

Palladin
в программе ошибок не вдел... хотя это и немоя пога мне в ней надо разобраться. на паскале её копия как я говорил работает.


Сергей М.   (2009-08-19 20:50:00) [11]


> переобозначаюся переменные! совершенно произвольными цифрами
> типа 1.4 е-314


Что за ахинея ?
Как это "переобозначаются" ?
Что вообще ты понимаешь под этим термином ?

И в каком букваре написано что символ " e" - это цифра?


> переменные:  err,eps,hmin  все равно меняются


Сами по себе что ли ? Не пори чушь.


Palladin   (2009-08-19 20:44:00) [12]

у тебя ошибка в программе


Наверх

Титульная страница Поиск, карта сайта Написать письмо