Скачать презентацию Программирование на языке Паскаль Модули Необходимость в Скачать презентацию Программирование на языке Паскаль Модули Необходимость в

Модули CRT и Graph.ppt

  • Количество слайдов: 53

Программирование на языке Паскаль Модули Программирование на языке Паскаль Модули

Необходимость в использовании модулей, или, другими словами, в модульном программировании, возникла в первую очередь Необходимость в использовании модулей, или, другими словами, в модульном программировании, возникла в первую очередь из-за трудностей, связанных с огромными объемами программ, их сложностью и потребностью в коллективной работе. Модули значительно расширяют возможности языка. По определению модуль считается отдельной программой, его структура аналогична структуре программы - он представляет собой набор констант, типов данных, переменных, процедур и функций.

Модули предназначены для разбиения текста программы на несколько файлов. В модулях описываются переменные, константы, Модули предназначены для разбиения текста программы на несколько файлов. В модулях описываются переменные, константы, типы, классы, процедуры и функции. Для того чтобы эти объекты можно было использовать в вызывающем модуле (которым может быть и основная программа), следует указать имя файла модуля (без расширения. pas) в разделе uses вызывающего модуля. Файл модуля должен находиться либо в том же каталоге, что и основная программа, либо в подкаталоге Units системного каталога программы Pascal ABC.

Модуль в Pascal ABC представляет собой файл со следующим содержанием: unit имя модуля; раздел Модуль в Pascal ABC представляет собой файл со следующим содержанием: unit имя модуля; раздел подключения модулей раздел описаний раздел инициализации раздел финализации end. Первая строка обязательна и называется заголовком модуля.

Раздел подключения модулей начинается со служебного слова uses, за которым следует список имен модулей, Раздел подключения модулей начинается со служебного слова uses, за которым следует список имен модулей, перечисляемых через запятую. Раздел описаний может включать разделы описания переменных, констант, типов, процедур и функций, которые следуют друг за другом в произвольном порядке.

Раздел инициализации состоит из служебного слова initialization, после которого следуют операторы, разделяемые символом Раздел инициализации состоит из служебного слова initialization, после которого следуют операторы, разделяемые символом "точка с запятой". Операторы из раздела инициализации модуля выполняются до начала основной программы. Раздел финализации состоит из служебного слова finalization, после которого следуют операторы, разделяемые символом "точка с запятой". Операторы из раздела финализации модуля выполняются после окончания основной программы.

Раздел финализации может отсутствовать, либо оба раздела инициализации и финализации могут отсутствовать. Раздел инициализации Раздел финализации может отсутствовать, либо оба раздела инициализации и финализации могут отсутствовать. Раздел инициализации может также начинаться со служебного слова begin, в этом случае раздел финализации отсутствует.

В качестве объектов в модуле можно использовать процедуры и функции. Для этого в интерфейсной В качестве объектов в модуле можно использовать процедуры и функции. Для этого в интерфейсной части модуля необходимо описать заголовки подпрограмм и видимые переменные, а в части реализации должны быть полные описания подпрограмм. Чтобы иметь возможность использовать интерфейсные объекты модуля в своей программе, нужно указать имя соответствующего tpu файла после служебного слова uses (или список имен модулей, перечисленных через запятую): Uses Unit 1, Unit 2, Unit 3; В языке Pascal. ABC есть одиннадцать стандартных модулей: System, Crt, Graph. ABC и др. Из них только модуль System подключается автоматически к любой программе.

Краткая характеристика модулей: • модуль System включает все стандартные процедуры и функции языка Pascal Краткая характеристика модулей: • модуль System включает все стандартные процедуры и функции языка Pascal и встроенные процедуры и функции языка Pascal. Подключается к любой программе автоматически, не требуя объявления; • модуль Crt обеспечивает управление текстовым режимом работы экрана (перемещение курсора в любую позицию экрана, изменение цвета символов, фона и др. ); • модуль Graph обеспечивает управление графическим режимом работы экрана (позволяет создавать и выводить на экран графические изображения и текстовые надписи);

Модуль CRT предназначен для работы с текстовым окном. Он написан для совместимости с Turbo Модуль CRT предназначен для работы с текстовым окном. Он написан для совместимости с Turbo Pascal. В качестве текстового используется графическое окно модуля Graph. ABC, при этом запрещено изменение размеров окна и ввод/вывод осуществляется непосредственно в текстовом окне. В результате вывода может осуществляться скроллирование текстового экрана. Подключается командой Uses CRT;

Экранная система координат X (0, 0) y x Y (x, y) Экранная система координат 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. Константы и переменные модуля 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 бита var Text. Attr: byte; Задает цвет символов и цвет фона одновременно. Первые 4 бита отводятся под цвет фона, последние 4 бита - под цвет символов. Например, присваивание Text. Attr: =16*Yellow+Red задает красный цвет символов на желтом фоне. {программа «Работа с текстом» }

