Внешние устройства в качестве файлов.

Связь с внешними устройствами в языке Паскаль осуществляется также через файловые переменные.

В Турбо Паскале существует два типа внешних устройств: устройства операционной системы и текстовые устройства.

Устройства операционной системы, с которыми осуществляется обмен информацией, могут быть описаны как файлы со стандартными именами. Эти имена следующие:

CON – консоль (клавиатура, дисплей). С этим устройством

стандартно связаны файловые переменные Input и Output.

LPT1, LPT2, LPT3 – печатающие устройства. Если в системе один принтер, то

он будет иметь имя LPT1. Если в программе используется

стандартный модуль Printer (указан в разделе Uses), можно

использовать для вывода на принтер стандартную файловую

переменную Lst.

PRN – синоним LPT1.

COM1, COM2 – имена двух портов.

AUX – синоним COM1.

NUL – фиктивное внешнее устройство.

К текстовым устройствам относятся устройства, не поддерживаемые операционной системой или имеющие другие способы обращения. Например, устройство CRT, поддерживаемое стандартным модулем Сrt. Оно эквивалентно CON в операционной системе, но более быстродействующее и позволяет использовать разные цвета и окна.

С текстовым устройством нельзя связаться процедурой assign. Для связи с ним служит специальная модификация этой процедуры, например, для связи с устройством CRT следует использовать процедуру AssignCrt в модуле Crt.

Граф

Занятие 1. Основные понятия.

Граф – это непустое множество точек (вершин) и множество отрезков (ребер), концы которых принадлежат заданному множеству точек.

Если на каждом ребре задать направление, то граф будет ориентированным.

 

Если, двигаясь по ребрам графа в заданном направлении, можно попасть из заданной вершины 1 в заданную вершину 2, то говорят, что эти вершины соединены путем.

Замкнутый путь, состоящий из различных ребер, называется циклом.

Граф называется связным, если любые две его вершины соединены путем.

 
 

Связный граф без циклов называется деревом.

С каждой вершиной дерева связывается конечное число отдельных деревьев, называемых поддеревьями.

Рассмотрите пример дерева, в узлах которого располагаются символы.

Для дальнейшей работы с деревьями необходимо определить ряд понятий.

• Вершина у, находящаяся непосредственно ниже вершины х, называется непосредственным потомком х, а вершина х называется предком у.

• Если вершина не имеет потомков, то она называется терминальной вершиной или листом, если имеет, то называется внутренней вершиной.

• Количество непосредственных потомков внутренней вершины называется ее степенью.

Степенью дерева называется максимальная степень всех вершин.

Например,

• вершины F, D, E являются непосредственными потомками вершины В;

• вершины F, D, E являются листьями;

• вершины C, G, H – внутренние;

• степень вершины В – 3, а вершины Н – 1;

• степень дерева равна 3.

Определение. Двоичное дерево – это дерево, в котором из каждой вершины исходит не более двух ребер.

Задание. Наберите текст программы на компьютере и рассмотрите ее действие. Данная программа демонстрирует создание произвольного двоичного дерева.

Program DemidenkoS;

Uses

Crt, Graph;

Const

Arr : array [1..6] of integer=(160,80,40,20,10,5);

Arr1 : array [1..6] of integer=(120,80,70,60,50,40);

Type

ss=^sp;

sp=record

elem:byte;

Next : array[1..2] of ss;

end;

Var

a, b, c, d : longint;

s : string;

grDriver : integer;

grMode : integer;

a1, b1 : real;

x, Some, Max, Min : ss;

Procedure Zap(y : ss; n : integer);

Var

aa,bb:integer;

Begin

y^.elem:=random(99)+1;

bb:=random(3);

if n<1

then

bb:=2;

if n<a

then

for aa : =1 to bb do

begin

new(y^.next[aa]);

y^.next[aa]^.next[1]:=nil;

y^.next[aa]^.next[2]:=nil;

zap(y^.next[aa],n+1);

end;

End;

Procedure Strel(x1, y1 : integer; k : Real);

Var

aa : Real;

Begin

aa:=arctan(k);

if k>0

then

begin

line(x1,y1,x1+round(10*cos(aa+pi/18)),y1-round(10*sin(aa+pi/18)));

line(x1,y1,x1+round(10*cos(aa-pi/18)),y1-round(10*sin(aa-pi/18)));

line(x1+round(10*cos(aa+pi/18)),y1-round(10*sin(aa+pi/18)),x1+round(10*cos(aa-pi/18)),y1-round(10*sin(aa-pi/18)));

end

else

begin

aa:=-aa;

line(x1,y1,x1-round(10*cos(aa+pi/18)),y1-round(10*sin(aa+pi/18)));

line(x1,y1,x1-round(10*cos(aa-pi/18)),y1-round(10*sin(aa-pi/18)));

line(x1-round(10*cos(aa+pi/18)),y1-round(10*sin(aa+pi/18)),x1-round(10*cos(aa-pi/18)),y1-round(10*sin(aa-pi/18)));

end

end;

Procedure Wiv(y : ss; n, x1, y1 : integer);

Var

spi : ss;

Begin

SetColor(n+1);

Circle(x1,y1,10);

Str(y^.elem, s);

if length(s)=2

then

OutTextXY(x1-6, y1-2, s)

else

OutTextXY(x1-3, y1-2, s);

if n<a

then

begin

if y^.next[1]<>nil

then

begin

SetColor(n+1);

Line(x1,y1+10,x1-(arr[n] div 2),y1+((arr1[n]-20) div 2)+10);

SetColor(n+2);

Line(x1-(arr[n] div 2),y1+((arr1[n]-20) div 2)+10,x1-arr[n],y1+arr1[n]-10);

Strel(x1-arr[n],y1+arr1[n]-10,(arr1[n]-20)/arr[n]);

Wiv(y^.next[1],n+1,x1-arr[n],y1+arr1[n]);

end;

if y^.next[2] <> nil

then

begin

SetColor(n+1);

Line(x1,y1+10,x1+arr[n],y1+arr1[n]-10);

SetColor(n+2);

Line(x1+(arr[n] div 2),y1+((arr1[n]-20) div 2)+10,x1+arr[n],y1+arr1[n]-10);

Strel(x1+arr[n],y1+arr1[n]-10,-(arr1[n]-20)/arr[n]);

Wiv(y^.next[2],n+1,x1+arr[n],y1+arr1[n]);

end;

end;

end;

Begin

ClrScr;

Randomize;

Repeat

new(x);

a:=6;

x^.next[1]:=Nil;

x^.next[2]:=Nil;

Zap(x,0);

Max:=x;

Min:=x;

writeln;

grDriver := Detect;

InitGraph(grDriver, grMode,'c:\tp7\bgi\');

SetFillStyle(solidfill,15);

SetColor(15);

Wiv(x,1,320,50);

Delay(5000);

until KeyPressed;

End.

Задание. Поэкспериментируйте над предложенной программой, внося свои изменения. Результат покажите учителю.








Дата добавления: 2015-05-16; просмотров: 1132;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.02 сек.