Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите пожалуйста
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Neuropunka
построить график функции y=e^sinx при х<0 в паскале что-то у меня вообще не чего не выходит. Парни выручайте нужно очень срочно. unsure.gif unsure.gif unsure.gif
Lapp
Цитата(Neuropunka @ 3.06.2011 3:21) *
построить график функции y=e^sinx при х<0 в паскале что-то у меня вообще не чего не выходит.

Покажи, что и как не выходит.
Поможем.
Neuropunka
 Program UniversalGraph; 
Uses Graph;

Type Fun = Function(X:Real):Real;

Procedure Graphic(F:Fun; XBeg,XEnd:Real);
Var
Max, Min, {Экстремальные точки функции в пределах диапазона}
I, {Переменная цикла}
Step, {Расчитываемый шаг}
GradX, {Приращение функции на один шаг по X}
GradY: Real; {Приращение функции на один шаг по Y}
GraphicX, {Координата по X}
GraphicY: Integer; {Координата по Y}
Flag: Boolean; {Флаг - перемещена первая точка}

Procedure Coord (CoordYBeg, CoordYEnd, CoordHMin, CoordHMax: Real);
Var GradX, GradYX: Real;
X, Y: Integer;
Color: Word;
Begin
Color:=GetColor;
SetColor (7);
GradX :=GetMaxX/(CoordYEnd-CoordYBeg);
GradYX:=GetMaxY/(CoordHMax-CoordHMin);
If (CoordYEnd>0) And (CoordYBeg<0) Then
Y:=Round(GradX*(0-CoordYBeg));
If CoordYEnd<0 Then Y:=GetMaxY;
If CoordYBeg>0 Then Y:=1;
If (CoordHMin<0) And (CoordHMax>0) Then
X:=Round(GradYX*(CoordHMax));
If CoordHMin>0 Then X:=GetMaxY;
If CoordHMax<0 Then X:=1 ;
Line (1,X,GetMaxX,X); {Горизонтальная линия}
Line (GetMaxX-4,X+5,GetMaxX,X); {Стрелочка}
Line (GetMaxX-4,X-5,GetMaxX,X); {Стрелочка}
Line (Y,1,Y,GetMaxY); {Вертикальная линия }
Line (Y-5,5,Y,1); {Стрелочка}
Line (Y+5,5,Y,1); {Стрелочка}
SetColor (Color);
End;


Begin
Step:=(XEnd-XBeg)/(GetMaxY-40);
I:=XBeg;
Max:=F(XBeg);
Min:=F(XBeg);
While I<=(XEnd+Step) Do
Begin
If Max<F(I) Then Max:=F(I);
If Min>F(I) Then Min:=F(I);
I:=I+Step;
End;
GradX:=GetMaxX/(XEnd-XBeg);
GradY:=GetMaxY/(Max-Min);
Coord (XBeg, XEnd, Min, Max);

Flag:=True;
I:=XBeg;
While I<=(XEnd+Step) Do
Begin
GraphicX:=Round(GradX*(I-XBeg));
GraphicY:=Round(GradY*(Max-F(I)));
If Flag Then
MoveTo (GraphicX,GraphicY);
{ PutPixel(GraphicX,GraphicY,15);}
LineTo(GraphicX,GraphicY);
I:=I+Step;
Flag:=False;
End;

End;

{$F+} {Ключи ассемблирования}

Function F1(X:Real):Real;
Begin
F1:=Sin(x)+COS(x/2);
End;

Procedure GraphicIni;
Var
Mode, DriverDet: Integer;
Begin
Mode:=0;
DriverDet:=Detect;
InitGraph(Mode,DriverDet,'c:\BP\BGI');
SetColor(15);
End;

{$F-} {Ключи ассемблирования}

Begin
GraphicIni;
Graphic(F1,-10,10);
ReadLn;
CloseGraph;
End.


