Сделай Сам Свою Работу на 5

Вывод функциональных зависимостей





Произвольную кривую можно вывести как, используя процедуру вывода отрезков прямых линий 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 Все материалы защищены законодательством РФ.