Генератор арифметических примеров

Создание программы для генерации примеров для контрольных работ по арифметике с введением опций количества примеров и действий, диапазоном используемых чисел, допустимых арифметических действий, выводом сгенерированных примеров в указанный файл.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 11.07.2012
Размер файла 142,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Государственное образовательное учреждение

высшего профессионального образования

«Южно-Уральский государственный университет»

Кафедра "Прикладная математика"

ОТЧЁТ ПО КУРСОВОЙ РАБОТЕ

по дисциплине «Объектно-ориентированное программирование»

Тема: «Генератор арифметических примеров»

Выполнил: Цыбулевский Д.Г.

гр. ММ-242

Проверил: Демидов А.К.

Челябинск - 2011

Содержание

1. Постановка задачи

2. Описание программы

3. Используемые внешние файлы

4. Инструкция по установке

5. Инструкция пользователя

6. Приложение (исходные тексты программы)

1. Постановка задачи

Написать программу для генерации примеров для контрольных работ по арифметике. На экране настройки необходимо ввести следующие опции:

Количество примеров: [ 1]

Количество действий: [ 5]

Диапазон исп. чисел: [-1000]..[1000]

Допустимые арифметические действия

[X] 2+2

[X] 2-2

[X] 2*2

[X] 2:2

[X] -(-2) (смена знака)

Имя файла для вывода: [kontr1.txt]

Здесь [X]- флажки (checkbox); [...] - поля ввода.

Сгенерированные примеры вместе с ответами вывести в указанный файл, разделяя пустой строкой в виде:

4 : (1 + 1) =

Ответ: 2

2 + 3 =

Ответ: 5

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

2. Описание программы

В ходе работы над программой использовалось следующее программное обеспечение:

· Microsoft Visual Studio 2005

Программа разбита на два модуля:

· “generator.cpp” - Классы Sum, Generator, GeneratorError

· “main.cpp” - Текст основной программы

В программе используются объекты следующих классов:

· Generator - основной класс Генератор

· GeneratorError - класс исключения

· Sum - класс арифметический пример

Интерфейс класса Sum:

class Sum{

Sum *l,*r; //левая и правая части примера

int prior; //приоритет действия

int ans; //ответ на пример

char oper; //арифметическая операция

string res; //общий вид примера

public:

Sum(int ans); //конструктор тривиального примера

Sum(Sum& l,char,Sum& r);//конструктор примера с левой и правой частью

~Sum(); //деструктор(для полного удаление примера)

inline int width()const{return res.size();}//возвращает ширину примера

inline string ToString()const{return res;} //возвращает пример в виде строки

inline int answer()const{return ans;}//возвращает ответ на пример

};

Интерфейс класса Generator:

class Generator{

int numberOfExample; // количество примеров

int numberOfOperations; //число действий

int rangeL,rangeR; //левая и правая границы

int checkBox[5]; //допустимые операции(значение элемента равно 1 если операция допустима)

Sum* rec(int num,int numberOfDecompositions); //вспомогательный рекурсивный метод для генерации объекта класса Sum

public:

Generator(int numberOfExample,int numberOfOperations,int rangeL,int rangeR,int *checkBox); //конструктор

void generateToFile(string fileName); //сгенерировать в файл, имя которого передается в метод в качестве аргумента

void generateToVector(vector<string>&); //сгенерировать в передаваемый по ссылке вектор

Sum* generateOneSum();//сгенерировать один пример

};

Интерфейс класса GeneratorError:

class GeneratorError{

generatorCodes c; //код ошибки

public:

GeneratorError(generatorCodes c):c(c){} //конструктор

generatorCodes Code(){return c;} //метод возвращает код ошибки

};

Используется следующий тип данных:

enum generatorCodes{notGenerated,badOptions};//возможные ошибки

Код ошибки равен notGenerated если генератор не может создать пример.

(заданы такие границы, что невозможно разложить число)

Код ошибки равен badOptions если заданы некорректные опции генератора (отрицательное количество примеров и т.д.)

3. Используемые внешние файлы

Во время работы программы создается текстовый файл с именем, задаваемым пользователем, в который помещаются сгенерированные примеры с ответами.

4. Инструкция по установке

Для установки программы на компьютер необходимо скопировать файл Generator.exe на локальный диск.

5. Инструкция пользователя

При запуске программы появляется окно консольного приложения в котором необходимо ввести следующие опции: количество генерируемых арифметических примеров, количество действий в каждом из примеров, диапазон используемых чисел в виде указания левой и правой границ отрезка допустимых чисел, допустимые арифметические действия и имя файла для вывода.Перед вводом каждой опции генератора арифметических примеров на экран выводяться текстовые подсказки. После ввода всех данных производится выход из программы . Примеры будут сгенерированы в задаваемый файл.

