Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

ЗАВДАННЯ. el = ^spis; {вказiвник на елемент списку}



Program spis_2c;

Uses Crt,Graph;

Const.

Pi=3.1415826535;

Type

el = ^spis; {вказiвник на елемент списку}

spis = record {тип елементу списку}

x,y: integer;{координати центру кола, відповідні елем-ту списку}

inform: string; {рядок даних елементу списку}

{(суть елементу)}

pred: el; вказiвник на попередній елемент списку}

posi: el; {вказiвник на наступний елемент списку}

end;

Var

Driver_Mode: integer; {перемiщення, використані для iнiцiалiзацiї}

{графічного режиму дисплея}

main: el;

numb: integer; {кiлькiсть елементів списку}

key: char;

st: integer; {символ, відповідний натиснутій клавіші}

Procedure Beep;


Begin {процедура подачи звукового сигналу}

Sound(1000); {включення звукового сигналу}

delay(128); {затримка}

Nosound; {виключення звукового сигналу}

End;

Procedure Clr(xl,yl,x2,y2:integer);

{процедура очищення частини екрану, заданої у вигляді} {прямокутника}

{х1,у1 - координати верхнього кута прямокутника ліворуч}

{х2,у2 - координати правого нижнього кута прямокутника}

Begin

SetFillStyle(0,l);

Ваr(х1,у1,х2,у2);

End;

Procedure Setscr; {процедура вивода інструкції по роботі з програмою}

Begin

Cleardevice; {очищення екрана}

OutTextXY(10,10,' ПРОГРАМА РЕАЛІЗУЄ ДВУНАПРАВЛЕНИЙ ЦИКЛІЧНИЙ СПИСОК');

OutTextXY(20,20,'i-додати елемент d-знищити елемент 1-перейти на елемент по ч.с.');

OutTextXY(20,30,' г - перейти на елемент проти ч.с. Enter - ввести суть елемента');

OutTеxtXY(410.60,'Cyть елемента:');

End:

Procedure Inp_inf; {процедура ввода сутi елементу}

Begin

ОutТехtХУ(410,120,'Введіть суть елемента:'); {вивод запрошення}

GotoXY(55,17); {позиціонування курсору} readln(main^.inform); {ввод суті елементу} сlr(410.120,640,135); {витирання запрошення і введеної суті}

{елементу}


End;

Procedure Out_inf; {процедура виводу суті елементу}

Begin

сlr(410,70,640.80); {підготовка экрану до виводу}

OutTxtXY(410,70,main^. inform); {вивод суті елементу}

End;

Procedure Ch_inf; {процедура ввода суті елементу и виводу її на екран}

Begin

inp_uif;

out_mf;

End;

Procedure Mal_sp;

{Процедура виводить на екран геометричного уявлення списку }

{Список поданий у вигляді кільця, елементи списку - у вигляді }

{кіл, які лежать на кільці. Поточний елемент позначається }

{символом '*' - міткою поточного елементу}

Var

tek: el; {вказiвник на поточний елемент списку}

st: real; {величина кута між сусідніми колами,}

{якими позначені елементи списку}

i: integer; {керуюча змінна циклу}

Begin

сlr(1,60,400,200);

Circle(150,130,118); {вичерчування кільця}

Circle(150,130,142);

st:=2*Pi/numb;

tek:=maili;{встановлення вказівника tek на поточний елем-т списку}

for i:=l to numb do {цикл вичерчування кола - елементів списку}

begin

tek^.x:=Trunc(130*cos((i-l)*st)+150);

{обчислювання координат по горизонталі та вертикалі}

tek^:y:=Trunc(54*sin((i-l)*st)+130);


Circlc(tclt^.x,tek^.y,10); {вичерчування кола елементу}

tck:=tck^.posl; {перехід до наступного елементу}

end;

OutTextXY(main^.x-3,main^.y-3,'*'); {виведення мітки поточного}

End; {елементу}

Procedure Left_right(napr:char); {процедура переміщення за списком}

Begin

SetColor(0); {зтирання мітки поточного елементу}

