Advertisement
Alex_Fomin

Untitled

Jan 20th, 2016
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 4.17 KB | None | 0 0
  1. uses// https://otvet.mail.ru/question/186559061
  2.   graphABC;//Подключаем графический модуль
  3.  
  4. const
  5.   //Размеры графического окна
  6.   W = 800;
  7.   H = 600;
  8.  
  9. function F(x: real): real:=2 * (Sin(x) / Cos(x)); //Функция
  10.  
  11. var
  12.   x0, y0, x, y, xLeft, yLeft, xRight, yRight, n: integer;
  13.   a, b, fmin, fmax, x1, y1, mx, my, dx, dy, num: real;
  14.   i: byte;
  15.   s: string;
  16.  
  17. begin
  18.   SetWindowCaption('График функции f(x)=2tg(x)'); // Устанавливает заголовок графического окна
  19.   SetWindowSize(W, H); // Устанавливаем размеры графического окна
  20.   SetWindowIsFixedSize(true); // Фиксируем размер графического окна
  21.  
  22.   // Выведим копирайты :)
  23.   SetFontSize(12); // Размер шрифта
  24.   SetFontColor(clMediumBlue); // Цвет шрифта
  25.   TextOut(W - 180, H - 45, 'www.cyberpascal.ru');
  26.  
  27.   //Координаты левой верхней границы системы координат:
  28.   xLeft := 50;
  29.   yLeft := 50;
  30.  
  31.   //Координаты правой нижней границы системы координат:
  32.   xRight := W - 50;
  33.   yRight := H - 50;
  34.  
  35.   //интервал по Х; a и b должно нацело делится на dx:
  36.   a := -1.2; // Левая граница
  37.   b := 1.2; // Правая граница
  38.   dx := 0.2; // Шаг
  39.  
  40.   //Интервал по Y; fmin и fmax должно нацело делится на dy:
  41.   fmin := -5; // Левая граница
  42.   fmax := 5; // Правая граница
  43.   dy := 1; // Шаг
  44.  
  45.   //Устанавливаем масштаб:
  46.   mx := (xRight - xLeft) / (b - a); // Масштаб по Х
  47.   my := (yRight - yLeft) / (fmax - fmin); // Масштаб по Y
  48.  
  49.   //Начало координат:
  50.   x0 := trunc(abs(a) * mx) + xLeft;
  51.   y0 := yRight - trunc(abs(fmin) * my);
  52.  
  53.   //Рисуем оси координат:
  54.   line(xLeft, y0, xRight + 10, y0); // Ось ОХ
  55.   line(x0, yLeft - 10, x0, yRight); // Ось ОY
  56.   SetFontSize(12); // Размер шрифта
  57.   SetFontColor(clBlue); // Цвет шрифта
  58.   TextOut(xRight + 20, y0 - 15, 'X'); // Подписываем ось OX
  59.   TextOut(x0 - 10, yLeft - 30, 'Y'); // Подписываем ось OY
  60.   SetFontSize(8); // Размер шрифта
  61.   SetFontColor(clRed); // Цвет шрифта
  62.  
  63.   //Засечки по оси OX...
  64.   n := Round((b - a) / dx) + 1; // Количество засечек по ОХ
  65.   for i := 1 to n do
  66.   begin
  67.     num := a + (i - 1) * dx; // Координата на оси ОХ
  68.     x := xLeft + trunc(mx * (num - a)); // Координата num в окне
  69.     Line(x, y0 - 3, x, y0 + 3); // Рисуем засечки на оси OX
  70.     str(num:0:1, s);
  71.     if abs(num) > 1E-15 then // Исключаем 0 на оси OX
  72.       TextOut(x - TextWidth(s) div 2, y0 + 10, s);
  73.   end;
  74.  
  75.   // Засечки на оси OY...
  76.   n := round((fmax - fmin) / dy) + 1; // Количество засечек по ОY
  77.   for i := 1 to n do
  78.   begin
  79.     num := fMin + (i - 1) * dy; // Координата на оси ОY
  80.     y := yRight - trunc(my * (num - fmin));
  81.     Line(x0 - 3, y, x0 + 3, y); // Рисуем засечки на оси OY
  82.     str(num:0:0, s);
  83.     if abs(num) > 1E-15 then // Исключаем 0 на оси OY
  84.       TextOut(x0 + 7, y - TextHeight(s) div 2, s);
  85.   end;
  86.   TextOut(x0 - 10, y0 + 10, '0'); // Нулевая точка
  87.  
  88.   // График функции строим по точкам:
  89.   x1 := a; // Начальное значение аргумента
  90.   while x1 <= b do
  91.   begin
  92.     y1 := F(x1); // Вычисляем значение функции
  93.     x := x0 + round(x1 * mx); // Координата Х в графическом окне
  94.     y := y0 - round(y1 * my); // Координата Y в графическом окне
  95.     // Если y попадает в границы [yLeft; yRight], то ставим точку:
  96.     if (y >= yLeft) and (y <= yRight) then SetPixel(x, y, clGreen);
  97.     x1 := x1 + 0.00001; // Увеличиваем абсциссу
  98.   end;
  99. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement