Модули CRT и Graph.ppt
- Количество слайдов: 53
Программирование на языке Паскаль Модули
Необходимость в использовании модулей, или, другими словами, в модульном программировании, возникла в первую очередь из-за трудностей, связанных с огромными объемами программ, их сложностью и потребностью в коллективной работе. Модули значительно расширяют возможности языка. По определению модуль считается отдельной программой, его структура аналогична структуре программы - он представляет собой набор констант, типов данных, переменных, процедур и функций.
Модули предназначены для разбиения текста программы на несколько файлов. В модулях описываются переменные, константы, типы, классы, процедуры и функции. Для того чтобы эти объекты можно было использовать в вызывающем модуле (которым может быть и основная программа), следует указать имя файла модуля (без расширения. pas) в разделе uses вызывающего модуля. Файл модуля должен находиться либо в том же каталоге, что и основная программа, либо в подкаталоге Units системного каталога программы Pascal ABC.
Модуль в Pascal ABC представляет собой файл со следующим содержанием: unit имя модуля; раздел подключения модулей раздел описаний раздел инициализации раздел финализации end. Первая строка обязательна и называется заголовком модуля.
Раздел подключения модулей начинается со служебного слова uses, за которым следует список имен модулей, перечисляемых через запятую. Раздел описаний может включать разделы описания переменных, констант, типов, процедур и функций, которые следуют друг за другом в произвольном порядке.
Раздел инициализации состоит из служебного слова initialization, после которого следуют операторы, разделяемые символом "точка с запятой". Операторы из раздела инициализации модуля выполняются до начала основной программы. Раздел финализации состоит из служебного слова finalization, после которого следуют операторы, разделяемые символом "точка с запятой". Операторы из раздела финализации модуля выполняются после окончания основной программы.
Раздел финализации может отсутствовать, либо оба раздела инициализации и финализации могут отсутствовать. Раздел инициализации может также начинаться со служебного слова begin, в этом случае раздел финализации отсутствует.
В качестве объектов в модуле можно использовать процедуры и функции. Для этого в интерфейсной части модуля необходимо описать заголовки подпрограмм и видимые переменные, а в части реализации должны быть полные описания подпрограмм. Чтобы иметь возможность использовать интерфейсные объекты модуля в своей программе, нужно указать имя соответствующего tpu файла после служебного слова uses (или список имен модулей, перечисленных через запятую): Uses Unit 1, Unit 2, Unit 3; В языке Pascal. ABC есть одиннадцать стандартных модулей: System, Crt, Graph. ABC и др. Из них только модуль System подключается автоматически к любой программе.
Краткая характеристика модулей: • модуль System включает все стандартные процедуры и функции языка Pascal и встроенные процедуры и функции языка Pascal. Подключается к любой программе автоматически, не требуя объявления; • модуль Crt обеспечивает управление текстовым режимом работы экрана (перемещение курсора в любую позицию экрана, изменение цвета символов, фона и др. ); • модуль Graph обеспечивает управление графическим режимом работы экрана (позволяет создавать и выводить на экран графические изображения и текстовые надписи);
Модуль CRT предназначен для работы с текстовым окном. Он написан для совместимости с Turbo Pascal. В качестве текстового используется графическое окно модуля Graph. ABC, при этом запрещено изменение размеров окна и ввод/вывод осуществляется непосредственно в текстовом окне. В результате вывода может осуществляться скроллирование текстового экрана. Подключается командой Uses CRT;
Экранная система координат X (0, 0) y x Y (x, y)
Константы и переменные модуля CRT const Black=0; Blue=1; Green=2; Cyan=3; Red=4; Magenta=5; Brown=6; Light. Gray=7; Dark. Gray=8; Light. Blue=9; Light. Green=10; Light. Cyan=11; Light. Red=12; Light. Magenta=13; Yellow=14; White=15; Цветовые константы. Используются для задания цвета символов и цвета фона в процедурах Text. Color и Text. Back. Ground и присваивании переменной Text. Attr.
var Text. Attr: byte; Задает цвет символов и цвет фона одновременно. Первые 4 бита отводятся под цвет фона, последние 4 бита - под цвет символов. Например, присваивание Text. Attr: =16*Yellow+Red задает красный цвет символов на желтом фоне. {программа «Работа с текстом» }
Процедуры Read() и Read. Ln() Несмотря на простоту и удобство, стандартные процедуры read() и readln() не обеспечивают всех потребностей, возникающих при работе с клавиатурой. Их важнейший недостаток в том, что вместе с приемом символов они выполняют их отображение на экран (так называемое “эхо на монитор”). В большинстве случаев это либо не нужно, либо недопустимо. Кроме того, они рассчитаны только на ввод относительно небольшого подмножества символов (буквы, цифры, знаки препинания) и частичного использования специальных клавиш (например, Backspace для отмены только что введенного символа). Эти процедуры не могут распознать нажатие функциональных или редактирующих клавиш и их сочетаний с управляющими клавишами Ctrl, Alt, Shift. В силу указанных причин процедуры read и readln редко используются в серьезных программах. {программа «Read. Ln» }
Функция Read. Key: char; Более универсальным средством взаимодействия с клавиатурой является стандартная функция read. Key из модуля Crt. Функция вызывается без параметров, возвращает значение символьного типа и работает следующим образом. Организуется задержка выполнения с ожиданием нажатия клавиши. После того, как нажатие произведено, функция завершает работу, возвращая код нажатой клавиши. Полученное значение можно использовать далее в программе.
Функция Read. Key: char; Функция read. Key не отображает введенный символ на экран, благодаря чему она широко используется для организации управления в различных диалоговых программах. В дополнение к этому read. Key позволяет отслеживать нажатие более широкого множества клавиш, опознавая функциональные и редактирующие клавиши и их сочетания с управляющими клавишами Ctrl, Alt, Shift. {программа «Read. Key_1» }
Функция Read. Key: char; Если говорить более подробно, функция read. Key исходит из того, что все множество клавиш и их сочетаний с управляющими клавишами разбито на два подмножества, которые обычно называют основным и расширенным наборами. В основной набор входят клавиши букв, цифр, разделителей и знаков препинания, их комбинации с клавишей Shift (или, что то же самое, при включенном переключателе Caps. Lock), а также клавиши Tab, Back. Space, Enter и Esc. Если нажата одна из перечисленных клавиш, то read. Key возвратит обычный ASCII-код соответствующего символа.
Функция Read. Key: char; В расширенном наборе содержатся некоторые (не все) клавиши из основного набора в комбинации с клавишами Ctrl и Alt, а также функциональные и редактирующие клавиши. Если нажимается одна из клавиш расширенного набора, то функция read. Key возвращает символ с кодом 0 (его представление в программе – chr(0) или #0). В этом случае повторное обращение к read. Key вернет код клавиши из расширенного набора. {программа «Read. Key_2, 3, 4» }
Для графического вывода в Pascal. ABC используется модуль Graph. ABC. Модуль Graph. ABC содержит константы, типы, процедуры, функции и классы для рисования в графическом окне. Для использования процедур и функций модуля Graph. ABC в разделе uses указываем имя этого модуля: Program qq; uses Graph. ABC;
Экранная система координат X (0, 0) y x Y (x, y)
Управление цветом Модуль Graph. ABC содержит константы и функции для работы с цветами. Тип Color. Type, описывающий цвет, определен следующим образом: type Color. Type=integer; Стандартные цвета задаются символическими константами: cl. Black – черный cl. Purple – фиолетовый cl. White – белый cl. Maroon – темно-красный cl. Red – красный cl. Navy – темно-синий cl. Green – зеленый cl. Brown – коричневый cl. Blue – синий cl. Sky. Blue – голубой cl. Yellow – желтый cl. Cream – кремовый cl. Aqua – бирюзовый cl. Olive – оливковый cl. Fuchsia – сиреневый cl. Teal – сине-зеленый cl. Gray – темно-серый cl. Lime – ярко-зеленый cl. Money. Green – цвет зеленых денег cl. Lt. Gray – светло-серый cl. Dk. Gray – темно-серый cl. Med. Gray – серый cl. Silver – серебряный
Для работы с цветами используются следующие функции: function RGB(r, g, b: integer): Color. Type; Возвращает целое значение, являющееся кодом цвета, который содержит красную, зеленую и синюю составляющие с интенсивностями r, g и b соответственно (r, g и b – целые в диапазоне от 0 до 255, причем, 0 соответствует минимальной интенсивности, 255 – максимальной).
Цветовая система RGB
Графические примитивы n procedure Set. Pixel(x, y, color: integer); Закрашивает один пиксел с координатами (x, y) цветом color. n function Get. Pixel(x, y): integer; Возвращает текущее значение цвета для пиксела с координатами (x, y).
Графические примитивы procedure Move. To(x, y: integer); Передвигает невидимое перо к точке с координатами (x, y); эта функция работает в паре с функцией Line. To(x, y). n procedure Line. To(x, y: integer); Рисует отрезок от текущего положения пера до точки (x, y); координаты пера при этом также становятся равными (x, y). n procedure Line(x 1, y 1, x 2, y 2: integer); Рисует отрезок с началом в точке (x 1, y 1) и концом в точке (x 2, y 2). n
Построение графиков функций Задача: построить график функции y = 3 sin(x) на интервале от 0 до 2π. Анализ: максимальное значение ymax = 3 при x = π/2 минимальное значение ymin = -3 при x = 3π/2 Проблема: функция задана в математической системе координат, строить надо на экране, указывая координаты в пикселях.
Преобразование координат Математическая система координат Экранная система координат (пиксели) Y (0, 0) x (0, 0) (x, y) y b X k – масштаб (длина изображения единичного отрезка на экране) a xэ yэ (xэ, yэ) xэ = a + kx yэ = b - ky
Пример: построить график функции
При работе с графикой используются три основных инструмента: перо; кисть; шрифт.
Графические примитивы procedure Circle(x, y, r: integer); Рисует окружность с центром в точке (x, y) и радиусом r. n procedure Ellipse(x 1, y 1, x 2, y 2: integer); Рисует эллипс, заданный своим описанным прямоугольником с координатами противоположных вершин (x 1, y 1) и (x 2, y 2). n procedure Rectangle(x 1, y 1, x 2, y 2: integer); Рисует прямоугольник, заданный координатами противоположных вершин (x 1, y 1) и (x 2, y 2). n procedure Round. Rect(x 1, y 1, x 2, y 2, w, h: integer); Рисует прямоугольник со скругленными краями; (x 1, y 1) и (x 2, y 2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев. n
Фигуры с заливкой (x 1, y 1) (x 2, y 2) Pen (1, 0, 0, 255); Brush (1, 255, 0); Rectangle (x 1, y 1, x 2, y 2); (x 1, y 1) Pen (1, 255, 0, 0); Brush (1, 0, 255, 0); Ellipse (x 1, y 1, x 2, y 2); (x 2, y 2) (x, y) ? Как отменить заливку? Brush (1, 100, 255); Fill (x, y);
Текст т! е ив 30 р (x, y) П о Text. Color (0, 0, 255); Brush (1, 255, 0); Font (20, 30, 600); размер 10 пикселей угол поворота насыщенность: 400 – нормальный 600 – жирный Move. To (x, y); writeln ('Привет!');
Пример program qq; begin Pen(2, 255, 0, 255); (200, 50) Brush(1, 0, 0, 255); (100, 100) Rectangle(100, 300, 200); Move. To(100, 100); Line. To(200, 50); Line. To(300, 100); Brush(1, 255, 0); Fill(200, 75); (300, 200) Pen(2, 255, 255); Brush(1, 0, 255, 0); Ellipse(150, 100, 250, 200); end.
Задания "4": "Лягушка" "5": "Корона"
Штриховка N линий (N=5) (x 1, y 1) h (x 2, y 2) Rectangle (x 1, Line( x 1+h, Line( x 1+2*h, Line( x 1+3*h, . . . x y 1, x 2, y 2); x 1+h, y 2); x 1+2*h, y 2); x 1+3*h, y 2); x h : = (x 2 – x 1) / (N + 1); var x, h: real; Rectangle (x 1, y 1, x 2, y 2); x : = x 1 + h; округление до for i: =1 to N do begin ближайшего целого Line( round(x), y 1, round(x), y 2); x : = x + h; end;
Как менять цвет? (x 1, y 1) x серый: R = G = B (x-1, y 1+1) (x 2, y 2) Brush ( 1, c, c, c ); Fill ( ? ? ? , ? ? ? ); Шаг изменения c: hc : = 255 div (N + 1); c : = 0; for i: =1 to N+1 do begin Line (round(x), y 1, round(x), y 2); Brush (1, c, c, c); Fill (round(x)-1, y 1+1); x : = x + h; c : = c + hc; end; var c, hc: integer;
Штриховка a (x 1, y 1) (x 2, y 2) h (x 3+a, y 1) (x 3, y 2) Line( x 1+h, y 1, x 1+h-a, y 2); Line( x 1+2*h, y 1, x 1+2*h-a, y 2); Line( x 1+3*h, y 1, x 1+3*h-a, y 2); . . . x x-a h : = (x 3 – x 2) / (N + 1); a : = x 2 – x 1; x : = x 1 + h; for i: =1 to N do begin Line( round(x), y 1, round(x-a), y 2); x : = x + h; end;
Штриховка (x 1, y 1) hx hy (x 2, y 2) Line( x 1, y 1+hy, x 1+hx, y 1+hy) ; Line( x 1, y 1+2*hy, x 1+2*hx, y 1+2*hy); Line( x 1, y 1+3*hy, x 1+3*hx, y 1+3*hy); . . . y x y hx : = (x 2 – x 1) / (N + 1); hy : = (y 2 – y 1) / (N + 1); x : = x 1 + hx; y : = y 1 + hy; for i: =1 to N do begin Line( x 1, round(y), round(x), round(y)); x : = x + hx; y : = y + hy; end;
Задания "4": Ввести с клавиатуры число линий штриховки и построить фигуру, залив все области разным цветом. "5": Ввести с клавиатуры число окружностей и построить фигуру, залив все области разным цветом.
Программирование на языке Паскаль Тема 8. Графики функций
Как соединить точки? Алгоритм: Программа: Если первая точка перейти в точку (xэ, yэ) иначе отрезок в точку (xэ, yэ) выбор варианта действий логическая переменная var first: boolean; . . . начальное значение begin. . . first : = True; while x <= xmax do begin. . . if first then begin Move. To(xe, ye); first : = False; end else Line. To(xe, ye); . . . end; end.
Задания "4": Построить график функции y = x 2 на интервале [-3, 3]. "5": Построить график функции (эллипс)
Программирование на языке Паскаль Тема 9. Процедуры
Процедуры Задача: Построить фигуру: ? Можно ли решить известными методами? Особенность: Три похожие фигуры. общее: размеры, угол поворота отличия: координаты, цвет ? Сколько координат надо задать?
Процедуры Процедура – это вспомогательный алгоритм, который предназначен для выполнения некоторых действий. Применение: • выполнение одинаковых действий в разных местах программы • разбивка программы (или другой процедуры) на подзадачи для лучшего восприятия Задача Подзадача 1 1. 2 1. 3 Подзадача 2 2. 1 2. 2 Подзадача 3 2. 3 3. 1 3. 2 3. 3
Процедуры Порядок разработки: • выделить одинаковые или похожие действия (три фигуры) • найти в них общее (размеры, форма, угол поворота) и отличия (координаты, цвет) • отличия записать в виде неизвестных переменных, они будут параметрами процедуры заголовок (x, y-60) 60 (x, y) (x+100, y) 100 тело процедуры параметры procedure Tr( x, y, r, g, b: integer); begin Move. To(x, y); цвет Line. To(x, y-60); Line. To(x+100, y); координаты Line. To(x, y); Brush(1, r, g, b); Fill(x+20, y-20); end;
Программа формальные параметры 60 (100, 100) 100 вызовы процедуры program qq; procedure Tr( x, y, r, g, b: integer); begin. . . end; begin Pen(1, 255, 0, 255); Tr(100, 0, 0, 255); процедура Tr(200, 100, 0, 255, 0); Tr(200, 160, 255, 0, 0); end. фактические параметры
Процедуры Особенности: • все процедуры расположены выше основной программы • в заголовке процедуры перечисляются формальные параметры, они обозначаются именами, поскольку могут меняться procedure Tr( x, y, r, g, b: integer); • при вызове процедуры в скобках указывают фактические параметры (числа или арифметические выражения) в том же порядке Tr (200, 100, 0, 255, 0); x y r g b
Процедуры Особенности: • для каждого формального параметра после двоеточия указывают его тип procedure A (x: real; y: integer; z: real); • если однотипные параметры стоят рядом, их перечисляют через запятую procedure A (x, z: real; y, k, l: integer); • внутри процедуры параметры используются так же, как и переменные
Процедуры Особенности: • в процедуре можно объявлять дополнительные локальные переменные, остальные процедуры не имеют к ним доступа program qq; procedure A(x, y: integer); var a, b: real; begin a : = (x + y)/6; . . . end; begin. . . end. локальные переменные
Параметры-переменные Задача: составить процедуру, которая меняет местами значения двух переменных. Особенности: надо, чтобы изменения, сделанные в процедуре, стали известны вызывающей программе program qq; var x, y: integer; procedure Exchange ( a, b: integer ); var c: integer; begin c : = a; a : = b; b : = c; end; begin x : = 1; y : = 2; Exchange ( x, y ); writeln ( ’x = ’, x, ’ y = ’, y ); end; эта процедура работает с копиями параметров x = 1 y = 2
Параметры-переменные параметры могут изменяться procedure Exchange ( var c: integer; begin c : = a; a : = b; b : = c; end; a, b: integer ); Применение: таким образом процедура (и функция) может возвращать несколько значений, Запрещенные варианты вызова Exchange ( 2, 3 ); { числа } Exchange ( x+z, y+2 ); { выражения }
Задания "4": Используя процедуры, построить фигуру. "5": Используя процедуры, построить фигуру.
Модули CRT и Graph.ppt