Код большой? Выложи, если не жалко.
Или повтори ошибку в другом, который не жалко показать общественности.
p.s. А, черт. "Сорвал" счетчик. Такая цифра была.
..bw
			
		Модератор: Модераторы

 ). Объект разбивается на "кубики" и в каждом по формулам специальным считается температура(формулы сложные поэтому и выражения в проге бешеные). Трёхмерные массивы хранят физические параметры "кубиков" и их температуру.
 ). Объект разбивается на "кубики" и в каждом по формулам специальным считается температура(формулы сложные поэтому и выражения в проге бешеные). Трёхмерные массивы хранят физические параметры "кубиков" и их температуру.program Termo_areas;
uses CRT,math;
type
 cub=record
  v,c,lambda,p_ist: Real;
 end;
 buf=array[1..6] of Real;
const
 c_vozd=1299; lambda_vozd=0.026;
var
 l,w,h: Real;
 ln,wn,hn,i,j,k,num,g: Word;
 lcub,wcub,hcub,vcub,temp0,time,t_step,t,ixp,ixm,iyp,iym,izp,izm: Real;
 temp: array [1..100,1..100,1..100] of Real;
 cubic: array [1..100,1..100,1..100] of cub;
 c_num,v_num,lambda_num: buf;
 ch: Char;
 function h_i(n:Word; a:buf):Real;
 var
  l: Word;
  s1,s2: Real;
 begin
  s1:=0; s2:=0;
  if n=1 then h_i:=power(a[1],1/3) else
  begin
  for l:=n downto 2 do
   begin
    s1:=s1+a[l];
    s2:=s2+a[l-1];
   end;
  s1:=s1+a[1];
  h_i:=power(s1,1/3)-power(s2,1/3);
  end;
 end;
 function lam_i(n:Word; vc:Real; v,lam:buf): Real;
 var
  l:Word;
  p,lp,ls: Real;
 begin
  p:=0; lp:=1; ls:=0;
  for l:=1 to n do lp:=lp*lam[l];
  for l:=1 to n do ls:=ls+lp*h_i(l,v);
  for l:=1 to n do p:=p+(sqr(h_i(l,v))*lp);
  lam_i:=p/(ls*power(vc,1/3));
 end;
