Помощь - Поиск - Пользователи - Календарь
Полная версия: график функции в турбо паскале
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
-jesika-
<...>
Надо построить график функции котангенса. График должен отображать результаты расчетов, которые записаны на диске. Масштаб разметки осей кординат должен отвечать реальным результатам расчетов. Основную часть экрана должны занимать те четверти, в которых находится график.
volvo
-jesika-, во-первых, тебе уже давали ссылку не программу, которая чертит практически любой график (достаточно просто поменять функцию на свою):
Построение любого графика

Во-вторых, для того, чтобы построить график y = F(x), нужно КАК МИНИМУМ знать, в каких пределах изменяется x, чего из задания не видно...

Далее, каким именно образом результаты
Цитата
записаны на диске
? Это, кстати, тоже надо знать, чтобы отобразить их на графике. Здесь телепатов нету, давайте задание полностью.
-jesika-
вот дополнение к заданиеюможет ето поможет понять его
Диапазон значений [Pi/50,49*Pi/50]
График должен быть начерчен линиэй вида _ . . _ . . _ . . _


Алгоритм построения функции:
1. протабулировать функц. На заданном интервале с целью определения макс и мин значения;
2. построить график функции за предварительно подсчитанными значений координат точек функции.
3. сделать разметку осей через некоторые промежутки табулирования Х и У.
volvo
Ну, вот тебе набросок, попробуй разобраться, как он работает... Разметку осей сделай сама.
uses Graph;

const
  Every = 2;

var
  Table: array[1 .. 2, 1 .. 49 * Every] of real;

function max(a, b: real): real;
begin
  max := a; if a < b then max := b;
end;

function Ctg(x: real): real;
begin
  if Abs(x) < 0.0001 then Ctg := 1000
  else Ctg := Cos(x) / Sin(x);
end;

var
  grDriver, grMode, ErrCode: Integer;
  i: integer;
  x, _max, _min: real;
  scale_x, scale_y: real;

  f: text;

begin
  assign(f, 'cotan.txt');
  rewrite(f);

  _max := -maxint; _min := maxint;
  for i := 1 to 49 * Every do
  begin
    Table[1, i] := (i - 24 * Every) * Pi / (50 * Every);
    Table[2, i] := Ctg(i * Pi / (50 * Every));

    if _max < Table[2, i] then _max := Table[2, i];
    if _min > Table[2, i] then _min := Table[2, i];
      writeln(f, 'x = ', Table[1, i]:10:4, ' ctg(x) = ', Table[2, i]:10:4)
  end;
  close(f);

  grDriver := Detect;
  InitGraph(grDriver, grMode,'');
  ErrCode := GraphResult;
  if ErrCode <> grOk then begin
    Writeln('Graphics error:', GraphErrorMsg(ErrCode));
    ReadLn; Halt(101)
  end;

  setcolor(red);
  line(0, getmaxy div 2, getmaxx, getmaxy div 2);
  line(getmaxx div 2, 0, getmaxx div 2, getmaxy);

  scale_y := (getmaxy / 2) / max(abs(_min), abs(_max));
  scale_x := getmaxx / (3 * 49 * Every * Pi / (50 * Every));

  for i := 1 to 49 * Every do
  begin
    putpixel((getmaxx div 2) + trunc(Table[1, i] * scale_x),
             (getmaxy div 2) - trunc(Table[2, i] * scale_y),
             white);
  end;
  readln;

  CloseGraph;
end.

Если хочешь увеличить плотность точек на графике, увеличивай константу Every (можно попробовать увеличить до 5 .. 10). В файле "COTAN.TXT" содержатся результаты вычисления котангенса...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.