rlab2 (1077265)
Текст из файла
8
| Утверждаю: | |
| Большаков С.А. | "__"_____________2007 г. |
Лабораторная работа №2
"Изучение классов ARRAY и ARRAYITERATOR"
Отчет
(вид документа)
писчая бумага
(вид носителя)
8
(количество листов)
| ИСПОЛНИТЕЛЬ: | |
| студент группы ИУ5-54 | _____________________ |
| Киреев И. А. | "__"_____________2007 г. |
Москва - 2007
________________________________________________________________
1. Цель работы
Целью лабораторной работы является продвинутое изучение оболочки (IDE) системы программирования BC 3.1 C++ и классов с массивами (ARRAY и ARRAYITERATOR) библиотеки CLASSLIB. В результате студенты должны изучить классы семейства ARRAY и приобрести навыки работы со стандартными классами (по материалам лекций, документации, литературе, справочной информации BC 3.1 и исходным файлам ARRAY.CPP, ARRAY.H, ARRAYS.H, ABSTARRY.CPP и ABSTARRY.H). Нужно детально изучить их состав и структуру, освоить приемы описания классов простой контейнерной структуры, а также научиться строить диаграммы классов и диаграммы объектов. В процессе ознакомления с данными классами обучающийся должен уметь описывать объекты данных классов и использовать их методы для управления объектами (модель поведения). Студенты в данной ЛР первоначально знакомятся с понятиями абстрактный класс и наследование (на примере классов OBJECT и ABSTARRAY) , а также получают навыки поиска информации о классах по исходным текстам программ и с помощью браузера классов (автоматическое построение диаграмм классов).
2. Содержание работы
В ЛР нужно выполнить следующее:
-
Продолжить изучение оболочки BC 3.1 C++ в интерактивном режиме, включая (всех пунктов меню и окон настройки работы оболочки, изучение броузера классов)
-
Построить диаграммы классов для изучаемых классов и диаграммы объектов, создаваемых в программе.
-
Написать программы в соответствии с требованиями (см. выше и ниже), состоящей как минимум из двух исходных файлов (.cpp).
-
Создать (Project-> Open Project -> <новое имя>, Project-> Add Item -> <выбор модуля> и кнопка Add), включив в него оба исходных файла (для работы под Windows нужно добавить и файл описания *.DEF) и грамотно настроить проектный файл для программы ЛР (option -> directories, option ->compilers->Code generation <small>), во втором файле должна быть описана функция для вывода справки о программе (на COUT) с номером варианта, группой и ФИО студента. Эта функция должна быть вызвана в самом начале программы ЛР.
-
Освоить редактирование текстов в среде многооконного редактора оболочки для модульных программ (вызов окна проектов WINDOWS->PROJECT, и исходных модулей из окна проекта ).
-
Отладить программу с помощью отладчика с просмотром классов, используемых для создания объектов программы. Прогнать программу в пошаговом режиме с просмотром переменных и объектов программы.
-
Сформировать листинг программы и листинг результатов.
-
Оформить отчет по ЛР.
Вариант задания 9.
-
Создание массива В с помощью указателя обычным описанием имени массива.
-
Использование для ввода с консоли следующих типов данных (2В):
Времени – класс - Time
-
Динамическое добавление элемента в массив (3В):
Последнего.
-
Выполнить удаление элементов из массивов А и В(4В):
Из А - 1-го.
3. Перечень ошибок
1. Для правильной компиляции программы необходимо в настройках редактора связей установить подключение библиотек классов контейнеров.
2. Массив C при вычислении суммы должен иметь размер, равный сумме размеров A и B.
3. При компиляции DOS-приложения, файл определения модуля, настроенный для приложения Windows может вызвать неправильную компиляцию.
4. Диаграмма классов
5. Листинги программ
5.1. lab21.cpp
#include <iostream.h>
#include <array.h>
#include <ltime.h>
#define COUNT 6
#define MAXN 5
void Help( void );
class MyTime : public Time
{
public:
void printOn (ostream _FAR & st) const
{
st << "MyTyme.PrintOn: " << this->hour() << ":" << this->minute();
};
};
class MyArray : public Array
{
public:
MyArray( int upper, int lower=0, sizeType aDelta=0 ) :
Array( upper,lower,aDelta ){}
void operator << ( ostream& outputStream )
{
printContentsOn(outputStream);
};
MyArray & operator = ( MyArray & );
MyArray & operator = ( Array & );
MyArray & operator + ( MyArray & );
void remove (int i) { removeEntry( i ); };
};
MyArray temp( 2*COUNT - 1 );
unsigned short h=1, m=1, s=1, d=1;
char ch;
MyArray& MyArray::operator = ( Array& a )
{
int i;
for( i = lowerBound(); i<=upperBound(); i++ )
destroy(i);
for( i = a.lowerBound(); i<=a.upperBound(); i++ )
if (a[i] != NOOBJECT)
this->addAt(*new Time( (Time &)a[i]), i );
return *this;
}
MyArray& MyArray::operator = ( MyArray& a )
{
int i;
for( i = lowerBound(); i<=upperBound(); i++ )
destroy(i);
for( i = a.lowerBound(); i<=a.upperBound(); i++ )
if (a[i] != NOOBJECT)
this->addAt(*new Time( (Time &)a[i]), i );
return *this;
}
MyArray & MyArray :: operator + (MyArray &op)
{
int i, j = 0;
for (i = temp.lowerBound(); i<=temp.upperBound(); i++)
temp.destroy(i);
for (i = lowerBound(); i<=upperBound(); i++)
if ((*this)[i] != NOOBJECT)
temp.addAt(*(new Time((Time &)(*this)[i])),j++);
for (i = op.lowerBound(); i<=op.upperBound(); i++)
if (op[i] != NOOBJECT)
temp.addAt(*(new Time( (Time &)op[i] )), j++ );
return temp;
}
void main( void )
{
//Заголовок
Help();
Array *A, *B;
A = new Array( COUNT - 1 );
B = new Array( COUNT - 1 );
cout << "\nВвод массива А: (HH MM SS DD)\n";
Time* T1;
int i;
for( i = 0; i < COUNT - 1; i++ )
{
cout << "A[" << i << "]:=... ";
cin >> h;
cin >> m;
cin >> s;
cin >> d;
cout << "Прочитано: " << h << ":" << m << ":" << s << "." << d << " ";
T1 = new Time( h, m ,s, d );
cout << " Ввод завершен\n";
A->add( *T1 );
}
cout << "\nРаспечатка массива А:";
for( i = 0; i < COUNT; i++ )
if ((*A)[i] != NOOBJECT )
(*A)[i].printOn( cout << "\nA[" << i << "] = " );
A->printContentsOn( cout << "\nМассив A: ");
B->printContentsOn( cout << "Массив B: ");
Time *T2;
for( i = 0; i < COUNT; i++ )
if ((*A)[i] != NOOBJECT )
{
T2 = new Time( (Time &)(*A)[i] );
B->addAt( *T2, i );
}
B->printContentsOn( cout << "Массив B после копирования: ");
cin >> ch;
ArrayIterator AI(*A), BI(*B);
AI.restart();
cout<<"Массив А с помощью класса ArrayIterator:";
while( AI.current() != NOOBJECT )
{
AI.current().printOn( cout << endl );
AI++;
}
BI.restart();
cout<<"\nМассив B с помощью класса ArrayIterator:";
while( BI.current() != NOOBJECT )
{
BI.current().printOn( cout << endl );
BI++;
}
cin >> ch;
Time *T3 = new Time();
A->add( *T3 );
A->printContentsOn( cout << "\nМассив A после добавления: ");
cin >> ch;
MyArray MA( COUNT - 1 ), MB( COUNT - 1 ), MBMT( 2*COUNT - 1 );
MA = *A;
MB = *B;
MA << ( cout << "Класс MyArray\n" );
cin >> ch;
MyArray MC( 2*COUNT - 1 );
MC = MA + MB;
MC << ( cout << "Класс MyArray, C = A + B\n" );
cin >> ch;
MC.remove( 0 );
MC << ( cout << "Класс MyArray после удаления С[1], C = A + B\n" );
cin >> ch;
MyTime* MT1;
MBMT = MA;
for( i = 0; i < 2; i++ )
{
MT1 = new MyTime();
MBMT.add( *MT1 );
}
MBMT << ( cout << "Класс MyArray, MyTime, C = A + BMT\n" );
cin >> ch;
MBMT.detach( 0, TShouldDelete :: Delete );
MBMT << ( cout << "Класс MyArray, то же после удаления" );
delete B; // объекты массивов удаляются деструктором
delete A;
}
5.2. lab22.cpp
#include <iostream.h>
//Вывод справки
void Help( void )
{
cout << "\
ЛАБОРАТОРНАЯ РАБОТА №2\n\
КИРЕЕВ ИВАН ИУ5-64\n\
ВАРИАНТ 9\n\n";
}
-
Результаты работы
Символом # отмечены места паузы в программе.
C:\Documents and Settings\Киреев>C:\A_WORKER\out\LAB2.EXE
ЛАБОРАТОРНАЯ РАБОТА ╣2
КИРЕЕВ ИВАН ИУ5-64
ВАРИАНТ 9
Ввод массива А: (HH MM SS DD)
A[0]:=... 10 15 0 0
Прочитано: 10:15:0.0 Ввод завершен
A[1]:=... 12 00 0 0
Прочитано: 12:0:0.0 Ввод завершен
A[2]:=... 14 25 30 1
Прочитано: 14:25:30.1 Ввод завершен
A[3]:=... 10 10 35 20
Прочитано: 10:10:35.20 Ввод завершен
A[4]:=... 15 27 3 45
Прочитано: 15:27:3.45 Ввод завершен
Распечатка массива А:
A[0] = 10:15:00.00 am
A[1] = 12:00:00.00 pm
A[2] = 2:25:30.01 pm
A[3] = 10:10:35.20 am
A[4] = 3:27:03.45 pm
Массив A: Array {
10:15:00.00 am,
12:00:00.00 pm,
2:25:30.01 pm,
10:10:35.20 am,
3:27:03.45 pm }
Массив B: Array {
}
Массив B после копирования: Array {
10:15:00.00 am,
12:00:00.00 pm,
2:25:30.01 pm,
10:10:35.20 am,
3:27:03.45 pm }
#
Массив А с помощью класса ArrayIterator:
10:15:00.00 am
12:00:00.00 pm
2:25:30.01 pm
10:10:35.20 am
3:27:03.45 pm
Массив B с помощью класса ArrayIterator:
10:15:00.00 am
12:00:00.00 pm
2:25:30.01 pm
10:10:35.20 am
3:27:03.45 pm#
Массив A после добавления: Array {
10:15:00.00 am,
12:00:00.00 pm,
2:25:30.01 pm,
10:10:35.20 am,
3:27:03.45 pm,
12:49:07.41 am }
#
Класс MyArray
Array {
10:15:00.00 am,
12:00:00.00 pm,
2:25:30.01 pm,
10:10:35.20 am,
3:27:03.45 pm,
12:49:07.41 am }
#
Класс MyArray, C = A + B
Array {
10:15:00.00 am,
12:00:00.00 pm,
2:25:30.01 pm,
10:10:35.20 am,
3:27:03.45 pm,
12:49:07.41 am,
10:15:00.00 am,
12:00:00.00 pm,
2:25:30.01 pm,
10:10:35.20 am,
3:27:03.45 pm }
#
Класс MyArray после удаления С[1], C = A + B
Array {
12:00:00.00 pm,
2:25:30.01 pm,
10:10:35.20 am,
3:27:03.45 pm,
12:49:07.41 am,
10:15:00.00 am,
12:00:00.00 pm,
2:25:30.01 pm,
10:10:35.20 am,
3:27:03.45 pm }
#
Класс MyArray, MyTime, C = A + BMT
Array {
10:15:00.00 am,
12:00:00.00 pm,
2:25:30.01 pm,
10:10:35.20 am,
3:27:03.45 pm,
12:49:07.41 am,
MyTyme.PrintOn: 0:49,
MyTyme.PrintOn: 0:49 }
#
Класс MyArray, то же после удаленияArray {
12:00:00.00 pm,
2:25:30.01 pm,
10:10:35.20 am,
3:27:03.45 pm,
12:49:07.41 am,
MyTyme.PrintOn: 0:49,
MyTyme.PrintOn: 0:49 }
C:\DOCUME~1\AD2E~1>
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.















