Вывод функциональных зависимостей
Произвольную кривую можно вывести как, используя процедуру вывода отрезков прямых линий Line, так и процедуру вывода многоугольниковDrawPoly.
Перед началом вывода функциональной зависимости необходимо определить размеры графика.
Во-первых, начало координат следует отодвинуть от левой границы экрана для размещения шкалы размерности по оси ординат.
Во-вторых, необходимо сделать отступ от правой границы экрана для указания размерности оси абсцисс.
В-третьих, следует определить размер графика по высоте так, чтобы он имел отступы от верхней и нижней границ экрана, был бы достаточно крупным и, в то же время, удобным для обозрения.
В-четвёртых, надо определить количество выводимых точек графика.
Пример. Программа вывода синусоидальной функции с использованием процедуры вывода отрезков прямых линийLine.
Program sinus1;
uses Crt, Graph;
const
N = 500; (* Количество точек графика *)
var
d, m, e, Xmax, Ymax, Xfirst, Xend, Y0, Ym: integer ;
X, Y: array [0 .. N] of word;
k: word ;
Xfront, Xback, hx, hfi, Nt, Em, Dy, SY, mY : real;
begin (* Тело программы – раздел операторов *)
clrScr;
Em := 3; Nt := 2; (* Выбор амплитуды и числа периодов синусоиды *)
Xfront := 0.15; Xback := 0.2; (* Выбор отступов графика по оси Х *)
Dy := 0.35; (* Выбор высоты графика в относительных единицах *)
Xmax := GetMaxX; Ymax := GetMaxY; (* Нахождение максимального количества пикселей по осям экрана *)
Xfirst := trunc (Xfront * Xmax); Xend := Xmax – trunc (Xback * Xmax);
(* Определение начальных b конечных координат графика *)
Y0 := Ymax div 2; (* Местоположение оси Y на экране*)
SY := Dy* Ymax / 2; (* Определение длины оси Y вверх и вниз относительно начальной координаты Y0 *)
Ym := trunc (SY); (* Перевод SY в графические координаты *)
mY := 0.1*Em/Dy; (* Выбор масштаба амплитуды синуса *)
hx := (Xend – Xfirst) / N; hfi := 2 * pi *Nt / N; (* Вычисление шагов изменения координаты Х и фазы синуса *)
d := detect; m := VGAMed;
InitGraph (d, m, ' '); (* Инициализация графического режима *)
(* Блок проведения осей *)
SetBkColor (blue); SetLineStyle (0, 0, 1); SetColor (white);
Line (Xfirst, Y0, Xend, Y0); (* Проведение оси Х *)
Line (Xfirst, Y0 – Ym, Xfirst, Y0 + Ym); (* Проведение оси Y *)
(* Блок вычисления и рисования синусоидальной функции.
Вычисление и запоминание координат точек в массивах X и Y,
вывод функции отрезками прямых линий *)
SetLineStyle (0, 0, 3); SetColor (red);
X [0] := Xfirst; Y [0] := Y0;
for k := 1 to N do
Begin
X [k] := Xfirst + trunc (k*hх);
Y [k] := Y0 – trunc (mY*SY*sin (k*hfi);
Line (X [k-1], Y [k-1], X [k], Y [k] );
Delay (100);
end;
readln;
CloseGraph (* Процедура закрытия графического режима *)
end.
Принятые обозначения:
Xfront, Xback – отступы в относительных единицах от левой (передней) и правой (задней) границ экрана соответственно,
Dy – относительный размер графика по оси ординат,
Y0 – координата положения оси Y на экране,
hx – шаг по оси абсцисс,
hfi – шаг по аргументу (по углу, радиан),
Nt – количество периодов синусоиды,
Em – амплитуда синусоиды.
ПроцедураDrawPoly ( N: word; var Points) модуля Graph рисует текущим цветом и типом линии произвольную ломаную линию, заданную N вершинами (точками излома) с графическими координатами Points. Координаты точек излома задают парой значений типа word, первое из которых определяет горизонтальную, второе – вертикальную координаты. Points – переменная типа record. Если крайние точки совпадают, то будет вычерчен многоугольник. Поэтому полный синтаксис процедуры DrawPoly будет иметь вид, например,
type
Points = record
X, Y : word
end;
var
A: array [1..50] of Points;
N: word;
. . . . . . .
С помощью процедурыDrawPoly удобно выводить на экран не только многоугольники или ломаные линии, но и графики функций, заданных формулами. Рассмотрим, например, вывод на экран графика синусоидальной функции.
Пример. Программа вывода синусоидальной функции с использованием процедуры вывода многоугольниковDrawPoly.
Program sinus2;
uses Crt, Graph;
const
N = 500; (* Количество точек графика *)
type
Points = record
X, Y : word
end;
var
d, m, er, Xmax, Ymax, Xf, Xe, Y0, Ym: integer ;
k: word ;
Xfr, Xb, hx, hfi, Nt, Em, Dy, SY, mY: real;
coords : array [0..N] ofPoints;
begin
ClrScr;
Em := 3; Nt := 2; (* Выбор амплитуды и числа периодов синусоиды *)
Xfr := 0.15; Xb := 0.2; (* Выбор отступов графика по оси Х *)
Dy := 0.35; (* Выбор высоты графика в относительных единицах*)
d := detect; m := VGAMed;
InitGraph (d, m, ' ');
(* Получение номера ошибки, если инициализация режима не произошла *)
er := GraphResult ;
if er <> grOk then
Begin
writeln (GraphErrorMsg (er));
Halt
end;
Xmax := GetMaxX; Ymax := GetMaxY;
Xf := trunc (Xfr * Xmax); Xe := Xmax – trunc (Xb * Xmax);
Y0 := Ymax div 2; SY := Dy* Ymax / 2; Ym := trunc (SY); mY := 0.1*Em/Dy;
hx := (Xe – Xf) / N; hfi := 2 * pi *Nt / N;
SetBkColor (blue); SetLineStyle (0, 0, 1); SetColor (white);
Line (Xf, Y0, Xe, Y0); Line (Xf, Y0 + Ym, Xf, Y0 – Ym);
(* Блок вычисления и рисования синусоиды *)
SetLineStyle (0, 0, 3); SetColor (red);
for k := 0 to N do with coords [k] do
Begin
X := Xf + trunc (k*hх);
Y := Y0 – trunc (mY*SY*sin (k*hfi);
(* Рисование синусоиды с помощью процедуры DrawPoly)
DrawPoly (N, coords);
end;
readln;
CloseGraph
end.
Функция GraphResult: integer;модуля Graphвозвращает код ошибки, если инициализация графического режима не произошла.
Функция GraphErrorMsg (ErrorCode : integer): string; модуля Graph, возвращает строку сообщения об ошибке, указывая её код ErrorCode.
Для построения сложных фигур, образованных прямыми и дугами окружностей, весьма важной является процедура GetArcCoords (var Coords: ArcCoordType) модуля Graph, определяющая координаты центра и точек начала и конца дуги. Здесь переменная Coords имеет тип "запись".
Полный синтаксис процедуры должен иметь вид:
type
ArcCoordType = record
X, Y, (* Координаты центра дуги окружности *)
Xs, Ys, (* Координаты точки начала дуги *)
Xe, Ye: integer (* Координаты точки конца дуги *)
end;
var
coords: ArcCoordType;
begin
. . . . . . . . .
GetArcCoords;
Порядок выполнения работы
1. Разработайте алгоритм решения задачи в соответствии со своим вариантом.
2. Откройте текстовый редактор Turbo Pascal.
3. Напишите программу решения задачи по разработанному ранее алгоритму. В программе предусмотреть вывод справочной информации (информация об авторе, наименование и назначение программы), возможность многократных вычислений.
4. Отладьте программу.
5. Сохраните результаты работы программы.
Содержание отчета
Отчет оформляется индивидуально и содержит:
- титульный лист;
- наименование, цель и содержание работы;
- алгоритм и текст программы
- изображения экранов монитора с результатами работы программы;
- выводы по результатам работы.
Варианты заданий
Разработайте алгоритм и программу, выводящую на экран график функции в соответствии с заданным вариантом. Тип графика – в соответствии с последней цифрой номера зачётки. Для логарифмических осей - защититься от отрицательных значений координат. Интервал построения функции определяет пользователь в процессе работы программы. В программе предусмотреть вывод справочной информации: наименование программы, выполняемые программой действия, автор программы.
Таблица 1. Варианты заданий
№ вар.
| Функция
| № вар.
| Функция
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Таблица 2. Тип графика
№ цифры
| Система координат
| Ось Y
| Ось X
|
| Декартовая
| Линейная
| Линейная
|
| Полярная
| Линейная
| Линейная
|
| Декартовая
| Логарифмическая
| Линейная
|
| Полярная
| Линейная
| Линейная
|
| Декартовая
| Линейная
| Логарифмическая
|
| Полярная
| Линейная
| Линейная
|
| Декартовая
| Логарифмическая
| Логарифмическая
|
| Полярная
| Логарифмическая
| Линейная
|
| Декартовая
| Логарифмическая
| Логарифмическая
|
| Полярная
| Логарифмическая
| Линейная
|
6 Контрольные вопросы
1. Укажите типы шрифтов по способу начертания.
2. Перечислите особенности векторных шрифтов.
3. Перечислите особенности растровых шрифтов.
4. Укажите, какое действие выполняет процедура OutTextXY и в чем её отличие от процедуры OutText.
5. Какое действие выполняет процедура SetTextStyle?
6. Какое количество шрифтов доступно в Pascal 5.5?
7. Какое количество шрифтов доступно в Pascal 7.0?
8. Какое действие выполняет процедура SetTextJustify?
9. Перечислите основные шаги по выводу функциональных (графических) зависимостей в среде Turbo Pascal.
10. Перечислите основные варианты вывода графических зависимостей в среде Turbo Pascal.
11. Какую процедуру (функцию) можно использовать для вывода зависимостей заданных формулой.
Рекомендуемая литература
1. Степанов А.Н. Информатика. Базовый курс. Учебник для ВУЗов. - Издательство "Питер", 2007. – 768с.
2. Острейковский, В.А. Информатика : учебник для вузов / В.А.Острейковский .— 3-е изд.,стер. — М. : Высш.шк., 2005 .— 511с. : ил. — Библиогр.в конце кн. — ISBN 5-06-003533-6 /в пер./ : 128.74.
ЛАБОРАТОРНАЯ РАБОТА 19
Записи в Pascal (2 часа)
Цель работы
Получение практических навыков написания и отладки программ в среде Turbo Pascal для работы с типом запись.
ЛАБОРАТОРНАЯ РАБОТА 20
Объекты в Pascal (2 часа)
Цель работы
Получение практических навыков объектно-ориентированного программирования.
ЛАБОРАТОРНАЯ РАБОТА 20
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|