Процедуры Read() и Read. Ln() Несмотря на простоту и удобство, стандартные процедуры read() и Процедуры Read() и Read. Ln() Несмотря на простоту и удобство, стандартные процедуры read() и readln() не обеспечивают всех потребностей, возникающих при работе с клавиатурой. Их важнейший недостаток в том, что вместе с приемом символов они выполняют их отображение на экран (так называемое “эхо на монитор”). В большинстве случаев это либо не нужно, либо недопустимо. Кроме того, они рассчитаны только на ввод относительно небольшого подмножества символов (буквы, цифры, знаки препинания) и частичного использования специальных клавиш (например, Backspace для отмены только что введенного символа). Эти процедуры не могут распознать нажатие функциональных или редактирующих клавиш и их сочетаний с управляющими клавишами Ctrl, Alt, Shift. В силу указанных причин процедуры read и readln редко используются в серьезных программах. {программа «Read. Ln» }

Функция Read. Key: char; Более универсальным средством взаимодействия с клавиатурой является стандартная функция read. Функция Read. Key: char; Более универсальным средством взаимодействия с клавиатурой является стандартная функция read. Key из модуля Crt. Функция вызывается без параметров, возвращает значение символьного типа и работает следующим образом. Организуется задержка выполнения с ожиданием нажатия клавиши. После того, как нажатие произведено, функция завершает работу, возвращая код нажатой клавиши. Полученное значение можно использовать далее в программе.

Функция Read. Key: char; Функция read. Key не отображает введенный символ на экран, благодаря Функция Read. Key: char; Функция read. Key не отображает введенный символ на экран, благодаря чему она широко используется для организации управления в различных диалоговых программах. В дополнение к этому read. Key позволяет отслеживать нажатие более широкого множества клавиш, опознавая функциональные и редактирующие клавиши и их сочетания с управляющими клавишами Ctrl, Alt, Shift. {программа «Read. Key_1» }

Функция Read. Key: char; Если говорить более подробно, функция read. Key исходит из того, Функция Read. Key: char; Если говорить более подробно, функция read. Key исходит из того, что все множество клавиш и их сочетаний с управляющими клавишами разбито на два подмножества, которые обычно называют основным и расширенным наборами. В основной набор входят клавиши букв, цифр, разделителей и знаков препинания, их комбинации с клавишей Shift (или, что то же самое, при включенном переключателе Caps. Lock), а также клавиши Tab, Back. Space, Enter и Esc. Если нажата одна из перечисленных клавиш, то read. Key возвратит обычный ASCII-код соответствующего символа.

Функция Read. Key: char; В расширенном наборе содержатся некоторые (не все) клавиши из основного Функция Read. Key: char; В расширенном наборе содержатся некоторые (не все) клавиши из основного набора в комбинации с клавишами Ctrl и Alt, а также функциональные и редактирующие клавиши. Если нажимается одна из клавиш расширенного набора, то функция read. Key возвращает символ с кодом 0 (его представление в программе – chr(0) или #0). В этом случае повторное обращение к read. Key вернет код клавиши из расширенного набора. {программа «Read. Key_2, 3, 4» }

Для графического вывода в Pascal. ABC используется модуль Graph. ABC. Модуль Graph. ABC содержит Для графического вывода в Pascal. ABC используется модуль Graph. ABC. Модуль Graph. ABC содержит константы, типы, процедуры, функции и классы для рисования в графическом окне. Для использования процедур и функций модуля Graph. ABC в разделе uses указываем имя этого модуля: Program qq; uses Graph. ABC;

Экранная система координат X (0, 0) y x Y (x, y) Экранная система координат X (0, 0) y x Y (x, y)

Управление цветом Модуль Graph. ABC содержит константы и функции для работы с цветами. Тип Управление цветом Модуль 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; Для работы с цветами используются следующие функции: function RGB(r, g, b: integer): Color. Type; Возвращает целое значение, являющееся кодом цвета, который содержит красную, зеленую и синюю составляющие с интенсивностями r, g и b соответственно (r, g и b – целые в диапазоне от 0 до 255, причем, 0 соответствует минимальной интенсивности, 255 – максимальной).

Цветовая система RGB Цветовая система RGB

Графические примитивы n procedure Set. Pixel(x, y, color: integer); Закрашивает один пиксел с координатами Графические примитивы 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); Передвигает невидимое перо к точке с координатами Графические примитивы 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) на интервале от Построение графиков функций Задача: построить график функции y = 3 sin(x) на интервале от 0 до 2π. Анализ: максимальное значение ymax = 3 при x = π/2 минимальное значение ymin = -3 при x = 3π/2 Проблема: функция задана в математической системе координат, строить надо на экране, указывая координаты в пикселях.

Преобразование координат Математическая система координат Экранная система координат (пиксели) Y (0, 0) x (0, Преобразование координат Математическая система координат Экранная система координат (пиксели) 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, Графические примитивы 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, Фигуры с заливкой (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, Текст т! е ив 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); Пример 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 Штриховка 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) 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 Штриховка 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, Штриховка (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. Графики функций Программирование на языке Паскаль Тема 8. Графики функций

Как соединить точки? Алгоритм: Программа: Если первая точка перейти в точку (xэ, yэ) иначе Как соединить точки? Алгоритм: Программа: Если первая точка перейти в точку (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. Процедуры Программирование на языке Паскаль Тема 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, Программа формальные параметры 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 Процедуры Особенности: • для каждого формального параметра после двоеточия указывают его тип 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 : = Параметры-переменные параметры могут изменяться 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": Используя процедуры, построить фигуру.