6. Приложение (исходные тексты программы)

программа генерация опция

Файл «main.cpp»

#include "generator.h"

int main(){

int numberOfExample,numberOfOperations,rangeL,rangeR,checkBox[5];

string fileName;

vector<string> d;

cout<<"Number of examples: ";

cin>>numberOfExample;

cout<<"Number of operations: ";

cin>>numberOfOperations;

cout<<"Lower and upper bound: ";

cin>>rangeL>>rangeR;

cout<<"Permissible arithmetic operations(if permissible - 1): \nOperation \"+\"\t";

cin>>checkBox[0];

cout<<"Operation \"-\"\t";

cin>>checkBox[1];

cout<<"Operation \"*\"\t";

cin>>checkBox[2];

cout<<"Operation \":\"\t";

cin>>checkBox[3];

cout<<"Operation \"-()\"\t";

cin>>checkBox[4];

cout<<"\nName of file for output: ";

cin>>fileName;

try{

Generator a(numberOfExample,numberOfOperations,rangeL,rangeR,checkBox);

a.generateToFile(fileName);

}

catch(GeneratorError &Error){

if (Error.Code()==badOptions)

cout<<"Incorrect input options\n";

if (Error.Code()==notGenerated)

cout<<"Sum is not generated\n";

}

return 0;

}

Файл «generator.h»

#include <iostream>

#include <ctime>

#include <string>

#include <vector>

#include <cstdlib>

#include <fstream>

#include <sstream>

using namespace std;

enum generatorCodes{notGenerated,badOptions};

class GeneratorError{

generatorCodes c;

public:

GeneratorError(generatorCodes c):c(c){}

generatorCodes Code(){return c;}

};

class Sum{

Sum *l,*r;

int prior,ans;

char oper;

string res;

public:

Sum(int ans);

Sum(Sum& l,char,Sum& r);

~Sum();

inline int width()const{return res.size();}

inline string ToString()const{return res;}

inline int answer()const{return ans;}

};

class Generator{

int numberOfExample,numberOfOperations;

int rangeL,rangeR;

int checkBox[5];

Sum* rec(int num,int numberOfDecompositions);

public:

Generator(int numberOfExample,int numberOfOperations,int rangeL,int rangeR,int *checkBox);

void generateToFile(string fileName);

void generateToVector(vector<string>&);

Sum* generateOneSum();

};

Файл «generator.cpp»

#include "generator.h"

Sum::Sum(int ans):ans(ans),l(0),r(0),oper(0){

ostringstream out;

if (ans>=0)

out<<ans;

else

out<<'('<<ans<<')';

res=out.str();

prior=5;

}

Sum::Sum(Sum &l,char oper,Sum &r):oper(oper),l(&l),r(&r){

if (oper=='+'){

prior=1;

ans=l.ans+r.ans;

}

if (oper=='-'){

prior=2;

ans=l.ans-r.ans;

}

if (oper=='*'){

prior=3;

ans=l.ans*r.ans;

}

if (oper==':'){

prior=4;

ans=l.ans/r.ans;

}

if (oper=='('){

prior=0;

res="-";

if (ans<0)res+="(";

res+=r.res;

if (ans<0)res+=")";

ans=-r.ans;

return;

}

if (prior>l.prior && l.prior){

res+='(';

res+=l.res;

res+=')';

}

else res+=l.res;

res+=' ';

res+=oper;

res+=' ';

if (prior>r.prior || r.prior==2 || r.prior==4){

res+='(';

res+=r.res;

res+=')';

}

else res+=r.res;

}

Sum::~Sum(){

if (l)

delete l;

if (r)

delete r;

}

Generator::Generator(int numberOfExample,int numberOfOperations,int rangeL,int rangeR,int *checkBox){

if (numberOfExample<0 || numberOfOperations<0 || rangeL>rangeR)

throw GeneratorError(badOptions);

this->numberOfExample=numberOfExample;

this->numberOfOperations=numberOfOperations;

this->rangeL=rangeL;

this->rangeR=rangeR;

for(int i=0;i<5;i++)

this->checkBox[i]=checkBox[i];

srand((int)time(0));

}

void Generator::generateToFile(string fileName){

Sum *AS;

ofstream to(fileName.c_str());

for(int i=0;i<numberOfExample;i++){

AS=this->generateOneSum();

to<<AS->ToString()<<" = \n\n"<<"Answer: "<<AS->answer()<<"\n\n";

delete AS;

}

}

