- •Лабораторный практикум по информатике
- •Часть II программирование в системе турбо паскаль
- •Введение
- •Лабораторная работа №1 Создание простейшей программы
- •Начало работы с новой программой
- •Задание 1
- •Сохранение текстового файла программы на диске:
- •Задание 2
- •Задание 3
- •Задание 4
- •Лабораторная работа №2 Ввод данных и вывод результатов
- •Задания
- •Лабораторная работа №3 Программирование линейных алгоритмов
- •Задание
- •Лабораторная работа №4 Программирование разветвляющихся алгоритмов
- •Задание 1
- •Задание 2
- •Лабораторная работа № 5 Программирование циклических алгоритмов с известным числом повторений
- •Задание
- •Лабораторная работа №6 Программирование циклических алгоритмов с неизвестным числом повторений
- •Задания
- •Вариант 1
- •Вариант 2
- •Вариант 3
- •Вариант 4
- •Вариант 5
- •Вариант 6
- •Вариант 7
- •Вариант 8
- •Вариант 9
- •Вариант 10
- •Лабораторная работа №7 Программирование алгоритмов итерационной циклической структуры
- •Задание
- •Лабораторная работа №8 Массивы
- •Лабораторная работа №9 Процедуры и функции пользователя в языке Паскаль
- •Задание
- •Лабораторная работа №10 Записи
- •Задания
- •Лабораторная работа №11 Работа с файлами
- •Лабораторная работа №12 Графический режим в языке Паскаль
- •Лабораторная работа №13 Построение графика функции
- •Задания
- •Лабораторная работа №14 Создание движущихся изображений
- •Задание 1
- •Задание 2
- •Лабораторная работа №15 Вычисление определённого интеграла численными методами
- •Метод прямоугольников
- •Метод трапеций
- •Метод Симпсона
- •Задания
- •Лабораторная работа №16 Решение нелинейных уравнений численными методами
- •Метод половинного деления
- •Метод Ньютона
- •Метод хорд
- •Задания
- •Лабораторная работа №17 Решение обыкновенных дифференциальных уравнений численными методами
- •Метод Эйлера
- •Модифицированный метод Эйлера
- •Метод Рунге-Кутта
- •Задание
- •Приложение
- •Список литературы
- •Оглавление
- •Лабораторный практикум по информатике
- •Часть II программирование в системе турбо паскаль
- •Архангельск
Лабораторная работа №13 Построение графика функции
При выводе на экран графических изображений используется графическая система координат. Графические координаты задают положение каждого пиксела, отображаемого на экране. В отличие от обычной (декартовой) системы координат, графические координаты принимают только целочисленные значения. Диапазон изменения графических координат ограничен снизу нулём, а сверху разрешением экрана по горизонтали и вертикали. Максимальное значение x- и y -координат можно получить, используя функции GetMaxX и GetMaxY. Графическая координата y отсчитывается сверху вниз.
Геометрические декартовы координаты точки (x,y) для её изображения на экране необходимо пересчитать в графические (xg,yg) по формулам:
;
,
где x0, y0 – смещение изображения на экране от левого края и сверху; yG – разрешение экрана по вертикали; dx и dy – размер собственно изображения по горизонтали и вертикали соответственно; xmin, ymin, xmax, ymax – минимальные и максимальные значения аргумента x и значения функции y в диапазоне построения графика; a – целая часть числа a.
Таким образом, для построения графика функции необходимо:
получить таблицу значений функции y = f(x) в диапазоне изменения x от xнач до xкон;
найти минимальные и максимальные значения аргумента x и значения функции y в диапазоне построения графика;
пересчитать действительные значения x и y в графические xg и yg;
нарисовать на экране область построения графика и оси координат;
отправить графический указатель (перо) в начало координат;
задать цвет и стиль линий;
последовательно соединить линиями (или отметить маркерами) точки графика.
При построении нескольких графиков на одном координатном поле необходимо определить максимальные и минимальные значения x и y для всех графиков.
Рассмотрим пример использования графического режима для построения графика функции y = sin x. В примере используется 3 подпрограммы-функции f, xe и уe, причём xe и уe вызываются без параметров:
Program Prg_graf;
Uses Crt, Graph;
Var
xn, xk, x, y, Ymin, Ymax, dx:real;
MX, MY,i, n: word;
Gd, Gm: integer;
Function f(xf:real):real; { Расчет значений функции }
begin
f:=sin(xf); { Здесь приводим выражение для вычисления }
{или f:=exp(-0.5*xf*xf);} { значения Вашей функции }
end;
Function Xe:word; {Расчет позиции на экране для X}
begin
Xe:=10+Round((MX-20)*(x-xn)/(xk-xn));
end;
Function Ye:word; { Расчет позиции на экране для Y }
begin { На экране отсчет идет сверху-вниз, }
{ на обычном графике – наоборот }
Ye:=MY-10-Round((MY-20)*(f(x)-Ymin)/(Ymax-Ymin));
end;
Begin { Начало основной программы }
xn:=-5; xk:=5; n:=250; { Исходные данные } { Или при вводе исходных данных с клавиатуры:
Write(' x начальное = '); Readln(xn);
Write(' x конечное = '); Readln(xk);
Write(' количество точек графика = '); Readln(n);
}
dx:=(xk-xn)/(n-1); { Интервал между точками на оси Х }
{ Нахождение минимума и максимума функции }
x:=xn; Ymin:=f(xn); Ymax:=f(xn);
for i:=2 to n do
begin
x:=x+dx;
if f(x)<Ymin then Ymin:=f(x);
if f(x)>Ymax then Ymax:=f(x);
end;
Gd:=Detect;
InitGraph(Gd,Gm,''); { Не забудьте скопировать egavga.bgi }
{ в папку с программой Prg_graf.pas }
if GraphResult <> 0 then
begin
Writeln('Ошибка инициализации графического режима');
Halt(1);
end;
MX:=GetMaxX; MY:=GetMaxY;
Rectangle(0,0,MX,MY); { Рамка вокруг всего экрана }
Rectangle(10,10,MX-10,MY-10); { Рамка вокруг поля графика }
OutTextXY(270,2,'График функции'); { Вывод строки }
x:=0; Line(Xe,MY-10,Xe,10); { Рисуем ось ординат для x=0}
OutTextXY(Xe-10,15,'Y'); { Подписываем ось ординат }
y:=0; Line(10,MY-Ye,MX-10,MY-Ye);{ Рисуем ось абсцисс для y=0}
OutTextXY(MX-20,MY-Ye+2,'X'); { Подписываем ось абсцисс }
OutTextXY(Xe-10,MY-Ye+2,'0'); {Подписываем начало координат}
{ Рисуем сам график }
x:=xn; MoveTo(Xe, Ye); { Перемещаем перо в начало координат }
for i:=2 to n do
begin
x:=x+dx; LineTo(Xe,Ye); { Чертим линию до следующей точки}
end;
Readln;
CloseGraph;
End.