Добавлено через 3 мин.
Это не так, я уже поняла, но больше я не понимаю как и что делать, хоть ты меня по лбу бей, а это нужно к 6 июню сделать или мне капец... ( Парни объясните нормально как делать?

Добавлено через 4 мин.
Цитата(Neuropunka @ 3.06.2011 15:25) *

 Program UniversalGraph; 
Uses Graph;

Type Fun = Function(X:Real):Real;

Procedure Graphic(F:Fun; XBeg,XEnd:Real);
Var
Max, Min, {Экстремальные точки функции в пределах диапазона}
I, {Переменная цикла}
Step, {Расчитываемый шаг}
GradX, {Приращение функции на один шаг по X}
GradY: Real; {Приращение функции на один шаг по Y}
GraphicX, {Координата по X}
GraphicY: Integer; {Координата по Y}
Flag: Boolean; {Флаг - перемещена первая точка}

Procedure Coord (CoordYBeg, CoordYEnd, CoordHMin, CoordHMax: Real);
Var GradX, GradYX: Real;
X, Y: Integer;
Color: Word;
Begin
Color:=GetColor;
SetColor (7);
GradX :=GetMaxX/(CoordYEnd-CoordYBeg);
GradYX:=GetMaxY/(CoordHMax-CoordHMin);
If (CoordYEnd>0) And (CoordYBeg<0) Then
Y:=Round(GradX*(0-CoordYBeg));
If CoordYEnd<0 Then Y:=GetMaxY;
If CoordYBeg>0 Then Y:=1;
If (CoordHMin<0) And (CoordHMax>0) Then
X:=Round(GradYX*(CoordHMax));
If CoordHMin>0 Then X:=GetMaxY;
If CoordHMax<0 Then X:=1 ;
Line (1,X,GetMaxX,X); {Горизонтальная линия}
Line (GetMaxX-4,X+5,GetMaxX,X); {Стрелочка}
Line (GetMaxX-4,X-5,GetMaxX,X); {Стрелочка}
Line (Y,1,Y,GetMaxY); {Вертикальная линия }
Line (Y-5,5,Y,1); {Стрелочка}
Line (Y+5,5,Y,1); {Стрелочка}
SetColor (Color);
End;


Begin
Step:=(XEnd-XBeg)/(GetMaxY-40);
I:=XBeg;
Max:=F(XBeg);
Min:=F(XBeg);
While I<=(XEnd+Step) Do
Begin
If Max<F(I) Then Max:=F(I);
If Min>F(I) Then Min:=F(I);
I:=I+Step;
End;
GradX:=GetMaxX/(XEnd-XBeg);
GradY:=GetMaxY/(Max-Min);
Coord (XBeg, XEnd, Min, Max);

Flag:=True;
I:=XBeg;
While I<=(XEnd+Step) Do
Begin
GraphicX:=Round(GradX*(I-XBeg));
GraphicY:=Round(GradY*(Max-F(I)));
If Flag Then
MoveTo (GraphicX,GraphicY);
{ PutPixel(GraphicX,GraphicY,15);}
LineTo(GraphicX,GraphicY);
I:=I+Step;
Flag:=False;
End;

End;

{$F+} {Ключи ассемблирования}

Function F1(X:Real):Real;
Begin
F1:=Sin(x)+COS(x/2);
End;

Procedure GraphicIni;
Var
Mode, DriverDet: Integer;
Begin
Mode:=0;
DriverDet:=Detect;
InitGraph(Mode,DriverDet,'c:\BP\BGI');
SetColor(15);
End;

{$F-} {Ключи ассемблирования}

Begin
GraphicIni;
Graphic(F1,-10,10);
ReadLn;
CloseGraph;
End.


Добавлено через 3 мин.
Это не так, я уже поняла, но больше я не понимаю как и что делать, хоть ты меня по лбу бей, а это нужно к 6 июню сделать или мне капец... ( Парни объясните нормально как делать?



Добавлено через 1 мин.
 Program UniversalGraph; 
Uses Graph;

Type Fun = Function(X:Real):Real;

Procedure Graphic(F:Fun; XBeg,XEnd:Real);
Var
Max, Min, {Экстремальные точки функции в пределах диапазона}
I, {Переменная цикла}
Step, {Расчитываемый шаг}
GradX, {Приращение функции на один шаг по X}
GradY: Real; {Приращение функции на один шаг по Y}
GraphicX, {Координата по X}
GraphicY: Integer; {Координата по Y}
Flag: Boolean; {Флаг - перемещена первая точка}

Procedure Coord (CoordYBeg, CoordYEnd, CoordHMin, CoordHMax: Real);
Var GradX, GradYX: Real;
X, Y: Integer;
Color: Word;
Begin
Color:=GetColor;
SetColor (7);
GradX :=GetMaxX/(CoordYEnd-CoordYBeg);
GradYX:=GetMaxY/(CoordHMax-CoordHMin);
If (CoordYEnd>0) And (CoordYBeg<0) Then
Y:=Round(GradX*(0-CoordYBeg));
If CoordYEnd<0 Then Y:=GetMaxY;
If CoordYBeg>0 Then Y:=1;
If (CoordHMin<0) And (CoordHMax>0) Then
X:=Round(GradYX*(CoordHMax));
If CoordHMin>0 Then X:=GetMaxY;
If CoordHMax<0 Then X:=1 ;
Line (1,X,GetMaxX,X); {Горизонтальная линия}
Line (GetMaxX-4,X+5,GetMaxX,X); {Стрелочка}
Line (GetMaxX-4,X-5,GetMaxX,X); {Стрелочка}
Line (Y,1,Y,GetMaxY); {Вертикальная линия }
Line (Y-5,5,Y,1); {Стрелочка}
Line (Y+5,5,Y,1); {Стрелочка}
SetColor (Color);
End;


Begin
Step:=(XEnd-XBeg)/(GetMaxY-40);
I:=XBeg;
Max:=F(XBeg);
Min:=F(XBeg);
While I<=(XEnd+Step) Do
Begin
If Max<F(I) Then Max:=F(I);
If Min>F(I) Then Min:=F(I);
I:=I+Step;
End;
GradX:=GetMaxX/(XEnd-XBeg);
GradY:=GetMaxY/(Max-Min);
Coord (XBeg, XEnd, Min, Max);

Flag:=True;
I:=XBeg;
While I<=(XEnd+Step) Do
Begin
GraphicX:=Round(GradX*(I-XBeg));
GraphicY:=Round(GradY*(Max-F(I)));
If Flag Then
MoveTo (GraphicX,GraphicY);
{ PutPixel(GraphicX,GraphicY,15);}
LineTo(GraphicX,GraphicY);
I:=I+Step;
Flag:=False;
End;

End;

{$F+} {Ключи ассемблирования}

Function F1(X:Real):Real;
Begin
F1:=Sin(x)+COS(x/2);
End;

Procedure GraphicIni;
Var
Mode, DriverDet: Integer;
Begin
Mode:=0;
DriverDet:=Detect;
InitGraph(Mode,DriverDet,'c:\BP\BGI');
SetColor(15);
End;

{$F-} {Ключи ассемблирования}

Begin
GraphicIni;
Graphic(F1,-10,10);
ReadLn;
CloseGraph;
End.


Добавлено через 3 мин.
Это не так, я уже поняла, но больше я не понимаю как и что делать, хоть ты меня по лбу бей, а это нужно к 6 июню сделать или мне капец... ( Парни объясните нормально как делать?

Добавлено через 4 мин.

Lapp
несколько наворочено вышло ))
когда будет свободная минутка - постараюсь разобраться и ответить. Забегай утром ))
Neuropunka
Цитата(Lapp @ 4.06.2011 0:25) *