void Generator::generateToVector(vector<string> &h){

string res;

Sum *AS;

for(int i=0;i<numberOfExample;i++){

AS=this->generateOneSum();

res=AS->ToString();

res+=" = ";

ostringstream out;

out<<AS->answer();

res+=out.str();

h.push_back(res);

delete AS;

}

}

Sum* Generator::rec(int num,int numberOfOperations){

int operandL,operandR;

int N,M,random,cnt(0);

char operation;

string operations="+-*:(";

ostringstream out;

if (numberOfOperations==0)

return new Sum(num);

while (1){

cnt++;

if (cnt>=10000)

throw GeneratorError(notGenerated);

random=rand()%5;

if (!checkBox[random])continue;

operation=operations[random];

operandL=rand()%(rangeR-rangeL+1)+rangeL;

if (operation=='+')

operandR=num-operandL;

if (operation=='-')

operandR=operandL-num;

if (operation=='*'){

if (operandL==0)continue;

if (num%operandL)continue;

operandR=num/operandL;

}

if (operation==':'){

if (num==0)continue;

if (operandL%num)continue;

operandR=operandL/num;

if (operandR==0)continue;

}

if (operation=='('){

if (-num>rangeR || -num<rangeL || num==0)continue;

return new Sum(*(new Sum(0)),operation,*rec(-num,numberOfOperations-1));

}

if (operandR>rangeR || operandR<rangeL)continue;

break;

}

N=rand()%numberOfOperations;

M=numberOfOperations-N-1;

return new Sum(*rec(operandL,N),operation,*rec(operandR,M));

}

Sum* Generator::generateOneSum(){

int num=rand()%(rangeR-rangeL+1)+rangeL;

return rec(num,numberOfOperations);

}

Размещено на Allbest.ru


Подобные документы

  • Особенности способов описания языков программирования. Язык программирования как способ записи программ на ЭВМ в понятной для компьютера форме. Характеристика языка Паскаль, анализ стандартных его функций. Анализ примеров записи арифметических выражений.

    курсовая работа [292,0 K], добавлен 18.03.2013

  • Определение понятия квадротомического дерева. Рассмотрение основных примеров квадродерева, его достоинств и недостатков. Визуализация квадротомированного изображения. Создание программы разбора бинарной, заполненной случайным образом, матрицы N на M.

    курсовая работа [392,3 K], добавлен 09.08.2015

  • Разработка графического редактора "MyGraphicsEditor", аналогичного редактору MS Paint. Анализ предметной области по методологии объектной декомпозиции. Подготовление контрольных примеров, проведение автономного и комплексного тестирования и отладки.

    курсовая работа [2,9 M], добавлен 12.05.2015

  • Описание алгоритма и исходного кода программы формирования графовой модели заданного фрагмента принципиальной электрической схемы. Разработка схемы алгоритмов решения задачи. Результаты решения контрольных примеров, выполненные с помощью программы.

    контрольная работа [47,8 K], добавлен 14.10.2012

  • Решение математических примеров, построение графиков с помощью программы Mathcad. Создание 3D модели сборки, гидродинамического расчета, термического расчета и статистического расчета с помощью программы SolidWorks. Детали интерфейса, элементы вкладок.

    отчет по практике [2,3 M], добавлен 25.11.2014

  • Основные функции библиотеки динамической компоновки (DLL) в операционной системе Windows. Характеристика механизмов связывания в среде Windows. Описание функций, использующихся в программах. Анализ примеров реализации DLL. Процесс использования ресурсов.

    курсовая работа [365,3 K], добавлен 18.05.2014

  • Изучение роли информационно-коммуникационных технологий в гостиничного индустрии. Виртуальные представительства реальных отелей в сети Интернет. Основные виды презентаций и сайтов, технологии и этапы их создания. Бриф на создание сайта и его элементов.

    курсовая работа [7,3 M], добавлен 10.12.2013

  • Понятие и функции комплексных чисел. Правила выполнения арифметических операций с комплексными числами. Действия с комплексными числами: сложение, вычитание, произведение, деление. Программная реализация решения задачи. Пример выполнения программы.

    курсовая работа [398,8 K], добавлен 01.02.2010

  • Написание программы для генерации случайных чисел, в которой реализуются возможности генерации абсолютно случайных чисел. Приложение на языке С/С++. Описание узла, содержащего данные; функций и методов работы; чтения данных из памяти и вывода их на экран.

    курсовая работа [172,4 K], добавлен 23.05.2012

  • Калькулятор как устройство для арифметических вычислений. Разработка алгоритма, его перевод в программный код. Выбор языка, опции компилятора при сборке программы. Обработка ошибок и исключительных ситуаций в коде. Тестирование программы, файл помощи.

    курсовая работа [1,2 M], добавлен 19.02.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.