- •Программирование на языке паскаль Учебное пособие
- •1. Общая характеристика языков программирования
- •1.1. Языки программирования
- •1.2. Трансляторы
- •1.3. История создания языков
- •1.4. Базовые структуры языков программирования
- •Контрольные вопросы
- •2. Описание языка паскаль
- •2.1. Основные объекты языка
- •2.2. Структура Паскаль-программы
- •2.3. Типизация данных
- •2.4. Объявление данных
- •Контрольные вопросы
- •3. Простые операторы. Ввод/вывод данных
- •3.1. Оператор присваивания и выражения
- •3.2. Операторы вызова процедур. Ввод/вывод данных
- •3.2.1. Процедуры ввода read и readln
- •Общая форма записи оператора
- •3.2.2. Процедуры вывода write и writeln
- •Контрольные вопросы
- •Каково назначение процедуры writeln без параметров? Задания для самостоятельной работы
- •Варианты заданий
- •Дополнительные задания
- •4. Структурные операторы. Организация ветвлений и циклов
- •4.1. Составной и пустой операторы
- •4.2. Организация ветвлений. Операторы выбора
- •4.2.1. Оператор ветвления if
- •4.2.2. Оператор варианта case
- •Общая форма записи
- •Контрольные вопросы
- •Задания для самостоятельной работы
- •Варианты заданий
- •Дополнительные задания
- •4.3. Организация циклов. Операторы повторения
- •4.3.1. Оператор while
- •4.3.2. Оператор repeat
- •4.3.3. Оператор for
- •Контрольные вопросы
- •Задания для самостоятельной работы
- •Варианты заданий
- •5. Организация подпрограмм. Процедуры и функции
- •5.1. Процедуры и их типизация
- •5.1.1. Встроенные процедуры
- •5.1.2. Процедуры пользователя
- •5.1.3. Процедуры без параметров
- •5.1.4. Фактические и формальные параметры
- •5.1.5. Локальные и глобальные переменные
- •5.1.6. Процедуры с параметрами-значениями
- •5.1.7. Процедуры с параметрами-переменными
- •5.1.8. Комбинированные процедуры
- •5.2. Функции пользователя. Рекурсивные функции
- •5.2.1. Определение функции
- •О бщая форма записи заголовка функции
- •5.2.2. Функции пользователя
- •5.2.3. Рекурсивные функции
- •Контрольные вопросы
- •Задания для самостоятельной работы
- •Варианты заданий
- •Дополнительные задания
- •6. Массивы. Данные типа array
- •Одномерные массивы
- •Общая форма записи
- •Общая форма записи
- •6.2. Многомерные массивы
- •6.3. Способы работы с массивами
- •Контрольные вопросы
- •Задания для самостоятельной работы
- •Варианты заданий
- •Дополнительные задания
- •Обработка литерных величин. Данные типа char и string
- •7.1. Тип данных char
- •Работа программы
- •7.2. Массивы литер
- •7.3. Тип данных string
- •7.4. Строковые функции и процедуры
- •Контрольные вопросы
- •Задания для самостоятельной работы
- •Варианты заданий
- •Дополнительные задания
- •8. Множества. Данные типа set
- •О бщий вид регулярного типа
- •8.1. Определение типа set
- •8.2. Операции над множествами
- •8.2.1. Принадлежность множеству
- •8.2.2. Сравнение множеств
- •8.2.3. Действия над множествами
- •8.3. Вывод множеств
- •Контрольные вопросы
- •Задания для самостоятельной работы
- •Варианты заданий
- •9. Комбинированный тип. Данные типа record
- •9.1. Оператор типа record
- •9.2. Оператор with
- •9.3. Записи с вариантами
- •Контрольные вопросы
- •Задания для самостоятельной работы
- •Варианты заданий
- •10. Файловый тип
- •10.1. Определение и описание типизированного файла
- •Общая форма записи
- •10.2. Типы файлов. Процедура работы с файлами
- •10.3. Основные приемы работы с файлами
- •10.4. Текстовые файлы
- •Контрольные вопросы
- •Задания для самостоятельной работы
- •Типизированные файлы
- •Текстовые файлы
- •Программирование графики
- •Основные понятия компьютерной графики
- •Формирование изображения на экране
- •Инициализация графического режима
- •Простейшие графические операторы (процедуры)
- •Основные приемы работы с графикой
- •Работа с цветом
- •Заполнение (закрашивание) произвольной замкнутой фигуры
- •Построение простейших геометрических фигур
- •Контрольные вопросы
- •Задания для самостоятельной работы
- •Варианты заданий
- •Библиографический список
Контрольные вопросы
Каким образом осуществляется перевод дисплея в графический режим работы?
Присутствие какого драйвера необходимо для перехода в графический режим?
Какой вид имеет система координат экрана в графическом режиме?
Какие значения могут принимать константы цвета для символов и для фона?
Какой процедурой выполняется установка типа линий?
Какой процедурой выполняется установка типа закраски?
Какой процедурой выполняется установка шрифта для вывода текста?
Какой процедурой можно вывести на экран изображение куба?
Как нарисовать кольцо указанного цвета?
Можно ли процедурой Ellipse вывести на экран окружность?
Каким образом строятся сектора (круговые и эллиптические)?
С помощью каких процедур и функций осуществляется эффект движения изображения по экрану?
Задания для самостоятельной работы
Пример 1. Составить программу построения узора, образованного пересечением двух семейств расходящихся отрезков, у которых k1 и k2 - расстояния между отрезками слева и справа, а h – смещение-наклон вниз (вверх) всего семейства.
Решение. Построение горизонтальной линии осуществляется процедурой line (0, k, 640, k). Если нужно построить n линий, то эту процедурe надо поместить в цикл: for i :=1 to n do line (0, i*k, 640, i*k). Наклон линий получается добавлением шага h ко второй координате (h>0, то наклон вниз, h<0, то наклон вверх): for i :=1 to n do line (0, i*k, 640, i*k+h). Расширение и сужение прямых ljcnbuftncz путем задания различных значений k1 и k2 величины k: for i :=1 to n do line (0, i*k1, 640, i*k2+h). Второе семейство получается, если наклон линий производить по первой координате: for i :=1 to n do line (0, i*k2+h, 640, i*k1).
Uses crt, graf;
Var gD, gM, i, k1, k2, h: integer;
Begin
k1:= 8; k2 := 3; h:=110; gD:= Detect;
InutGraf (gD, gM, ‘’); setcolor(red);
For i := 1 to (480 div k1) do
Begin
for i :=1 to n do line (0, i*k1, 640, i*k2+h):
for i :=1 to n do line (0, i*k2+h, 640, i*k1);
end;
readln; Closegraph
end.
Пример 2. Построить график функции y = x2 на интервале [a, b].
Решение. Для построения графика функции нужно разбить интервал [a, b] на n частей (h – шаг разбиения (b-a)/n), а затем проводить с помощью процедур line и lineto отрезки прямой, который и образуют ломаную линию графика функции. Можно, конечно воспользоваться и выводом точки (точечное построение графика). В программе построим функцию вычисления ее значений в произвольной точке и процедуру построения по точкам ломаной линии, представляющей собой график функции.
Uses crt, graf;
Var gD, gM, n: integer;
a, b: real;
function f (x: real) : real;
Begin
f:= x*x
End;
Procedure graf (x0, x1, y0, y1, n: word; a, b: real);
Var h, m, x, t1, t2 :real;
i, u, v, xv, yv: word;
begin
h:= (b-a)/n; {Нахождение шага разбиения}
m:= abs(f(a)); {Поиск значения функции в левом конце отрезка}
t1:= (x1-x0) / (b-a); t2:= (y1-y0) / (2*m);
{Построение координатных осей}
setfillstyle (1,15); bar( x0-5, y0-5, x1+5, y1+5);
xv:= round(x0-a*t1); yv:= round((t0+y1) / 2);
line (x0, yv, x1, yv);
{Установка текущего курсора в начало графика}
Moveto (x0, yv-round (f (a)*t2);
{Построение графика}
Setcolor (3);
For i:= 1 to n do
Begin
x:= a+i*h; u:= x0+round ( (x-a)*t1);
v:= yv:= round (f (x)*t2); lineto (u, v);
end;
end; {Конец процедуры}
begin
clrscr; readln (a, b, n); gD:= Detect;
Initgraph (gD, gM, ‘’);
graf (100, 500, 50, 300, n, a, b);
Readln; Closegraph
end.
Пример 3. Вращение Земли вокруг Солнца.
Решение. Организуем движение точки (Земли) по окружности, в центре которого размещается круг (Солнце). Установку точки на орбите можно осуществить по параметрическим формулам окружности:
X0 := 320 + r*sin(A);
Y0 := 240 + r*cos(A),
где r1 – радиус орбиты Земли, А- параметрический угол, меняющийся от 0 до 360 градусов. Чтобы организовать движение, достаточно в цикле устанавливать точку с координатами (x0, y0) для всех углов, принимающих значение от 0 до 360 градусов с шагом h.
Uses Crt, GRAPH;
Var i, d: integer;
fi, h, ; real;
x0, y0, r1: integer;
begin
d := detect;
InitGRAPH (d, i, 'G/Work/t7'); {Инициализация графики}
SetColor (Red);
Circle (320, 240, 10); {Рисование окружности красного цвета}
SetFillStyle (1, Red);
FloodFill (320, 240, Red); {Закраска круга (Солнца) красным цветом}
R1:= 100; h:=5; fi:= 0;
{Вращение точки по орбите. Процесс завершается нажатием любой клавиши}
Repeat
X0:= round (r1*sin (fi)) +320;
Y0:= round (r1*cos(fi)) +240;
fi:= fi+2*pi*h/360;
Putpixel (x0, y0, 15);
delay(50);
Putpixel ((x0, y0, 0);
Until keypressed;
CloseGraph
end.