Написать процедуру, выводящая график - Free Pascal

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

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

Друзья, такое дело: требуется написать процедуру, после вызова которой выводился бы график: f=ln(x-0.9*y^2)/ln(4)+2*x*y-11*y+2*x +4, где х и у меняются от -10 до 10, а f(x,y)=0. Есть мысли сделать это через функцию таким образом:
procedure graph_f;
  function f(var x,y:real):real;
  begin
    setcolor(yellow);                                           // задаем цвет рисунка  
    while f=0 do begin                       
        f:=ln(x-0.9*y^2)/ln(4)+2*x*y-11*y+2*x +4; // подставляем х и у, если при этом f=0, то   
        circle(trunc(x*28+x0), trunc(y*28+y0),2);    //рисуем круг, учитывая, что х0 и у0 - координаты центра графика 
    end;
  end;
begin //начало тела процедуры
  x:=-10;                                  // подразумевается, что эта и 3 следующие строчки должны были 
  y:=-10;                                  //задавать изменение х и у от -10 до 10
  while x<=10 do begin                
     while y<=10 do begin             
     f(x,y);                                                      //вызываем функцию   
        x:=x+0.001;                     // смещаем х для следующего хода  
        y:=y+0.001;                    //  смещаем у для следующего хода 
end; // конец процедуры
Все компилируется, но график не рисует, как быть? Предполагаю, что функция написана правильно, а ошибка в теле процедуры.

Решение задачи: «Написать процедуру, выводящая график»

textual
Листинг программы
uses graphABC;
function f(x,y:real):real;
begin
 f:=ln(x-0.9*y*y)/ln(4)+2*x*y-11*y+2*x +4;
end;
var x0,y0:integer;
    x,y:real;
begin
x0:=windowwidth div 2;
y0:=windowheight div 2;
setpencolor(clRed);
x:=10;
while x<=10 do
 begin
  y:=-10;
  while y<=10 do
   begin
    if (x-0.9*y*y>0)and(abs(f(x,y))<0.01) then //если модуль функции близок к 0
    circle(x0+28*round(x),y0-28*round(y),2);
    y:=y+0.001;
   end;
  x:=x+0.001;
 end;
end.

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

  1. Используется библиотека graphABC.
  2. Определена функция f(x,y) с двумя аргументами типа real, возвращающая значение типа real.
  3. Задаются две переменные типа integer x0 и y0, которые будут использоваться для установки начального положения графика на экране.
  4. Задаются две переменные типа real x и y, которые будут использоваться для вычисления значений функции и построения графика.
  5. Устанавливается цвет пера на красный.
  6. Значение x устанавливается равным 10.
  7. Запускается цикл while, который будет выполняться до тех пор, пока значение x не станет больше 10.
  8. Внутри цикла while запускается вложенный цикл while, который будет выполняться для вычисления значений функции и построения графика.
  9. Вложенный цикл while проверяет условие (x-0.9yy>0)and(abs(f(x,y))<0.01), и если оно истинно, то вызывается процедура circle для построения точки на графике.
  10. Значение y увеличивается на 0.001 после каждой итерации вложенного цикла while.
  11. Значение x увеличивается на 0.001 после каждой итерации внешнего цикла while.
  12. После завершения циклов выводится график функции f(x,y).

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


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

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

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