несколько наворочено вышло ))
когда будет свободная минутка - постараюсь разобраться и ответить. Забегай утром ))

Акей, тока пожалуйста помоги.
Lapp
Постой, а почему у тебя в функции стоит совсем не то, что тебе надо? blink.gif
Почему бы не сделлать так:
Function F1(X:Real):Real; 
Begin
F1:= Exp(Sin(x));
End;
- а?

И убери комментарий про "ключи ассемблирования", он бросается в глаза и смешит своей нелепостью )). А директиву {$F-} переставь к концу F1.
Neuropunka
Цитата(Lapp @ 4.06.2011 1:53) *

Постой, а почему у тебя в функции стоит совсем не то, что тебе надо? blink.gif
Почему бы не сделлать так:
Function F1(X:Real):Real; 
Begin
F1:= Exp(Sin(x));
End;
- а?

И убери комментарий про "ключи ассемблирования", он бросается в глаза и смешит своей нелепостью )). А директиву {$F-} переставь к концу F1.

в том то и дело что я только эту знаю как делать, а другие нуль...
А мне нужна y=e^sinx при х<0, а не x=a(sh(t) -t), y=a(ch(t)-1) (a>0)
я даже начало не могу додуматься как делать.
Можешь кинуть сразу готовый код, мне как-то не удобно просить, но выхода нету...
Lapp
Цитата(Neuropunka @ 4.06.2011 2:11) *
в том то и дело что я только эту знаю как делать, а другие нуль...
А мне нужна y=e^sinx при х<0, а не x=a(sh(t) -t), y=a(ch(t)-1) (a>0)
я даже начало не могу додуматься как делать.
Можешь кинуть сразу готовый код, мне как-то не удобно просить, но выхода нету...

