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

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

 

 

 

 

 

 

Утверждаю:

 

___________________

 

«___»__________2005 г.

___________________

 

 

 

 

 

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

по курсу ПППО

 «Изучение классов ARRAY и ARRAYITERATOR»

           

Вариант №18

 

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";

       iA++;

       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. Листинг результатов работы.

 



Hosted by uCoz