- •Программирование на языке Паскаль в среде Turbo Pascal версии 6 и 7
- •Глава 7. Составные типы данных 29
- •Глава 8. Подпрограммы и функции 46
- •Глава 9. Файлы 50
- •Глава 10. Динамические переменные (списки) 58
- •Тип и функциональные возможности языка
- •Структура программы на Паскале
- •Алфавит языка
- •Правила написания имен
- •Структура блока описаний
- •Глава 2. Простые типы данных в языке Паскаль Понятие и классификация типов данных
- •Целочисленные типы
- •Вещественные типы
- •Логический тип
- •Символьный тип
- •Интервальный тип пользователя
- •Перечисляемый тип пользователя
- •Глава 3. Встроенные функции Понятие и классификация типов функций
- •Математические функции
- •Функции преобразования типов
- •Глава 4. Выражения Понятие и классификация типов выражений
- •Арифметические операции
- •Логические операции
- •Отношения
- •Битовые операции
- •Глава 5. Выполняемые операторы языка (для программ линейной структуры) Понятие и классификация
- •Классификация инструкций Паскаля
- •Оператор присваивания
- •Простейшие операторы ввода с клавиатуры
- •Простейшие операторы вывода на экран дисплея
- •Глава 6. Выполняемые управляющие операторы языка Простые управляющие операторы
- •Оператор безусловного перехода.
- •Оператор продолжения цикла.
- •Операторы ветвлений
- •Оператор условного перехода.
- •Неполный условный оператор.
- •Полный условный оператор.
- •Операторы циклов
- •Оператор арифметического цикла
- •Операторы итеративных циклов
- •Организация цикла с помощью условного перехода
- •Оператор итеративного цикла с предусловием
- •Оператор итеративного цикла с постусловием
- •Глава 7. Составные типы данных Классификация составных типов
- •Массивы Основные определения
- •Вывод массива
- •Примеры программ работы с массивами
- •Сортировки массива
- •Алгоритмы основных методов сортировок
- •Строки Строковые переменные
- •Стандартные (встроенные) процедуры работы со строками
- •Стандартные (встроенные) функции работы со строками
- •Структуры
- •Глава 8. Подпрограммы и функции Понятие подпрограмм в языке Паскаль.
- •Процедуры.
- •Описание и вызов функций
- •Параметры процедур и функций
- •Глава 9. Файлы Классификация внешних данных
- •Стандартные процедуры работы с файлами
- •Процедуры
- •Функции
- •Особенности работы с текстовыми файлами
- •Пример работы с текстовыми файлами.
- •Двоичные файлы (в машинных кодах) Типизированные файлы
- •Процедуры при работе с типизированными файлами
- •Функции при работе с типизированными файлами
- •Пример работы с типизированными файлами.
- •Файлы без типов
- •Процедуры, используемые при работе с нетипизированными файлами
- •Функции, используемые при работе с нетипизированными файлами.
- •Глава 10. Динамические переменные (списки) Понятие динамических переменных
- •Списочные данные
- •Односвязные списки
- •Двусвязные списки
- •Нульсвязные списки
- •Глава 11.Стандартный модуль работы с текстовым экраном Crt
- •2) Координаты экрана
- •3) Управление графическим режимом
- •4) Управление экраном и окном
- •5) Управление цветом
- •6) Вывод точек
- •7) Вывод линий
- •8) Вывод и закраска контуров
- •9) Окружности, эллипсы, дуги
- •10) Вывод текста
- •11) Последовательность работ при использовании графического режима
- •11) Пример программы приложения
11) Последовательность работ при использовании графического режима
Графический режим может использоваться как для произвольного рисования (когда с помощью графических процедур проводятся отрезки прямых линий или дуги эллипсов через выбираемые точки экрана), так и для отображения рассчитываемых кривых (функций), задаваемых или уравнениями, или табличными значениями. Ниже рассматриваются только варианты построения графиков функций и аналитически заданных кривых.
Под функцией мы далее будем понимать зависимость вида Y=f(x), а под аналитически заданной кривой – кривую, координаты каждой точки которой выражаются через независимый параметр (угол, время и т.д.): X=f1(t), Y=f2(t).
В принципе, оба вида рассчитываемых графиков можно строить по одному и тому же универсальному алгоритму, хотя график функции часто строят по упрощенной схеме. Рассмотрим сначала общий подход к построению графика.
Первым делом нужно определить, в каком виде график будет размещаться на экране. При этом решают, одинаковыми ли будут масштабы по обеим осям, какую часть экрана должен занять сам график и где будут подписи, будут ли изображаться оси координат и будут ли они отображать нулевые значения величин X и Y и т.д. По некоторым из этих вопросов решение можно принять только после того, как будут найдены диапазоны изменения значений X и Y участка строящейся кривой.
Для удобства последующих описаний обозначим именами X и Y (или именами, начинающимися с этих символов) величины, относящиеся к уравнениям кривой. Все экранные координаты и зависящие от них величины будем именовать, начиная с символа J для горизонтальных направлений и I – для вертикальных направлений.
В общем случае алгоритм построения графика включает следующие блоки:
Для заданных требований к строящейся кривой определить диапазон изменения X (Xmin и Xmax). При построении графика функции этот диапазон обычно задается.
Исходя из тех же требований, определить диапазон изменения Y (Ymin и Ymax). Для функции иногда предельные значения очевидны, как, например, для Sin(x) или Cos(x) или легко находятся для монотонных функций при граничных значениях аргументов (Exp(x), Ln(x) и т.д.). Если строится параметрически заданная кривая или сложная функция, поиск диапазонов проще выполнить после вычисления массива координат точек кривой (Xi[1..N] и Yi[1..N], которые в дальнейшем будут использоваться при построении самого графика). Из массивов максимумы и минимумы находятся простым перебором значений.
Принимается решение, будут ли изображаться оси координат (X=0 и Y=0) на рисунке кривой, и если нулевые значения не входят в найденные диапазоны, последние корректируются с учетом этих нулевых значений.
Если заранее известно, какой видеоадаптер будет использоваться, EGA или VGA, то максимальные размеры экрана в пикселях являются константами. Для EGA это 640 точек по Х и 350 точек по Y, для VGA размер по Y равен 480 точкам. Тогда можно провести все дальнейшие расчеты экранных координат графика и только после этого переходить в графический режим для проведения самих построений на экране. Мы будем исходить из универсального подхода, строя алгоритм для размеров экрана, определяемых после открытия графического режима
Инициализация графики производится процедурой InitGraph. В качестве первого параметра задается целочисленная переменная, имеющая нулевое значение, тем самым выбирается наилучший возможный графический режим.
С помощью функций GetMaxX и GetMaxY определяются размеры экрана в пикселях.
Принимается решение о размерах и положении графика на экране. Если планируется поместить один рисунок (график), то на поля по краям экрана можно оставить до 20% размера экрана. Таким образом, можно задать:
Jmin=(0..0.2)GetMaxX Jmax=(0.8..1.0)GetMaxX
Imin=(0.8..1.0)GetMaxY Imax=(0..0.2)GetMaxY
Вычисляются коэффициенты перехода к экранным координатам. Из рис. 8 видно, что
Mx=(Jmax-Jmin)/(Xmax-Xmin); My=(Imax-Imin)/(Ymax-Ymin),
Отметим, что (My<0).
Все дальнейшие построения на экране выполняются с использованием формул перехода от декартовых координат X и Y к экранным координатам J и I:
J=Jmin+(X-Xmin)*Mx, I=Imin+(Y-Ymin)*My
Используя приведенные формулы, рассчитывается положение осей координат на экране. Перед их построением задаются параметры линий процедурами SetColor и SetLineStyle (см. список процедур ниже).
На координатных осях проводятся риски длиной 5–10 пикселей или строится координатная сетка (те же риски, но длиной от Imin до Imax и от Jmin до Jmax). Как и для осей, предварительно устанавливается стиль линий (линии более тонкие). Следует иметь ввиду, что строительство сетки или рисок необходимо выполнять от начала координат во всех четырех направлениях. Если начинать от края, риски, как правило, не пройдут через начало координат.
После задания характеристик кривой графика, указатель переводится в начальную точку кривой (не обязательно совпадающей с Xmin,Ymin).
В цикле по массиву точек (Xi,Yi) пересчитываются координаты (J,I) и проводятся отрезки процедурой LineTo.
После настройки параметров надписи процедурами SetTextStyle и SetTextJustify, указатель переводится в точку, относительно которой ориентируется текст и процедурой OutTextXY выводится надпись.
В конце программы, после всех задержек и, возможно, вывода графика на принтер, необходимо закрыть графический режим процедурой CloseGraph.
Примечание:работа в графическом режиме может выполняться, если в разделе подключенных модулей будет приведено имя модуля Graph:
PROGRAM ...
USES Graph;
. . .