Московский государственный технический университет
им. Н. Э.
Баумана
Утверждаю:
___________________
«___»__________2005 г.
___________________
по курсу ПППО
«Изучение классов ARRAY и ARRAYITERATOR»
7
(количество листов)
ИСПОЛНИТЕЛЬ:
студент группы ИУ5-63
Тесленко М.В.
______________
«___»__________2005 г.
МОСКВА 2005
1. Цель работы.
Целью лабораторной работы является продвинутое изучение оболочки (IDE)
системы программирования BC 3.1 C++ и классов с массивами (ARRAY и
ARRAYITERATOR) библиотеки CLASSLIB. В результате студенты должны изучить классы
семейства ARRAY и приобрести навыки работы со стандартными классами (по
материалам лекций, документации, литературе, справочной информации BC 3.1 и
исходным файлам ARRAY.CPP , ARRAY.H, ABSTARRY.CPP и ABSTARRY.H). Нужно детально
изучить их состав и структуру, освоить приемы описания классов простой
контейнерной структуры, а также научиться строить диаграммы классов и диаграммы
объектов. В процессе ознакомления с данными классами обучающийся должен уметь
описывать объекты данных классов и использовать их методы для управления объектами
(модель поведения). Студенты в данной ЛР первоначально знакомятся с понятиями
абстрактный класс и наследование (на примере классов OBJECT и ABSTARRAY) , а
также получают навыки поиска информации о классах по исходным текстам программ
и с помощью броузера классов (автоматическое построение диаграмм классов).
2. Порядок работы.
Для выполнения лабораторной
работы в полном объеме студенты должны выполнить следующие действия и пункты:
1. Продолжить изучение оболочки BC 3.1 C++ в
интерактивном режиме, включая (всех
пунктов меню и окон настройки работы оболочки, изучение броузера классов)
2. Построить диаграммы классов для изучаемых классов и
диаграммы объектов, создаваемых в программе.
3. Написать программы в соответствии с требованиями (см.
выше и ниже), состоящей как минимум из двух исходных файлов (.cpp).
4. Создать (Project->
Open Project
-> <новое имя>, Project-> Add Item
-> <выбор модуля> и кнопка Add),
включив в него оба исходных файла (для работы под Windows нужно добавить и файл описания *.DEF) и грамотно настроить проектный файл для программы ЛР
(option -> directories, option ->compilers->Code generation
<small>), во втором файле должна быть описана функция для
вывода справки о программе (на COUT) с номером
варианта, группой и ФИО студента. Эта
функция должна быть вызвана в самом начале программы ЛР.
5. Освоить редактирование текстов в среде многооконного
редактора оболочки для модульных программ (вызов окна проектов WINDOWS->PROJECT, и исходных
модулей из окна проекта ).
6. Отладить программу с помощью отладчика с просмотром
классов, используемых для создания объектов программы. Прогнать программу в
пошаговом режиме с просмотром переменных программы.
7. Сформировать листинг программы и листинг результатов.
8. Оформить отчет по ЛР.
3. Перечень ошибок.
При
разработке и отладке программы были обнаружены и исправлены различные
синтаксические ошибки.
4. Диаграмма классов.
Object – абстрактный базовый класс
для всех объектов
Функции:
isA – возвращает
ID класса
isEqual –
определяет равен ли объект другому
printOn –
отображает объект
Container – абстрактный класс
родитель всех классов, включает все классы способные содержать 0 или более элементов
Collection – абстрактный класс
“коллекционных” структур
AbstractArray – абстрактный класс
с произвольным доступом к элементам коллекции
Функции:
arraySize –
возвращает размер массива
detach – удаляет
объект
initIterator-
создаёт итератор
[ ] – оператор обращения к элементу
printContentsOn
– отображение массива
removeEntry –
удаляет элемент
lowerBound –
возвращает нижнюю границу
upperBound –
возвращает верхнюю границу
Array – класс массива
Функции:
add – добавляет
элемент
ContainerIterator – абстрактный
класс итераторов
ArrayIterator – итератор массива
Функции
current –
возвращает ссылку на текущий объект
++ - увеличивает значение итератора на 1
restart –
перемещает итератор в первую непустую точку массива
5. Диаграмма объектов.
6. Листинг программы.
Max1.cpp
//основной
моудль
//Тесленко
Максим ИУ5-63 18-й вариант
#include <conio.h>
#include <array.h>
#include <ltime.h>
const size = 5; //задаем размер массива А
void help(); //прототип процедуры вывода справки о
программе
class
MyArray:
public Array //новый класс произошедший из Array
с достыпным //методом removeEntry()
{
public:
MyArray(int
Up):Array(Up,0,0){};
void
removeEntry1(int pos){removeEntry(pos);};
};
MyArray A(5), B(6); //массивы А и В
Time* my_obj; //указатель на объект типа Time
int hour, min, sec;
void PrintAll(void) //процедура печати одновременно
массивов А и В
{
ArrayIterator iA(A);
ArrayIterator iB(B);
iA.restart();
iB.restart();
cout <<
"Array A:";
cout <<
"\tArray B:\n";
for (int i=0;
i<size; i++)
{
iA.current().printOn(cout);
cout
<< "\t";
cout
<< "\t";
iB.current().printOn(cout);
iB++;
cout
<< "\n";
}
}
void AddFirst() //процедура вставки 3-го
элемента
{
int h,m,s;
Time *obj;
h=m=s=0;
for (int i=0;
i<2; i++)
{
obj = new
Time((Time &) A[i]);
B.addAt(*obj,
i);
}
obj = new
Time(h,m,s);
B.addAt (*obj,
2);
for (i=2;
i<=5; i++)
{
obj = new
Time((Time &) A[i]);
B.addAt(*obj,
i+1);
}
delete (obj);
}
void main (void)
{
Time *my_obj;
clrscr(); //очистка экрана
help(); //вывод
начальной инфомрации
cout<<"\nPlease, input an
elements into array A\n"; //заполнение массива //элементами типа Time
for (int
i=A.lowerBound(); i<=size; i++)
{
cout
<< "A["<<i<<"]=\n";
hour=min=sec=100;
do
{
cout<<"An
hour:"; //час
cin>>hour;
} while
(hour>24 || hour < 0);
cin.get();
do
{ //минута
cout<<"A
minute:";
cin
>> min;
} while
(min>60 || min <0);
cin.get();
do
{ //секунда
cout<<"A
second:";
cin>>sec;
} while
(sec>60 || sec <0);
cin.get();
my_obj=new
Time(hour, min, sec);
A.add (*my_obj); //добавление элемента в массив
А
}
//вывод А через printContentsOn
A.printContentsOn(cout << "\nOutput A with
printContentsOn:\n");
//вывод А через printOn
cout << "\nOutput A with printOn:\n";
for (i=0; i<size; i++)
{
A[i].printOn(cout);
}
//вывод В через printContentsOn
B.printContentsOn(cout << "\n\nOutput a
clear array B with PrintContentOn:\n");
getch();
//заполнение
В из А
for (i=0; i<size; i++)
{
my_obj = new
Time((Time &) A[i]);
B.add(*my_obj);
}
//вывод В через printContentsOn
B.printContentsOn (cout<< "\nOutput B with
printContentsOn: \n");
//вывод А и В через итераторы
cout << "\nOutput A B, with a class
ArrayIterator:\n";
PrintAll();
//вставка 6-го
элемента 3-м по порядку в В
AddFirst();
//вывод В через printContentsOn
B.printContentsOn(cout << "\nAn array B
after adding the 3-rd element:\n");
getch(); clrscr();
//удаление 1-го элемента массива В
с помощью detach
B.detach(0, TShouldDelete::NoDelete);
B.printContentsOn(cout << "\nAn array B
after deleting the 1-st element:\n");
//AbstractArray* AArray = new Array(A);
//удаление 1-го элемента массива В
с помощью removeEntry
B.removeEntry1(0);
B.printContentsOn(cout << "\nAn array B
after deleting the 1-st element:\n");
getch();
}
Max2.cpp
#include <iostream.h>
void help()
{
cout <<
"\tLaboratory work for discipline PPPO";
cout <<
"\nMade by student of group IU5-63 Teslenko M. /Variant
18/"<<endl;
}
7. Листинг результатов работы.