- •Предисловие
- •Основные навыки и умения
- •Логическая культура: знание логики, логическая интуиция.
- •Языковые знания и умения.
- •Поисковые знания и умения.
- •Алгоритмические навыки и умения.
- •Общие подходы к построению алгоритмов
- •Тестирование и сопровождение программ
- •Обязательный минимум содержания среднего (полного) общего образования
- •Технология обработки текстовой информации
- •Введение в информатику
- •Системы счисления
- •Перевод из десятичной системы счисления
- •Перевод в десятичную систему счисления
- •Перевод чисел из двоичной системы счисления в восьмеричную, шестнадцатеричную системы и обратно
- •Выполнение арифметических операций в позиционных системах счисления
- •Элементы математической логики
- •Логические законы
- •Алгоритм и его свойства
- •Исполнители. Компьютер - универсальный исполнитель
- •Работа компьютера
- •Turbo pascal - исполнитель паскаль-программ
- •Конструкции Паскаля
- •Типы данных
- •Целый тип данных
- •Вещественный тип данных
- •Символьный тип данных
- •Логический тип данных
- •Выражения
- •Операторы ввода-вывода
- •Оператор присваивания
- •Общий вид программы на Паскале
- •Условный оператор
- •If логическое_выражение then оператор1 else оператор2;
- •If логическое_выражение then оператор1;
- •Операторы цикла
- •Построение линейных алгоритмов
- •Построение ветвящихся алгоритмов
- •Построенние циклических алгоритмов
- •Нахождение суммы
- •Вложенные циклы
- •Переборный метод решения задач
- •Численные методы
- •Метод итераций
- •Метод половинного деления
- •Вычисление определенного интеграла методом трапеций
- •Случайные числа
- •Метод Монте-Карло (метод статистических испытаний)
- •Массивы Одномерные массивы
- •Перебор элементов массива
- •Перебор подмассивов
- •Классы задач по обработке массивов
- •Задачи первого класса
- •Задачи второго класса
- •Задачи третьего класса
- •Задачи четвертого класса
- •Сортировка массивов
- •Сортировка вставками
- •Сортировка пузырьком (обменом)
- •Сортировка выбором
- •Сортировка фон Неймана (слиянием)
- •Двумерные массивы
- •Обработка строк
- •Процедуры и функции
- •Рекурсия
- •Работа с графикой
- •Классы программного обеспечения
- •Компиляция и интерпретация
- •Текстовый редактор
- •Электронные таблицы
- •Системы управления базами данных (субд)
- •Пример решения экзаменационного билета
- •Контрольные работы
- •Контрольная работа №1
- •Контрольная работа № 2
- •Контрольная работа № 3
- •Контрольная работа № 4
- •Контрольная работа № 5
- •Библиографический список
Работа с графикой
Турбо-Паскаль дает возможность выводить на экран рисунки, чертежи, графики функций, диаграммы. Все это называют машинной графикой. В стандарте Паскаля графический вывод не предусмотрен. Но есть мощная графическая библиотека, оформленная в виде модуля Graph, для подключения которого необходимо в начале программы написать:
Uses Graph;
Для вывода графических изображений необходимо перевести экран в графический режим. Графический режим характеризуется:
-
количеством точек (пикселов) по горизонтали и вертикали, светимостью которых можно управлять, обращаясь к ним по координатам. Координата верхнего левого угла - (0,0); координата Х изменяется слева направо, максимальная координата по Х определяется функцией GetMaxX; координата Y изменяется сверху вниз, максимальную координату по Y определяет функция GetMaxY.
-
количеством воспроизводимых на экране цветов (палитра).
Допустимые графические режимы зависят от типа используемого монитора и соответствующего графического драйвера компьютера. Для установки графического режима используется процедура: Procedure InitGraph (Var Driver, Mode: integer; Path: string). Driver определяет тип графического драйвера, Mode - режим работы графического драйвера, Path - путь до файла графического драйвера. Таким образом, для инициации графического режима необходима следующая последовательность операторов:
Uses Graph;
Var Driver, Mode: integer;
Begin
Driver := Detect; {автоматическое определение типа драйвера и установка режима}
InitGraph (Driver, Mode, ‘C:\TP7\BGI’);
.......
CloseGraph; {отмена графического режима и возврат в текстовый режим}
end.
В графическом режиме используются следующие операторы:
Цвет фона SetBkColor (цвет); цвет может иметь значение 07 или
эквивалентное английское название
Цвет рисунка SetColor (цвет); цвет может иметь значение 015.
(соответственно: 0 - Black - черный; 1 - Blue - синий; 2 - Green - зеленый; 3 - Cyan -голубой; 4 - Red - красный; 5 - Magenta - фиолетовый; 6 - Brown - коричневый; 7 - LightGrey - светло-серый; 8 - DarkGrey - темно-серый; 9 - LigthBlue - ярко-голубой; 10 - LigthGreen - ярко-зеленый; 11 - LigthCyan - ярко-голубой; 12 - LigthRed - розовый; 13 - LigthMagenta - малиновый; 14 - Yellow - желтый; 15 - White - белый; 128 - Blink - мерцающий).
Высвечивание точки с координатами Х, Y на экране PutPixel (X, Y, цвет).
Перемещение курсора в точку (Х, Y) MoveTo (X, Y).
Прямая линия между точками (X1, Y1) и (X2, Y2) Line (X1, Y1, X2, Y2).
Прямая линия от текущей точки до точки (X, Y) LineTo (X, Y).
Прямоугольник с верхним левым углом (X1, Y1)
и нижним правым (X2, Y2) Rectangle(X1, Y1, X2, Y2).
Закрашенный прямоугольник с верхним левым
углом (X1, Y1) и нижним правым (X2, Y2) Bar (X1, Y1, X2, Y2).
Установление цвета закраски SetFillStyle (штриховка, цвет).
(штриховка: 0 - цвет фона; 1 - сплошная; 2 - ‘- - - ‘; 3 - ‘///’;
4 -‘///’ утолщенные; 5 - ‘\\\’ утолщенные; 6 - ‘\\\’; 7 - клетка;
8 - косая клетка; 10 - редкие точки; 11 - частые точки).
Закрашивание области FloodFill (X, Y, цвет границы) ,
где X, Y - координаты точки внутри области.
Окружность Circle (X, Y, радиус).
Задача 1. Нарисуйте домик в графическом режиме.
Решение.
{рисование домика}
Uses Graph;
Var Driver, Mode : integer;
begin
{переход в графический режим}
InitGraph (Driver, Mode, ‘C:\TP7\BGI’);
SetBkColor (6); {фон - коричневый}
SetColor (2); {цвет линий - зеленый}
Rectangle (200, 200, 400, 400);
Line (200, 200, 300, 150);
Line (300, 150, 400, 200);
{рисование окна}
Rectangle (250, 250, 350, 350);
Line (250, 280, 350, 280);
line (300, 280, 300, 350);
{рисование солнышка}
SetColor (14); {цвет линий - желтый}
Circle (100, 100, 30);
{рисование лучей}
Line (65, 100, 40, 100);
Line (100, 65, 100, 40);
Line (135, 100, 160, 100);
Line (100, 135, 100, 160);
Line (125, 125, 145, 145);
Line (55, 55, 75, 75);
Line (125, 75, 145, 55);
Line (55 145, 75, 125);
readln;
CloseGraph;
end.
Упражнения.
-
Нарисуйте домик в символьном режиме, используйте при этом процедуры модуля CRT (GoToXY (x, y) - перемещение курсора в точку с координатами (x, y); TextBackGround (цвет) - цвет фона; TextColor (цвет); ClrScr - очистка экрана).
-
Нарисуйте в графическом режиме лампочку, которая зажигается и гаснет.
3. Нарисуйте в графическом режиме паровозик.
-
Измените программу таким образом, чтобы паровозик двигался. Примечание: движение получается, если каждый раз рисовать паровозик на новом месте. При изменении координаты Х с отрицательным шагом паровозик будет двигаться влево, иначе - вправо.
-
Измените программу так, чтобы паровозик уезжал за пределы экрана и возвращался с другой стороны.
Задача 2. Нарисуйте график функции y = |x - 2| на отрезке - 25 до 25.
Решение. Сначала необходимо начертить оси координат и подписать их. Оси необходимо выбирать таким образом, чтобы они пересекались. Поскольку мы перенесли начало координат в точку пересечения осей и направление оси Y изменилось на противоположное, координаты точек на экране будут определяться следующим образом:
X = X0 + абцисса; Y = Y0 - ордината,
где X0, Y0 - координаты точки пересечения осей X и Y, т.е. центра новой системы координат.
Теперь необходимо выбрать масштаб по осям X и Y. Масштаб показывает какая часть экрана изображает единицу графика. Чтобы задать масштаб необходимо определить размеры экрана, отводимые под график. Для определенности будем считать, что весь экран будет отведен под график, поэтому:
mx = GetMaxX/(Xmax - Xmin + 1) = GetMaxX/(25 - (-25) + 1).
Для оси Y необходимо определить Ymax и Ymin (соответственно |-25 -2| = 27 и 0). Весь график будет выше оси X. Будем использовать для изображения отрезка [0; 27] GetMaxY div 2 точек, поэтому my := GetMaxY div 2/ 30.
Затем необходимо нанести единицы измерения на оси, ось Х разметим с шагом 5, ось Y - с шагом 1.
Теперь можно приступить к построению графика функции. Будем строить графики, соединяя соседние точки линейными отрезками. Для достижения плавности нужно увеличивать количество точек.
Uses Graph;
var driver, mode: integer; {для инициализации графического режима}
x0, y0: integer; { координаты центра}
x, y, i: integer; { координаты текущей точки
i - счетчик циклов}
mx, my: real; {масштабы}
s: string; {для разметки осей}
begin
driver := detect;
InitGraph (driver, mode, ‘C:\TP7\BGI’);
SetBkColor (7); SetColor(1);
x0 := GetMaxX div 2;
y0 := GetMaxY div 2;
{рисуем оси координат}
{ось X}
line (0, y0, GetMaxX, y0); line (GetMaxX, y0, GetMaxX - 10, y0 -10); {прорисовка}
line (GetMaxX, y0, GetMaxX - 10, y0 +10); {}
OutTextXY (GetMaxX - 10, y0 - 15, ‘X’);
{ось Y}
line (x0, 0, x0, GetMaxY); line (x0, 0, x0 - 10, 10); {прорисовка}
line (x0, 0, x0 + 10, 10); {}
OutTextXY (x0 - 20, 5, ‘Y’);
mx := GetMaxX/(25 - (-25 + 2)); my := GetMaxY div 2/30;
{нанесение единиц измерения на оси}
for i := -25 to 25 do
begin x := x0 + round (i * mx);
if i mod 5 = 0 then begin line (x, y0 - 2, x, y0 + 2);
str (i, s); OutTextXY (x + 4, y0 + 2, s)
end;
end;
for i := -30 to 30 do
begin y := y0 - round (i * my);
if i mod 5 = 0 then begin line (x0 - 2, y, x0 +2, y);
str (i, s); OutTextXY (x0 + 4, y, s)
end;
end;
{вывод графика}
x := x0 + round (-25 * mx);
y := y0 - round (30 * my);
MoveTo (x, y);
for i := - 24 to 25 do
begin x := x0 + round (i * mx);
y := y0 + round (abs(i - 2) * my);
end;
OutTextXY (x0 + 50, y0 + 200, ‘график функции y = |x-2|’);
readln;
CloseGraph;
end.
Упражнения.
-
Напишите программу вывода графика функции y = x - 2на участке - 25 до 25 в символьном режиме.
-
Напишите программу вывода в графическом режиме графика функции y = a + sin (x - b) на отрезке - 10 до 15.
Задача 3. Выведите на экран орнамент. Повторяющийся фрагмент выделен пунктиром. Прорисовка этого фрагмента будет оформлена в виде процедуры. В качестве параметров используются координаты верхнего левого угла.
Uses Graph;
var driver, mode: integer;
x, y : interger;
procedure cadr (x, y: integer);
begin
rectangle (x + 10, y + 10, x + 30, y + 30);
line (x, y, x + 10, y + 10); line (x + 40, y, x + 30, y + 10);
line (x, y + 40, x + 10, y + 30); line (x + 40, y + 40, x + 30, y + 30);
end;
begin {тело основной программы}
driver := detect;
InitGraph (driver, mode, ‘C:\TP7\BGI’);
x := 0;
while x <= GetMaxX do
begin
y := 0;
while y <= GetMaxY do
begin
cadr (x, y); y := y + 40
end;
x := x + 40;
end;
readln;
CloseGraph;
end.
Упражнения.
-
Внести такие дополнения в программу, чтобы:
-
узор был цветным;
-
у каждой строки узора был свой цвет;
-
цвет менялся от фрагмента к фрагменту.
-
В примере 3 повторение фрагмента осуществляется сначала по горизонтали, затем по вертикали. Измените программу так, чтобы узор выводился сначала по вертикали, а затем по горизонтали.
-
Измените шаг узора по вертикали и горизонтали.
-
Почему настройка на графический режим сделана в основной программе, а не в процедуре? Как будет работать программа, если сделать настройку в процедуре?
-
Напишите процедуру рисования елочки. Используя эту процедуру, нарисуйте еловый лес.