Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа Линейные списки

.DOC
Скачиваний:
11
Добавлен:
01.05.2014
Размер:
57.34 Кб
Скачать

Санкт-Петербургский государственный

электротехнический университет «ЛЭТИ»

кафедра МОЭВМ

Лабораторная работа по программированию №4

«Линейные списки»

ОТЧЕТ

Факультет КТИ

группа 3341

студент Марьяскин Е.

Санкт-Петербург

2004 г.

Постановка задачи:

Удалить из линейного списка n элементов начиная с к-го.

Анализ решения:

Для решения задачи создан модуль, реализующий работу со списком. В нем три процедуры: добавляющая элемент в список, выводящая список на экран и реализующая действие, описанное в разделе «Постановка задачи». Эта функция представляет собой по сути два последовательных цикла: пролистывание всех элементов до n-ного и удаление последующих к элементов.

Для удобства использования программы и ее тестирования создано меню управляемое клавишами курсора и клавишей «Ввод»

Текст программы:

  1. Модуль работы со списками:

Unit List2;

interface

Uses Crt;

procedure AddEl(Newdate:Integer);

function PrintList:Boolean;

function Clean(var First,Col:Integer):Integer;

implementation

type

pList = ^tList;

tList = record

Date:Integer;

Next: pList

end;

ppList = ^pList;

var

List_:pList;

procedure Create;

begin

List_:=nil

end;

procedure AddEl(Newdate:Integer);

var

NewEl:pList;

begin

New(NewEl);

NewEl^.Date:=Newdate;

NewEl^.Next:=List_;

List_:=NewEl;

end;

function PrintList:Boolean;

var

Counter:pList;

begin

Counter:=List_;

If Counter = nil then

Printlist:=false

else

begin

Write('Список: ');

PrintList:=True;

while Counter<>Nil do

begin

write(Counter^.Date,' ');

Counter:=Counter^.Next

end;

end

end;

function Clean(var First,Col:Integer):Integer;

var

I,AllCol:Integer;

Cur:ppList;

Old:pList;

begin

AllCol:=Col;

clrscr;

Cur:=@List_;

while (Cur^ <> nil) and (First > 1) do

begin

Cur:=@(Cur^^.Next);

First:=First-1

end;

if Cur^ = nil then

begin

Clean:=1;

exit

end;

while (Col > 0) and (Cur^ <> nil) do

begin

Old:=Cur^;

Cur^:=Cur^^.Next;

Dispose(Old);

Col:=Col-1

end;

If Col>0 then

begin

Clean:=2+ AllCol-Col;

exit

end

else

Clean:=0

end;

begin

Create

end.

  1. программа:

Uses Crt, List2;

procedure Otstup(X:Integer); var I:Integer;

begin

For I:=1 to X do

WriteLn

end;

procedure Menu;

var

X,Y,E,I,D,State,First,Col,Newdate:Integer;

Exit:Boolean;

begin

Exit:=false;

State:=1;

While not(Exit) do

begin

clrscr;

For I:=1 to 4 do

begin

Y:=I*3;

X:=10;

gotoXY(X,Y);

If I=State then

begin

Textbackground(blue);

Textcolor(white);

If I=1 then

write('1) Добавление элемента.');

If I=2 then

write('2) Удаление K элементов, начиная с N-ного.');

If I=3 then

write('3) Вывести список на экран.');

If I=4 then

write('4) Выход.')

end

else

begin

Textbackground(black);

Textcolor(white);

If I=1 then

write('1) Добавление элемента.');

If I=2 then

write('2) Удаление K элементов, начиная с N-ного.');

If I=3 then

write('3) Вывести список на экран.');

If I=4 then

write('4) Выход.')

end

end;

Textbackground(black);

Textcolor(white);

E:=ord(readkey);

If E=0 then

begin

E:=ord(readkey);

If E=72 then

If State=1 then

State:=4

else State:=State-1

Else

If E=80 then

If State=4 then

State:=1

else State:=State+1

end

else

If E=13 then

begin

case State of

1: begin

clrscr;

writeLn('Выбран вариант 1...');

Otstup(3);

write('Введите новый элемент: ');

read(Newdate);

AddEl(Newdate);

Otstup(3);

writeLn('Элемент был успешно добавлен в список...');

readkey

end;

2: begin

clrscr;

writeLn('Выбран вариант 2...');

Otstup(3);

write('Введите номер первого из удаляемых элементов');

ReadLn(First);

Otstup(2);

write('Введите количество удаляемых элементов: ');

ReadLn(Col);

D:=Clean(First,Col);

otstup(10);

If D=1 then

begin

WriteLn('Ошибка! В списке нет удаляемых элементов...');

WriteLn;

WriteLn('Невозможно завершить удаление.')

end

else

If D=0 then

begin

WriteLn('Элементы успешно удалены...')

end

else

begin

WriteLn('Ошибка! Невозможно удалить все элементы...');

WriteLn;

Write(D-2,' элемент(ов) было удалено.')

end;

readkey

end;

3: begin

clrscr;

WriteLn('Выбран вариант 3...');

Otstup(3);

If not(printList) then

writeLn('Лист пуст!');

readkey

end;

4: begin

Exit:=true

end;

end

end

end

end;

begin

Menu

end.

Тестирование работы программы:

В этом разделе приведены тесты, которых достаточно на взгляд разработчика программы для того, чтобы убедиться в корректности ее работы, так как позволяют изучить все возможные случаи. Они представлены в виде последовательных действий (заключенных в знак «»), и отображения списка, даваемое процедурой PrintList

«Добавить элемент 5»

5

«Добавить элемент 4»

4 5

«Добавить элемент 3»

3 4 5

«Добавить элемент 2»

2 3 4 5

«Добавить элемент 2»

1 2 3 4 5

«удалить 3 элемента, начиная с 6-го»

Ошибка! В списке нет элементов, которые необходимо удалить!

Невозможно завершить удаление.

1 2 3 4 5

«удалить 3 элемента, начиная с 5-го»

Ошибка! Невозможно удалить заданное количество элементов.

1 элемент(ов) было удалено

1 2 3 4

«удалить 2 элемента, начиная с 1-го»

Элементы успешно удалены.

3 4