Форум программистов, компьютерный форум CyberForum.ru

Написать калькулятор, используя класс - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.80
kychka
0 / 0 / 0
Регистрация: 22.10.2013
Сообщений: 42
24.10.2013, 20:59     Написать калькулятор, используя класс #1
Добрый вечер. Не понимаю я ООП и пока трудно оно мне даётся, задача лабы вот такая:

"Создайте программу калькулятор, используя класс. В конструкторе класса должна происходить инициализация переменных, а вычисление значений и вывод результата в соответствующих методах класса."

Вот то, что я сделал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <math.h>
#include <Windows.h>
using namespace std;
 
 
class Calculator
{
 
 
public:
    float a1,b1,rezult; //чертеж, абстракция класса
    Calculator();//конструктор
    Calculator(float a, float b)//конструктор с параметрами
    {
        a1=a; b1=b;
    }
    
        Calculator operator+(Calculator);//объявляю операцию сложения
        Calculator operator-(Calculator);//Объявляю операцию вычитания
        Calculator operator/(Calculator);//Объявляю операцию деления
        Calculator operator*(Calculator);//Объявляю операцию умножения
 
        
 
            
        
    };
 
int main ()
{
return 0;
}



и что делать дальше , увы, не знаю. Если кто нибудь напишет программу с комментариями буду очень благодарен. Достаточно с одним действием, дальше разберусь. Калькулятор такой : ввожу первую переменную, enter, потом ввожу знак действия,enter, вторая переменная enter, ответ. то есть не в строку пишу всё это.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2013, 20:59     Написать калькулятор, используя класс
Посмотрите здесь:

C++ реализовать класс Money используя класс Fraction.
C++ Класс Калькулятор, написать комментарии
C++ Задача (язык С + +). Составить программу-калькулятор на 4 арифметические действия, используя операторы ветвления
Задача (язык С + +). Составить программу-калькулятор на 4 арифметические действия, используя операторы ветвления C++
Класс, полиморфизм (Написать класс, который хранит в себе некий номер ''nip'', проверит его на правильность и вывести результат) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ultrafight
13 / 13 / 5
Регистрация: 23.10.2013
Сообщений: 60
24.10.2013, 21:03     Написать калькулятор, используя класс #2
это в Qt (среда разработки)?

Добавлено через 1 минуту
тебе надо в графике это сделать?
kychka
0 / 0 / 0
Регистрация: 22.10.2013
Сообщений: 42
24.10.2013, 21:05  [ТС]     Написать калькулятор, используя класс #3
Спасибо за ответ. Я делаю в Visual Studio, с++, консоль получается. не графика
Ultrafight
13 / 13 / 5
Регистрация: 23.10.2013
Сообщений: 60
24.10.2013, 21:08     Написать калькулятор, используя класс #4
хоть у меня visual studio не стоит (там и в графике тоже можно), #include <Windows.h> - походу графика. я постараюсь сделать в консоли. тебе когда сделать надо?
kychka
0 / 0 / 0
Регистрация: 22.10.2013
Сообщений: 42
24.10.2013, 21:18  [ТС]     Написать калькулятор, используя класс #5
Ой. не обращай пожалуйста внимание на библиотеку windows.h, я её для себя делаю для задержки экрана во время теста проги с помощью Sleep(50000); просто 50 сек у меня открыта консоль и всё. Без неё нужно делать вобще. извиняюсь, если ввёл этим в заблуждение) мне вобще к завтра сдавать,иначе хвостик, но делай как у тебя со временем. мне в целом то главное понять потом принцип ООП, оценки то фиг с ними.
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 1
24.10.2013, 21:52     Написать калькулятор, используя класс #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include <String>
 
using namespace std;
 
class Calculator {
private:
    double a, b;//переменные класса
    string action;//переменные класса
public:
    Calculator();//конструктор по умолчанию
    Calculator(double a_, string action_, double b_);//конструктор с параметрами
    double result() {//функция расчета и вывода результата
        if(action == "+") {
            cout << a + b;
        }
 
        if(action == "-") {
            cout << a - b;
        }
 
        if(action == "*") {
            cout << a * b;
        }
 
        if(action == "/") {
            if(b == 0) {//проверка на деление на 0
                cout << "Error!";
                return 0;
            }
            cout << a / b;
        }
    }
 
};
 
Calculator::Calculator() : a(2), action("*"), b(4) {} //конструктор по умолчанию
 
