Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Модиф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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!