Graph: построить семейство одинаковых кругов, центры которых расположены на тангенсоиде - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Построить семейство одинаковых кругов, центры которых расположены на тангенсоиде (Y = C*sin(X)/cos(X) на [–π/2: π/2]). Нарисовать оси координат.

Решение задачи: «Graph: построить семейство одинаковых кругов, центры которых расположены на тангенсоиде»

textual
Листинг программы
program tangensoid;
{$mode objfpc}{$H+}
{решаем задачу с [url]http://www.cyberforum.ru/free-pascal/thread1583591.html[/url]
 по зпдпнию: Построить семейство одинаковых кругов, центры которых
 расположены на тангенсоиде (Y = C*sin(X)/cos(X) на [–ПЂ/2: ПЂ/2]).
 Нарисовать оси координат.}
 
uses
  graph, math;
 
const
  R = 2;      // радиус "точки"
  DX = R*2;   //шаг по X
var
  gDriver, gMode: smallint;
  cx, cy: integer;  //координаты центра экрана
  c: single = 1.0;  //коэфициент для формулы
  i: integer;
  stepx: Single;    //шаг по X в радианах
  sf:    Single;
  f:    Single;     //значение тангенсойда
 
function tangensoid(const ax: single): single; inline;
begin
    Result:= sin(ax)/cos(ax);
end;
 
begin
  gDriver := detect;
  initgraph(gdriver, gmode, ' '); // Графический модуль
  cx := getmaxx div 2;
  cy := getmaxy div 2;
 
  //запрашивем коэф. C (0.1 - хорошее значение)
  write('Enter (C): ');
  ReadLn(c);
 
  //оси координат
  SetColor(white);
 
  Line(0, cy, GetMaxX, cy);
  Line(cx, 0, cx, GetMaxY);
 
 
  //рисуем "точки"
 
  //высчитываем шаг в радианах
  stepx:= pi / GetMaxX * DX;
  sf:=    GetMaxY / pi; // scale factor - кэф. чтобы привести значения ф-ции
                        //в диапазоне -pi/2 .. pi/2
                        // к диапазону разрешения экрана 0.. 768 (например)
 
  //начальное значение X
  SetColor(red);
  for i:= 0 to GetMaxX div DX do begin
    f:= sf * c * tangensoid(-(pi/2) + i*stepx);
    FillEllipse(i*DX, cy - trunc(f), R, R);
  end;
 
 
  Readln;
  CloseGraph;
end.

Объяснение кода листинга программы

  1. Объявление переменных и констант — gDriver, gMode: smallint; — cx, cy: integer; — c: single = 1.0; — i: integer; — stepx: Single; — sf: Single; — f: Single; — tangensoid(const ax: single): single; inline; — gDriver := detect; — initgraph(gdriver, gmode, ' '); — cx := getmaxx div 2; — cy := getmaxy div 2; — write('Enter (C): '); — ReadLn(c); — SetColor(white); — Line(0, cy, GetMaxX, cy); — Line(cx, 0, cx, GetMaxY); — stepx:= pi / GetMaxX DX; — sf:= GetMaxY / pi; — for i:= 0 to GetMaxX div DX do begin — f:= sf c tangensoid(-(pi/2) + istepx); — FillEllipse(i*DX, cy - trunc(f), R, R); — end; — Readln; — CloseGraph;
  2. Задача программы - построение семейства одинаковых кругов, центры которых расположены на тангенсоиде Y = Csin(X)/cos(X) на [-ПЂ/2: ПЂ/2]. — Программа запрашивает у пользователя коэффициент C, затем рисует оси координат. — Затем программа вычисляет шаг по X в радианах и коэффициент масштабирования для приведения значений функции в диапазон разрешения экрана. — Далее программа рисует точки, используя цикл от 0 до максимального значения X, разделенного на шаг DX. — Для каждой точки вычисляется значение функции, используя формулу Y = Csin(X)/cos(X) и подставляя полученное значение в функцию tangensoid. — Функция tangensoid вычисляет значение функции Y = C*sin(X)/cos(X) для заданного аргумента X. — Затем программа рисует окружность с центром в каждой точке, используя функцию FillEllipse. — В конце программа ожидает ввода пользователя и закрывает графический модуль.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5
Похожие ответы