2014 dxdy logo

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

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




На страницу Пред.  1, 2, 3, 4  След.
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 15:17 
Аватара пользователя
... во втором случае, количество запусков программы можно сохранять в переменной окружения, эффект будет, как описано.

 
 
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 15:27 
Аватара пользователя
rockclimber в сообщении #1200199 писал(а):
Указатели используете?

нет, только условные переходы...
И ведь обнуляю внутри процедур все массивы

-- Вт мар 14, 2017 15:27:40 --

Munin в сообщении #1200235 писал(а):
Вы сами хотите разобраться, или задаёте окружающим занимательную загадку?

сам

 
 
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 15:31 
Аватара пользователя
alcoholist в сообщении #1200276 писал(а):
И ведь обнуляю внутри процедур все массивы

А надо - не только массивы.

 
 
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 15:33 
А в чем проблема код показать? Если неохота по каким-то причинам (у вас секретная разработка, которая на Нобеля потянет, например), попробуйте выкинуть все лишнее и подготовить максимально абстрактый и короткий код, воспроизводящий ошибку. Иногда, в процессе такой подготовки, ошибка сама находится. А не хотите, так стандартный ответ в такой ситуации - "ошибка в 17-й строке".

 
 
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 15:47 
Аватара пользователя
Вот, собственно, код. В процедуре ODE вычисляются два массива Y[k] и TT[k]. Собственно, в процедуре kholeckyнужен только второй.
Код:
program numbers;
const
Nt=40;
type
mass=array[0..Nt] of real;
var
a,b,h: real;
n: integer;
TT,Y: mass;



            procedure ODE;


            const
n=Nt;

var
x,t,h: real;
i,k,l: integer;

function F(t,x:real): real;
begin
F:=0.1*t*t-2*t*x;
end;

begin
h:=1.485/Nt;
TT[0]:=0;
TT[1]:=h;
Y[0]:=0.1;
Y[1]:=0.1+h*F(h/2,0.1+(h/2)*F(0,0.1));

for k:=2 to n do
begin
TT[k]:=k*h;
Y[k]:=Y[k-2]+2*h*F((k-1)*h,Y[k-1]);
end;

end;



procedure kholecky;

type
mkh=array[0..4,0..4] of real;

var
matr,lt,llt: mkh;
S: array[0..8] of real;
b,z,akh: array[0..4] of real;
i,j,k: integer;
p: real;
khol: text;

begin
        for j:=0 to 4 do
        begin
        S[j]:=0;
        for i:=0 to 4 do
        begin
        lt[i,j]:=0;
        llt[i,j]:=0;
        matr[i,j]:=0;
        end;
        end;

        for j:=0 to Nt do
        begin
        p:=1;
        for k:=0 to 8 do
                 begin
                 S[k]:=S[k]+p;
                 p:=p*TT[j];
                 end;
        end;


        for k:=0 to 4 do
        for i:=0 to 4 do
        matr[i,k]:=S[i+k];
        for j:=0 to 4 do
writeln(matr[j,0]:10:6,' ',matr[j,1]:10:6,' ',matr[j,2]:10:6,' ',matr[j,3]:10:6,' ',matr[j,4]:10:6);


for j:=0 to 4 do
for i:=0 to 4 do
begin
end;

     for j:=0 to 4 do
              begin
                            lt[j,j]:=sqrt(matr[j,j]-llt[j,j]);
              if j<4 then
                  for i:=j+1 to 4 do
                  begin
                  lt[i,j]:=(matr[i,j]-llt[i,j])/lt[j,j];
                  for k:=0 to j do
                  llt[i,j+1]:=llt[i,j+1]+lt[i,k]*lt[j+1,k];
                  end
              else
              end;



assign(khol,'c:\tp7\khol');
rewrite(khol);
for j:=0 to 4 do
writeln(khol,lt[j,0]:10:6,' ',lt[j,1]:10:6,' ',lt[j,2]:10:6,' ',lt[j,3]:10:6,' ',lt[j,4]:10:6);
close(khol);


for j:=0 to 4 do
writeln(lt[j,0]:10:6,' ',lt[j,1]:10:6,' ',lt[j,2]:10:6,' ',lt[j,3]:10:6,' ',lt[j,4]:10:6);





end;


                                    begin
                                   
                                    ode;
                                   
                                    kholecky;
                                    readln;
                                    end.

 
 
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 15:58 
Аватара пользователя
ИМХО
Вы S[j] инициализируете только для j от 0 до 4, а используете для j от 0 до 8

 
 
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 16:16 
Аватара пользователя
EUgeneUS
от 0 до 8

 
 
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 16:20 
Аватара пользователя
Вот здесь же инициализируется от 0 до 4.
Используется синтаксис Pascal
for j:=0 to 4 do
begin
     S[j]:=0;
     for i:=0 to 4 do
     begin
         lt[i,j]:=0;
         llt[i,j]:=0;
         matr[i,j]:=0;
     end;
end;
 

PS Исправил тег

 
 
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 16:38 
Дорогие люди, пользуйтесь тегом syntax. :-) Паскаль он, в отличие от каких-то редких языков, всё же поддерживает. Пример:

Используется синтаксис Pascal
for j:=0 to 4 do
begin
    S[j]:=0;
    for i:=0 to 4 do
    begin
        lt[i,j]:=0;
        llt[i,j]:=0;
        matr[i,j]:=0;
    end;
end;

Он и пробелы не съедает начальные, как это делает code иногда.

 
 
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 16:55 
Аватара пользователя
У меня глаза в кучку. Попытался переформатировать для читаемости:

код: [ скачать ] [ спрятать ]
Используется синтаксис Pascal
program numbers;

const
    Nt=40;

type
    mass=array[0..Nt] of real;

var { main program and global variables }
    a,b,h: real;
    n: integer;
    TT,Y: mass;



procedure ODE;

const
    n=Nt;

var
    x,t,h: real;
    i,k,l: integer;

    function F(t,x:real): real; { procedure ODE internal function }
    begin
        F:=0.1*t*t-2*t*x;
    end;

begin { procedure ODE }
    h:=1.485/Nt;
    TT[0]:=0;
    TT[1]:=h;
    Y[0]:=0.1;
    Y[1]:=0.1+h*F(h/2,0.1+(h/2)*F(0,0.1));

    for k:=2 to n do
        begin
        TT[k]:=k*h;
        Y[k]:=Y[k-2]+2*h*F((k-1)*h,Y[k-1]);
        end;
end; { procedure ODE }



procedure kholecky;

type
    mkh=array[0..4,0..4] of real;

var
    matr,lt,llt: mkh;
    S: array[0..8] of real;
    b,z,akh: array[0..4] of real;
    i,j,k: integer;
    p: real;
    khol: text;

begin { procedure kholecky }
    for j:=0 to 4 do
        begin
        S[j]:=0;
        for i:=0 to 4 do
            begin
            lt[i,j]:=0;
            llt[i,j]:=0;
            matr[i,j]:=0;
            end;
        end;

    for j:=0 to Nt do
        begin
        p:=1;
        for k:=0 to 8 do
            begin
            S[k]:=S[k]+p;
            p:=p*TT[j];
            end;
        end;
   
    for k:=0 to 4 do
        for i:=0 to 4 do
            matr[i,k]:=S[i+k];
    for j:=0 to 4 do
        writeln(matr[j,0]:10:6,' ',matr[j,1]:10:6,' ',matr[j,2]:10:6,' ',matr[j,3]:10:6,' ',matr[j,4]:10:6);
   
    for j:=0 to 4 do
        for i:=0 to 4 do
            begin
            end;
   
    for j:=0 to 4 do
        begin
        lt[j,j]:=sqrt(matr[j,j]-llt[j,j]);
        if j<4 then
            for i:=j+1 to 4 do
                begin
                lt[i,j]:=(matr[i,j]-llt[i,j])/lt[j,j];
                for k:=0 to j do
                    llt[i,j+1]:=llt[i,j+1]+lt[i,k]*lt[j+1,k];
                end
        else
        end;
   
    assign(khol,'c:\tp7\khol');
    rewrite(khol);
    for j:=0 to 4 do
        writeln(khol,lt[j,0]:10:6,' ',lt[j,1]:10:6,' ',lt[j,2]:10:6,' ',lt[j,3]:10:6,' ',lt[j,4]:10:6);
    close(khol);
    for j:=0 to 4 do
        writeln(lt[j,0]:10:6,' ',lt[j,1]:10:6,' ',lt[j,2]:10:6,' ',lt[j,3]:10:6,' ',lt[j,4]:10:6);
end; { procedure kholecky }



begin { main program }
    ode;

    kholecky;
    readln;
end. { main program }
 

 
 
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 16:58 

(Оффтоп)

Если начать придираться, я бы ещё пробелов наставил и заменил kholecky на (если это тот?) cholesky.

 
 
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 17:50 
Аватара пользователя

(Оффтоп)

Я бы и Whitesmiths indent style заменил на BSD, но стремился больше следовать оригиналу.
Я бы и констант добавил...

 
 
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 17:58 
Аватара пользователя
arseniiv
Munin
я не эстет в этом деле

 
 
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 17:59 
Аватара пользователя
Дело не в эстетике, а в элементарной читаемости.

 
 
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 19:45 
Аватара пользователя
arseniiv в сообщении #1200309 писал(а):
(если это тот?)

Да, это метод Холецкого. Я по личным причинам написал "kh"

 
 
 [ Сообщений: 53 ]  На страницу Пред.  1, 2, 3, 4  След.


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