2014 dxdy logo

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

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





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


11/12/16
1201
... во втором случае, количество запусков программы можно сохранять в переменной окружения, эффект будет, как описано.

 Профиль  
                  
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 15:27 
Заслуженный участник
Аватара пользователя


22/01/11
1899
СПб
rockclimber в сообщении #1200199 писал(а):
Указатели используете?

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

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

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

сам

 Профиль  
                  
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 15:31 
Заслуженный участник
Аватара пользователя


30/01/06
63221
alcoholist в сообщении #1200276 писал(а):
И ведь обнуляю внутри процедур все массивы

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

 Профиль  
                  
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 15:33 
Заслуженный участник


06/07/11
3493
А в чем проблема код показать? Если неохота по каким-то причинам (у вас секретная разработка, которая на Нобеля потянет, например), попробуйте выкинуть все лишнее и подготовить максимально абстрактый и короткий код, воспроизводящий ошибку. Иногда, в процессе такой подготовки, ошибка сама находится. А не хотите, так стандартный ответ в такой ситуации - "ошибка в 17-й строке".

 Профиль  
                  
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 15:47 
Заслуженный участник
Аватара пользователя


22/01/11
1899
СПб
Вот, собственно, код. В процедуре 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 


11/12/16
1201
ИМХО
Вы S[j] инициализируете только для j от 0 до 4, а используете для j от 0 до 8

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


22/01/11
1899
СПб
EUgeneUS
от 0 до 8

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


11/12/16
1201
Вот здесь же инициализируется от 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 
Заслуженный участник
Аватара пользователя


27/04/09
20175
Уфа
Дорогие люди, пользуйтесь тегом 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 
Заслуженный участник
Аватара пользователя


30/01/06
63221
У меня глаза в кучку. Попытался переформатировать для читаемости:

код: [ скачать ] [ спрятать ]
Используется синтаксис 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 
Заслуженный участник
Аватара пользователя


27/04/09
20175
Уфа

(Оффтоп)

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

 Профиль  
                  
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 17:50 
Заслуженный участник
Аватара пользователя


30/01/06
63221

(Оффтоп)

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

 Профиль  
                  
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 17:58 
Заслуженный участник
Аватара пользователя


22/01/11
1899
СПб
arseniiv
Munin
я не эстет в этом деле

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


30/01/06
63221
Дело не в эстетике, а в элементарной читаемости.

 Профиль  
                  
 
 Re: злопамятный tp7, помогите!
Сообщение14.03.2017, 19:45 
Заслуженный участник
Аватара пользователя


22/01/11
1899
СПб
arseniiv в сообщении #1200309 писал(а):
(если это тот?)

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 53 ]  На страницу Пред.  1, 2, 3, 4  След.

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



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

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


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

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