Выход есть всегда )). Попробуй to pull yourself together.

Я же тебе написал, что и как нужно изменить, чтобы рисовать твою любимую экспоненту синуса! Сделай это, и получишь свой график. ПОСЛЕ этого займемся пределами по x (кстати, обнародуй левую границу тоже, а то правая есть, 0, а вот рисовать до минус бесконечности я не умею)).
Neuropunka
Цитата(Lapp @ 4.06.2011 2:18) *

Выход есть всегда )). Попробуй to pull yourself together.

Я же тебе написал, что и как нужно изменить, чтобы рисовать твою любимую экспоненту синуса! Сделай это, и получишь свой график. ПОСЛЕ этого займемся пределами по x (кстати, обнародуй левую границу тоже, а то правая есть, 0, а вот рисовать до минус бесконечности я не умею)).

Вот ты тока что написал я прочитала, и не чего не поняла... вообще можещь хоть начало кинуть, а дальше я уже сама

Добавлено через 2 мин.
Цитата(Lapp @ 4.06.2011 2:18) *

Выход есть всегда )). Попробуй to pull yourself together.

Я же тебе написал, что и как нужно изменить, чтобы рисовать твою любимую экспоненту синуса! Сделай это, и получишь свой график. ПОСЛЕ этого займемся пределами по x (кстати, обнародуй левую границу тоже, а то правая есть, 0, а вот рисовать до минус бесконечности я не умею)).

Ты сейчас бьёшь по чайнику, и поверь до него очень тяжко достучатся...
Lapp
Цитата(Neuropunka @ 4.06.2011 2:24) *
Ты сейчас бьёшь по чайнику, и поверь до него очень тяжко достучатся...

smile.gif))) чем труднее достучаться, тем слаще потом чай ))

Так, смотри.
Я взял тот код, который ты привела, и заменил в нем строчку
F1:=Sin(x)+COS(x/2);
на такую:
F1:= Exp(Sin(x));

Попробуй сделать то же самое и рапортуй о результатах )).

