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

Завдання. Модифiкувати програму таким чином, щоб данi якi зберігаються у черзi, були типа запису (record), який складається з двох полiв



Модифiкувати програму таким чином, щоб данi якi зберігаються у черзi, були типа запису (RECORD), який складається з двох полiв. Вивiд полiв запису повинен виконуватись в один рядок.

Тип даних узгодити з викладачем.

Program siod 1.1;

Uses Crt;

Type

el=^spis; {тип вказiвника на елемент черги}

spis=record {тип элемента черги}

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

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

end:

Var

key:char; {символ, введений з клавiатури за допомогою}

{небуферованого вводу}

per:el; {вказiвник початку черги}

pos:el; {вказiвник кiнця черги}

num:integer; {кiлькiсть елементiв у черзi}

Procedure Clear_m(n:integer);

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

{n=1- очищується половина ліворуч екрана (стовпчики 1-40)}


{n=2- очищується права половина екрана (стовпчики 41-80)}

Var

i:integer; {координата курсора по вертикалi}

Begin

n:=(n-1*39+1); {вказiвник координати курсора по горизонталi}

for i:=to 23 do {цикл очищення частини екрана}

begin

gotoXY(n,i);

writeln(' ‘);

end;

End;

Procedure Insoch; {процедура додання в чергу}

Var

n:el; {елемент черги, що додається}

Begin

Clear_m(1);

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

pos^.next:=n; {додання створеного елементу в кiнець черги}

pos:=n; {встановлення вказiвника кiнця черги на}

gotoXY(1,3);

writeln('Введiть новий елемент:');

readln(pos^.inform); {ввод рядка даних останнього елементу}

num:=num+1; {визначити поточну кiлькiсть елементiв у черзi}

End;

Procedure Outoch; {процедура вилучення з черги}

Var

dele: el;{вказiвник на перший елемент черги (що вилучається)}

och: el; {вказiвник на другий елемент черги}

Begin

if num>0 then

begin

Clear_m(1);

gotoXY(1,3);


dele:=per^.next; {встановлення dele на перший} {елемент черги}

writeln('Узятий елемент:');

writeln(dele^.inform); {виведення рядка даних}

{першого елемента}

och:=dele^.next; {встановлення och на другий елемент}

{черги}

per^.next:=och; {встановлення вказiвника початку}

{черги на другий елемент}

Dispose(dele); {вилучення першого елемента}

num:=num-1; {знаходження поточної кiлькостi}

{елементiв у черзi}

if num = 0 then {встановлення вказiвника кiнця черги}

pos:=per; {на вказiвник початку черги, якщо}

{в черзi немає елементiв}

end;

Еnd;

Procedure Print_och; {процедура друку змісту черги}

Var

och:el; {поточний елемент черги}

i: integer; {координата курсора по вертикалi}

j: integer; {лічильник елементiв черги}

Begin

i:=4;

Clear_m(2);

gotoXY(40,3);

writeln('Змiст черги:');

{перевiрка кiлькостi елементiв у черзi, виведення елементiв,}

{якщо кiлькiсть не бiльше 17}

if num<=17 then

begin

och:=per^.next; {призначення першого елемента}

{черги поточним}

for i:=1 to num do {цикл друку елементiв черги}


begin

goto XY(40,i+3);

writln(och^.inform); {вивід рядка даних поточ-}

{ного елементу}

ocb:=och^.next: {призначння наступного}

{елементу поточним}

end;

end

else {друк елементiв черги, якщо}

begin {їх кiлькiсть перевищує 17}

och:=per^.next; {призначення першого елемента}

{черги поточним}

for i:= 4 to 13 do {цикл друку перших}

begin {10 елементів}

gotoXY(40.i);

write(och ^.inform); {виведення рядка даних}

{поточного елементу}

och:=och^.next; {призначення наступного}

{елемента поточним}

end;

gotoXY(40,14);

write('...

for j:=l to num-5 do {пропуск наступних елементів черги,}

begin {крiм останнiх 5}

och:=och^.next;

for i:= 15 to 20 do {цикл друку останніх}

begin {5 елементiв}

gotoXY(40,i);

write(och^.inform);

och:=och^.next;

end;

end;

End;


BEGIN

TextBackGround(l); {встановлення кольору фону екрана}

TextColor(14); {встановлення кольору виводимих символiв}

CIrScr;

writeln(' ОЧЕРЕДЬ "+" -ДОБАВИТЬ "-" ИЗВЛЕЧЬ');

TextColor(ll);

new(per); {створення вказiвника початку черги}

pеr^.infоrm:=’****************’; ініціалізація рядка даних}

{вказiвника початку черги}

pos:=per; {встановлення вказiвника кiнця черги на}

{вказiвник початку}

num:=0; {початкова довжина черги}

key:=' ';

while key <> chr(27) do {цикл, що здійснює роботу з}

begin {чергою, вихiд з циклу - натиснути клавишу <ESC>}

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

key:=ReadKey;

if key = chr(0) then {ввод символа з клавiатури}

key:=ReadKеy;

if key <> chr(27) then {рoбота з чергою, якщо}

begin {не натиснута клавиша <ESC>}

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

'+':insoch;

'-':outoch;

else

begin

Sound(3000); {звуковий сигнал,}

Delay(128);{якщо натиснута будь-яка клавіша,}

NoSound; {окрім '+', '-' або <ESC>}

end;

end;

Print_och; {друк елементiв черги}

end;

end;

END.


5.2 Зміст звіту

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

5.2.2 Блок-схема алгоритма з пояснювальними коментаріями.

5.2.3 Схема фізичної структури черги.

5.3 Контрольні запитання

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

5.3.2 Що називається послідовним списком?

5.3.3 Що називається чергою?

5.3.4 Що означає переповнення черги?

5.5.5 Які основні операції над чергою?


25





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



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