Calculator::Calculator(double a_, string action_, double b_) : a(a_), action(action_), b(b_) {} //конструктор с параметрами
 
int main() {
    double a, b;
    string action;
 
    cin >> a >> action >> b;
 
    Calculator calc(a, action, b);//объявление класса Calculator
    calc.result();//выполнение ф-ии result
    cin >> a;//задержка консоли (ожидание ввода) :)
}
kychka
0 / 0 / 0
Регистрация: 22.10.2013
Сообщений: 42
24.10.2013, 22:08  [ТС]     Написать калькулятор, используя класс #7
Спасибо большое! Сейчас буду разбираться и понимать:-)
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 1
24.10.2013, 22:12     Написать калькулятор, используя класс #8
Цитата Сообщение от kychka Посмотреть сообщение
Спасибо большое! Сейчас буду разбираться и понимать:-)
Если что, обращайся
kychka
0 / 0 / 0
Регистрация: 22.10.2013
Сообщений: 42
24.10.2013, 22:47  [ТС]     Написать калькулятор, используя класс #9
Спасибо такой вопрос возник: почему ты использовал string, а не char? нам ведь всего один символ нужно ввести (знак действия). остальное перевариваю, вроде пока понял в целом
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 1
24.10.2013, 22:48     Написать калькулятор, используя класс #10
Цитата Сообщение от kychka Посмотреть сообщение
Спасибо такой вопрос возник: почему ты использовал string, а не char? нам ведь всего один символ нужно ввести (знак действия). остальное перевариваю, вроде пока понял в целом
Привык к string. Хотя ты прав. Эффективней, конечно, будет char.
kychka
0 / 0 / 0
Регистрация: 22.10.2013
Сообщений: 42
24.10.2013, 23:09  [ТС]     Написать калькулятор, используя класс #11
Ага, ок. )Заменил для интереса все string на char, не подключал библиотеку <string> и столкнулся с ошибкой

Вот скрин
http://cs408320.vk.me/v408320323/6f3f/GtfJAADL4AA.jpg


Мне это не критично в самой лабе,но просто лично интересно почему так происходит Я кстати с использованием switch пытался делать эту программу ещё)
Ultrafight
13 / 13 / 5
Регистрация: 23.10.2013
Сообщений: 60
24.10.2013, 23:15     Написать калькулятор, используя класс #12
файл calc.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#ifndef CALC
#define CALC
 
#include <cstdlib>
#include <stdio.h>
#include <iostream>
 
class Calculator
{
    private:
    float a_;
    float b_;
    float res;
    char oper;
 
    public:
    Calculator();
    void plus();
    void minus();
    void mul();
    void div();
    void print_res();
};
 
#endif
файл calc.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include "calc.h"
 
Calculator::Calculator()
{
    char str[30];
    char c;
    int i;
    char * a;
    char * b;
    char oper;
    int a_len;
    int b_len;
    bool b_error;
 
    printf("Enter expression: ");
    scanf("%s", str);
 
    i=0;
    c='1';
    a_len=0;
    b_len=0;
    b_error=false;
 
    while(c!='\0')
    {
        c=str[i];
        if(c=='-')
        {
            i++;
            a_len++;
            c=str[i];
        }
        while( (c!='+') && (c!='-') && (c!='*') && (c!='/') && (c!='\0') )
        {
            c=str[i];
            i++;
            a_len++;
        }
        if(c=='\0')
        {
            printf("Error!");
            b_error=true;
            break;
        }
        while(c!='\0')
        {
            c=str[i];
            i++;
            b_len++;
        }
    }
 
    if(b_error==false)
    {
        a_len--;
        b_len--;
 
        a = new char[a_len+1];
        b = new char[b_len+1];
 
        i=0;
        for(int j=0; j<a_len; j++)
        {
            a[j]=str[i];
            i++;
        }
        a[a_len]='\0';
        oper=str[i];
        i++;
        for(int j=0; j<b_len; j++)
        {
            b[j]=str[i];
            i++;
        }
        b[b_len]='\0';
 
        a_=atof(a);
        b_=atof(b);
 
        if(oper=='+')
        {
            plus();
        }
        else if(oper=='-')
        {
            minus();
        }
        else if(oper=='*')
        {
            mul();
        }
        else
        {
            div();
        }
        if(b_==0 && oper=='/')
        {
            printf("Error!");
        }
        else
        {
            print_res();
        }
    }
}
 
void Calculator::plus()
{
    res=a_+b_;
}
 
void Calculator::minus()
{
    res=a_-b_;
}
 
