Sparkling
Регистрация: 29.09.2010
Сообщений: 98
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 93
|
Уравнения
Нашла код программки, хочу её изменить.
Подскажите пожалуйста как это сделать.
Заранее спасибо =)
1. В подобных программах всегда берут процедуру F и конкретное уравнение. Как изменить код так, чтобы я могла с клавиатуры вводить Любое уравнение?
Если я меняю строку -
Код:
function f(x:real):real;
begin { Нужная функция }
f:=sin(x/20)*20;
end;
на -
Код:
function f(x:real):real;
begin
writeln('f=');
read(F);
end;
Паскаль ругается. Почему? =)
2. Именно в этой программе много строк
Код:
line(maxx2,0,maxx2,maxy);
line((maxx2)-4,10,maxx2,0);
line((maxx2)+4,10,maxx2,0);
Они будут изменятся при изменении уравнения или они нарисованы конкретно для этого уравнения?
Код программы:
Код:
uses crt, graph;
const
d1=-100; { Отрезок проверки }
d2=100;
var
x:real;
a:array [1..2, 1..255] of real;
b:boolean;
i,n:byte;
y1,y2,dr,md,maxx,maxy,maxx2,maxy2:integer;
function f(x:real):real;
begin { Нужная функция }
f:=sin(x/20)*20;
end;
procedure search(a,b:real; var x:real);
const e=0.0001; { e - Точность }
begin
repeat
x:=(a+b)/2;
if f(a)*f(x)>0 then a:=x else b:=x;
until abs(f(x))<e;
end;
begin
clrscr;
{
Определение отрезков в которых функция меняет знак
на противоположный, то есть отрезки где лежит корень
}
x:=d1;
if f(d1)>0 then b:=true;
repeat
if b=true then begin
if f(x)<0 then begin
n:=n+1;
a[2,n]:=x;
repeat
x:=x-0.1;
until f(x)>0;
a[1,n]:=x;
x:=a[2,n];
b:=false;
end;
end;
if b=false then begin
if f(x)>0 then begin
n:=n+1;
a[2,n]:=x;
repeat
x:=x-0.1;
until f(x)<0;
a[1,n]:=x;
x:=a[2,n];
b:=true;
end;
end;
x:=x+0.1;
until x>d2;
if n=0 then writeln('Корней нет !!!')
else begin
writeln('В уравнении F(x) на отрезке [',d1,',',d2,'] найдено ',
n,' корн(-ей/-я/-ь)');
for i:=1 to n do begin
search(a[1,i],a[2,i],x);
writeln('X',i,' = ',x:5:3);
end;
end;
writeln('Нажмите клавишу "Enter" для построения');
readln;
dr:=9;
md:=2;
initgraph(dr,md,'c:\bp\bgi');{c:\bp - папка куда установлен TP7.0}
setcolor(12);
maxx:=getmaxx;
maxy:=getmaxy;
maxx2:=maxx div 2;
maxy2:=maxy div 2;
{ось OY}
line(maxx2,0,maxx2,maxy);
line((maxx2)-4,10,maxx2,0);
line((maxx2)+4,10,maxx2,0);
line((maxx2)+10,5,maxx2+14,9);
line((maxx2)+14,9,maxx2+18,5);
line((maxx2)+14,9,maxx2+14,14);
{ось OX}
line(0,maxy2,maxx,maxy2);
line(maxx-10,maxy2-4,maxx,maxy2);
line(maxx-10,maxy2+4,maxx,maxy2);
line(maxx-15,maxy2-12,maxx-7,maxy2-20);
line(maxx-15,maxy2-20,maxx-7,maxy2-12);
{График уравнения}
x:=d1;
setcolor(15);
repeat
y1:=maxy2-round(f(x-1));
y2:=maxy2-round(f(x));
if (y1>0) and (y1<maxy) and (y2>0) and (y2<maxy) then
line((round(x-1)+maxx2),y1,round(x)+maxx2,y2);
x:=x+1;
until x>d2;
readln;
closegraph;
end.
|