Московский государственный технический университет
им. Н. Э.
Баумана
Утверждаю:
___________________
«___»__________2005 г.
___________________
по курсу ПППО
«Изучение классов LIST и LISTITERATOR»
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: