Написать процедуру, выводящая график - 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.
Объяснение кода листинга программы
- Используется библиотека graphABC.
- Определена функция f(x,y) с двумя аргументами типа real, возвращающая значение типа real.
- Задаются две переменные типа integer x0 и y0, которые будут использоваться для установки начального положения графика на экране.
- Задаются две переменные типа real x и y, которые будут использоваться для вычисления значений функции и построения графика.
- Устанавливается цвет пера на красный.
- Значение x устанавливается равным 10.
- Запускается цикл while, который будет выполняться до тех пор, пока значение x не станет больше 10.
- Внутри цикла while запускается вложенный цикл while, который будет выполняться для вычисления значений функции и построения графика.
- Вложенный цикл while проверяет условие (x-0.9yy>0)and(abs(f(x,y))<0.01), и если оно истинно, то вызывается процедура circle для построения точки на графике.
- Значение y увеличивается на 0.001 после каждой итерации вложенного цикла while.
- Значение x увеличивается на 0.001 после каждой итерации внешнего цикла while.
- После завершения циклов выводится график функции f(x,y).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д