2014 dxdy logo

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

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




 
 Ошибка на Pascal
Сообщение24.09.2014, 13:38 
Аватара пользователя
Здравствуйте форумчани! Помогите пожалуйста разобраться.
Не как не пойму это программа работает или нет?
код: [ скачать ] [ спрятать ]
Используется синтаксис Delphi
uses crt;
const mf=500;
     eps=1e-5;
     R=8.31;
 type
    vector=array[1..mf] of real;
  var
  i,j,N:integer;
  T,Ts,Tn,alfa,beta:vector;
  ai,bi,ci,fi,max:real;
  lamda, ro,c,h,tau:real;
  kapa, Te, q,k0,E:real;
  T0,L,t_end,time:real;
  f,g:text;
  begin
  clrscr;
  Writeln('Bведите N');
  Readln(N);
   Writeln('Bведите t_end');
  Readln(t_end);
    Writeln('Bведите L');
  Readln(L);
    Writeln('Bведите lamda');
  Readln(lamda);
  Writeln('ro');
  Readln(ro);
  Writeln('Bведите c');
  Readln(c);
    Writeln('Bведите kapa');
  Readln(kapa);
    Writeln('Bведите Te');
  Readln(Te);
    Writeln('Bведите q');
  Readln(q);
    Writeln('Bведите k0');
  Readln(k0);
    Writeln('Bведите E');
  Readln(E);
    Writeln('Bведите T0');
  Readln(T0);
  h:=L/(N-1);
  tau:=t_end/100.0;
  for i:=1 to N do
  T[i]:=T0;
  time:=0;
  While time<t_end do
  begin
 
  time:=time+tau;
  alfa[1]:=2.0*tau*lamda/(2.0*tau*(lamda+kapa*h)+ro*c*sqr(h));
  beta[1]:=(ro*c*sqr(h)*T[1]+2.0*tau*kapa*h*Te)/(2.0*tau*(lamda+kapa*h)+ro*c*sqr(h));
  for i:=1 to N do
  Tn[i]:=T[i];
  repeat
  for i:=1 to N do
  Ts[i]:=T[i];
  for i:=2 to N-1 do
  begin
  ai:=lamda/sqr(h);
  bi:=2.0*lamda/sqr(h)+ro*c/tau;
  ci:=lamda/sqr(h);
  fi:=ro*c*Tn[i]/tau-q*k0*ro*exp(-E/(R*T[i]));
  alfa[i]:=ai/(bi-ci*alfa[i-1]);
  beta[i]:=(ci*beta[i-1]-fi)/(bi-ci*alfa[i-1]);
  end;
   T[N]:=(ro*c*sqr(h)*Tn[N]+2.0*tau*(lamda*beta[N-1]+kapa*h*Te))
   /(ro*c*sqr(h)+2.0*tau*(lamda*(1-alfa[N-1])+kapa*h));
     for i:=N-1 downto 1 do
     T[i]:=alfa[i]*T[i+1]+beta[i];
     max:=abs(T[1]-Ts[1]);
      for i:= 1 to N do
     if max<abs(T[i]-Ts[i]) then max:=abs(T[i]-Ts[i]);
     until max<=eps
     end;
     
  Assign(f,'res.txt');
  Rewrite(f);
  Writeln(f, 'Толщина пластины L=' ,L:6:4);
  Writeln(f, 'Число узлов по координате N=',N);
  Writeln(f, 'Коэффициент теплопроводности материала пластина Lamda=',Lamda:6:4);
  Writeln(f, 'ro=',ro:6:4);
  Writeln(f, 'c=',c:6:4);
  Writeln(f, 'T0=',T0:6:4);
  Writeln(f, 'kapa=',kapa:6:4);
  Writeln(f, 'Te=',Te:6:4);
  Writeln(f, 'q=',q:6:4);
  Writeln(f, 'k0=',k0:6:4);
  Writeln(f, 'E=',E:6:4);
  Writeln(f, 'h=',h:6:4);
  Writeln(f, 'tau=',tau:6:4);
  Writeln(f, 't=',t_end:6:4);
  close(f);
  Assign(g, 'tempr.txt');
  Rewrite(g);
  for i:= 1 to N do
  writeln(g, ' ' , h*(i-1):10:8,'  ',(T[i]-273):8:5);
  close(g);
  end.
 


Константы:

$N=100,\,\,   t-end=600,\,\, L=0.2,\,\, \lambda=0.7,\,\, \rho=1500, \,\,c=750,\,\,
\varkappa=40,\,\, T_e=243, \,\,q=1000, \,\,k_0=30000,\,\, E=80000, \,\,T_0=298$

 
 
 
 Re: Ощыбка на Pascal
Сообщение25.09.2014, 00:06 
Maik2013 в сообщении #911382 писал(а):
Не как не пойму это программа работает или нет?
Это понять проще всего: если результат не тот, что вы ждали, значит, не работает.

Скорее всего, у вас проблема в цикле repeat .. until. Он выполняется бесконечно. Добавьте в цикл отладочный вывод переменных, которые вы сравниваете (через writeln), и добавьте еще один счетчик в цикл, чтобы по достижении некоторого значения этого счетчика выполнять безусловный выход из программы. После этого смотрите, какие переменные и где считаются неправильно.

(Оффтоп)

Ошибка на Pascal
Здравствуйте, форумчане! Помогите, пожалуйста, разобраться.
Никак не пойму: это программа работает или нет?

 
 
 
 Re: Ощыбка на Pascal
Сообщение11.10.2014, 09:07 
Аватара пользователя
rockclimber в сообщении #911704 писал(а):
Maik2013 в сообщении #911382 писал(а):
Не как не пойму это программа работает или нет?
Это понять проще всего: если результат не тот, что вы ждали, значит, не работает.

(Оффтоп)

Ошибка на Pascal
Здравствуйте, форумчане! Помогите, пожалуйста, разобраться.
Никак не пойму: это программа работает или нет?

(Оффтоп)

Никак не пойму: эта программа работает или нет?

 
 
 
 Re: Ошибка на Pascal
Сообщение11.10.2014, 14:24 
Аватара пользователя

(Оффтоп)

Хватит вам уже. Maik2013 давным-давно сказал, что он не русский.

 
 
 
 Re: Ошибка на Pascal
Сообщение11.10.2014, 15:49 

(Оффтоп)

Так потому, видимо, в оффтопе — просто для справки. Чтобы помочь с запоминанием на месте.

 
 
 
 Re: Ошибка на Pascal
Сообщение11.10.2014, 16:11 
rockclimber в сообщении #911704 писал(а):
если результат не тот, что вы ждали, значит, не работает
Вот неправда ваша. Как раз наоборот: программа работает всегда. Но не всегда так, как ожидает автор. Как раз поэтому приводить программу и не писать, как она должна бы (по мнению автора) работать — бессмысленно (прошу прощения у телепатов).

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


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