Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






  • Задание. Создайте класс «Список» с полями: указатель на начало списка, размер списка и со следующими обязательными методами: конструктор Create – создание пустого






    Создайте класс «Список» с полями: указатель на начало списка, размер списка и со следующими обязательными методами: конструктор Create – создание пустого списка; деструктор Destroy – уничтожение списка; Clear – удаление всех элементов списка; InsertFirst(v) – включение элемента со значением v в начало списка; WriteList(f) – вывод элементов списка в файл f.

    Поля закройте от прямого доступа с помощью свойств.

    Реализуйте в виде методов подпрограммы обработки списка, указанные в вашем варианте задания к лабораторной работе 1 «Указатели и динамические переменные».

    Описание и реализацию класса «Список» расположите в модуле.

    С использование разработанных методов составьте программу работы с экземплярами класса «Список» в соответствии с вашим вариантом задания.

    Пример выполнения задания

    Описать и реализовать класс «Список» целочисленных элементов. Реализовать метод записи отрицательных нечетных элементов списка в один список, положительных четных – в другой и продемонстрировать его работу.

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

    // Создание класса – списка.

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

    // Модуль описания и реализации списка. Имя файла ListClass.pas.

    unit ListClass;

    Interface

    Type

    tValue=Integer; // тип содержательной части элемента списка – целый

    pItem=^tItem; // тип указателя на элемент списка

    tItem= record // тип элемента списка

    Value: tValue; // содержательная часть элемента списка

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

    end; // record tItem

    tList= class (tObject) // класс - «Список»

    Private

    fHead: pItem; // поле - указатель на начало списка

    fSize: Word; // поле – число элементов списка

    Public

    property Head: pItem read fHead write fHead;

    property Size: Word read fSize;

    constructor Create; // конструктор – создание пустого списка

    destructor Destroy; override; // деструктор – удаление списка

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

    procedure InsertLast(v: tValue); // включение элемента со знач. v в конец списка

    procedure WriteList(var f: Text); // вывод значений элементов списка в файл f

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

    procedure FormLists(var L1, L2: tList); // формирование новых списков L1, L2

    end;

    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; // новый элемент становится последним в списке

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

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

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

    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.

     

    Библиографический список

    1. Ахо А.В., Хопкрофт Д.У., Ульман Д.Д. Структуры данных и алгоритмы. М.: Издательский дом «Вильямс», 2001.

    2. Вирт Н. Алгоритмы и структуры данных. М.: Мир, 1989.

    3. Данные в языках программирования: Абстракция и типология / Пер. с англ. М.: Мир, 1982.

    4. Хомоненко А.Д. и др. Delphi 7. СПб.: БХВ-Петербург, 2003.

    5. Фаронов В.В. Delphi 3. Учебный курс. М.: «Нолидж», 2001.

     






    © 2023 :: MyLektsii.ru :: Мои Лекции
    Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
    Копирование текстов разрешено только с указанием индексируемой ссылки на источник.