Добавлено через 4 мин.
p.s.
сиб за плюс )). ты забыла добавить: добрый, ласковый, симпатичный... ))
Neuropunka
=)) ну прости))) сяс сижу ковыряюсь(((

Добавлено через 5 мин.

Ошибка в Color:=GetColor;

Program UniversalGraph;
Uses Graphabc;

Type Fun = Function(X:Real):Real;

Procedure Graphic(F:Fun; XBeg,XEnd:Real);
Var
Max, Min, {Экстремальные точки функции в пределах диапазона}
I, {Переменная цикла}
Step, {Расчитываемый шаг}
GradX, {Приращение функции на один шаг по X}
GradY: Real; {Приращение функции на один шаг по Y}
GraphicX, {Координата по X}
GraphicY: Integer; {Координата по Y}
Flag: Boolean; {Флаг - перемещена первая точка}

Procedure Coord (CoordYBeg, CoordYEnd, CoordHMin, CoordHMax: Real);
Var GradX, GradYX: Real;
X, Y: Integer;
Color: Word;
Begin
Color:=GetColor;
Set Color (7);
GradX :=GetMaxX/(CoordYEnd-CoordYBeg);
GradYX:=GetMaxY/(CoordHMax-CoordHMin);
If (CoordYEnd>0) And (CoordYBeg<0) Then
Y:=Round(GradX*(0-CoordYBeg));
If CoordYEnd<0 Then Y:=GetMaxY;
If CoordYBeg>0 Then Y:=1;
If (CoordHMin<0) And (CoordHMax>0) Then
X:=Round(GradYX*(CoordHMax));
If CoordHMin>0 Then X:=GetMaxY;
If CoordHMax<0 Then X:=1 ;
Line (1,X,GetMaxX,X); {Горизонтальная линия}
Line (GetMaxX-4,X+5,GetMaxX,X); {Стрелочка}
Line (GetMaxX-4,X-5,GetMaxX,X); {Стрелочка}
Line (Y,1,Y,GetMaxY); {Вертикальная линия }
Line (Y-5,5,Y,1); {Стрелочка}
Line (Y+5,5,Y,1); {Стрелочка}
SetColor (Color);
End;


Begin
Step:=(XEnd-XBeg)/(GetMaxY-40);
I:=XBeg;
Max:=F(XBeg);
Min:=F(XBeg);
While I<=(XEnd+Step) Do
Begin
If Max<F(I) Then Max:=F(I);
If Min>F(I) Then Min:=F(I);
I:=I+Step;
End;
GradX:=GetMaxX/(XEnd-XBeg);
GradY:=GetMaxY/(Max-Min);
Coord (XBeg, XEnd, Min, Max);

Flag:=True;
I:=XBeg;
While I<=(XEnd+Step) Do
Begin
GraphicX:=Round(GradX*(I-XBeg));
GraphicY:=Round(GradY*(Max-F(I)));
If Flag Then
MoveTo (GraphicX,GraphicY);
{ PutPixel(GraphicX,GraphicY,15);}
LineTo(GraphicX,GraphicY);
I:=I+Step;
Flag:=False;
End;

End;

{$F+} {Ключи ассемблирования}

Function F1(X:Real):Real;
Begin
F1:= Exp(Sin(x);
End;

Procedure GraphicIni;
Var
Mode, DriverDet: Integer;
Begin
Mode:=0;
DriverDet:=Detect;
InitGraph(Mode,DriverDet,'c:\BP\BGI');
SetColor(15);
End;

{$F-} {Ключи ассемблирования}

Begin
GraphicIni;
Graphic(F1,-10,10);
ReadLn;
CloseGraph;
End.
Lapp
Почему SetColor распался на части? строка 23
И закрой скобку в той строке, которую изменяла (с экспонентой).
Neuropunka
[quote name='Lapp' date='4.06.2011 3:20' post='156109']
Почему SetColor распался на части? строка 23
И закрой скобку в той строке, которую изменяла (с экспонентой).
Procedure Coord (CoordYBeg, CoordYEnd, CoordHMin, CoordHMax: Real);
Var GradX, GradYX: Real;
X, Y: Integer;
Color: Word;
Begin
Color:=GetColor;
SetColor (7);
GradX :=GetMaxX/(CoordYEnd-CoordYBeg);
GradYX:=GetMaxY/(CoordHMax-CoordHMin);
If (CoordYEnd>0) And (CoordYBeg<0) Then
Y:=Round(GradX*(0-CoordYBeg));
If CoordYEnd<0 Then Y:=GetMaxY;
If CoordYBeg>0 Then Y:=1;
If (CoordHMin<0) And (CoordHMax>0) Then
X:=Round(GradYX*(CoordHMax));
If CoordHMin>0 Then X:=GetMaxY;
If CoordHMax<0 Then X:=1 ;
Не извесный индификатор GetColor;
Lapp
Neuropunka, ты плохо выспалась? не с той ноги встала?

Извини, но я на такой бред тебе отвечать не буду. mad.gif
Я тебе понятно пишу? правильно теги расставляю? вот и ты позаботься, пожалуйста..
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.