Лабораторная работа по C++. Написать тестовую программу на

advertisement
Лабораторная работа по C++.
Написать тестовую программу на языке С++ в соответствии
с выданным вариантом.
Программа должна иметь меню и окна для отображения
необходимой информации.
Предлагается следующая организация работы программы:
┌──────────────────────────────────────────────────────────────────────────┐
│ ┌───────────────┐
┌──────────────┐
┌───────────────┐ │
│ │ Инициализация │
│ Тестирование │
│
Выход
│ │
│ └───────────────┘
└──────────────┘
└───────────────┘ │
│
│ Выпад.
│ Выпад.
│
│
\ / меню
\ / меню
│
│ ------------------------------------------------------- │
│ |┌───────────────┐|
|┌───────────────┐|
| Выпадающее меню | │
│ |│ Кол-во эл-тов │|
|│ Базовый класс │| ----- |
| │
│ |└───────────────┘|
|└───────────────┘|
| с перечислением | │
│ |┌───────────────┐|
|┌───────────────┐|
|
| │
│ |│ Нач. значения │|
|│ Строка идент. │| ----- | методов для
| │
│ |└───────────────┘|
|└───────────────┘|
|
| │
│ ------------------|┌───────────────┐|
| соответствующего| │
│
|│ В зав. от вар.|| ----- |
| │
│
|└───────────────┘|
| класса.
| │
│
|┌───────────────┐|
|
| │
│
|│
Операнды
||
|
| │
│
|└───────────────┘|
|
| │
│
------------------------------------- │
│
│
│
│
│
[1]
[2]
│
│ ┌──────────────────────────────┐
┌─────────────────────────────┐ │
│ │1
│
│
│ │
│ │2
│
│
│ │
│ │3
│
│
│ │
│
.
│
│ │
│
.
│
│ │
│
.
│
│ │
│ │N
│
│
│ │
│ └──────────────────────────────┘
└─────────────────────────────┘ │
│
│
│
│
└──────────────────────────────────────────────────────────────────────────┘
Первоначально пункты меню "Тестирование" и "Начальные значения"
запрещены.
После ввода числа создаваемых объектов по пункту меню "Кол-во элементов"
этот пункт запрещается и разрешается пункт "Начальные значения". При этом
на экране появляется окно [1] с количеством пронумерованных строк в соответствии со значением N, введенным ранее как число создаваемых объектов и
окно [2] для последующего вывода в него информации об отработке соответствующих конструкторов и деструкторов.
Пункт меню "Тестирование" разрешается после ввода начальных значений хотя
бы для одного объекта.
Все сформированные в процессе создания объектов строки отображаются в
окне
[1] в соответствуюшей введенному номеру объекта строке с указанием типа
созданного объекта.
Если в процессе тестирования значение объекта изменяется, то новое
значение
также должно отобразиться в окне [1].
Пункт меню "Операнды" служит для ввода номеров операндов, над которыми
будут производиться выбранные действия. Количество операндов может быть
от одного до трех (в зависимости от выбранного для тестирования метода).
Для операций "сложение", "вычитание","умножение","деление" обязательно
использование трех операндов ( два - над которыми производится действие
и один - куда будет помещен результат ).
Инициализация (или изменение значения и типа) одного или нескольких
объектов
производного класса может производиться в любой момент времени после
ввода
количества создаваемых значений без изменения значений и типа других
ранее
проинициализированых объектов.
Допускается отсутствие пункта меню "Операнды" - в этом случае запрос
номеров операндов осуществляется сразу после выбора соответствующего
метода
для тестирования.
Необходимо также предусмотреть вывод различной диагностической информации
( сообщения об ошибках, результат работы тестируемых методов не
изменяющих
значение тестируемого объекта и т.п. )
Поскольку методы базового класса должны быть доступны объектам
производных
классов, создаются и инициализируются только объекты производных классов.
Программа должна
осуществлять полный контроль вводимой информации.
Более подробная информация о целях работы и составе разрабатываемого
программного обеспечения изложена в выданном преподавателем варианте
задания.
Лабораторная работа 6. Вариант 14.
Описать базовый класс СТРОКА.
Обязательные члены класса:
* указатель на char - хранит адрес динамически выделенной памяти
для размещения символов строки;
* значение типа int - хранит длину строки в байтах.
Обязательные методы должны выполнять следующие действия:
* конструктор без параметров;
* конструктор, принимающий в качестве параметра
Си-строку (заканчивается нулевым байтом);
* конструктор, принимающий в качестве параметра символ (char).
* конструктор копирования;
* деструктор.
* чтение символа из заданной позиции;
Производный от СТРОКА класс СТРОКА_ИДЕНТИФИКАТОР
Строки данного класса строятся по правилам записи идентификаторов
в СИ, и могут включать в себя только те символы, которые могут входить
в состав Си-идентификаторов. Если исходные данные противоречат правилам
записи идентификатора, то создается пустая СТРОКА_ИДЕНТИФИКАТОР.
Обязательные методы:
* конструктор без параметров;
* конструктор, принимающий в качестве параметра Си-строку
(заканчивается нулевым байтом);
* конструктор копирования;
* деструктор.
* поиск первого вхождения символа в строку;
Переопределить следующие операции:
* присваивание (=);
* вычитание (-) - из строки (первый операнд) удаляются все символы,
входящие в строку-второй операнд, при этом может
получиться пустая строка;
* индексное выражение [];
Производный от СТРОКА класс БИТОВАЯ_СТРОКА.
Строки данного класса могут содержать только символы '0' или '1'. Если
в составе инициализирующей строки будут встречены любые символы, отличные
от допустимых, БИТОВАЯ_СТРОКА принимает нулевое значение.
Содержимое данных строк рассматривается как двоичное число.
Отрицательные числа хранятся в дополнительном коде.
Обязательные методы:
* конструктор без параметров;
* конструктор, принимающий в качестве параметра
Си-строку (заканчивается нулевым байтом);
* конструктор копирования;
* деструктор;
* инвертирование числа.
Переопределить следующие операции (длина строки результата
равна длине большей из строк, в случае необходимости, более
короткая битовая строка расширяется влево знаковым разрядом) :
* присваивание (=);
* вычитание
- - арифметическая разность строк;
Разработчик вправе вводить любое (с обоснованием необходимости)
число дополнительных членов и методов.
Задание:
Разработать иерархию классов по следующей схеме:
СТРОКА
|
V
-------------------------------------------|
|
СТРОКА_ИДЕНТИФИКАТОР
БИТОВАЯ_СТРОКА
или
ДЕСЯТИЧНАЯ_СТРОКА
или
КОМПЛЕКСНОЕ_ЧИСЛО
с обязательной поддержкой
заданных членов и методов.
Написать тестовую программу, которая:
* динамически выделяет массив указателей на базовый класс (4-6 шт.);
* в режиме диалога заполняет этот массив указателями на производные
классы,
при этом экземпляры производных классов создаются динамически с заданием
начальных значений;
* для созданных экземпляров производных классов выполняется
проверка всех разработанных методов (в соответствии с вариантом задания),
с выводом исходных данных и результатов на дисплей.
* для конструкторов копирования каждого класса предусмотреть
диагностическую печать количества его ввызовов в заданное место дисплея,
(рекомендуется использовать статические члены класса).
Режим диалога обеспечивается с помощью иерархического меню.
Основные пункты:
1. "Инициализация".
Подпункты:
1.1 "Число элементов" - задает число элементов в массиве указателей
на базовый класс.
Запрещается после задания числа элементов пользоваться этим
пунктом меню.
1.2 "Начальное значение" - с помощью этого пункта меню можно
задать номер элемента, его тип и начальное значение.
Задавать начальные значения и работать с другими пунктами меню
запрещается до тех пор, пока не будет задано число элементов.
Допускается задать новое начальное значение несколько раз.
2. "Тестирование"
В качестве подпунктов указываются типы строк из варианта задания и
обязательные для всех подпункты "строка" и "задание операнда",
например:
2.1 "Строка"
2.2. "СТРОКА_ИДЕНТИФИКАТОР"
2.3. "КОМПЛЕКСНОЕ_ЧИСЛО"
2.4. "Задать операнд"
После выбора одного из этих пунктов меню предлагается выбрать один
методов из списка всех обязательных методов (кроме конструкторов
и деструкторов), связанных с выбранным подпунктом.
Результат выводится на экран.
3. "Выход".
Допускается одновременный вывод всех пунктов меню на экран.
Переход между пунктами меню осуществляется клавишами со стрелками.
Выбор пункта меню осуществляется нажатием клавиши Enter.
Значения экземпляров классов по мере их инициализации выводятся на
дисплей и остаются на все время выполнения программы.
После выбора операндов они подсвечиваются
цветом, отличным от остальных экземпляров.
Download