Тема: Уравнения
Показать сообщение отдельно
Старый 03.04.2011, 13:47   #1 (permalink)
Хелен
Sparkling
 
Аватар для Хелен
 
Регистрация: 29.09.2010
Сообщений: 98
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 93
Arrow Уравнения

Нашла код программки, хочу её изменить.
Подскажите пожалуйста как это сделать.
Заранее спасибо =)

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.
Хелен вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070