08.12.2011, 19:46 | #21 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Код:
Const b=31.39329; Xn=0.5; Xk=2.0; Dx=0.5; An=0.1; Ak=0.5; Da=0.1; Var x,a:Real; Na,Nx,i,j:Byte; Function f(xf,af:real):real; begin If xf<1 then f:=Sin(af*xf/b) else f:=Sqrt(sqr(af)*sqr(sqr(xf))+sqr(b))/xf/sqr(xf); end; BEGIN Nx:=ROUND((Xk-Xn)/Dx); Na:=ROUND((Ak-An)/Da); for i:=0 to Na do begin a:=An+Da*i; for j:=0 to Nx do begin x:=Xn+Dx*j; Writeln('x=',x:3:1,' a=',a:3:1,' f=',f(x,a):0:5); end; end; Readln; END. |
08.12.2011, 20:12 | #23 (permalink) |
Member
Регистрация: 07.12.2011
Сообщений: 39
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
не хочу показаться совсем дураком, но вот к примеру нам нужно написать текст процедуры ввода массива, табулирования функции, ResOut...просто без этого беда будет, а по скольку вы сказали, что в том, что я вам скидывал (в плане "программы") очень много ошибок, я не совсем знаю как это записать...
|
08.12.2011, 20:18 | #24 (permalink) |
Member
Регистрация: 07.12.2011
Сообщений: 39
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
и вот еще проблема, нужно не константами брать, а вызывать из различных подпрограмм (надеюсь правильно выразился). Тоесть например из программы высчитывания b мы вызываем это значение, а не задаем его в виде константы.
|
08.12.2011, 20:21 | #25 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
|
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
08.12.2011, 20:36 | #26 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Код:
Const Xn=0.5; Xk=2.0; Dx=0.5; An=0.1; Ak=0.5; Da=0.1; a0=2.51; b0=-0.69; Var x,a,b:Real; Na,Nx,i,j:Byte; Function I0(x:real):Real; begin I0:=0.5*Sin(x*2); end; Function I1(x:real):Real; begin I1:=Cos(x*2)/4+x*Sin(x*2)/2; end; Function I2(x:real):Real; begin I2:=x/2*Cos(x*2)+(sqr(x)/2-0.25)*Sin(x*2); end; Function I3(x:real):Real; begin I3:=(sqr(x)*0.75-0.375)*Cos(x*2)+(x*sqr(x)/2-0.75*x)*Sin(x*2); end; Function I4(x:real):Real; begin I4:=sqr(sqr(x))*Sin(x*2)/2-2.0*((sqr(x)*0.75-0.375)*Sin(x*2)-(x*sqr(x)/2-x*0/75)*Cos(x*2)); end; Function f(xf,af:real):real; begin If xf<1 then f:=Sin(af*xf/b) else f:=Sqrt(sqr(af)*sqr(sqr(xf))+sqr(b))/xf/sqr(xf); end; BEGIN b:=(I4(b0)+I3(b0)*2+I2(b0)*5+I1(b0)*4+I0(b0)*4)-(I4(a0)+I3(a0)*2+I2(a0)*5+I1(a0)*4+I0(a0)*4); Nx:=ROUND((Xk-Xn)/Dx); Na:=ROUND((Ak-An)/Da); for i:=0 to Na do begin a:=An+Da*i; for j:=0 to Nx do begin x:=Xn+Dx*j; Writeln('x=',x:3:1,' a=',a:3:1,' f=',f(x,a):0:5); end; end; Readln; END. |
|
08.12.2011, 21:16 | #27 (permalink) |
Member
Регистрация: 07.12.2011
Сообщений: 39
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Эхх...просто не смогу объяснить...
Попробую на примере показат тогда...( ---{b*sin^2ax при x<2 y={ ---{xsqrt(ax+b) при Х>+2 Код:
Program TabRgr const Nmax = 20 type Tmy=array[1..Nmax,1..Nmax] of Extended; Tmx=array[1..Nmax] of Extended; Ter=array[1..Nmax,1..Nmax] of integer; var A,Mx:Tmx; My: Tmy; Xn,Xk,Dx,B,C,D,Xo,Eps,Z,Zt:Extended; I,J,K,N,Err,Km:integer; Er:Ter; {Текст процедуры ввода массива} Procedure DataIn(N: Integer;var A:Tmx); var I:integer begin for I:=1 to N do read(A[I]); end; {Текст процедуры табулирования} Procedure Tab(B,Xn,Xk,Dx:Extended; N:Integer; var Er:Ter; var A,Mx:Tmx; Var My:Tmy}; var I,J:Integer; X,Y:Extended begin for J:=1 to N do begin I:=1; X:=Xn; Er[J,I]:=0 repeat if X<2 then Y:=B*sqr(sin(A[j]*X)) else if (A[j]*X+B)>0 then Y:=X*sqrt(A[J]*X+B) else Er[J,I]:=1; Mx[I]:=X; My[J,I]:=Y; Inc(I); X:=X+Dx; until X>Xk end; end; {Текст подпрограммы-функции} Function F(C,D,X:Extended):Extended; begin F:=C*sin(X)+X-D; end; {Пропустим нахождение корня} {Текст процедуры вывода данных} Procedure ResOut(Var Mx:Tmx; var A:Tmx; Var My:Tmy; Var Er:Ter; K:integer); Var I,J:Integer begin for J:=1 to N do {Вывод результатов выполнения программы} begin writeIn('A[',J,']=',A[J]:8:4); writeIn('X', 'Y'); for I:=1 to K do if Er[J,I]=1 then writeIn(Mx[I]:6:3, ' ошибка данных') else writeIn(Mx[I]:6:3,' ',My[J,I]:6:3); end; end; begin {Начало главной програмы} writeIn('Введите значение переменных:Xn,Xk,Dx,N'); readIn(Xn,Xk,Dx,N); writeIn('Xn=',Xn:4:2,' Xk=', Xk:4:2,' Dx=', Dx:4:2,' N=', N); writeIn('Введите значения: параметров уравнения C,D; начального', ' приближения Xo, погрешности Eps, предельного числа циклов Km'); readIn(C,D,Xo,Eps,Km); writeIn('C=',C:6:3, ' D=',D:6:3, ' Xo=',Xo:7:3, ' Eps=',Eps:7:5, ' Km=',Km:3); writeIn('Введите массив из N элементов'); DataIn(N,A); {Вызов подпрограммы ввода массива} Equat(Xo,Eps,Km,Err,Z); {Вызов подпрограммы нахождения корня уравнения} if Err = 1 then begin writeIn('Корень не найден за', Km:2,' итераций'); exit end; Zt:= F(C,D,Z); {Погрешность вычисления корня по невязке} B:=Z; writeIn('Корень равен B=', B:4:2, ' Zt=', Zt:8:7); Tab(B,Xn,Xk,Dx,N,Er,A,Mx,My); {Вызов подпрограммы табулирования} K:= trunc((Xk-Xn)/Dx+1); ResOut(Mx,A,My,Er,K); {Вызов подпрограммы вывода данных} readln; end. Вот по этой программе мы должны были делать, лично я в ней нечего не понимаю( |
08.12.2011, 22:12 | #29 (permalink) |
Member
Регистрация: 07.12.2011
Сообщений: 39
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Вот только если можно, не сможете сделать так, чтобы были не константы, а значения, которые пользователь вводит сам. И все, я перестану вам докучать.
|
09.12.2011, 09:28 | #30 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Я тоже. Тем более, там решается нелинейное уравнение, а мы вроде как договорились, что В ищем через интеграл. И в любом случае - не вижу в упор, зачем в этой задаче нужны массивы. По-моему, они тут "не пришей кобыле хвост".
Цитата:
Код:
Const a0=2.51; b0=-0.69; Var x,a,b,Xn,Xk,Dx,An,Ak,Da:Real; Na,Nx,i,j:Byte; Function I0(x:real):Real; begin I0:=0.5*Sin(x*2); end; Function I1(x:real):Real; begin I1:=Cos(x*2)/4+x*Sin(x*2)/2; end; Function I2(x:real):Real; begin I2:=x/2*Cos(x*2)+(sqr(x)/2-0.25)*Sin(x*2); end; Function I3(x:real):Real; begin I3:=(sqr(x)*0.75-0.375)*Cos(x*2)+(x*sqr(x)/2-0.75*x)*Sin(x*2); end; Function I4(x:real):Real; begin I4:=sqr(sqr(x))*Sin(x*2)/2-2.0*((sqr(x)*0.75-0.375)*Sin(x*2)-(x*sqr(x)/2-x*0/75)*Cos(x*2)); end; Function f(xf,af:real):real; begin If xf<1 then f:=Sin(af*xf/b) else f:=Sqrt(sqr(af)*sqr(sqr(xf))+sqr(b))/xf/sqr(xf); end; BEGIN b:=(I4(b0)+I3(b0)*2+I2(b0)*5+I1(b0)*4+I0(b0)*4)-(I4(a0)+I3(a0)*2+I2(a0)*5+I1(a0)*4+I0(a0)*4); Write('Xn= '); Readln(Xn); Write('Xk= '); Readln(Xk); Write('Dx= '); Readln(Dx); Write('An= '); Readln(An); Write('Ak= '); Readln(Ak); Write('Da= '); Readln(Da); Nx:=ROUND((Xk-Xn)/Dx); Na:=ROUND((Ak-An)/Da); for i:=0 to Na do begin a:=An+Da*i; for j:=0 to Nx do begin x:=Xn+Dx*j; Writeln('x=',x:3:1,' a=',a:3:1,' f=',f(x,a):0:5); end; end; Readln; END. |
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|