Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите в паскале нарисовать график y=e( в степени х)

Эльвира Рамазанова Ученик (85), закрыт 14 лет назад
Лучший ответ
Gennady Гений (60220) 15 лет назад
Доброго времени суток.

Не только e^x, но и любой другой, определяемый процедурой F.

program PlotGraph;
uses Crt, Graph;
const
NumPoints = 1000;
Hint = 'Esc - Exit';

type
TPoint = record
Arg, Func : Real;
end;

var
Gd,Gm : Integer;
Curv : array[1..NumPoints] of TPoint;
xMin, xMax, yMin, yMax : Real;

function F(X: Real): Real; forward;

procedure CalcData(MinX, MaxX: Real);
var
X, h : Real;
i : Integer;
begin
h := (MaxX - MinX) / NumPoints;
X := MinX;
for i:=1 to NumPoints do begin
Curv.Arg := X;
Curv.Func := F(X);
if Curv.Func < yMin then yMin := Curv.Func;
if Curv.Func > yMax then yMax := Curv.Func;
X := X + h;
end;
xMin := Curv[1].Arg;
xMax := Curv[NumPoints].Arg;
end;

procedure DrawGrid(Msg: String; Grid: Boolean);
const
HorStart = 39;
HorEnd = 639;
VertStart = 25;
VertEnd = 425;
ColorGrid = DarkGray;
ColorAxes = LightRed;
ColorNum = Green;
ColorMsg = LightGray;

var
CurrentLine : Integer;
GridLine : Integer;
Digit,Point : Integer;
AnyStr : String;
GridNum : Real;
Ts : TextSettingsType;
C : Word;

begin
SetViewPort(0, 0, HorEnd, VertEnd+34, ClipOn);
GetTextSettings(Ts);
C := GetColor;
ClearViewPort;
SetColor(ColorMsg);
OutTextXY(0, VertEnd+25, Msg);
SetTextStyle(SmallFont, HorizDir, 4);

{ Draw Hor Lines }
Digit := 4;
Point := 2;
CurrentLine := VertStart;
for GridLine:=0 to 10 do begin
if GridLine = 10 then begin
SetColor(ColorAxes);
SetWriteMode(NormalPut);
end
else begin
SetColor(ColorGrid);
SetWriteMode(XORPut);
end;
if not Grid then begin
if (GridLine = 10) then Line(HorStart, CurrentLine, HorEnd, CurrentLine);
end
else Line(HorStart+1, CurrentLine, HorEnd, CurrentLine);
GridNum := yMax - (Round(yMax - yMin) * GridLine) / 10;
Str(GridNum:Digit:Point, AnyStr);
if GridNum >= 0 then Insert(' ', AnyStr, 1);
SetColor(ColorNum);
SetWriteMode(NormalPut);
OutTextXY(0, CurrentLine - 3 * TextHeight('H') div 4, AnyStr);
Inc(CurrentLine, (VertEnd - VertStart) div 10);
end;

{ Draw Vert Lines }
Digit := 4;
Point := 2;
CurrentLine := HorStart;
for GridLine:=0 to 10 do begin
if GridLine = 0 then begin
SetColor(ColorAxes);
SetWriteMode(NormalPut);
end
else begin
SetColor(ColorGrid);
SetWriteMode(XORPut);
end;
if not Grid then begin
if GridLine = 0 then Line(CurrentLine, VertStart, CurrentLine, VertEnd-1);
end
else Line(CurrentLine, VertStart, CurrentLine, VertEnd-1);
GridNum := xMin + ((Round(xMax - xMin) * GridLine) / 10);
Str(GridNum:Digit:Point, AnyStr);
if GridNum >= 0 then Insert(' ', AnyStr, 1);
SetColor(ColorNum);
SetWriteMode(NormalPut);
OutTextXY(CurrentLine-20, VertEnd+5, AnyStr);
Inc(CurrentLine, (HorEnd - HorStart) div 10);
end;
with Ts do SetTextStyle(Font, Direction, CharSize);
SetViewPort(HorStart, VertStart, HorEnd, VertEnd, ClipOn);
SetColor(C);
end;

procedure DrawCurve;
var
xRel : Real;
yRel : Real;
x, y : Longint;
Vp : ViewPortType;
i : Integer;

procedure CalcXY;
begin
x := Round(( Curv.Arg - xMin) * xRel);
y := Round((-Curv.Func + yMax) * yRel);
end;

begin
GetViewSettings(Vp);
with Vp do begin
xRel := (x2 - x1) / (xMax - xMin);
yRel := (y2 - y1) / (yMax - yMin);
end;

i := 1;
CalcXY;
MoveTo(x,y);
for i:=2 to NumPoints do begin
CalcXY;
LineTo(x, y);
end;
end;

function F(X: Real): Real;
begin
F := Exp(X);
end;

begin
DetectGraph(Gd,Gm) ; InitGraph(Gd,Gm,'D:\BP\bgi');
if GraphResult <> grok then Halt(1);
CalcData(-5, 2);
DrawGrid(Hint, True);
DrawCurve;

repeat until ReadKey = #27;
CloseGraph;
end.

Удачи!
Остальные ответы
Похожие вопросы