Консультация № 110812
24.11.2007, 19:08
0.00 руб.
0 1 1
Уважаемые эксперты, не могли бы вы предоставить програму для построения графика функции (например sqrt(1+sqr(x)) ) на интервале от a до b.

Обсуждение

Неизвестный
25.11.2007, 12:52
общий
это ответ

<i>Здравствуйте, <b>Silencio</b>!</i>

В приложении находится модифицированный код моего ответа на вопрос №<a href=http://rusfaq.ru/info/question/87955>87955</a>.

Модификация коснулась только функции <code>funcY</code>.
Как я уже писал в прошлый раз, из данного примера можно сделать отрисовку графика любой функции. Для нужно только вставить ее в функцию funcY(X).

<em>Прим</em>.:
Без файла <em>egavga.bgi</em> программа работать не будет. Файл находится в папке <em>BGI</em>, его нужно оттуда скопировать в папку проекта, либо прописать путь к файлу в переменной окружения %PATH%.

<i>Удачи!</i>

Приложение:
program q110812;uses Graph, Crt; function funcY(const X: Real): Real; begin funcY:= sqrt(1+sqr(x)); end; var mode, Driver, i: Integer; y: Real; x1, x2, delta, x: Real; y1, y2: Real; strTemp: String; Res: array[1..100] of Real;begin ClrScr; Write(‘ a = ‘); ReadLn(x1); Write(‘ b = ‘); ReadLn(x2); Driver:= InstallUserDriver(‘egavga‘, nil); mode:= 1; InitGraph(Driver, mode, ‘‘); if (GraphResult <> grOk) then begin WriteLn(‘Graph driver ‘, driver, ‘ graph mode ‘, mode, ‘ not supported‘); Halt(1); end; setcolor(10); setviewport(0,0,550,300,true); rectangle(1,0,550,300); setcolor(7); line(0,150,550,150); line(275,0,275,300); setcolor(12); Str(x1:1:2, strTemp); outtextxy(25,153,strTemp); Str(x2:1:2, strTemp); outtextxy(500,153,strTemp); setcolor(14); outtextxy(540,143,‘x‘); outtextxy(278,1,‘y‘); delta:= (x2 - x1)/40; x:= x1; for i:= 1 to 100 do begin Res[i]:= funcY(x); x:= x + delta; end; y1:= Res[1]; y2:= Res[1]; for i:= 2 to 100 do if (Res[i] > y1) then y1:= Res[i] else if (Res[i] < y2) then y2:= Res[i]; setcolor(12); Str(y1:1:2, strTemp); outtextxy(278,10,strTemp); Str(y2:1:2, strTemp); outtextxy(278,290,strTemp); for i:= 1 to 100 do begin setcolor(9); y:= 290 - (Res[i] - y2)*280/(y1 - y2); if (i = 1) then begin setcolor(0); lineto(25, trunc(y)); end else lineto(20 + i*5, trunc(y)); end; ReadLn; CloseGraph; end.
Форма ответа