void Calculator::mul()
{
    res=a_*b_;
}
 
void Calculator::div()
{
    if(b_!=0)
    {
        res=a_/b_;
    }
}
 
void Calculator::print_res()
{
    printf("Result:%f",res);
}
файл main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <stdio.h>
#include "calc.h"
 
using namespace std;
 
int main()
{
    class Calculator * calc;
    calc=new Calculator();
    getchar();
    delete calc;
    return 0;
}
Добавлено через 4 минуты
у меня без задержки ввода) прям сразу пишешь выражение и тебе все посчитают)
kychka
0 / 0 / 0
Регистрация: 22.10.2013
Сообщений: 42
24.10.2013, 23:16  [ТС]     Написать калькулятор, используя класс #13
и ещё.. для чего черточки после переменных параметров? _
Ultrafight
13 / 13 / 5
Регистрация: 23.10.2013
Сообщений: 60
24.10.2013, 23:19     Написать калькулятор, используя класс #14
это просто, чтобы не перепутать с теми, которые используются в конструкторе. там char * a;, а в классе хранятся float a_;
kychka
0 / 0 / 0
Регистрация: 22.10.2013
Сообщений: 42
24.10.2013, 23:27  [ТС]     Написать калькулятор, используя класс #15
Спасибо тебе большое! Почему то не могу поставить спасибо, как sovaz1997. нет этой кнопки. как она у тебя появится - я сразу) код буду смотреть еще и понимать. Потом ещё отпишусь Спасибо вам за помощь. =)
Ultrafight
13 / 13 / 5
Регистрация: 23.10.2013
Сообщений: 60
24.10.2013, 23:45     Написать калькулятор, используя класс #16
да мне рейтинг не нужен) пожалуйста)
Натальяя
0 / 0 / 0
Регистрация: 28.11.2013
Сообщений: 11
07.10.2014, 11:09     Написать калькулятор, используя класс #17
Подскажите пожалуйста, а как сделать, чтобы не было ограничений на входящие параметры. то есть чтобы пользователь вводил выражение, состоящие из неограниченного кол-ва чисел( операции только сложение и вычитание)?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2014, 14:54     Написать калькулятор, используя класс
Еще ссылки по теме:

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

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
KOPOJI
Модератор
 Аватар для KOPOJI
16243 / 6454 / 390
Регистрация: 12.06.2012
Сообщений: 19,362
07.10.2014, 14:54     Написать калькулятор, используя класс #18
Если по простому, то можно как-то так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <iostream>
 
struct BadExpression{};
 
class Calculator
{
    enum { MINUS = '-', PLUS = '+' };
    double number;
    char operation;
    double result;
 
public:
    void parse(const std::string&);
    double getResult() const ;
    inline bool isDigitOrDot(const char);
    inline bool isValidSymbol(const char);
};
 
int main(int argc, char *argv[])
{
    std::string line;
    
    std::cout << "Enter expression.." << std::endl;
    std::getline(std::cin, line);
    
    try
    {
        Calculator calc;
        calc.parse(line);
        std::cout << std::endl << "Result: " << calc.getResult() << std::endl;
    }
    catch(BadExpression)
    {
        std::cout << "Bad expression" << std::endl;
    }
}
 
 
void Calculator::parse(const std::string& expression)
{
    result = 0.;
    bool first = true;
    
    for(std::size_t i = 0, cnt = expression.size(); i < cnt; ++i)
    {
        if(!isValidSymbol(expression[i]))
            throw BadExpression();
        if(!isDigitOrDot(expression[i]))
            operation = expression[i++];
        if(!isDigitOrDot(expression[i]))
            throw BadExpression();
        std::string tmp = "";
        while(i < cnt && isDigitOrDot(expression[i]))
            tmp += expression[i++];
        --i;
        number = std::atof(tmp.c_str());
        if(first)
        {
            first = false;
            result = number;
            continue;
        }
        if(operation == MINUS)
            result -= number;
        else if(operation == PLUS)
            result += number;
    }
}
 
double Calculator::getResult() const
{
    return result;
}
 
inline bool Calculator::isDigitOrDot(const char c)
{
    return c == '.' || isdigit(c);
}
 
inline bool Calculator::isValidSymbol(const char c)
{
    return isDigitOrDot(c) || c == MINUS || c == PLUS;
}
Yandex
Объявления
07.10.2014, 14:54     Написать калькулятор, используя класс
Ответ Создать тему
Опции темы

Текущее время: 04:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru