
- •Министерство общего и профессионального образования Российской Федерации Уральский государственный технический университет Основы программирования на языке Паскаль
- •Структура программы на паскале
- •Типы данных
- •Правила программирования арифметических операций
- •Арифметические функции
- •Операции отношения (сравнения)
- •Логические операции
- •Приоритет операций
- •Операторы турбо-паскаля ввод и вывод данных
- •Составной оператор
- •Условный оператор
- •Оператор выбора
- •Операторы повторений (циклов) счетный цикл
- •Оператор цикла с предусловием
- •Оператор цикла с постусловием
- •Использование массивов
- •Процедуры и функции
- •Описание и использование функций
- •Описание и использование процедур
- •Взаимодействие подпрограмм
- •Стандартные модули
- •Использование модуля crt
- •Практический пример. Программа "меню"
- •Использование модуля graph
- •Установка цветов
- •Изображение точек и линий
- •Практический пример. Построение графика функции
- •Работа с текстом
- •Практический пример. Построение спирали
- •Программирование с использованием нестандандартных типов данных перечисляемый тип
- •Множества
- •Основы программирования на языке Паскаль
Практический пример. Построение спирали
Постановка задачи. Построить спираль из N витков с центром в середине экрана.
Выбор метода решения задачи. Поскольку не сказано какую именно спираль необходимо построить, выбираем, например, спираль, заданную следующими параметрическими уравнениями:
x = r * cos(t), y = r * sin(t),
где r = t/2, t = alf...2* N *pi. Параметр t для определенности имеет некоторое минимальное значение alf. Идея построение графика состоит в том, чтобы каждый раз соединять прямыми отрезками две достаточно близкие точки спирали. В качестве таких выбираем точки, для которых параметр t отличается на один градус (pi/180 радиан). Далее приводится текст программы с необходимыми пояснениями.
Program spiral;
{ Пpогpамма pисования спиpали из n витков в центpе с кооpдинатами xc, yc
-------------- описание констант и пеpеменных------------}
uses Graph;
const
xc=320; yc=200; n=20; pi=3.1416; alf=pi/4; p6=pi/180;
var
t,r:real;
k,gd,gm,i,x,y,n1: integer;
A: string;
{----------------------- основной модуль ------------------------}
BEGIN
{установка графического режима}
gd:=detect;
InitGraph(gd,gm,''); {установка цветов фона и символов}
SetBkColor(15); SetColor(12); {подключение средств вывода текстов
(n1- вспомогательная переменная)}
n1:=InstallUserFont('lcom');
SetTextStyle(n1,0,0);
{------------------ построение графика ------------------------}
t:=alf;
MoveTo(xc,yc); {пеpемещение куpсоpа в начальную точку}
for i:=1 to n do
begin
for k:=1 to 360 do
begin
t:=t+p6;
r:=0.5*t;
x:=round(r*cos(t))+xc;
y:=round(r*sin(t))+yc;
LineTo(x,y); {pисование пpямой от текущего положения до точки с кооpдинатами x,y}
end;
end;
circle(xc,yc,round(r)); {pисование окpужности с центpом в точке xc,yc и с pадиусом r}
SetColor(9); {новый цвет символов}
Str(N:3,A); {пеpевод целого числа N в стpоку A}
OutTextXY(20,30,'Спиpаль из'+A+' витков'); {ноpмальный шpифт}
SetUserCharSize(1,1,1,2); {изменение pазмеpов шpифта - в два pаза ниже}
OutTextXY(20,230,'СПИРАЛЬ');
SetUserCharSize(2,1,1,1); {изменение pазмеpов шpифта - в два pаза шиpе }
OutTextXY(20,330,'Спиpаль');
readln; {остановка для фиксации изобpажения}
CloseGraph; {конец pаботы в гpафическом pежиме }
END.
Программирование с использованием нестандандартных типов данных перечисляемый тип
Перечисляемый тип относится к типам данных, определяемых пользователем. В ряде случаев их использование позволяет существенно упростить программу и сделать ее более наглядной. Применяются они обычно при решении нечисловых задач.
ПЕРЕЧИСЛЯЕМЫЙ ТИП - это упорядоченнное множество значений, полученных путем перечисления их имен. Перечисляемые типы должны быть описаны. Например,
TYPE Animal=(cat,dog,cow);
В данном случае мы определили новый тип данных "Animal" (животные), а в скобках перечислили возможные значения данных этого типа: кот, собака, корова (к сожалению, Турбо-Паскаль не позволяет нам использовать русский алфавит). Определив тип, далее в программе мы можем определить переменные даного типа. Например,
VAR N1: Animal;
Этим мы определили, что переменная N1 может принимать одно из трех значений, указанных выше. Например, допустимо
N1:=cat;
Но если мы запишем N1:=1 или N1:=Animal[1], будет выдано сообщение об ошибке. Далее приводится пример программы, вычисляющей продолжительность рабочей недели в часах:
Program No16;
Type
Day=(Mo,Tu,We,Th,Fr,Sa,Su);
{Mo - понедельник, Day - день
Tu - вторник, WorkDay - рабочий день
We - среда, WorkTime - рабочее время
Th - четверг,
Fr - пятница,
Sa - суббота,
Su - воскресенье}
Var
WorkDay:Day;
WorkTime:integer;
BEGIN
WorkTime:=0;
FOR WorkDay:=Mo TO Fr DO
WorkTime:=WorkTime+8;
Write('Продолжительность рабочей недели ',WorkTime,' часов.');
END.
Поскольку перечисляемый тип - упорядоченное множество значений, то над данными допускаются операции сравнения. При этом считается, что значения "увеличиваются" слева направо. Таким образом, например dog>cat, Mo<We и т.п.
ТИП-ДИАПАЗОН
Паскаль предоставляет пользователю возможность на основе уже определенных типов определять новые типы, являющиеся их частями (подмножествами). Тип, на основе которого определяется какой-либо другой, называют БАЗОВЫМ. Тип-диапазон - это подмножество своего базового типа. Он задается границами своих значений внутри базового типа. Тип-диапазон часто используют для описания массивов.
Пусть в некоторой программе требуется описать три действительных массива p, t и r из 50 элементов. Проще всего это сделать так
TYPE
interval=1..50;
massiv=array[interval] of real;
VAR
p,t,r: massiv;
В примере определен тип-диапазон interval. Базовым для него является стандартный тип integer.