Pascal. Табулирование и интегрирование функции.
|
|
Сообщений: 154
|
Опубликовано: 18.12.2010, 20:10:24
Доброго времени суток. В институте задали сделать расчетную работу по информатике, сделать надо к 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
|
|
|
|
Сообщений: 825
|
Опубликовано: 18.12.2010, 21:41:43
попробую помочь, вроде не так уж сложно ненавижу "въезжать" в чужие программы З.Ы. приведи примеры тестов З.Ы. Vyzov podprogrammyvyvoda dannyh :DDDD я глаза об комментарии ломаю
:3
|
|
|
|
Сообщений: 154
|
Опубликовано: 18.12.2010, 21:59:07
Фейл либо в табулировании, либо в интеграле, либо и там и там 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
|
|
|
|
Сообщений: 825
|
Опубликовано: 18.12.2010, 22:36:38
жжесть криво ты по видимому скопировал... щас все испровляю Quote (Lex-Serest) приведи примеры тестов я имел ввиду тесты, для проверки выходного значения из проги, желательно побольше З.Ы. как же я хочу спать ><
:3
|
|
|
|
Сообщений: 154
|
Опубликовано: 18.12.2010, 22:48:46
Непонял тебя, вот в общем прога
|
|
|
|
Сообщений: 825
|
Опубликовано: 18.12.2010, 23:08:07
Quote ({NoNaMe-L}PooM_ru) значения выдает неправильные мля, что должен выдавать короче
:3
|
|
|
|
Сообщений: 154
|
Опубликовано: 18.12.2010, 23:11:24
вобщем набор значений 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
|
|
|
|
Сообщений: 825
|
Опубликовано: 18.12.2010, 23:20:11
меня конит в сон, я щас ужасно туплю завтра утром доделаю З.Ы. я спал сегодня около 5 часов >_<
:3
|
|
|
|
Сообщений: 154
|
Опубликовано: 18.12.2010, 23:42:03
Спасибо что помогаешь. С меня плюс в репу.
|
|
|
|
Сообщений: 825
|
Опубликовано: 19.12.2010, 14:11:49
{NoNaMe-L}PooM_ru, у тебя вообще нигде не высчитывается параметр В хотя ты его используешь....
:3
|
|
|
|
Сообщений: 154
|
Опубликовано: 19.12.2010, 14:37:17
Сегодня позанимался, поисправлял, теперь интеграл считает. Проблема походу в табулировании и процедуре REsout
Сообщение отредактировал {NoNaMe-L}PooM_ru - ВС, 19.12.2010, 14:39:31
|
|
|
|
Сообщений: 825
|
Опубликовано: 19.12.2010, 15:18:02
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 хм..
:3
|
|
|
|
Сообщений: 154
|
Опубликовано: 19.12.2010, 15:30:08
Спасибо. А какие изначальные значения задавал? Почему My берем одномерный? почему в resout выводит Ma[I]?
|
|
|
|
Сообщений: 825
|
Опубликовано: 19.12.2010, 16:45:04
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
|
Опубликовано: 19.12.2010, 17:06:17
У меня выдает почему то Runtime error и выдает что ошибка в строчке где Mer[I,J]:=0 процедура табулирования, Влад, огромное спасибо что помогаешь.
|
|
|
|
Сообщений: 141
|
Опубликовано: 19.12.2010, 18:15:53
я бы рад помочь, но паскаль ненаю(
don't worry, keep smile =) {NoNaMe-T}^SwEd^
|
|
|
|
Сообщений: 825
|
Опубликовано: 19.12.2010, 20:12:19
Quote ({NoNaMe-L}PooM_ru) У меня выдает почему то Runtime error и выдает что ошибка в строчке где Mer[I,J]:=0 выложи исходник я могу тебе все исправить, только придется переписывать всю функцию табулирования, так как в ней основная масса ошибок
:3
|
|
|
|
Сообщений: 154
|
Опубликовано: 19.12.2010, 20:34:54
это в той что ты мне скинул ошибка в массиве ошибки.
|
|
|
|
Сообщений: 825
|
Опубликовано: 19.12.2010, 20:35:19
странно у меня в турбо паскале все нормально
:3
|
|
|
|
Сообщений: 154
|
Опубликовано: 19.12.2010, 20:50:52
если в турбопаскале все нормально, то это хорошо. мы как правило работаем в турбопаскале, но я работаю в аабцнет ибо не идет на 64 битах обычный тп. если на турбо идет-значит прога правильная?
|
|
|
|