1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Вот от нечего делать решил сделать свою программу, в принципе все делается достаточно стандартными способами, вот только отрисовка осей с точками получилось достаточно громоздкая, но может кому-нибудь пригодится ...
uses graph,crt;
var
maxX, maxY : word;
(*
Инициализация графики
*)procedure OpenGr;
var
gd,gm,ge : integer;
begin
gd := Detect;
InitGraph(gd, gm, '');
ge := GraphResult;
if ge <> grOk thenbegin
writeln('Open Graph Error : ',GraphErrorMsg(ge));
readln;
halt(1);
end;
end;
(*
Завершение работы в граф режиме
*)procedure CloseGr;
var
ge : integer;
begin
CloseGraph;
ge := GraphResult;
if ge <> grOk thenbegin
writeln('Close Graph Error : ',GraphErrorMsg(ge));
halt(1);
end;
end;
procedure Initialize(var x,y : word);
begin
x := GetMaxX;
y := GetMaxY;
end;
(*
Отрисовка координатных осей
*)procedure ShowDecart;
var
i,delta,count : integer;
s : string;
begin
SetColor(Red);
// сами линии
line(0, maxY div2, maxX, maxY div2);
line(maxX div2, 0, maxX div2, maxY);
SetColor(white);
SetFillStyle(1, white);
delta := maxY div20;
i := maxX div2;
// далее отрисовка точек и чисел над осями
count := 0;
while (i<=maxX) dobegin
str(count ,s);
circle(i, maxY div2, 2);
outtextxy(i, maxY div2 + 5, s);
FloodFill(i,maxY div2, white);
inc(i, delta);
inc(count);
end;
i := maxX div2;
while (i>=0) dobegin
circle(i, maxY div2, 2);
FloodFill(i, maxY div2, white);
dec(i, delta);
end;
i := maxY div2;
while (i<=maxY) dobegin
circle(maxX div2, i, 2);
FloodFill(maxX div2, i, white);
inc(i, delta);
end;
i := maxY div2;
count := 0;
s:= '';
while (i>=0) dobegin
outtextxy(maxX div2 + 5, i, s);
circle(maxX div2, i, 2);
FloodFill(maxX div2, i, white);
dec(i, delta);
inc(count);
str(count, s);
end;
end;
(*
Вычисляемая функция
*)function F(x : single) : single;
begin
F := -sqr(x)+4;
end;
(*
Функции GX и GY - перевод математических координат
в графические, sx и sy - соответсвенные масштабы по осям x и y
*)function GX(x : Extended; sx : integer) : integer;
begin
GX := trunc(sx * x) + maxX div2;
end;
function GY(y : Extended; sy : integer) : integer;
begin
GY := maxY div2 - trunc(sy * y);
end;
(*
Отрисовка графика
a и b - границы для вычисления функции
*)procedure Shedule(a, b : extended);
const
h : extended = 1E-5; // шаг вычисления
var
i : extended;
scale : word; // масштаб для GX и GY
begin
i := a;
scale := maxY div20;
while(i<=b) dobegin
putpixel(GX(i, scale), GY(F(i), scale), Yellow);
i := i + h;
end;
end;
begin
Clrscr;
OpenGr;
Initialize(maxX, maxY);
ShowDecart;
Shedule(-20,20);
Readln;
CloseGr;
end.
Эскизы прикрепленных изображений
--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
назвался горшком полезай в печь! РАз взялся за это то сделай материал для ФАКа ... эту свою прогу в качестве фичи, а так все проще напиши! Как выводить графики ! с пояснениями, красиво что быбыло. эту мессагу удалишь.
Типа,
Сообщение отредактировано: volvo -
--------------------
Помогая друг другу, мы справимся с любыми трудностями! "Не опускать крылья!" (С)