С++ task (1119639)
Текст из файла
ПРОСТЕНЬКАЯ С++ ЗАДАЧКА ДО 17 МАРТА (включительно)
(на 3 или 4 в зависимости от полноты решения и сроков)
Задание:
используя нижеприведённые классы, реализовать в программе модель работы двух брокеров на бирже. Вносить изменения, упрощающие структуру классов (следовательно, и задачу) нельзя. Можно менять имена классов, переменных, добавлять новые члены классов.
Очевидные требования:
-
в функциях должна проводиться проверка на корректность данных, в случае ошибки – “кидаться” и “перехватываться” исключение;
-
запрещено использование new/delete, если можно использовать STL (vector, list, auto_ptr, …);
-
описание каждого класса в своём ‘*.h[pp]’-файле (без определения функций-методов);
-
функции-члены для каждого класса должны определяться в разных ‘*.cpp’ файлах;
-
запрещается использование глобальных переменных без необходимости;
-
так или иначе должны вызываться все функции-члены класса;
-
запрещается использование using в ‘*.h’-файлах;
-
количество брокеров должно определяться с клавиатуры в начале работы;
-
использовать для управления операциями брокеров ввод с клавиатуры.
Замечания:
-
использование C++11 приветствуется, но не обязательно;
-
в случае наличия ошибки в предложенных классах – исправить её без потери функциональности классов;
-
вопросы по заданию - на семинаре;
-
во время сдачи будут задаваться вопросы на понимание;
-
попытка сдачи программы, в которой Вы не разбираетесь в КАЖДОЙ строчке – отправка на комиссию (например, ответы «не помню», «взял(а) из книжки», «посоветовали, а почему – не думал(а)» = комиссия);
-
каждая неделя просрочки снижает максимальный балл на единицу (3 нед. опоздания – “двойка”);
-
операционная система – на Ваш выбор.
/********************************************************************/
class Firm // Фирма
{
public:
std::string getName(); // Вернуть имя фирмы
unsigned int getBuyingPrice(); // Вернуть покупную цену за акцию
unsigned int getSellingPrice(); // Вернуть отпускную цену за акцию
void setNewPrice( // Установить новые цены:
unsigned int, // первый параметр - покупная
unsigned int); // второй параметр - отпускная
virtual void changePrice() = 0; // Меняются цены покупки/продажи
// Для каждой фирмы д.б. своя
// уникальная функция изменения цены
virtual ~Firm() = 0 {;}
protected:
std::string name; // Имя фирмы
unsigned int buyingPrice; // Покупная цена
unsigned int sellingPrice; // Отпускная цена
unsigned int numShares; // Количество акций
friend void Exchange::buyShare(std::string& pName, unsigned int numShares);
friend void Exchange::sellShare(std::string& pName, unsigned int numShares);
};
/********************************************************************/
class Exchange // Биржа
{
public:
Exchange& operator +=(const Firm&); // Добавить фирму на биржу (в firms).
Exchange& operator -=(const Firm&); // Удалить фирму с биржи (из firms).
void printCosts(); // Распечатать для всех фирм:
// имена
// цены покупки/продажи
// количество доступных акций
void newDay(); // Меняются цены на все фирмы
void buyShares(const std::string& name, // У какой фирмы какое количество
unsigned int number); // акций купить
void sellShares(const std::string& name, // У какой фирмы какое количество
unsigned int number); // акций продать
static unsigned int getBrokerCount() throw(); // Вывод количества брокеров
friend Broker::Broker(Exchange&, unsigned int budget);
private:
std::vector<Firm*> firms; // Список фирм
static unsigned int brokerCount; // Количество брокеров на бирже
};
/********************************************************************/
class Broker
{
public:
Broker(Exchange& exchange, // Биржа, где будем работать
unsigned int budget); // Количество денег в наличии
void buyShares(const std::string& name, // У какой фирмы(c биржи *pExchange)
unsigned int number); // какое количество акций купить
void sellShares(const std::string& name,// У какой фирмы(c биржи *pExchange)
unsigned int number); // какое количество акций продать
unsigned int getBudget() throw(); // Вернуть количество доступных денег
~Broker();
private:
Exchange* pExchange;
unsigned int budget;
};
С++ ЗАДАЧКА на «5» ДО 17 МАРТА (включительно)
Выбрать интересную Вам предметную область и создать её модель на языке С++.
Обязательные требования:
-
должен использоваться абстрактный класс и механизм виртуальных функций;
-
должны использоваться классы STL;
-
должен использоваться свой класс ошибок, через который будут кидаться исключения (и их поимка);
-
класс ошибок должен наследоваться от одного из стандартных классов для исключений;
-
должно быть использовано переопределение операторов;
-
обязательно использование иерархии классов с protected/private/public полями;
-
должны использоваться приведения типов в стиле С++ (…_cast);
-
не должны допускаться утечки ресурсов;
-
код обязан быть безопасным для exception throw;
-
рекомендуется, но не обязательно использование С++11 (хотя бы раз);
-
рекомендуется, но не обязательно использование Boost (хотя бы раз);
-
рекомендуется, но не обязательно использование многопоточности (хотя бы в раз; допускаются любые средства – MPI, IPC, OpenMP, Boost, ит.д. на Ваш выбор);
-
в функциях должна проводиться проверка на корректность данных, в случае ошибки – “кидаться” и “перехватываться” исключение;
-
запрещено использование new/delete, если можно использовать STL (vector, list, auto_ptr, …);
-
описание каждого класса в своём ‘*.h[pp]’-файле (без определения функций-методов);
-
функции-члены для каждого класса должны определяться в разных ‘*.cpp’ файлах;
-
запрещается использование глобальных переменных без необходимости;
-
программа не должна содержать «мёртвый код», т.е. должны вызываться все функции-члены класса (так или иначе);
-
запрещается использование using в ‘*.h’-файлах;
-
ОБЯЗАТЕЛЬНО использование одного из промышленных стилей программирования в той части, что НЕ противоречат предыдущим пунктам. Примеры стандартов стилей:
-
стиль Гуугл (Google C++ Style)
http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml - english
http://translated.by/you/google-c-style-guide/into-ru/?page=2 – русский
-
стиль Кьют (Qt style):
http://developer.qt.nokia.com/wiki/Qt_Coding_Style_Russian – русский
http://www.wiki.crossplatform.ru/index.php/Designing_Qt-Style_C%2B%2B_APIs – русский.
-
должна быть предусмотрена работа с пользователем посредством клавиатуры;
-
операционная система – на Ваш выбор.
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.