Главная страница
Навигация по странице:

  • Константа Значение Описание

  • 9.2 Графическое программирование 175

  • Константа Значение Стиль

  • 9.2 Графическое программирование 177

  • 9.2 Графическое программирование 179

  • программирование тусур. Программирование учебное пособие. Учебное пособие Томск Эль Контент


    Скачать 0.93 Mb.
    НазваниеУчебное пособие Томск Эль Контент
    Анкорпрограммирование тусур
    Дата17.08.2022
    Размер0.93 Mb.
    Формат файлаpdf
    Имя файлаПрограммирование учебное пособие.pdf
    ТипУчебное пособие
    #647947
    страница16 из 16
    1   ...   8   9   10   11   12   13   14   15   16
    Глава 9. Модули и графика
    SetTextStyle(Font:word;Direction:word;CharSize:word);
    где Font — выбранный шрифт, Direction — направление (горизонтальное или вертикальное), CharSize — размер выводимых символов. Возможные значения первых двух параметров представлены в табл. 9.5 и табл. 9.6. При организации вертикального вывода необходимо учитывать, что если программист не установит точку начала вывода с помощью MoveTo, то текст начинается с нижней строки экрана и продолжается вверх. Величину выводимых символов можно устанавли- вать с помощью коэффициента CharSize. Если CharSize = 1, то символ стро- ится в матрице 8
    ×8, если CharSize = 2, то используется матрица 16×16 и т. д.
    до 10-кратного увеличения.
    Таблица 9.5 – Шрифты
    Константа
    Значение
    Описание
    DefaultFont
    0 8
    ×8 — битовый шрифт
    TriplexFont
    1
    Штриховые шрифты
    SmallFont
    2
    Малый шрифт
    SansSerifFont
    3
    Сансериф
    GothicFont
    4
    Готический
    Таблица 9.6 – Константы ориентации
    Константа
    Значение
    Описание
    HoizDir
    0
    Слева направо
    VertDir
    1
    Снизу вверх
    9.2.4 Построение графических фигур
    Для построения прямоугольных фигур имеется несколько процедур. Первая из них — процедура вычерчивания прямоугольника:
    Rectangle(X1,Y1,X2,Y2: integer);
    где X1, Y1 — координаты левого верхнего угла, X2, Y2 — координаты правого ниж- него угла прямоугольника. Это очень полезная процедура, с ее помощью, в част- ности, можно легко построить любую диаграмму для визуального анализа данных.
    Область внутри прямоугольника не закрашена и совпадает по цвету с фоном.
    Пример
    Фрагмент программы, который выводит на экран 100 вычерченных разным цветом динамически меняющихся по высоте прямоугольников:
    for i:=1 to 100 do begin
    Random(16); {установка цвета}
    Rectangle(200,Random(300),250,300);
    {i-ый прямоугольник}

    9.2 Графическое программирование
    175
    Delay(50);{задержка}
    ClearDevice {очистка экрана}
    end;
    Более эффектные для восприятия прямоугольники можно строить с помощью процедуры
    Bar(x1,y1,x2,y2: integer);
    которая рисует закрашенный столбец. Цвет закраски устанавливается с помощью
    SetFillStyle.
    Пример
    SetFillStyle(1,3);
    Bar(10,10,50,100);
    Функция SetFillStyle(pattern:word;color:word) определяет стиль за- полнения. Значения pattern приведены в табл. 9.7 и могут быть представлены кон- стантой или цифрой, color берется из шкалы цветов.
    Таблица 9.7 – Стиль заполнения
    Константа
    Значение
    Стиль
    EmptyFill
    0
    Заполнение цветом фона
    SolidFill
    1
    Однородное заполнение цветом
    LineFill
    2
    Заполнение символами «- -»,
    цвет — color
    LtSlashFill
    3
    Заполнение символами «//» нормальной толщины, цвет — color
    SlashFill
    4
    Заполнение символами «//» удвоенной толщины, цвет — color
    BkSlashFill
    5
    Заполнение символами «
    //» удвоенной толщины, цвет — color
    LtBkSlashFill
    6
    Заполнение символами «
    //» нормальной толщины, цвет — color
    HatchFill
    7
    Заполнение вертикально-горизонтальной штриховкой тонкими линиями
    XhatchFill
    8
    Заполнение штриховкой крест-накрест по диагонали «редкими» тонкими линиями, цвет — color
    InterLeaveFill
    9
    Заполнение штриховкой крест-накрест по диагонали «частыми» тонкими линиями, цвет — color продолжение на следующей странице

    176
    Глава 9. Модули и графика
    Таблица 9.7 — Продолжение
    Константа
    Значение
    Стиль
    WideDotFill
    10
    Заполнение «редкими» точками
    CloseDotFill
    11
    Заполнение «частыми» точками
    UserFill
    12
    Заполнение по определенной пользователем маске заполнения, цвет — color
    Еще одна весьма эффектная процедура:
    Bar3D(x1,y1,x2,y2:integer; Depth: word; Top: boolean)
    вычерчивает трехмерный закрашенный прямоугольник. При этом используется тип и цвет закраски, установленные с помощью процедуры SetFilllStyle. Пара- метр Depth представляет собой число пикселов, задающих глубину трехмерного контура. Чаще всего его значение равно четверти ширины прямоугольника:
    Depth := (x2 - x1) div 4;
    параметр Top определяет, строить над прямоугольником вершину (Top = true)
    или нет (Top = false).
    Процедура DrawPoly позволяет строить любые многоугольники линией теку- щего цвета, стиля и толщины. Она имеет следующий формат:
    DrawPoly(numPoints: word; var PolyPoints);
    Параметр PolyPoints является нетипизированным параметром, который со- держит координаты каждого пересечения в многоугольнике. Параметр NumPoints задает число координат в PolyPoints. Необходимо помнить, что для вычерчива- ния замкнутой фигуры с n вершинами нужно передать при обращении к процедуре
    DrawPoly
    n
    + 1 координату, где координата вершины с номером n будет равна координате вершины с номером 1. Проиллюстрируем сказанное следующей про- граммой:
    {Программа вычерчивает в центре экрана треугольник красной линией}
    user Crt,Graph;
    var
    DriverVar, ModeVar :integer;
    pp : array[1..4] of PointType;
    {встроенный тип PointType определен как record x,y:integer end}
    xM, yM, xMaxD4, yMaxD4: word;
    begin
    DriverVar := Detect;
    InitGraph(DriverVar,ModeVar,
    '');
    xM := GetMaxX; yM := GetMaxY; xMaxD4 := xM div 4;
    yMaxD4 := yM div 4;
    {определение координат вершин}
    pp[1].x := xMaxD4;
    pp[1].y := yMaxD4;
    pp[2].x := xM — xMaxD4;
    pp[2].y := xMaxD4;
    pp[3].x := xM div 2;

    9.2 Графическое программирование
    177
    pp[3].y := yM — yMaxD4;
    pp[4] := pp[1];
    SetColor(LightRed); {цвет для вычерчивания}
    DrawPoly(4,pp);{4 — количество пересечений + 1}
    Readln;
    CloseGraph end.
    В результате работы программы на экране появится красный треугольник на черном фоне (рис. 9.1).
    Рис. 9.1 – Треугольник
    Возникает естественное желание его закрасить, т. е. изменить фон внутри тре- угольника. Это можно сделать с помощью процедуры
    FillPoly(NumPoints: word; var PolyPoints);
    Значения параметров те же, что и в процедуре DrayPoly. Действие тоже аналогично, но фон внутри многоугольника закрашивается. В качестве примера нарисуем в левой верхней части экрана четырехугольную звезду зеленого цвета
    (рис. 9.2):
    {программа вычерчивает четырехугольную звезду}
    user Crt, Graph;
    const star: array[1..18] of integer = (75,0, 100,50, 150,75,
    100,100, 75,150,
    50,100, 0,75,
    50,50, 75,0);
    var
    DriverVar, ModeVar: integer;
    begin
    DriverVar := Detect;
    InitGraph(DriverVar, ModeVar,
    '');
    SetFillStyle(1,Green);
    FillPoly(9,Star); {9 — количество пересечений + 1}
    Readln;
    CloseGraph end.
    Для задания углов используется полярная система координат (рис. 9.3).

    178
    Глава 9. Модули и графика
    Рис. 9.2 – Четырехугольная звезда
    Рис. 9.3 – Полярная система координат
    Процедура вычерчивания окружности текущим цветом имеет следующий формат:
    Circle(x,y, Radius: word);
    где x и y — центр окружности, а Radius — ее радиус.
    Два оператора обеспечивают вывод ярко-зеленой окружности с радиусом 50 пик- селей и центром в точке 450, 100:
    SetColor(LightGreen);
    Circle(450,100,50);
    В ряде случаев, в частности для создания псевдообъемных фигур, используют- ся дуги. Их можно вычертить с помощью процедуры
    Arc(x,y: integer; StAngle, EndAngle, Radius: word);
    где x, y — центр окружности, StAngle и EndAngle — начальный и конечный уг- лы, Radius — радиус. Цвет для вычерчивания устанавливается процедурой
    SetColor
    . Очевидно, что если StAngle = 0 и EndAngle = 360, то вычерчи- вается полная окружность.
    Для построения эллиптических дуг предназначена процедура
    Ellipse
    (X,Y: integer; StAngle, EndAngle: word; xR, yR: word);
    где x, y — центр эллипса в дисплейных координатах, xR и yR — горизонтальная и вертикальная оси. Дуга эллипса вычерчивается от начального угла StAngle до конечного угла EndAngle текущим цветом. Значения StAngle = 0 и End-
    Angle
    = 360 приведут к вычерчиванию полного эллипса.

    9.2 Графическое программирование
    179
    Пример
    Эллипс, нарисованный ярко-голубым цветом:
    SetColor(LightCyan);
    Ellipse(100,100,0,360,30,50);
    Обратите внимание, что фон внутри эллипса совпадает с фоном экрана. Что- бы создать закрашенный эллипс (в частности, закрашенный круг), используется специальная процедура
    FillEllipse(x,y: integer; xR,yR: word);
    где x, y — центр эллипса в дисплейных координатах, xR и yR — горизонтальная и вертикальная оси. Заполнитель устанавливается процедурой SetFillStyle.
    SetFillStyle(wideDotFill, Green);
    {установка стиля заполнения}
    SetColor(LightRed); {цвет для вычерчивания эллипса}
    FillEllipse(300,150,50,50);
    В этом фрагменте эллипс вычерчивается ярко-красной кривой и заполняется редкими точками зеленого цвета.
    9.2.5 Простые анимационные алгоритмы
    Программы, которые строят, перемещают, изменяют форму различных изобра- жений на экране в соответствии с заранее разработанным сценарием, называются
    анимационными.
    Самый простой метод анимации заключается в следующем. Сначала выводится рисунок любым цветом. Через определенный период времени (используйте проце- дуру Delay из модуля Crt) тот же рисунок формируется цветом, совпадающим с фоном, что вызывает исчезновение изображения. Затем рисунок выводится в дру- гом месте тем же цветом, что и первая картинка, и т. д.
    Движение элемента изображения (спрайта) в этом алгоритме вызывает мель- кание экрана и носит несколько прерывистый характер. Избавиться от мелькания и заставить элемент изображения двигаться более плавно можно, если организовать вывод на разные страницы видеопамяти. В этом случае применяется следующий алгоритм:
    • вывести изображение на страницу 0 (она видима по умолчанию);
    • сформировать новое изображение на невидимой странице 1;
    • сделать видимой страницу 1;
    • сформировать новое изображение на невидимой странице 0 и т. д.

    180
    Глава 9. Модули и графика
    Контрольные вопросы по главе 9 1. Каковы координаты четырех угловых пикселей и центрального пикселя экрана?
    2. Как нарисовать и закрасить круг с заданными центром и радиусом?
    3. Создайте на экране N случайно размещенных кругов, каждый из которых имеет случайный радиус.
    4. Создайте на экране случайно размещенные круги со случайными радиуса- ми. Программа перестает рисовать круги, когда вы нажмете «Enter».
    5. Создайте на экране круг, окраска которого циклически меняется, перебирая все возможные цвета в графическом режиме VGA.
    Рекомендуемая литература к главе 9
    [1]
    Немнюгин С. А. Turbo Pascal / С. А. Немнюгин. — СПб. : Питер, 2001. —
    496 г.
    [2]
    Фаронов В. В. Турбо Паскаль 7.0: Практика программирования / В. В. Фа- ронов. — М. : Нолидж, 2000. — 416 с.

    ЗАКЛЮЧЕНИЕ
    Для того чтобы что-то понять — надо это уже знать. . .
    Те виды информации,
    для которых у
    нас нет готовых когнитивных схем, мы просто не воспринимаем. . . В пустую голову ничего поме- стить нельзя.
    М. Холодная
    Психология интеллекта: парадоксы исследования
    Вы научились основам программирования, даже менее того, основам програм- мирования на Паскале. И даже если Ваши программы при создании не требовали от Вас значительных усилий — знайте, что Вы еще новичок в программировании.
    Чтобы стать экспертом, Вам предстоит написать множество различных про- грамм на различных языках программирования. Программирование требует значи- тельных интеллектуальных усилий. И императивное (или процедурное) програм- мирование на таких языках, как Паскаль и C++, требует мыслить в компьютерных терминах. Со временем Вы познакомитесь с другими парадигмами программиро- вания, для которых достаточно мышления в терминах задачи. Программировать станет легче, но никогда творческий акт, лежащий в основе программирования, не удастся передать самим компьютерам. И поэтому, возможно, ваше умение и опыт будут всегда востребованы!

    ГЛОССАРИЙ
    Аксиоматическая семантика — логические формулы, которые определяют («ак- сиоматизируют») определенные свойства программ.
    Алгоритм — свод конечного числа правил, задающих последовательность вы- полнения операций при решении той или иной специфической задачи.
    Алфавит — набор основных символов, «букв алфавита», никакие другие сим- волы в предложениях языка не допускаются.
    Булевский (логический) тип используется для представлений значений двузнач- ной логики — всего два значения: истина, ложь.
    Вещественные типы обозначают множества вещественных чисел в различных диапазонах.
    Вызов подпрограммы — выполнение действий, заданных в подпрограмме, мо- жет быть произведен в некоторой точке программы посредством указания имени этой подпрограммы.
    Выражение — понятие языка программирования — представляет собой формаль- ное правило для вычисления некоторого (нового) значения.
    Вычислительная структура состоит из одного или нескольких типов и неко- торых основных (элементарных, базовых) операций над этими типами, каждая с результатом одного из этих типов.
    Глобальные объекты — константы, типы, переменные и т. п., описанные в про- грамме, но не являющиеся локальными.
    Динамическое распределение памяти, т. е. выделение памяти для отдельных элементов данных в тот момент, когда они появляются во время выполнения про- граммы, а не во время трансляции.
    Записи — составной тип; есть абстракция конечной последовательности эле- ментов, но в отличие от массивов объединяет значения различных типов.
    Интерпретатор — транслятор, который преобразует лишь небольшой фраг- мент исходной программы в машинные команды, а затем, дождавшись, когда ком- пьютер их выполнит, переходит к обработке следующего фрагмента.
    Интерпретация — переход (часто только воображаемый, мыслимый) от пред- ставления к абстрактной информации, т. е. к значению представления.

    Глоссарий
    183
    Информатика — это наука и техника, связанные с машинной обработкой, хра- нением и передачей информации.
    Информация — называют абстрактное содержание («содержательное значение»,
    «семантика») какого-либо высказывания, описания, указания, сообщения или из- вестия. Внешняя форма сообщения — представление.
    Компилятор — транслятор, который читает всю программу целиком и делает ее перевод на машинный язык и помещает команды в память компьютера. После того, как программа откомпилирована, исходная программа больше не нужна.
    Конкатенация (сцепление) — операция со строками; применяется для соедине- ния (сцепления) нескольких строк в одну результирующую строку.
    Константа — понятие алгоритмического языка, имеет имя (обозначение) и зна- чение (элемент данных), но в отличие от переменной значение не может измениться.
    Локальные объекты — константы, типы, переменные и т. п., описанные в под- программе.
    Массив — составной тип; каждое значение массива состоит из фиксированного числа элементов одного и того же базового типа (т. е. значение содержит фиксиро- ванное число однотипных компонент).
    Множество — составной тип; возможными значениями переменных множе- ственного типа являются все подмножества значений базового типа.
    Модули — независимо хранимые и разрабатываемые, независимо компилируе- мые и тестируемые программные единицы со строго определенными интерфейса- ми, которые могут объединяться с главной программой.
    Ограниченный тип определяется сужением (ограничением) допустимого диа- пазона значений некоторого стандартного дискретного типа. Задается минимальное и максимальное значение диапазона.
    Оператор — фрагмент программы: представляет законченную фразу языка и оп- ределяет некоторый вполне законченный этап обработки данных.
    Оператор ввода (чтения) — оператор, предназначенный для ввода в программу входных данных;
    Оператор вывода (записи) — оператор, предназначенный для вывода из про- граммы результатов работы.
    Оператор присваивания — оператор, предназначенный для изменения значений переменных.
    Оператор цикла с предусловием (цикл while) используется в случае, когда цик- лическими действиями управляет логическое условие и, как правило, к моменту выполнения цикла не ясно, сколько нужно повторить циклические действия.
    Операционная семантика — описание последствий отдельных шагов вычисле- ний, которые имеют место при выполнении программы.
    Отладка — деятельность, направленная на установление точной природы из- вестной ошибки в программе, а затем на исправление этой ошибки.

    184
    Глоссарий
    Параметр-значение формальный параметр подпрограммы; передает значе- ние внутрь подпрограммы. Вычисленное значение внутри подпрограммы невоз- можно с помощью параметра-значения передать наружу.
    Параметр-переменная — формальный параметр подпрограммы; передает зна- чение внутрь подпрограммы, и вычисленное значение внутри подпрограммы с по- мощью параметра-переменной передается наружу.
    Переменная — понятие алгоритмического языка, имеет имя (обозначение) и зна- чение (элемент данных).
    Перечислимый тип — тип, который задается путем явного перечисления всех его возможных значений, причем каждое такое значение будет определяться только именем.
    Подпрограмма — обособленная именованная часть программы со своим соб- ственным локальным контекстом имен.
    Программа— запись алгоритма на языке программирования.
    Процедура — подпрограмма; служит для задания совокупности действий, на- правленных на изменение внешней по отношению к подпрограмме программной обстановки и, как следствие, определение новых значений переменных в програм- ме. Вызов процедуры играет роль оператора.
    Пустой оператор — не имеет «графического» начертания, и не производит ни- каких действий. Необходимость введения такого понятия диктуется в первую оче- редь синтаксическими причинами.
    Рекурсия — организация повторения выполнения фрагмента программы, равно- сильная циклам.
    Семантические правила определяют свойства данного понятия алгоритмиче- ского языка в зависимости от свойств используемых в них понятий.
    Символьный (литерный) тип — значениями этого типа являются элементы на- бора литер, определяемого реализацией языка.
    Синтаксис — система правил, определяющая допустимые конструкции из букв алфавита. Синтаксис отвечает на вопрос: является ли последовательность символов программой на данном языке или нет?
    Синтаксические правила показывают, как образуется данное понятие алгорит- мического языка из других понятий и (или) букв алфавита.
    Списки — рекурсивные структуры данных; список может быть либо пустым,
    либо не пустым. В последнем случае он имеет голову (произвольный элемент данных) и хвост, который в свою очередь является списком.
    Ссылочный тип — тип, применяемый при динамическом распределении памя- ти. Значение ссылочного типа (неформально) — адрес в памяти, где располагается конкретное значение базового типа.
    Старшинство (приоритеты) операций — задает очередность выполнения опе- раций, указанных в выражении.

    Глоссарий
    185
    Строковый тип данных определяет множество символьных цепочек произ- вольной длины от нуля символов до заданного их числа.
    Структурное программирование — программирование, ориентированное на об- щение с людьми, а не с машиной.
    Тестирование — процесс выполнения программы с намерением найти ошибки.
    Технология программирования — это совокупность методов и средств разработ- ки (написания) программ и порядок применения этих методов и средств.
    Тип переменной — множество значений, которые может принимать переменная,
    и, как следствие, множество операций, допустимых над данной переменной.
    Транслятор — программа, переводящая с алгоритмического языка на машин- ный язык.
    Условный оператор применяется для задания разветвления в программе, т. е.
    выбора действий в зависимости от истинности или ложности какого-либо условия.
    Файловый тип — составной тип; файл интерпретируется как потенциально бес- конечный список значений одного и того же (базового) типа.
    Функциональная семантика описание функций программы, т. е. установле- ние отношения между входными и выходными данными (экстенсиональное или наблюдаемое отношение).
    Функция — подпрограмма; служит для определения алгоритма вычисления но- вого значения некоторого простого типа, и вызов функции должен быть операндом в выражении.
    Целые типы обозначают множества целых чисел в различных диапазонах.
    Цикл с параметром — оператор, позволяющий задать автоматическое измене- ние значения некоторой переменной и использовать эти значения в последователь- ных итерациях.
    Язык металингвистических формул Бэкуса-Наура (язык БНФ) позволяет опи- сывать формальные языки (в том числе и языки программирования) в виде неко- торых формул.

    Учебное издание
    Зюзьков Валентин Михайлович
    ПРОГРАММИРОВАНИЕ
    Учебное пособие
    Корректор Осипова Е. А.
    Компьютерная верстка Насынова Н. Е.
    Подписано в печать 05.12.13. Формат 60х84/8.
    Усл. печ. л. 21,86. Тираж 300 экз. Заказ
    Издано в ООО «Эль Контент»
    634029, г. Томск, ул. Кузнецова д. 11 оф. 17
    Отпечатано в Томском государственном университете систем управления и радиоэлектроники.
    634050, г. Томск, пр. Ленина, 40
    Тел. (3822) 533018.
    1   ...   8   9   10   11   12   13   14   15   16


    написать администратору сайта