Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VT_PAS1.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
202.24 Кб
Скачать

Практический пример. Построение спирали

Постановка задачи. Построить спираль из 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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]