lab3 (1077276)
Текст из файла
Московский государственный технический университет
им. Н.Э. Баумана
Лабораторная работа №3
по курсу ПППО
«Изучение классов LIST и LISTITERATOR»
Вариант №27
6
(количество листов)
Выполнил:
студент группы ИУ5-52
Суслов А.Ю.
МОСКВА 2007
-
Цель работы
Целью лабораторной работы является продвинутое изучение оболочки (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) и с помощью броузера классов и просмотра каталогов СП.
Код задания: 1, 2.3В, 3.3В, 4.5В
-
Порядок работы
-
Составить диаграммы классов LIST и LISTITERATOR.
-
Составить диаграмму объектов собственной программы для заданной точки выполнения программы.
-
Составить блок-схемы методов, и написать программу в соответствии с требованиями (ниже), состоящей из двух исходных файлов.
-
Создать (Project-> Open Project -> <новое имя>, Project-> Add Item -> <выбор модуля> и кнопка Add) и грамотно настроить проектный файл для программы ЛР (option -> directories, option ->compilers->Code generation <small>), во втором файле должна быть описана функция для вывода справки о программе (на COUT) с номером варианта, группой и ФИО студента.
-
Освоить работу в отладчике: пошаговое выполнение, просмотр переменных и объектов, установку точек останова, просмотр стека вызова, выходного экрана, условные остановы и изменения значений переменных при выполнении программ, просмотр сложных объектов и структур.
-
Отладить программу с помощью отладчика с просмотром классов, используемых для создания объектов программы. Прогнать программу в пошаговом режиме с просмотром переменных.
-
Сформировать листинг программы и листинг результатов.
-
Оформить отчет по ЛР.
-
Перечень ошибок
Неверное объявление переменных, отсутствие подключаемой библиотеки в каталоге Include, неверное указание метода new, неверное объявление прототипа внешней функции.
-
Диаграмма классов.
Object – абстрактный базовый класс для всех объектов
Функции:
isA – возвращает ID класса
isEqual – определяет равен ли объект другому
printOn – отображает объект
MyObject – собственный класс объектов с данными – целое число Num
Container – абстрактный класс родитель всех классов, включает все классы способные содержать 0 или более элементов
Collection – абстрактный класс “коллекционных” структур
List – класс списка
Функции:
add – добавляет элемент
detach – удаляет объект
initIterator- создаёт итератор
flush – удаление всех объектов из списка
ListIterator – итератор списка
Функции
current – возвращает ссылку на текущий объект
++ - увеличивает значение итератора на 1
restart – перемещает итератор в первую непустую точку списка
-
Диаграмма объектов
-
Листинг программы
-
Файл main.cpp:
-
#include <iostream.h>
#include <conio.h>
#include <list.h>
extern void About();
const Size=5;
class myObj : public Object
{
public:
int Data;
myObj(int st){ this->Data=st; }
myObj(myObj& m) { this->Data=m.Data; }
myObj(istream& o){ o>>this->Data; }
void printOn(ostream& o) const
{
o<<this->Data;
}
char _FAR *nameOf() const
{
return "Integer";
}
classType isA() const
{
return 1;
}
hashValueType hashValue() const
{
return 0;
}
int isEqual( const Object _FAR & m) const
{
return ((myObj&)m).Data==Data;
}
};
void main()
{
List A,B;
int i;
cout<<"Введите список А:"<<endl;
for(i=0;i<Size;i++)
{
cout<<"A["<<i<<"]=";
A.add(*new myObj(cin));
}
cout<<endl<<"[Распечатка списка А с помощью цикла]"<<endl;
ListIterator iA(A);
iA.restart();
while(iA)
{
iA.current().printOn(cout);
cout<<endl;
iA++;
}
cout<<endl<<"[Распечатка списка B с помощью метода printOn]"<<endl;
B.printOn(cout);
cout<<endl<<"[Копирование списка А в список В]"<<endl;
List C;
iA.restart();
while(iA)
{
C.add(*new myObj((myObj&)iA.current()));
iA++;
}
ListIterator iC(C);
iC.restart();
while(iC)
{
B.add(*new myObj((myObj&)iC.current()));
iC++;
}
cout<<endl<<"[Распечатка списка B с помощью метода printOn]"<<endl;
B.printOn(cout);
cout<<"Press any key to continue..."; getch();
cout<<endl<<"[Добавление в список А трех новых элементов {0,1,2}]"<<endl;
for(i=0;i<3;i++)
A.add(* new myObj(i));
cout<<endl<<"[Удаление из списка А третьего элемента]"<<endl;
iA=(ListIterator&)A.initIterator();
iA.restart();
iA++; iA++;
myObj &M1=myObj((myObj&)iA++);
A.detach(M1,TShouldDelete::Delete);
cout<<endl<<"[Распечатка списков А и В с помощью ListIterator]"<<endl;
iA=(ListIterator&)A.initIterator();
iA.restart();
ListIterator iB(B);
iB.restart();
cout<<"List A\t\tListB"<<endl;
while(iA || iB)
{
if(iA)
iA.current().printOn(cout);
else
cout<<"\t\t";
cout<<"\t\t";
if(iB) iB.current().printOn(cout);
cout<<endl;
iA++;
iB++;
}
cout<<endl<<"A.isEmpty(): "<<A.isEmpty();
cout<<endl<<"[Вызов метода flush списка А]";
A.flush();
cout<<endl<<"A.isEmpty(): "<<A.isEmpty()<<endl;
cout<<endl<<"[Распечатка списка A с помощью метода printOn]"<<endl;
A.printOn(cout);
About();
}
-
Файл add.cpp:
#include <iostream.h>
void About(void)
{
cout<<endl<<"Выполнил студент группы ИУ5-62"<<endl<<"Суслов А.Ю.";
}
-
Листинг результатов работы
6
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.















