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

Лабораторная работа Л-1 списки

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

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

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

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

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

«Л-1» списки»

ОТЧЕТ

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

группа 3341

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

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

2004 г.

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

1) Вставить элемент в список перед элементами с заданным значением.

2) Заменить значение элементов с заданным значением на новое значение (задаваемое пользователем).

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

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

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

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

  1. Модуль описания типа значения элементов списка:

Unit Info;

Interface

type

tInfo=Integer;

Implementation

begin

end.

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

Unit List4;

interface

Uses Crt, Info;

type

pList = ^tList;

tList = record

Date:tInfo;

Next: pList

end;

UsedList = record

L,Cur,Pred:pList

end;

pUList = ^UsedList;

ppList = ^pList;

procedure Create(vList_:pUList);

procedure Add_before_cur_pos(var vList_:pUList;Newdate:tInfo);

procedure Add_before_chosen_date(var vList_:pUList;Newdate,ChDate:tInfo);

function PrintList(var vList_:pUList):Boolean;

procedure Change_by_chosen_date(var vList_:pUList;NewDate,OldDate:tInfo);

Implementation

procedure Create(vList_:pUList);

begin

vList_^.L:=Nil;

vList_^.Pred:=Nil;

vList_^.Cur:=Nil;

end;

procedure Add_before_cur_pos(var vList_:pUList;Newdate:tInfo);

var

NewEl:pList;

begin

New(NewEl);

NewEl^.Date:=Newdate;

NewEl^.Next:=vList_^.Cur;

If vList_^.Pred=Nil then

begin

vList_^.L:=NewEl;

vList_^.Cur:=NewEl

end

else

begin

vList_^.Pred^.Next:=NewEl;

vList_^.Cur:=NewEl

end

end;

procedure Add_before_chosen_date(var vList_:pUList;Newdate,ChDate:tInfo);

var

NewEl:pList;

begin

vList_^.Cur:=vList_^.L;

vList_^.Pred:=Nil;

while vList_^.Cur<>Nil do

begin

If vList_^.Cur^.Date=ChDate then

begin

Add_before_cur_pos(vList_,Newdate);

vList_^.Pred:=vList_^.Cur;

vList_^.Cur:=vList_^.Cur^.Next

end;

vList_^.Pred:=vList_^.Cur;

vList_^.Cur:=vList_^.Cur^.Next

end

end;

function PrintList(var vList_:pUList):Boolean;

begin

vList_^.Cur:=vList_^.L;

If vList_^.Cur = nil then

Printlist:=false

else

begin

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

PrintList:=True;

while vList_^.Cur<>Nil do

begin

write(vList_^.Cur^.Date,' ');

vList_^.Pred:=vList_^.Cur;

vList_^.Cur:=vList_^.Cur^.Next

end;

end

end;

procedure Change_by_chosen_date(var vList_:pUList;NewDate,OldDate:tInfo);

begin

vList_^.Cur:=vList_^.L;

vList_^.Pred:=vList_^.L;

while vList_^.Cur<>Nil do

begin

If vList_^.Cur^.Date=OldDate then

begin

vList_^.Cur^.Date:=NewDate

end;

vList_^.Pred:=vList_^.Cur;

vList_^.Cur:=vList_^.Cur^.Next

end

end;

begin

end.

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

Uses Crt, List4, Info;

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:Integer;

Newdate,ChDate:tInfo;

pL:pUList;

Exit:Boolean;

begin

Exit:=false;

State:=1;

New(pL);

Create(pL);

While not(Exit) do

begin

clrscr;

For I:=1 to 5 do

begin

Y:=I*2;

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) Добавить элемент перед данным значением.');

If I=3 then

write('3) Заменить элемент по заданному значению.');

If I=4 then

write('4) Вывести список.');

If I=5 then

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

end

else

begin

Textbackground(black);

Textcolor(white);

If I=1 then

write('1) Добавить элемент перед текущим.');

If I=2 then

write('2) Добавить элемент перед данным значением.');

If I=3 then

write('3) Заменить элемент по заданному значению.');

If I=4 then

write('4) Вывести список.');

If I=5 then

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

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:=5

else State:=State-1

Else

If E=80 then

If State=5 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);

Add_before_Cur_pos(pL,Newdate);

Otstup(3);

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

readkey

end;

2: begin

clrscr;

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

Otstup(3);

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

ReadLn(Newdate);

Otstup(2);

write('Введите нужное значение: ');

ReadLn(ChDate);

Otstup(3);

Add_before_chosen_date(pL,Newdate,ChDate);

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

readkey;

end;

3: begin

clrscr;

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

Otstup(3);

write('Введите новое значение: ');

ReadLn(Newdate);

Otstup(2);

write('Введите изменяемое значение: ');

ReadLn(ChDate);

Otstup(3);

WriteLn('Элементы заменены...');

Change_by_chosen_date(pL,Newdate,ChDate);

readkey

end;

4: begin

clrscr;

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

Otstup(3);

If not(printList(pL)) then

writeLn('Список пуст');

readkey

end;

5: begin

Exit:=true

end;

end

end

end

end;

begin

Menu

end.

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

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

Список пуст!

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

3

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

2 3

Добавить элемент 1

1 2 3

Добавить элемент 3 перед 2

1 3 2 3

Заменить элемент 1 на 3

3 3 2 3

Добавить элемент 2 перед 3

2 3 2 3 2 2 3

Заменить элемент 3 на 1

2 1 2 1 2 2 1

Добавить элемент 5 перед 2

5 2 1 5 2 1 5 2 5 2 1