Московский государственный технический университет

им.   Н. Э. Баумана

 

 

 

 

 

 

Утверждаю:

 

___________________

 

«___»__________2005 г.

___________________

 

 

 

 

 

Лабораторная работа №3

по курсу ПППО

 «Изучение классов LIST и LISTITERATOR»

           

Вариант №18

 

7

(количество листов)

 

 

 

 

 

 

ИСПОЛНИТЕЛЬ:

студент группы ИУ5-63

Тесленко М.В.

______________

 

 «___»__________2005 г.

 

 

 

МОСКВА 2005

 

 

 

 

1. Цель работы.

 

Целью лабораторной работы является продвинутое изучение оболочки (IDE) системы программирования BC 3.1 C++ и семейства классов для работы со списками (OBJECT, LIST и LISTITERATOR) библиотеки CLASSLIB. В результате студенты должны приобрести навыки изучения классов и навыки работы со стандартными классами (по материалам лекций, справочной информации BC 3.1, документации и файлам LIST.CPP, OBJECT.CPP  , OBJECT.H И LIST.H), освоить структуру классов, описание объектов этих классов и методы использования классов сложной контейнерной структуры. Студенты знакомятся также с наследованием классов, создают собственный класс MyObj на основе абстрактного класса (OBJECT), перегружают стандартные чистые виртуальные функции, а также получают навыки поиска информации о классах по исходным текстам программ (*.cpp, *.hpp, *.h) и с помощью броузера классов.

 

2. Порядок работы.

Для выполнения лабораторной работы в полном объеме студенты должны выполнить следующие действия и пункты:

 

1.       Продолжить детальное (профессиональное) изучение оболочки BC 3.1 C++ в интерактивном режиме (назначение всех пунктов меню и окон настройки работы оболочки, работу в режимах отладки).

2.       Составить диаграммы классов LIST и LISTITERATOR.

3.       Составить диаграмму объектов собственной программы.

4.       Составить блок-схемы методов, если это необходимо, и написать программу в соответствии с требованиями (ниже), состоящей из двух исходных файлов.

5.       Создать (Project-> Open Project -> <новое имя>, Project-> Add Item -> <выбор модуля> и кнопка Add) и грамотно настроить проектный файл для программы ЛР (option -> directories, option ->compilers->Code generation <small>), во втором файле должна быть описана функция для вывода справки о программе (на COUT) с номером варианта, группой и ФИО студента.

6.       Освоить работу в отладчике: пошаговое выполнение, просмотр переменных и объектов, установку точек останова, просмотр стека вызова, выходного экрана, условные остановы и изменения значений переменных при выполнении программ.

7.       Отладить программу с помощью отладчика с просмотром классов, используемых для создания объектов программы. Прогнать программу в пошаговом режиме с просмотром переменных.

8.       Сформировать листинг программы и листинг результатов.

9.       Оформить отчет по ЛР.

 

3. Перечень ошибок.

При разработке и отладке программы были обнаружены и исправлены различные синтаксические ошибки.

 

 

4. Диаграмма классов.

 

 

Object – абстрактный базовый класс для всех объектов

Функции:

            isA – возвращает ID класса

            isEqual – определяет равен ли объект другому

            printOn – отображает объект

MyObject – собственный класс объектов с данными – целое число Num

Container – абстрактный класс родитель всех классов, включает все классы способные содержать 0 или более элементов

Collection – абстрактный класс “коллекционных” структур

List – класс списка

Функции:

            add – добавляет элемент

            detach – удаляет объект

            initIterator- создаёт итератор

            flush – удаление всех объектов из списка

ListIterator – итератор списка

Функции

            current – возвращает ссылку на текущий объект

            ++ - увеличивает значение итератора на 1

            restart – перемещает итератор в первую непустую точку списка

 

 

5. Диаграмма объектов.

 


6.
Листинг программы.

Lab_3.cpp

#include <iostream.h>

#include <list.h>

#include <conio.h>

class MyObj: public Object                           //новый класс MyObj на основе класса Object

{

 float i;

 static MyObj *start;

 MyObj *firstst;

 MyObj *next;

 MyObj *prev;

 public: virtual classType isA() const { return 0; };

             virtual char _FAR *nameOf() const { return "Real list"; };

             virtual hashValueType hashValue() const { return 0; };

             virtual int isEqual( const Object _FAR &obj) const

                                                 { return (i==((MyObj &)obj).i);};

             virtual void printOn(ostream _FAR &os) const

                                                 { os<<"Number is "<<i; };

             MyObj(float num) { i=num; };

             MyObj(ostream _FAR &) { cin>>i; };

             ~MyObj() {cout<<"\n Destruct! "<<i<<" "; };

 

};

 

void Delete(List &Dl, int pos)    //процедура удаления конкретного по номеру в списке элемента

{

 ListIterator IDl(Dl);

 IDl.restart();

 for (int i=0; i<pos; i++) IDl++;

 Dl.detach(IDl.current(), TShouldDelete::Delete);

}

 

void Info(void);

 

 

main()

{

 int total_in_list=5;

 clrscr();                                                                     //очистка экрана      

 Info();                                                                                   //вывод начальной информации

 List A, B;                                                                   //описание объектов типа List через имя

 MyObj *MyListObj;

 

 for (int i=0; i<total_in_list; i++)                                           //ввод элементов в список А

  { MyListObj=new MyObj(cout<<"Enter float value: ");

    A.add(*MyListObj);

}

 

 ListIterator Ai(A);                                                               //итератор списка для списка А

 Ai.restart();                                                                           //сброс указателя списка на начало

 cout<<"\nContents of List A:";

  while (Ai.current()!= NOOBJECT)                                    //вывод списков А и В

   { Ai.current().printOn(cout<<endl); Ai++;}

 

 B.printOn(cout<<"\nContents of List B:\n");

 

 List temp;                                                                             //временный список для заполнения В из А

 Ai.restart();

  while (Ai.current()!=NOOBJECT)

   { temp.add(*new MyObj((MyObj &)(Ai.current()))); Ai++; }

 

 ListIterator Itemp(temp);

 Itemp.restart();

  while (Itemp.current()!=NOOBJECT)

   { B.add(*new MyObj((MyObj &)(Itemp.current()))); Itemp++; }

 

 B.printOn(cout<<"\nContents of List B:\n");                      //вывод заполненного В

 

 for (i=0; i<3; i++)

{ MyListObj = new MyObj(cout<<"Enter float value: "); //добавление в лист А 3-х новых элементов

    A.add(*MyListObj); }

 

 A.printOn(cout<<"\nContents of List A after adding new 3 elements:\n"); //вывод А

 

 Delete(A, 0);                                                                        //удаление в А первого элемента

 A.printOn(cout<<"\nContents of List A after deleted 1rd element:\n");

 

 getch();

 ListIterator Bi(B);                                                    //создание новых итераторов дял списков А и В

 ListIterator Aii(A);

 Bi.restart();

 Aii.restart();

 cout<<"\nContents of List A:";

  while (int (Aii) != 0)

   { Aii.current().printOn(cout<<endl);

     Aii++;

     }

 return 0;

}

 

Lab_3_1.cpp

#include <iostream.h>

 

void Info(void)

{

 cout << "\tLaboratory work 3 for discipline PPPO";   //vivod spravki

 cout << "\nMade by student of group IU5-63 Teslenko M. /Variant 18/"<<endl;

}

 


7. Листинг результатов работы.

 

 

Приложение1.

Алгоритм удаления элемента списка DI на позиции Pos:



Hosted by uCoz