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

Вниз

Помогите решить проблему   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.01 c
15-1250014166
Kerk
2009-08-11 22:09
2009.10.18
Все-таки есть бритвы, а есть Бритвы...


3-1228301781
tipman
2008-12-03 13:56
2009.10.18
Транзакция в dbase


15-1250092497
El
2009-08-12 19:54
2009.10.18
Torrent


2-1250845434
Priest
2009-08-21 13:03
2009.10.18
RS-232 возвращает данные в формате float. Как перевести?


2-1249639107
Бисовецкий Андрей
2009-08-07 13:58
2009.10.18
Проблема со скоростью