- •§1. Начало программирования на языке Паскаль.
- •Краткое знакомство.
- •Функциональные клавиши Турбо Паскаль.
- •§2. Алфавит языка Паскаль. Переменные. Типы переменных Алфавит языка Паскаль.
- •Стандартные математические функции
- •Типы переменных
- •§3. Операторы присваивания.
- •Оператор ввода-вывода.
- •Арифметические операции.
- •Стандартные функции
- •Правила записи арифметических выражений.
- •Правила записи стандартных функций.
- •Оператор ввода .
- •Оператор вывода .
- •§4. Структура программы.
- •Первая программа.
- •Эксперименты с программой.
- •§5. Разветвляющие алгоритмы. Составной оператор
- •Оператор if или условный оператор
- •Блок-схема полного у словного оператора
- •Блок-схема неполного у да Условие словного оператора
- •§6. Оператор цикла с параметром Циклический алгоритм
- •Цикл с предусловием «Пока»
- •Цикл с постусловием «До»
- •Цикл с параметром «Для» Цикл с параметром «Для»
- •Блок-схема цикла «for»
- •§7. Базовые циклические алгоритмы
- •1. Алгоритм вычисления суммы чисел.
- •2. Подсчет количества чисел удовлетворяющих заданному условию.
- •3. Вычислить сумму чисел, кратных 3, из десяти чисел введенных с клавиатуры.
- •4. Алгоритм вычисления n!.
- •5. Алгоритм вычисления аn.
- •§8. Цикл с предусловием while
- •Блок-схема цикла «Пока»
- •§9. Оператор цикла с постусловием Repeat
- •Блок-схема цикла «До»
- •§10. Эксперимент с программой. Лабораторная работа
- •§11. Оператор варианта выбора
- •§12. Типы определенные пользователем Раздел описания типов
- •Перечислимый тип данных
- •§13. Вложенные циклы
- •§14. Одномерные массивы Работа с элементами
- •Способы задания значений элементов массива
- •Алгоритмы работы с массивами
- •Эксперименты с программой
- •§15. Обработка символьных массивов. Данные символьного типа.
- •Описание строковых переменных
- •Операции над строковыми переменными
- •§16. Двумерные массивы Работа с элементами
- •5.Вычисление суммы элементов всего двумерного массива.
- •6. Задача поиска максимального (минимального) элемента и его индексов.
- •7. Алгоритм поиска минимального элемента и его индексов для всего массива.
- •8. Квадратные матрицы.
- •Примеры решения задач
- •§17. Подпрограммы
- •Процедура в Паскале и ее формат.
- •Функции
- •§18. Примеры рекурсивного программирования
- •Задачи с рекурсивной формулировкой
- •Задачи, из постановки которых можно извлечь рекурсию
- •Задачи, которые можно решить как частный случай обобщенной
- •Задачи, в которых можно использовать характеристику или свойство функции
- •§19. Графика
- •Установка цвета и стиля заполнения
- •Процедуры создания графических примитивов
- •1. Текущий указатель.
- •2. Вывод точки
- •3. Вывод отрезка
- •4. Построение прямоугольника
- •5. Построение дуг, окружностей, эллипсов.
- •6. Построение закрашенного эллипса:
- •7. Заполнение внутренней или внешней области замкнутой фигуры.
- •Материалы для дополнительного чтения. §20. Файловый тип данных
- •Связь переменной файлового типа с файлом на диске.
- •Чтение из файла.
- •Закрытие файла
- •Признак конца файла
- •Запись в файл
- •Прямой доступ к элементам файла
- •§21. Текстовые файлы
- •§22. Множества
- •Операции над множествами
- •Операция определения принадлежности элемента множеству
- •Сравнение множеств
- •§23. Комбинированный тип данных (записи)
- •2. С использованием оператора присоединения.
- •§24. Приближенные вычисления.
- •§25. Основы структурного программирования
- •10. Комплексный пример
- •Содержание
Процедуры создания графических примитивов
1. Текущий указатель.
При построении изображения иногда надо указать точку начала вывода. В текстовом режимах эту точку указывает курсор, который присутствует на экране (его можно убрать). В графическом режимах видимого курсора нет, но есть невидимый текущий указатель. Для перемещения текущего указателя по экрану дисплея служит процедура MoveTo(x,y) - перемешает указатель в точку с координатами (x,y).
MoveRel(dx, dy) - перемещает указатель на dx точек по горизонтали и dy точек по вертикали от предыдущей позиции.
Примеры
...........
MoveTo(200,100);
MoveRel(5,10); {указатель переместится в точку (205,110)}
...........
Чтобы определить максимальное значение координат X Y для установленного видеорежима, используют функции
GetMaxX : integer; максимум по Х
GetMaxy : integer; максимум по Y
Установить указатель в центр экрана.
.........
var Xcentr, Ycentr : integer;
..........
begin
...........
Xcentr:=GetMaxX div 2;
Ycentr:=GetMaxy div 2;
MoveTo(Xcentr, Ycentr);
.............
2. Вывод точки
PutPixel(x,y : integer; <цвет точки>);
где x,y координаты точки.
3. Вывод отрезка
Line(x1,y1,x2,y2);
(x1,y1) - координаты начала отрезка
(x2,y2) - координаты конца отрезка
!!! Обратите внимание на то, что в процедуре не задается цвет. В этом и аналогичных случаях цвет определяется процедурой SetColor().
LineTo(x,y) - строит отрезок из точки текущего положения указателя в точку с координатами (x,y).
LineRel(dx,dy) - строит отрезок из точки текущего положения указателя в точку с координатами (x+dx, y+dy)
4. Построение прямоугольника
Rectangle(x1,y1,x2,y2:integer);
Bar(x1,y1,x2,y2:integer) - рисует прямоугольник и закрашивает его цветом и стилем, определенным в процедуре SetFillStyle().
5. Построение дуг, окружностей, эллипсов.
Circle(x,y,<радиус> : word); - окружность указанного радиуса
Ellipse(x,y:integer; <нач_угол>,<кон_угол> :word; xR,yR : word) - построение эллиптических дуг.
X,Y - координаты центра,
xR, yR - длина горизонтальной и вертикальной полуосей в пикселах.
Угол отсчитывается против часовой стрелки и указывается в градусах. Дуга эллипса вычерчивается от заданного начального угла до конечного угла. Если значение начального угла 0, а конечного 360 - будет построен полный эллипс.
6. Построение закрашенного эллипса:
FillEllipse(x,y:integer; xR,yR);
X,Y - координаты центра,
xR, yR - длина горизонтальной и вертикальной полуосей в пикселах.
Стиль заполнения области внутри эллипса устанавливается процедурой SetFillStyle(), а самого эллипса - SetColor().
7. Заполнение внутренней или внешней области замкнутой фигуры.
FloodFill(x,y:integer; <цвет границы области>);
Стиль задан SetFillStyle()
X,Y - координаты точки внутри (или вне) замкнутой области.
Задача. Построить в центре экрана синий прямоугольник, закрасив его линиями вида \\ темно-серого цвета. Фон экрана сделать белым.
Program graph1;
uses Graph;
var Driver, Mode : integer;
begin
Driver:=Detect; {инициализация графического}
InitGraph(Driver, Mode,’’) { режима}
SetBkColor(15); { установка цвета фона - белый}
SetColor(1); {установка текущего цвета - синего}
Cleardevice; {очистка экрана установленным цветом фона}
SetFillStyle(5,8); {установка стиля заполнения}
Rectangle(290,290, GetMaxX-290, GetMaxy-290); {прямоугольник}
FloodFill(301,230,1); {заполнение прямоугольника выбранным
стилем}
ReadLn;
CloseGraph;
end.
Задача 2. Построить график y=sinx по оси y в диапазоне -100,100 y=100*sinx, 0<x<2pi, длина шага Dx=pi/100.
Program sinus;
uses crt, graph;
var gt, gr : integer;
xm,ym,i : integer;
dx,x1,y1,x2,y2:real;
begin
gt:=detect; initgraph(gt,gr,’’);
xm:=getmaxx div 2;
ym:=getmaxy div 2;
setcolor(3);
line(0,ym-100,0,yn+100); line(0,ym.getmaxx,ym); {построение осей}
outtextxy(100,ym+50,’pi’); {вывод текста рядом с осями}
moveto(0,ym);
dx:=oi/100;
x1:=0;
setcolor(5);
while x1<=200 do begin
y1:=100*sin(x1*dx);
x2:=x1+dx;
y2:=100*sin(x2*dx);
line(round(x1),ym+round(y1),round(x2), ym+round(y2));
x1:=x2;
y1:=y2
end;
readln;
closegraph;
end.
