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

Выполните задания в строгом соответствии с условиями задачи.

Крайний срок сдачи работы: 17 апреля 2009 г.

Выполнение заданий – строго индивидуальное. Случаи обнаружения плагиата будут наказываться выставлением баллов с отрицательным коэффициентом за украденные задания (исправить штрафные баллы можно будет, лишь выполняя дополнительные задания). Архив, содержащий исходные и исполняемые файлы лабораторной работы, должен быть размещен на персональном блоге студента на сайте ps. margtu. ru не позднее крайнего срока сдачи. Ссылка (с указанием ФИО и группы) на страницу с выполненной работой должна быть размещена в виде комментария к записи в блоге преподавателя, посвященной данной лабораторной работе.

Каждая выполненная программа должна располагаться в 2-х папках – bin и src (не scr, а именно src). Папка bin должна содержать исполняемый файл (собранный в Release-конфигурации) и набор входных файлов, необходимых для автоматической проверки заданий. Папка src должна содержать набор исходных файлов и файлов проекта Visual Studio, необходимых и достаточных для сборки проекта. Папки, содержащие временные файлы (*.obj и прочие), а также автоматически генерируемые файлы с расширением. ncb, .opt, .aps, .plg, .suo в архиве с выполненной работой содержаться не должны.

Внимание, программы, претендующие на оценку «отлично», должны удовлетворять требованиям соглашений о стиле кодирования на Си и Си++. Системные ресурсы (открытые файлы, динамически выделенная память) должны освобождаться как только в них отпадает нужда (строго говоря, это касается работ и на другие оценки, но именно к работам на оценку «отлично» будут предъявляться наиболее высокие требования по качеству исполнения).

НЕ нашли? Не то? Что вы ищете?

Задания

На оценку «удовлетворительно» необходимо набрать не менее 100 баллов

На оценку «хорошо» необходимо набрать не менее 200 баллов

На оценку «отлично» необходимо набрать не менее 300 баллов

Задания на оценку «удовлетворительно»

Задание №1

Разработайте класс CComplex комплексных чисел.

Каждый метод данного класса должен быть проверен при помощи модульных тестов (используйте библиотеку CxxTest).

Для каждого метода необходимо самостоятельно сделать осознанный выбор насчет использования квалификатора const в параметрах и типе метода.

Прайс-лист фич

·  Конструктор вида CComplex(double real = 0, double image = 0), одновременно выступающий в роли конструктора по умолчанию, конструктора, инициализирующего число действительным и комплексным числом
5 баллов

·  2 версии оператора +=, позволяющего выполнить приращение комплексного числа на комплексное либо на действительное число
5 баллов за каждую

·  2 версии оператора -=
5 баллов за каждую

·  2 версии оператора *=
5 баллов за каждую

·  2 версии оператора /=
5 баллов за каждую

·  3 версии оператора + (complex + complex, complex + double, double + complex)
по 5 баллов за каждую

·  3 версии оператора - (complex - complex, complex - double, double - complex)
по 5 баллов за каждую

·  3 версии оператора * (complex * complex, complex * double, double * complex)
по 5 баллов за каждую

·  3 версии оператора / (complex / complex, complex / double, double / complex)
по 5 баллов за каждую

·  3 версии оператора ==, проверяющий комплексные числа на равенство (complex == complex, complex == double, double == complex)
по 5 баллов за каждую

·  3 версии оператора!=, проверяющий комплексные числа на неравенство (complex!= complex, complex!= double, double!= complex)
по 5 баллов за каждую

·  Метод Init(double re, double im), инициализирующий комплексное число указанными значениями действительной и мнимой части
5 баллов

·  Метод InitPolar(double length, double arg), инициализирующий комплексное число указанными значениями модуля и параметра
5 баллов

·  Метод Re(), возвращающий действительную часть
5 баллов

·  Метод Im(), возвращающий мнимую часть
5 баллов

·  Метод Length(), возвращающий длину (модуль) комплексного числа
5 баллов

·  Метод Arg(), возвращающий аргумент комплексного числа
5 баллов

Задания на оценку «хорошо» и «отлично»

Задание №1

Реализовать класс CMyString, инкапсулирующий работу со строками.

В качестве членов-данных класса должны выступать указатель на массив символов, составляющих строку, длина строки и, возможно, какие-то еще данные (например, емкость массива).

Для каждого метода необходимо самостоятельно сделать осознанный выбор насчет использования квалификатора const в параметрах и типе метода.

Каждый метод класса (включая конструкторы) необходимо протестировать при помощи модульных тестов (использовать библиотеку CxxTest для этих целей)

Прайс-лист фич:

·  Конструктор по умолчанию (инициализирует класс пустой строкой)
10 баллов

·  Конструктор копирования
10 баллов

·  Инициализирующий конструктор с одним параметром типа const char*, выполняющий инициализацию класса строкой с завершающим нулевым символом
10 баллов

·  Инициализирующий конструктор с двумя параметрами (const char* и size_t), задающими адрес первого символа и длину. При помощи данного конструктора можно будет инициализировать класс строкой, в составе которой могут быть символы с нулевым кодом, либо массивом символов, в конце которого нет символа с нулевым кодом
10 баллов

·  Инициализирующий конструктор с параметром std::string const&, позволяющий проинициализировать строку содержимым строки стандартной библиотеки языка C++
10 баллов

·  Деструктор, выполняющий освобождение ресурсов, занимаемый строкой
10 баллов

·  Оператор присваивания с параметром CMyString const&. Корректно должна обрабатываться ситуация с присваиванием строки самой себе.
10 баллов

·  Оператор присваивания с параметром const char*. Корректно должна обрабатываться ситуация с присваиванием строки самой себе.
10 баллов

·  Оператор += с параметром CMyString const&, выполняющий конкатенацию строки с переданной. Корректно должна обрабатываться ситуация с конкатенацией строки самой с собой
10 баллов

·  Оператор += с параметром const char*, корректно должна обрабатываться ситуация с конкатенацией строки с данными самой этой строки
10 баллов

·  Оператор + с параметром CMyString const&
10 баллов

·  Оператор + c параметром const char*
10 баллов

·  Оператор +, выполняющий конкатенацию const char* с CMyString const& - например, чтобы можно было написать - “someString” + myString
10 баллов

·  Оператор == с параметром CMyString const&, выполняющий сравнение строк
10 баллов

·  Оператор == с параметром const char*, выполняющий сравнение строки с переданной ASCIIZ-строкой (строка с завершающим нулевым символом)
10 баллов

·  Оператор ==, принимающий параметры const char* и CMyString const& для того, чтобы можно было вычислять выражения типа “someString” == myString
10 баллов

·  Оператор!= с параметром CMyString const&, проверяющий строки на неравенство
10 баллов

·  Оператор!= с параметром const char*, проверяющий на неравенство строку и переданную ASCIIZ-строку
10 баллов

·  Оператор!=, принимающий параметры const char* и CMyString const& для того, чтобы можно было вычислять выражения типа “someString” != myString
10 баллов

·  3 версии оператора <
по 10 баллов за каждую версию

·  3 версии оператора >
по 10 баллов за каждую версию

·  3 версии оператора >=
по 10 баллов за каждую версию

·  3 версии оператора <=
по 10 баллов за каждую версию

·  2 версии (const и не-const) оператора [], возвращающие ссылку (или символ в случае const-версии) на заданный символ
10 баллов за обе

·  Метод GetLength(), возвращающий длину строки (в символах)
10 баллов

·  Метод Clear(), выполняющий очистку строки (аналогично присваиванию пустой строки)
10 баллов

·  Метод Substr(size_t startPosition, size_t length), возвращающий подстроку заданной длины начиная с заданной позиции (нулевая позиция соответствует самому первому символу строки)
10 баллов