[ Обновленные темы · Новые сообщения · Участники · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум » Свободная зона » Флудилка » Pascal. Табулирование и интегрирование функции. (Простите что вообще создаю тему, очень нужна помощь.)
Pascal. Табулирование и интегрирование функции.
Проверенные
Сообщений: 154
Реп: 7
Доброго времени суток.
В институте задали сделать расчетную работу по информатике, сделать надо к 20.12 или недопуск к зачету. Вобщем дана функция A*sqr(x)+B*x+cos(3.14*(A/B)), Аргумент Х изменяется, где Xn-начальное, Dx-шаг, N-количество значений Параметр А изменяется,где An-начальное Ak-конечное Da-шаг. Параметр B численно равен определенному интегралу c нижнм пределом интегрирования c=1.37 и верхним d=2.15. Функция интеграла f:=ln(x)*cos(x). Также задается погрешность Eps и предельное число итераций Km. Программа написана, запускается, но значения выдает неправильные. Умоляю, помогите.
Code

Program TabRGR;
{Tim Rubchenko, 04-113, 14.12.2010}
{Programma tabulirovanja funkcii Y=f(A,B,X), gde argument X izmenjaetsja ot   
nachalnogo Xn s shagom Dx prinimaet N razlich.
   znachenij, parametrA izmenjaetsja
   ot An do Ak s shagom Da,a parametr B
    chislenno raven integralu f-cii
     ln(x)*cos(x),vychisl.prizazdannyhznachenijah c i d i pogreshnosti Eps}
const Nmax=20;
        type
        Tmy=Array[1..Nmax,1..Nmax] of real;
        Tmx=Array[1..Nmax] of real;
        Ter=Array[1..Nmax,1..Nmax] of integer;
Var
Ma,Mx:Tmx;
My:Tmy;
Xn,Dx,B,An,Ak,Da,C,D,Eps,Int:real;

K,N,Er,Km:integer;
Mer:Ter;

{Text of function}
Function F(X:real): real;
begin
   F:=ln(x)*cos(x);
   end;

   {Text procedure of integrate}
Procedure Integrate(C,D,Eps:real; Km:Integer; Var Int:Real; Var Er:Integer);
Var
     X,Int1,Y1,Yn,S4,S2,H,Del:real;
     K,I,J:Integer;
begin
       In1:=0;
       Y1:=F(c);
       Yn:=F(d);
       K:=2;
       Er:=1;
       J:=1;
       While J<=Km do
       begin
            In:=0;
            H:=(d-c)/k;
            S4:=0;
            S2:=0;
            I:=1;
            X:=c+H;
              
       repeat
             If odd(I) then S4:=S4+F(x)
             else S2:=S2+F(x);
             Int:=H*(Y1+Yn+4*S4+2*S2)/3;
             Inc(I);
             X:=X+H;      
       Until I>=K;
             del:=Abs(Int1-Int);
             If del<Eps then begin
             Er:=Er-1;
             J:=Km;
             Exit;
             end
      else                
   Begin           
            Int1:=Int;
            k:=k+2;
            J:=J+1;
            end;
            end;
       end;

{Text procedure of tabulation}
Procedure Tab(B,Xn,Dx,An,Ak,Da:real; N:integer;  var Ma,Mx:Tmx; var My:Tmy; var Mer:Ter);
var
     I,J:Integer;
     A,X,Y:Real;
     begin
       I:=1;
          A:=An;
          While A<=Ak do begin
           
          X:=Xn;
          For J:=1 to N do begin
          Mer[I,J]:=0;
           if b<>0 then   
             
             
           Y:=A*sqr(x)+B*x+cos(3.14*(A/B))
           else Mer[I,J]:=1;
             
             
           X:=Xn+Dx;
           Mx[J]:=X;
           end;
             

     My[I,J]:=Y;
Ma[I]:=A;
A:=A+Da
end;
end;

{Text procedure ResOut}
Procedure ResOut(Var Mx:Tmx; var Ma:Tmx; Var My:Tmy; Var Mer:Ter; K:integer);
Var
     I,J:integer;
begin
       for I:=1 to N do {Vyvod result vypolnenija programmy}
        begin
             writeln('A[',I,']=',Ma[I]:8:4);
             writeln('   X','          Y');
              for J:=1 to K do
              If Mer[I,J]=1 then
               writeln(Mx[I]:6:3, ' ERROR B DAHHblX')
               else
               writeln(Mx[I]:6:3, '    ',My[I,J]:6:3);
        end;
end;

begin {Start of general program}
   writeln('BBEDuTE 3HA4EHu9I nEPEMEHHbIX:Xn,Dx,N,Ak,An,Da');
   readln(Xn,Dx,N,Ak,An,Da);
Writeln('Xn=',Xn:4:2,' Dx=',Dx:4:2,' N=',N, ' Ak=',Ak,' An=',An,' Da=',Da);
writeln('BBEDuTE nPEDEJIbI uHTerpupoBaHu9 C,D,norpewHocTb Eps',
   ', npeDeJIbHoe 4ucJIo u,ukJIoB Km');
readln(C,D,Eps,Km);
writeln('C=',C:6:3,' D=',D:6:3,' Eps=',Eps:7:5,' Km=',Km:3);
   Integrate(C,D,Eps,Km,Int,Er); {Vyzov programmy nahozhdenija integrala}
if Er=1 then
     begin
          writeln('UHTErPAJl HE HAUDEH 3a ', Km:2,' iteracij');
          exit
     end;
writeln('Integral PABEH B=',B:4:2);
Tab(B,Xn,Dx,An,Ak,Da,N,Ma,Mx,My,Mer); {Vyzov podprogrammy tabulirovania}
K:=trunc((Ak-An)/Da+1);
ResOut(Mx,Ma,My,Mer,K);  {Vyzov podprogrammyvyvoda dannyh}
readln;
end.


Сообщение отредактировал {NoNaMe-L}PooM_ru - СБ, 18.12.2010, 21:58:29
 
Lex-Serest
Админы
Сообщений: 825
Реп: 83 / Инв: 14
попробую помочь, вроде не так уж сложно
ненавижу "въезжать" в чужие программы

З.Ы. приведи примеры тестов
З.Ы. Vyzov podprogrammyvyvoda dannyh :DDDD я глаза об комментарии ломаю


:3
 
Проверенные
Сообщений: 154
Реп: 7
Фейл либо в табулировании, либо в интеграле, либо и там и там
Code
BBEDuTE 3HA4EHu9I nEPEMEHHbIX:Xn,Dx,N,Ak,An,Da
0.8 0.2 5 20 10 1
Xn=0.80 Dx=0.20 N=5 Ak=20 An=10 Da=1
BBEDuTE nPEDEJIbI uHTerpupoBaHu9 C,D,norpewHocTb Eps, npeDeJIbHoe 4ucJIo u,ukJIoB Km
1.37 2.15 0.0001 50
C= 1.370 D= 2.150 Eps=0.00010 Km= 50
Integral PABEH B=0.00
A[1]= 20.0000
     X          Y
   1.000 ERROR B DAHHblX
   1.000 ERROR B DAHHblX
   1.000 ERROR B DAHHblX
   1.000 ERROR B DAHHblX
   1.000 ERROR B DAHHblX
   1.000     0.000
   1.000     0.000
   1.000     0.000
   1.000     0.000
   1.000     0.000
   1.000     0.000
A[2]=  0.0000
     X          Y
   1.000     0.000
   1.000     0.000
   1.000     0.000
   1.000     0.000
   1.000     0.000
   1.000     0.00 0
   1.000     0.000
   1.000     0.000
   1.000     0.000
   1.000     0.000
   1.000     0.000
A[3]=  0.0000
     X          Y
   1.000     0.000
   1.000     0.000
   1.000     0.000
   1.000     0.000
   1.000     0.000
   1.000     0.00 0
   1.000     0.000
   1.000     0.000
   1.000     0.000
   1.000     0.000
   1.000     0.000
A[4]=  0.0000
     X          Y
   1.000     0.000
   1.000     0.000
   1.000     0.000
   1.000     0.000
   1.000     0.000
   1.000     0.00 0
   1.000     0.000
   1.000     0.000
   1.000     0.000
   1.000     0.000
   1.000     0.000
A[5]=  0.0000
     X          Y
   1.000     0.000
   1.000     0.000
   1.000     0.000
   1.000     0.000
   1.000     0.000
   1.000     0.00 0
   1.000     0.000
   1.000     0.000
   1.000     0.000
   1.000     0.000
   1.000     0.000

За комментарии сорри, писал на ТР, на своем компе работаю в PascalABC.NET

Сообщение отредактировал {NoNaMe-L}PooM_ru - СБ, 18.12.2010, 21:59:52
 
Lex-Serest
Админы
Сообщений: 825
Реп: 83 / Инв: 14
жжесть криво ты по видимому скопировал... щас все испровляю

Quote (Lex-Serest)
приведи примеры тестов

я имел ввиду тесты, для проверки выходного значения из проги, желательно побольше

З.Ы. как же я хочу спать ><


:3
 
Проверенные
Сообщений: 154
Реп: 7
Непонял тебя, вот в общем прога
Прикрепления: 04-113OM.pas (3.4 Kb)
 
Lex-Serest
Админы
Сообщений: 825
Реп: 83 / Инв: 14
Quote ({NoNaMe-L}PooM_ru)
значения выдает неправильные

мля, что должен выдавать короче


:3
 
Проверенные
Сообщений: 154
Реп: 7
вобщем набор значений X и Y должен выдавать. Границы интеграла всегда равны 1.37 и ,2.15. Какое N задаем столько наборов ответов X и Y будет.
Km обычно задают от 50 и более, Eps как правило от 0.01 до 0.0001


Сообщение отредактировал {NoNaMe-L}PooM_ru - СБ, 18.12.2010, 23:12:40
 
Lex-Serest
Админы
Сообщений: 825
Реп: 83 / Инв: 14
меня конит в сон, я щас ужасно туплю
завтра утром доделаю

З.Ы. я спал сегодня около 5 часов >_<


:3
 
Проверенные
Сообщений: 154
Реп: 7
Спасибо что помогаешь. С меня плюс в репу.
 
Lex-Serest
Админы
Сообщений: 825
Реп: 83 / Инв: 14
{NoNaMe-L}PooM_ru, у тебя вообще нигде не высчитывается параметр В хотя ты его используешь....

:3
 
Проверенные
Сообщений: 154
Реп: 7
Сегодня позанимался, поисправлял, теперь интеграл считает. Проблема походу в табулировании и процедуре REsout
Прикрепления: 3934039.pas (3.4 Kb)


Сообщение отредактировал {NoNaMe-L}PooM_ru - ВС, 19.12.2010, 14:39:31
 
Lex-Serest
Админы
Сообщений: 825
Реп: 83 / Инв: 14
Code
Integral PABEH B=-0.10
A[1]= 21.0000
     X          Y
   2.800    164.280
   3.000    198.125
   3.200    236.016
   3.400    278.091
   3.600    324.542
   0.000     0 .000
   0.000     0.000
   0.000     0.000
   0.000     0.000
   0.000     0.000
   0.000     0.000
A[2]= 22.0000
     X          Y
   2.800    164.280
   3.000    198.125
   3.200    236.016
   3.400    278.091
   3.600    324.542
   0.000     0 .000
   0.000     0.000
   0.000     0.000
   0.000     0.000
   0.000     0.000
   0.000     0.000
A[3]= 23.0000
     X          Y
   2.800    164.280
   3.000    198.125
   3.200    236.016
   3.400    278.091
   3.600    324.542
   0.000     0 .000
   0.000     0.000
   0.000     0.000
   0.000     0.000
   0.000     0.000
   0.000     0.000
A[4]= 24.0000
     X          Y
   2.800    164.280
   3.000    198.125
   3.200    236.016
   3.400    278.091
   3.600    324.542
   0.000     0 .000
   0.000     0.000
   0.000     0.000
   0.000     0.000
   0.000     0.000
   0.000     0.000
A[5]= 25.0000
     X          Y
   2.800    164.280
   3.000    198.125
   3.200    236.016
   3.400    278.091
   3.600    324.542
   0.000     0 .000
   0.000     0.000
   0.000     0.000
   0.000     0.000
   0.000     0.000
   0.000     0.000

хм..
Прикрепления: 9068973.pas (3.1 Kb)


:3
 
Проверенные
Сообщений: 154
Реп: 7
Спасибо. А какие изначальные значения задавал? Почему My берем одномерный? почему в resout выводит Ma[I]?
 
Lex-Serest
Админы
Сообщений: 825
Реп: 83 / Инв: 14
Quote ({NoNaMe-L}PooM_ru)
А какие изначальные значения задавал?

Code
BBEDuTE 3HA4EHu9I nEPEMEHHbIX:Xn,Dx,N,Ak,An,Da   
0.8 0.2 5 20 10 1   
Xn=0.80 Dx=0.20 N=5 Ak=20 An=10 Da=1   
BBEDuTE nPEDEJIbI uHTerpupoBaHu9 C,D,norpewHocTb Eps, npeDeJIbHoe 4ucJIo u,ukJIoB Km   
1.37 2.15 0.0001 50   
C= 1.370 D= 2.150 Eps=0.00010 Km= 50

эти же

Quote ({NoNaMe-L}PooM_ru)
Почему My берем одномерный?

просто хотел проверить, у тебя как раз в этом и была ошибка

Quote ({NoNaMe-L}PooM_ru)
почему в resout выводит Ma[I]?

у тебя изначально выводилось Мa[I] я только убрал иф и сделал вывод, без сравнения есть ли ошибка или нет, так как смысла в этом я не увидел


:3
 
Проверенные
Сообщений: 154
Реп: 7
У меня выдает почему то Runtime error и выдает что ошибка в строчке где Mer[I,J]:=0 процедура табулирования, Влад, огромное спасибо что помогаешь.
 
{NoNaMe-T}^SwEd^
Проверенные
Сообщений: 141
Реп: 4
я бы рад помочь, но паскаль ненаю(


don't worry, keep smile =)
{NoNaMe-T}^SwEd^
 
Lex-Serest
Админы
Сообщений: 825
Реп: 83 / Инв: 14
Quote ({NoNaMe-L}PooM_ru)
У меня выдает почему то Runtime error и выдает что ошибка в строчке где Mer[I,J]:=0

выложи исходник
я могу тебе все исправить, только придется переписывать всю функцию табулирования, так как в ней основная масса ошибок


:3
 
Проверенные
Сообщений: 154
Реп: 7
это в той что ты мне скинул ошибка в массиве ошибки.
 
Lex-Serest
Админы
Сообщений: 825
Реп: 83 / Инв: 14
странно у меня в турбо паскале все нормально

:3
 
Проверенные
Сообщений: 154
Реп: 7
если в турбопаскале все нормально, то это хорошо. мы как правило работаем в турбопаскале, но я работаю в аабцнет ибо не идет на 64 битах обычный тп. если на турбо идет-значит прога правильная?
 
Форум » Свободная зона » Флудилка » Pascal. Табулирование и интегрирование функции. (Простите что вообще создаю тему, очень нужна помощь.)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: