2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Ошибка на Pascal
Сообщение24.09.2014, 13:38 
Аватара пользователя


26/09/13
648
Таджикистан
Здравствуйте форумчани! Помогите пожалуйста разобраться.
Не как не пойму это программа работает или нет?
код: [ скачать ] [ спрятать ]
Используется синтаксис 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 
Заслуженный участник


06/07/11
5627
кран.набрать.грамота
Maik2013 в сообщении #911382 писал(а):
Не как не пойму это программа работает или нет?
Это понять проще всего: если результат не тот, что вы ждали, значит, не работает.

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

(Оффтоп)

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

 Профиль  
                  
 
 Re: Ощыбка на Pascal
Сообщение11.10.2014, 09:07 
Аватара пользователя


13/04/14
133
Тюмень
rockclimber в сообщении #911704 писал(а):
Maik2013 в сообщении #911382 писал(а):
Не как не пойму это программа работает или нет?
Это понять проще всего: если результат не тот, что вы ждали, значит, не работает.

(Оффтоп)

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

(Оффтоп)

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

 Профиль  
                  
 
 Re: Ошибка на Pascal
Сообщение11.10.2014, 14:24 
Заслуженный участник
Аватара пользователя


30/01/06
72407

(Оффтоп)

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

 Профиль  
                  
 
 Re: Ошибка на Pascal
Сообщение11.10.2014, 15:49 
Заслуженный участник


27/04/09
28128

(Оффтоп)

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

 Профиль  
                  
 
 Re: Ошибка на Pascal
Сообщение11.10.2014, 16:11 
Заслуженный участник


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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group