begin  {Начало программы}
 repeat     {Ввод общих данных о модели}
  ClrScr;
  Write('Введите длину: '); Read(l);
  Write('Введите ширину: '); Read(w);
  Write('Введите высоту: '); Read(h);
  Writeln('---------------------------------------');
  Write('Введите количество разбиений по длине: '); Read(ln);
  Write('Введите количество разбиений по ширине: '); Read(wn);
  Write('Введите количество разбиений по высоте: '); Read(hn);
  Writeln('---------------------------------------');
  lcub:=l/ln; wcub:=w/wn; hcub:=h/hn; vcub:=lcub*wcub*hcub;
  Writeln('Размеры элементарного объёма: ', lcub:5:3,' x',wcub:5:3,' x',hcub:5:3); Writeln;
  Write('Введите начальную температуру блока= '); read(temp0);
  Writeln;
  Writeln('Enter - ввод данных, Esc - ввести заново');
  ch:=Readkey;
 until Ord(ch)=13;
 for i:=1 to ln+2 do
 begin
  for j:=1 to wn+2 do
  begin
   for k:=1 to hn+2 do
    begin
     temp[i,j,k]:=temp0;
     cubic[i,j,k].c:=c_vozd;
     cubic[i,j,k].lambda:=lambda_vozd;
    end;
  end;
 end;
 for k:=2 to hn+1 do  {Ввод данных для каждого "кубика"}
  begin
   for i:=2 to ln+1 do
    begin
     for j:=2 to wn+1 do {начало}
      begin
       Clrscr;
       Writeln('Координаты элемента (x,y,z): ',i-1,' ',j-1,' ',k-1);
       Write('Введите количество материалов в элементе(максимум 5) = '); Read(num);
       for g:=1 to num do
        begin
         repeat
          Writeln;
          Writeln('Материал №',g);
          Writeln('============================');
          Write('Удельная теплоёмкость='); Read(c_num[g]);
          Write('Коэффициент теплопроводности='); Read(lambda_num[g]);
          Write('Объём материала в элементе='); Read(v_num[g]);
          Writeln('----------------------------');Writeln;
          Write('Enter - ввод данных, Esc - ввести заново');
          ch:=Readkey;
         until Ord(ch)=13;
        end;
       Writeln;
       Write('Введите мощность источников тепла='); Read(cubic[i,j,k].p_ist);
       cubic[i,j,k].v:=0;
       for g:=1 to num do begin cubic[i,j,k].v:=cubic[i,j,k].v+v_num[g]; end;
       cubic[i,j,k].c:=((vcub-cubic[i,j,k].v)*c_vozd)/vcub;{Слагаемое экв. теплоёмкости для заполнителя(воздух)}
       for g:=1 to num do cubic[i,j,k].c:=cubic[i,j,k].c+(v_num[g]*c_num[g])/vcub;{Вычисление экв. теплоёмкости}
       cubic[i,j,k].lambda:=lam_i(num,vcub,v_num,lambda_num); {Вычисление экв. коэфф-та теплопроводности}
      end;       {конец}
    end;
  end;
  repeat
   Writeln;
   Write('Введите время наблюдения, с: '); read(time);
   Write('Введите шаг времени, с: '); read(t_step); Writeln;
   Write('-----------------------------');
   Write('Enter - ввод данных, Esc - ввести заново');
   ch:=Readkey;
  until ord(ch)=13;
 t:=0;
 repeat
 for k:=1 to hn+1 do
 begin
  for i:=1 to ln+1 do
  begin
   for j:=1 to wn+1 do
    begin
     ixp:=((cubic[i,j,k].lambda+cubic[i+1,j,k].lambda)*t_step)/(2*sqr(lcub)*cubic[i,j,k].c)*(temp[i+1,j,k]-temp[i,j,k]);
     ixm:=((cubic[i,j,k].lambda+cubic[i+1,j,k].lambda)*t_step)/(2*sqr(lcub)*cubic[i,j,k].c)*(temp[i,j,k]-temp[i-1,j,k]);
     iyp:=((cubic[i,j,k].lambda+cubic[i,j+1,k].lambda)*t_step)/(2*sqr(wcub)*cubic[i,j,k].c)*(temp[i,j+1,k]-temp[i,j,k]);
     iym:=((cubic[i,j,k].lambda+cubic[i,j+1,k].lambda)*t_step)/(2*sqr(wcub)*cubic[i,j,k].c)*(temp[i,j,k]-temp[i,j-1,k]);
     izp:=((cubic[i,j,k].lambda+cubic[i,j,k+1].lambda)*t_step)/(2*sqr(hcub)*cubic[i,j,k].c)*(temp[i,j,k+1]-temp[i,j,k]);
     izm:=((cubic[i,j,k].lambda+cubic[i,j,k+1].lambda)*t_step)/(2*sqr(hcub)*cubic[i,j,k].c)*(temp[i,j,k]-temp[i,j,k-1]);
     temp[i,j,k]:=temp[i,j,k]+(c_vozd/cubic[i,j,k].c)*(ixp-ixm+iyp-iym+izp-izm)+((cubic[i,j,k].p_ist*t)/cubic[i,j,k].c);
    end;
  end;
 end;
 t:=t+t_step;
 until t>time;
 repeat
  Clrscr;
  Writeln;
  Write('Введите номер слоя по координате Z (высота): ');Read(num);
  for i:=1 to ln+2 do
   begin
    for j:=1 to wn+2 do
     begin
      write(temp[i,j,num]:5:4);
     end;
   Writeln; Writeln;
   end;
  Writeln('-----------------------------');
  Writeln('Enter - вывод следующего слоя, Esc - выход');
  ch:=Readkey;
 until ord(ch)=27;
end.{Конец программы}

 (где что писать)
 (где что писать)


 ). Думаю ошибка всё же там...Что интересно, у моего товарища код прекрасно скомпилировался и выполнился, но вместо некоторых цифр вывелось вот это "Nan"...
 ). Думаю ошибка всё же там...Что интересно, у моего товарища код прекрасно скомпилировался и выполнился, но вместо некоторых цифр вывелось вот это "Nan"...

Вернуться в Обучение Free Pascal
Сейчас этот форум просматривают: Yandex [Bot] и гости: 1