Lab2 - Report (1077266)
Текст из файла
Московский Государственный Технический Университет
имени Н.Э. Баумана.
УТВЕРЖДАЮ
"___"__________2000 г.
_____________________
(Большаков С.А.)
"Лабораторная работа по ПППО № 2"
Вариант № 4
Группа ИУ5-62
Отчет
(тип документа)
Бумага формата А4
(вид носителя)
6
(количество листов)
ИСПОЛНИТЕЛЬ
" " 2000 г.
_____________________
(Бидяк И.Н.)
Москва – 2000
-
Цель работы
Целью лабораторной работы является продвинутое изучение оболочки(IDE) системы программирования BC 3.1 C++ и классов с массивами (ARRAY и ARRAYITERATOR) библиотеки CLASSLIB. В результате студенты должны приобрести навыки работы со стандартными классами по: материалам лекций, справочной информации BC 3.1, документации и файлам ARRAY.CPP , ARRAY.H, ABSTARRY.CPP и ABSTARRY.H.
-
Порядок работы
-
Изучение оболочки BC 3.1 C++ в интерактивном режиме(всех пунктов меню и окон настройки работы оболочки, изучение броузера классов)
-
Составление диаграммы классов и написание программы, состоящей как минимум из двух исходных файлов (.cpp).
-
Редактирование текстов в среде оболочки
-
Создание проектного файла
-
Отладка программы с помощью отладчика
-
Формирование листинга программы и листинга результатов
-
Оформление отчета.
-
Диаграмма классов Array и ArrayIterator
-
Ошибки, допущенные при написании программы
-
Выделял память для массива inputString4 статически, а не динамически. Из-за этого при вызове деструктора массива A4 неправильно освобождалась память и выдавалась run-time error 'assertion failed'.
-
Не проверял, вводимы значения часов, минут и секунд на допустимость. Из-за этого при вызове конструктора Time::Time(…) при неправильных значениях часов, минут или секунд происходил аварийных останов программы.
-
При организации цикла сначала писал for (i4=0; i4<MAX_STRINGS4; i4++) вместо for (i4=A4.lowerBound(); i4<A4.lowerBound()+MAX_STRINGS4; i4++), что приводило к потенциальной опасности возникновения ошибки при выполнении программы, если индексация массива начиналась бы не с нуля.
-
Сначала объявлял iterator4 статическим, а не динамическим, что исключало возможность его перенастройки для использования с другим объектом класса Array.
-
Вместо (*iterator4)++ сначала писал *iterator++, что приводило к непредсказуемым последствиям (передача управления в случайную область памяти).
-
Перед удалением объектов типа Array не проводил операцию "отключения" (Array::detach(…)) для всех его элементов. Это приводило к ошибке при освобождении памяти с выдачей сообщения 'assertion failed'.
-
Недостатки классов массивов
-
Невозможно узнать номер последнего используемого индекса массива
-
Класс Array не позволяет вставлять новый элемент в середину массива, сдвигая часть массива вниз
-
При удалении объекта класса Array очень часто может неправильно освобождаться память, и программисту приходится самому заботится об этом.
-
Класс Array может хранить только указатели на тип Object. Это с одной стороны не позволяет использовать класс Array для хранения данных типа int, long, char и т.д., и с другой стороны возникает необходимость сначала создать объект какого класса, выделить под него память, а потом добавить указатель на него в объект класса Array. Это делает использование класса Array очень неудобным.
-
Листинг программы
//Начало файла LAB2MAIN.CPP
//Лабораторная работа по ПППО № : 2
//Номер варианта по списку : 4
//Группа : ИУ5-62
//Автор и исполнитель : Бидяк Иван Николаевич
//Назначение данного файла : Основной файл программы
#include <iostream.h>
#include <iomanip.h>
#include <array.h>
#include <ltime.h>
#include <conio.h>
#include <stdlib.h>
#include "lab2help.h"
//объявляем использующиеся константы
const int MAX_STRING_LENGTH4 = 100;
const int MAX_STRINGS4 = 5;
//основная процедура
void main( void )
{
//производим необходимые приготовления для выполнения программы
clrscr();
//объявляем используемые массивы
Array A4(10, 0, 5);
Array* B4=new Array(10, 0, 5);
//получаем от пользователя вводимы им строки и заносим из в массив A
int hour4;
int minute4;
int second4;
Time* inputString4[ MAX_STRINGS4 ];
for (int i4=A4.lowerBound(); i4<MAX_STRINGS4; i4++)
{
hour4=minute4=second4=100;
cout<<"Введите время № "<<( i4-A4.lowerBound()+1 )<<"\n";
do
{
cout<<"Hour=>";
cin >> hour4;
} while ( hour4>24 || hour4<0 );
cin.get(); //извлекаем из потока символ '\n'
do
{
cout<<"Minute=>";
cin >> minute4;
} while ( minute4>60 || minute4<0 );
cin.get(); //извлекаем из потока символ '\n'
do
{
cout<<"Second=>";
cin >> second4;
} while ( second4>60 || second4<0 );
cin.get(); //извлекаем из потока символ '\n'
inputString4[i4] = new Time(hour4,minute4,second4);
A4.add( *inputString4[i4] );
}
getch();
//производим распечатку содержимого массива A с помощью метода printContentsOn
cout<<"\nВывод массива A с помощью метода printContentsOn:\n";
A4.printContentsOn( cout );
//производим распечатку содержимого массива A с помощью метода printOn
cout<<"\nВывод массива A с помощью метода printOn и цикла:\n";
for (i4=A4.lowerBound(); i4<A4.lowerBound()+MAX_STRINGS4; i4++)
{
A4[ i4 ].printOn( cout );
cout<<'\n';
}
//производим распечатку массива B с помошью метода printContentsOn
cout<<"\nВывод массива B с помощью метода printContentsOn:\n";
B4->printContentsOn( cout );
//ждем нажатия пользователем любой клавиши
while( !kbhit() );
getch(); // "съедаем эту клавишу"
//производим копирование массива A в массив B
for (i4=A4.lowerBound(); i4<A4.lowerBound()+MAX_STRINGS4; i4++)
{
B4->addAt( A4[i4], i4 );
}
//выводим массив A с помощью объекта класса ArrayIterator
ArrayIterator* iterator4 = new ArrayIterator( A4 );
cout<<"\nВывод массива A с помощью объекта класса ArrayIterator:\n";
iterator4->restart();
for (i4=A4.lowerBound(); i4<A4.lowerBound()+MAX_STRINGS4; i4++)
{
iterator4->current().printOn( cout ); //выводим элемент
cout<<"\n";
(*iterator4)++;
}
//выводим массив B с помощью объекта класса ArrayIterator
cout<<"\n";
if ( iterator4!=0 ) delete iterator4;
iterator4 = new ArrayIterator( *B4 );
cout<<"\nВывод массива B с помощью объекта класса ArrayIterator:\n";
iterator4->restart();
for (i4=B4->lowerBound(); i4<B4->lowerBound()+MAX_STRINGS4; i4++)
{
iterator4->current().printOn( cout );
cout<<"\n";
(*iterator4)++;
}
if ( iterator4!=0 ) delete iterator4;
//удаляем 3-ий элемент из массива A4
A4.detach( A4.lowerBound()+2 );
//печатаем измененный массив A4
cout<<"\nВывод массива A без элемента #3:\n";
A4.printContentsOn( cout );
//отсоединяем все элементы, присоединенные к массиву A4
for (i4=A4.lowerBound(); i4<A4.lowerBound()+MAX_STRINGS4; i4++)
{
A4.detach(i4);
}
//отсоединяем все элементы, присоединенные к массиву И4
for (i4=B4->lowerBound(); i4<B4->lowerBound()+MAX_STRINGS4; i4++)
{
B4->detach(i4);
}
//удаляем массив B4 (массив A4 выделен статически и удален будет
// автоматически)
freeArray( B4 );
//ждем нажатия пользователем любой клавиши
while( !kbhit() );
}
//Конец файла LAB2MAIN.CPP
//Начало файла LAB2HELP.CPP
//Лабораторная работа по ПППО № : 2
//Номер варианта по списку : 4
//Группа : ИУ5-62
//Автор и исполнитель : Бидяк Иван Николаевич
//Назначение данного файла : Вспомогательный файл программы
#include <array.h>
void freeArray( Array* arrayToFree )
{
if ( arrayToFree!=0 ) delete arrayToFree;
}
//Конец файла LAB2HELP.CPP
//Начало файла LAB2HELP.H
//Лабораторная работа по ПППО № : 2
//Номер варианта по списку : 4
//Группа : ИУ5-62
//Автор и исполнитель : Бидяк Иван Николаевич
//Назначение данного файла : Заголовочный файл для
// объявления функций, содержащихся в
// LAB1HELP.CPP
#include <array.h>
void freeArray( Array* );
//Конец файла LAB2HELP.H
-
Листинг результатов
Листинг результатов получен путем перенаправления вводы/вывода с помощью команды "ivan_2.exe>listing.txt".
Введите время № 1
Hour=>1
Minute=>2
Second=>3
Введите время № 2
Hour=>4
Minute=>5
Second=>6
Введите время № 3
Hour=>7
Minute=>8
Second=>9
Введите время № 4
Hour=>3
Minute=>2
Second=>1
Введите время № 5
Hour=>6
Minute=>5
Second=>4
Вывод массива A с помощью метода printContentsOn:
Array {
1:02:03.00 am,
4:05:06.00 am,
7:08:09.00 am,
3:02:01.00 am,
6:05:04.00 am }
Вывод массива A с помощью метода printOn и цикла:
1:02:03.00 am
4:05:06.00 am
7:08:09.00 am
3:02:01.00 am
6:05:04.00 am
Вывод массива B с помощью метода printContentsOn:
Array {
}
Вывод массива A с помощью объекта класса ArrayIterator:
1:02:03.00 am
4:05:06.00 am
7:08:09.00 am
3:02:01.00 am
6:05:04.00 am
Вывод массива B с помощью объекта класса ArrayIterator:
1:02:03.00 am
4:05:06.00 am
7:08:09.00 am
3:02:01.00 am
6:05:04.00 am
Вывод массива A без элемента #3:
Array {
1:02:03.00 am,
4:05:06.00 am,
3:02:01.00 am,
6:05:04.00 am }
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.