OutTextXY(main^Jt-3,main^.y-3,'*’);

SеtColor(l);

if napr=T {вибір напрямку руху за списком}

then

main:=main^.posi; {перехід до наступного елементу}

else

main:=main^.pred; {перехід до попереднього елементу} OutTextXY(main^.x-3,main^ -y-3,’*’);

{виведення мітки поточного eлементу}

cild;

Procedure Plus_l;

{процедура включення нового елемента між поточним та наступним}

Var

r:el; {вказiвник на наступний елемент списку}

n:el; {вказiвник на новий елемент списку}

Begin

r:=main^.posl; {встановлення вказівника r на наступний елемент} {списку}

new(n); {утворення нового елементу списку}

main^.posl:=n; {формування зв’язку поточного елементу з новим}

n^.pгed:=main;

n^.posi:=r; {формування зв’язку нового елементу з наступним}

r^.pred:=n;

n^.inform:="; {інiцiалiзація рядка даних нового елементу списку}

main:=n.; {призначення включеного елементу списку наступним}


mal_sp; {виведення на екран поточного стану списку}

End;

Procedure Minus_l;

{процедура знищення поточного елементу з списка}

Var

l: el; {вказiвник на попередній елемент списку}

r: el; {вказiвник на наступний елемент списку}

Begin

l:=main^.pred; {встановлення вказiвника 1 на попередній елемент}

{списку}

r:=main^.posi; {встановлення вказівника r на наступний елемент}

{списку}

Dispose (main); {знищення поточного елементу}

l^.posl:=r; {формування зв’язку мiж попереднім та наступним}

r^.pred:=l; { елементами списку}

main:=l; {призначення попереднього елемента поточним}

mal_sp; {виведення на екран поточного стану списку}

End;

BEGIN

Driver:=Dctect;

Initgraph(Driver_Mode,' '); {ініціалізація графічного режиму}

{роботи екрану}

setscr;

numb:=l; {похідна кiлькiсть елементів списка}

new(main); {утворення першого елементу списка}

main^.posl:=main; {утворення циклічного списку}

main^.pred:=main;

main^.inform:=' '; {iнiцiалiзацiя рядка даних елементу}

mal_sp; {виведення поточного стану списку}

key:=' ':

while kеy<>chr(27) do {цикл обробки натиснутої клавіші, вихід}

begin {з циклу при натисненні клавіші <КЛЮЧ>}

out_inf;


while not KeyPressed do {очікування натиснення клавіші}

key:=ReadKey;

if key=chr(0) then {ввод символа, відповідного}

begin

key:=ReadKey; {натиснутій клавіші}

case key of {вибір виду обробки}

'r': left_right('r'); {переміщення за списком проти г.с.}

‘l': left_right(T); {переміщення за списком за г.с.}

#13: ch_inf; {ввод суті елементу}

'd': if numb<>l {перевірка кількості елементів}

then

begin {якщо кiлькiсть елементів більше 1,то}

numb:=numb-l;

{зменшення кількості елементів на 1}

minus^l; {усування поточного елементу}

end

else {якщо список складається з 1 елементу, то}

beep;

{подання звукового сигналу про помилку}

'i': begin {додаток елементу}

numb:=numb+l;

{збiльшення кількості елементiв на 1}

plus_l; {включенння нового елементу}

end;

#27:;

else

beep; {подання звукового сигналу у випадку}

end; {натиснення невикористаної клавіші}

end;

CloseGraph: {знищення графічного режиму роботи экрану}

End.

7.2 Змiст звіту

7.2.1 Мета роботи.


7.2.2 Блок-схема алгоритму з коментаріями

7.2.3 Схема фізичної структури двунаправленого кільцевого

списку.

7.3 КонтрольнІ запитання

7.3.1 Що називається списком?

7.3.2 Що називається двунаправленим кільцевим списком?

7.3.3 Як включається новий елемент до списку?

7.3.4 Як виключається елемент зі списку?





Дата публикования: 2015-04-07; Прочитано: 255 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.019 с)...