Я тут вроде бы написал погу может проверите, протестируете
Код
Uses Crt, Graph;
var GraphDriver, GraphMode, ErrorCode : Integer;
Center_x, Center_y, {Координаты центра координатной сетки}
Width_x, Height_y : integer; {Ширина и высота координатной сетки для
масштабирования значений аргумента и функции}
procedure InitGrp;
begin
{ драйвер и режимы по умолчанию }
GraphDriver := Detect;
{ драйвер egavga.bgi в текущей папке }
InitGraph(GraphDriver, GraphMode, 'egavga.bgi');
ErrorCode := GraphResult;
{ обработка ошибки }
if ErrorCode <> grOK then begin
Writeln('Graphics error: ', GraphErrorMsg(ErrorCode));
CloseGraph;
Halt(1);
end;
end;
const {Шаг наращивания t. Чем меньше, тем более плавно рисуется график.
В данном случае принимается дискретность - 200 шагов}
Td = 2*Pi / 200;
var
X, Y, A, B, C, D, t, y_scale : real;
{Переменные для хранения координат построения графика}
xx, yy : integer;
{Вспомогательные переменные}
sA, sB, sC, sD : string;
Begin
Clrscr;
Write('Enter A>0:');
Readln(A);
Write('Enter B>0:');
Readln(B);
Write('Enter C>0:');
Readln(C);
Write('Enter D>0:');
Readln(D);
{Задаём исходные данные для тестирования алгоритма программы}
{A:=2;
B:=3;
C:=4;
D:=5;
}
{Загружаем графический драйвер и включаем графический режим}
InitGrp;
{Устанавливаем параметры координатной сетки исходя из максимального
разрешения установленного граф.режима}
Center_x := GetMaxX div 2;
Center_y := GetMaxY div 2;
Width_x := (GetMaxX div 2) - 50;
Height_y := (GetMaxY div 2) - 50;
{Предполагаем, что максимальное значение U(t) не превысит 20, поэтому
вычисляем масштабный коэффициент для вывода графика функции}
y_scale:=Height_y/1;
{Рисуем оси координат белым цветом}
SetColor(white);
Line(Center_x+Width_x,Center_y,Center_x-Width_x,Center_y);
Line(Center_x,0,Center_x,Center_y+Height_y);
{Рисуем график функции красным цветом}
SetColor(red);
t:=0; {Начальное значение времени}
repeat
{Вычисляем значения функции}
X:=sin(A*t + B) * cos(C*t);
Y:=sin(A*t + B) * sin(D*t);
{Поскольку в графическом режиме координаты по вертикали растут сверху вниз, то
параметр Y следует не складывать, а отнимать от осевой координаты Center_y }
xx:=trunc(Center_x + X * Width_x);
yy:=trunc(Center_y - Y * y_scale{Height_y});
if t=0 then MoveTo(xx,yy)
else LineTo(xx,yy);
t:=t+Td; {Наращиваем t}
until t>2*Pi;
{Получаем символьный вид параметров A,B,C,D}
Str(A:2:2,sA);
Str(B:2:2,sB);
Str(C:2:2,sC);
Str(D:2:2,sD);
{Задаём координату высоты вывода уравнения функции}
yy:=Center_y+Height_y+10;
OutTextXY(0,yy,'X=Sin(' + sA + '*t+' + sB + ')*Cos(' + sC + '*t)');
{Переходим на следующую строку и выводим вторую половину уравнения}
yy:=yy+10;
OutTextXY(0,yy,'Y=Sin(' + sA + '*t+' + sB + ')*Sin(' + sD + '*t)');
readln;
{Выходим из граф. режима в текстовый режим}
CloseGraph;
End.