Показать сообщение отдельно
Старый 20.01.2021, 12:46   #1 (permalink)
Forevar
Новичок
 
Регистрация: 20.01.2021
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Помогите найти ошибку

uses
graphABC; //Подключаем графический модуль

const
W = 1200; H = 700;//Размеры графического окна
a1=40;
g=10;
u=15;
function F(x: real): real;
begin
F := x*sin(a1)/cos(a1)-g*x*x/(2*u*u*cos(a1)*cos(a1)); //Функция
end;

var
x0, y0, x, y, xLeft, yLeft, xRight, yRight, n: integer;
a, b, fmin, fmax, x1, y1, mx, my, dx, dy, num: real;
i: byte;
s: string;

begin
SetWindowSize(W, H); //Устанавливаем размеры графического окна
//Координаты левой верхней границы системы координат:
xLeft := 50;
yLeft := 50;
//Координаты правой нижней границы системы координат:
xRight := W - 50;
yRight := H - 50;
//интервал по Х; a и b должно нацело делится на dx:
a := 0; b := 20; dx := 0.5;
//Интервал по Y; fmin и fmax должно нацело делится на dy:
fmin := 0; fmax := 20; dy := 1;
//Устанавливаем масштаб:
mx := (xRight - xLeft) / (b - a); //масштаб по Х
my := (yRight - yLeft) / (fmax - fmin); //масштаб по Y
//начало координат:
x0 := trunc(abs(a) * mx) + xLeft;
y0 := yRight - trunc(abs(fmin) * my);
//Рисуем оси координат:
line(xLeft, y0, xRight + 10, y0); //ось ОХ
line(x0, yLeft - 10, x0, yRight); //ось ОY
SetFontSize(12); //Размер шрифта
SetFontColor(clBlue); //Цвет шрифта
TextOut(xRight + 20, y0 - 15, 'X'); //Подписываем ось OX
TextOut(x0 - 10, yLeft - 30, 'Y'); //Подписываем ось OY
SetFontSize(8); //Размер шрифта
SetFontColor(clRed); //Цвет шрифта
{ Засечки по оси OX: }
n := round((b - a) / dx) + 1; //количество засечек по ОХ
for i := 1 to n do
begin
num := a + (i - 1) * dx; //Координата на оси ОХ
x := xLeft + trunc(mx * (num - a)); //Координата num в окне
Line(x, y0 - 3, x, y0 + 3); //рисуем засечки на оси OX
str(Num:0:1, s);
if abs(num) > 1E-15 then //Исключаем 0 на оси OX
TextOut(x - TextWidth(s) div 2, y0 + 10, s)
end;
{ Засечки на оси OY: }
n := round((fmax - fmin) / dy) + 1; //количество засечек по ОY
for i := 1 to n do
begin
num := fMin + (i - 1) * dy; //Координата на оси ОY
y := yRight - trunc(my * (num - fmin));
Line(x0 - 3, y, x0 + 3, y); //рисуем засечки на оси Oy
str(num:0:0, s);
if abs(num) > 1E-15 then //Исключаем 0 на оси OY
TextOut(x0 + 7, y - TextHeight(s) div 2, s)
end;
TextOut(x0 - 10, y0 + 10, '0'); //Нулевая точка
{ График функции строим по точкам: }
x1 := a; //Начальное значение аргумента
while x1 <= b do
begin
y1 := F(x1); //Вычисляем значение функции
x := x0 + round(x1 * mx); //Координата Х в графическом окне
y := y0 - round(y1 * my); //Координата Y в графическом окне
//Если y попадает в границы [yLeft; yRight], то ставим точку:
if (y >= yLeft) and (y <= yRight) then SetPixel(x, y, clGreen);
x1 := x1 + 0.001 //Увеличиваем абсциссу
end
end.

При вводе a1, то есть угла, на цифры 30,40 и еще на некоторые не показывает график.Помогите пожалуйста!
Forevar вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070