Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1_SAOD_-_Dinamicheskie_peremennye_OOP.doc
Скачиваний:
12
Добавлен:
21.03.2016
Размер:
1.06 Mб
Скачать

Implementation

constructor tList.Create;

// Создание пустого списка

begin

inherited Create;

fHead:=nil; fSize:=0;

end; //constructor tList.Create

destructor tList.Destroy;

// Удаление списка

begin

Clear; // удаление элементов из списка

inherited Destroy;

end; // destructor tList. Destroy

procedure tList.InsertFirst(v:tValue);

// Включение элемента со значением v в начало списка

var NewItem: pItem; // указатель на новый элемент списка

begin

New(NewItem); // выделение памяти под новый элемент списка

NewItem^.Value:=v; // запись значения v в поле Value нового элемента

NewItem^.Next:=fHead; // новый элемент ссылается на первый

fHead:=NewItem; // новый элемент становится первым

Inc(fSize); // увеличиваем число элементов списка на 1

end; //procedure tList.InsertFirst

procedure tList.InsertLast(v: tValue);

// Включение элемента со значением v в конец списка

var NewItem, LastItem:pItem; // указатели на новый и последний элементы

begin

New(NewItem); // выделение памяти под новый элемент списка

NewItem^.Value:=v; // запись значения v в поле Value нового элемента

NewItem^.Next:=nil;// новый элемент становится последним в списке

iffHead=nil// если список пуст,

thenfHead:=NewItem// то новый элемент становится первым в списке

elsebegin// список не пуст – поиск последнего элемента:

LastItem:=fHead; // устанавливаем LastItem на начало списка,

while LastItem^.Next<>nil do begin // пока не достигнут конец списка,

LastItem:=LastItem^.Next; // сдвигаем LastItem на следующий элемент

end;

LastItem^.Next:=NewItem; // новый элемент следует за последним

end;

Inc(fSize); // увеличиваем число элементов списка на 1

end; // procedure tList.InsertLast

procedure tList.WriteList(var f: Text);

// Вывод элементов списка в файл f

var Item:pItem; // указатель на элемент списка

begin

Item:=fHead; // устанавливаем Item на начало списка

while Item<>nil do begin // пока не достигнут конец списка:

Write(f, Item^.Value:5); Item:=Item^.Next; // вывод элемента и сдвиг Item

end;

Writeln(f);

end; // procedure tList.WriteList

procedure tList.Clear;

// Удаление всех элементов из списка

var Item: pItem; // указатель на удаляемый элемент списка

begin

while fHead<>nil do begin // пока список не пуст:

Item:=fHead; // устанавливаем Item на начало списка,

fHead:=fHead^.Next; // передвигаем начало списка на следующий элемент

Dispose(Item); // и удаляем элемент

end; // while

fSize:=0; // в списке нет элементов

end; // procedure tList.Clear

procedure tList.FormLists(var L1, L2: tList);

// Формирование списков L1 и L2:

// отрицательные нечетные – в L1, положительные четные – в L2

var Item: pItem; // указатель на текущий элемент списка

begin

Item:=fHead; // устанавливаем Item на начало списка

while Item<>nil do begin // пока не достигнут конец списка

if (Item^.Value<0) and odd(Item^.Value) then L1.InsertLast(Item^.Value);

if (Item^.Value>0) and not odd(Item^.Value) then L2.InsertLast(Item^.Value);

Item:=Item^.Next; // сдвигаем Item на следующий элемент

end; // while

end; // procedure tList.FormLists

end. // unit ListClass

// Лабораторная работа 3.

// Создание класса – списка. Выполнил Сергеев Андрей, группа 999.

// Формирование двух списков из исходного списка.

// Описание и реализация класса «Список» расположены в модуле ListClass.pas.

// Исходные данные - элементы основного списка - в файле LW3Dat.txt.

// Результаты работы помещаются в файл LW3Res.txt.

program LW3;

{$APPTYPE CONSOLE}

uses ListClass;

var

fDat, fRes:Text; // файловые переменные для файлов с исх. данными и результ.

L, L1, L2:tList; // объекты - указатели на исходный и результирующие списки

v:tValue; // значение элемента списка

begin

Assign(fDat,'LW3Dat.txt'); Reset(fDat); // открытие файла для чтения

Assign(fRes,'LW3Res.txt'); Rewrite(fRes); // открытие файла для записи

// Создание экземпляров списков

L:=tList.Create; L1:=tList.Create; L2:=tList.Create;

while not Eof(fDat) do begin // пока не достигнут конец файла fDat

Read(fDat, v); // чтение из файла очередного значения

L.InsertFirst(v); // вставка элемента со значением v в начало списка L

end; // while not Eof(fDat) do

// Вывод в файл fRes элементов списка L и его размера:

Writeln(fRes,'Исходный список:'); L.WriteList(fRes);

Writeln(fRes,'Число элементов списка: ',L.Size);

//Формирование и вывод в файл fRes списков L1 и L2

L.FormLists(L1, L2);

Writeln(fRes, 'Список отрицательных нечетных элементов:');

L1.WriteList(fRes);

Writeln(fRes,'Число элементов списка: ',L1.Size);

Writeln(fRes, 'Список положительных четных элементов:');

L2.WriteList(fRes);

Writeln(fRes,'Число элементов списка: ',L2.Size);

L.Free; L1.Free; L2.Free; // удаление списков

Close(fDat); Close(fRes);

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]