Показать сообщение отдельно

  #3  
Старый 12.09.2009, 12:32
Dosia
Участник форума
Регистрация: 05.06.2009
Сообщений: 127
С нами: 8912059

Репутация: 249
По умолчанию

Цитата:
Есть ли в Pascal'e функция для определения отрезка ?

Мне нужно проверить число, чтобы оно не входило в отрезок [0.5-2]
Все очень просто If (твое число < 0.5) or (твое число > 2) then Пишеш тут что будет выполнятся если число не входит в данный отрезок.

По поводу ДУ, могу лишь предоставить код своей проги которая считала их методом:
1) Модифицированный метод Эйлера
2) Метод Рунге-Кутта

Описанные выше методы мне не знакомы, возможно это одно и тоже просто разными словами?

Код:
program TASK5;
uses graph;
var
   mas:array[1..2]of real;
   x0,y0,y1,y2,y3,h,t,y4,y5,x,y,xk,yk,ye,yr,ya,k1,k2,k3,k4,h1,k11,k21,k31,k41,ye1,yr1:real;
   i,gd,gm,j,n,z:integer;

function xm(x:real):integer;
         begin
              xm:=round(320+960*x);
         end;

function ym(y:real):integer;
         begin
         ym:=round(240-720*x);
         end;

function  f(a:real):real;
          begin
          f:=exp(a)+1;
          end;

procedure linovka;
var x,y:integer;
begin
setcolor(15);{color is white}
x:=5;y:=0;
setlinestyle(2,6,1);
repeat {draw vertical line}
line(x,0,x,GetMaxY);
x:=x+35;
until x>GetMaxX;
repeat {draw horizontal line}
line(0,y,GetMaxX,y);
y:=y+30;
until y>GetMaxY;
end;

procedure DrawAxisA;
begin
setcolor(15);{color is white}
setlinestyle(0,3,3);{line style,border widht,Thickness of line}
{draw axis of ordinate}
line(round(GetMaxX/2),0,round(GetMaxX/2),GetMaxY);
line(round(GetMaxX/2),0,round(GetMaxX/2-5),10);
line(round(GetMaxX/2),0,round(GetMaxX/2+5),10);
{draw axis of abscis}
line(round(GetMaxX),round(GetMaxY /2),GetMaxX-10,round(GetMaxY/2-5));
line(round(GetMaxX),round(GetMaxY /2),GetMaxX-10,round(GetMaxY/2+5));
line(0,round(GetMaxY/2),GetMaxX,round(GetMaxY/2));
end;

begin
     mas[1]:=0.01;
     mas[2]:=0.001;
     x0:=0;
     xk:=10;
     y0:=exp(1)+1;
     writeln ('                  x       1       2          a     ');
     for j:=1 to 2 do
         begin
              x:=x0;
              ye:=y0;
              yr:=y0;
              n:=round((xk-x0)/(mas[j]));
              for i:=1 to n do
                  begin
                       ye:=ye+mas[j]*f(x+mas[j]/2);
                       k1:=mas[j]*f(x);
                       k2:=mas[j]*f(x+mas[j]/2);
                       k3:=mas[j]*f(x+mas[j]/2);
                       k4:=mas[j]*f(x+mas[j]);
                       yr:=yr+(k1+2*k2+2*k3+k4)/6;
                       ya:=exp(x)+x;
                       x:=x+mas[j];
                       if (j=1) and (i mod 100 = 0) then
                       writeln ('step = ', mas[j]:5:3,' ',x:8:5,' ',ye/10000:8:5,' ', yr/10000:8:5,' ', ya/10000:8:5);
                       if (j=2)and(i mod 1000= 0) then
                       writeln ('step = ', mas[j]:5:3,' ',x:8:5,' ',ye/10000:8:5,' ', yr/10000:8:5,' ', ya/10000:8:5);
                  end;
              end;
         readln;
         gd:=detect;
         initgraph(gd,gm,'');
	linovka;
	DrawAxisA;
	setlinestyle(0,3,3);{line style,border widht,Thickness of line}
         x0:=0;
         xk:=10;
         y0:=exp(1)+1;
         x:=x0;
         ye:=y0;
         yr:=y0;
         ye1:=y0;
         yr1:=y0;
         for j:=1 to 5000 do
         begin
         t:=j/500;
                  x:=t/50;
                  h:=0.01;
                  h1:=0.001;
                  ye:=ye+h*f(x+h/2);
                  k1:=h*f(x);
                  k2:=h*f(x+h/2);
                  k3:=h*f(x+h/2);
                  k4:=h*f(x+h);
                  yr:=yr+(k1+2*k2+2*k3+k4)/6;
                  ya:=exp(x)+x;
                  x:=x+h;
                  ye1:=ye1+h1*f(x+h1/2);
                  k11:=h1*f(x);
                  k21:=h1*f(x+h1/2);
                  k31:=h1*f(x+h1/2);
                  k41:=h1*f(x+h1);
                  yr1:=yr1+(k11+2*k21+2*k31+k41)/6;
                  putpixel(xm(x),ym(ye),red);
                  putpixel(xm(x),ym(yr),green);
                  putpixel(xm(x),ym(ye1),yellow);
                  putpixel(xm(x),ym(yr1),blue);
                  putpixel(xm(x),ym(ya),brown);
             end;
         readln;
     end.

Последний раз редактировалось Dosia; 12.09.2009 в 13:52..
 
Ответить с цитированием