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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.80
kychka
1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 42
#1

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

24.10.2013, 20:59. Просмотров 2866. Ответов 17
Метки нет (Все метки)

Добрый вечер. Не понимаю я ООП и пока трудно оно мне даётся, задача лабы вот такая:

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

Вот то, что я сделал:
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++):

Разработать программу используя класс калькулятор с полями x, y - целые числа и методы +, -, /, *) и вывода ре - C++
Разработать программу используя класс калькулятор с полями x, y - целые числа и методы +, -, /, *) и вывода результата.

Используя рекурсию написать программу Калькулятор - C++
Составьте программу реализации калькулятора, выполняет действия +, –, *, / в арифметическом выражении, содержащий числа. (используя...

Написать калькулятор используя массив указателей - C++
Добрый вечер уважаемые форумчане. Не так давно начал учить С++ возник вопрос в котором сам к сожалению не могу разобраться. Подскажите...

Класс Калькулятор, написать комментарии - C++
Доброго всем времени суток! Уважаемые жители форума, у меня к вам есть вот какая просьба! Я учусь на 3 курсе электротехнического...

Реализовать класс Goods используя для представления цены класс Money - C++
Реализовать класс Goods (пункт 1 ), используя для представления цены класс Money с пункта 2 Реализовать метод уценки товара, уменьшая цену...

Реализовать класс Money, используя класс Fraction - C++
// реализовать класс Money используя класс Fraction #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;sstream&gt; #include...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ultrafight
13 / 13 / 5
Регистрация: 23.10.2013
Сообщений: 60
24.10.2013, 21:03 #2
это в Qt (среда разработки)?

Добавлено через 1 минуту
тебе надо в графике это сделать?
kychka
1 / 1 / 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
1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 42
24.10.2013, 21:18  [ТС] #5
Ой. не обращай пожалуйста внимание на библиотеку windows.h, я её для себя делаю для задержки экрана во время теста проги с помощью Sleep(50000); просто 50 сек у меня открыта консоль и всё. Без неё нужно делать вобще. извиняюсь, если ввёл этим в заблуждение) мне вобще к завтра сдавать,иначе хвостик, но делай как у тебя со временем. мне в целом то главное понять потом принцип ООП, оценки то фиг с ними.
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 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
1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 42
24.10.2013, 22:08  [ТС] #7
Спасибо большое! Сейчас буду разбираться и понимать:-)
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
24.10.2013, 22:12 #8
Цитата Сообщение от kychka Посмотреть сообщение
Спасибо большое! Сейчас буду разбираться и понимать:-)
Если что, обращайся
kychka
1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 42
24.10.2013, 22:47  [ТС] #9
Спасибо такой вопрос возник: почему ты использовал string, а не char? нам ведь всего один символ нужно ввести (знак действия). остальное перевариваю, вроде пока понял в целом
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
24.10.2013, 22:48 #10
Цитата Сообщение от kychka Посмотреть сообщение
Спасибо такой вопрос возник: почему ты использовал string, а не char? нам ведь всего один символ нужно ввести (знак действия). остальное перевариваю, вроде пока понял в целом
Привык к string. Хотя ты прав. Эффективней, конечно, будет char.
kychka
1 / 1 / 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
1 / 1 / 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
1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 42
24.10.2013, 23:27  [ТС] #15
Спасибо тебе большое! Почему то не могу поставить спасибо, как sovaz1997. нет этой кнопки. как она у тебя появится - я сразу) код буду смотреть еще и понимать. Потом ещё отпишусь Спасибо вам за помощь. =)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2013, 23:27
Привет! Вот еще темы с ответами:

Реализовать класс ModelWindow, добавив поле для курсора, используя для представления поля класс Cursor - C++
Реализовать класс ModelWindow, добавив поле для курсора. Используйте для представления поля класс Cursor. (это под типом класс в классе).

Написать класс строка и производный класс, ее шифрующий - C++
Добрый день уважаемые форумчане. Вопрос стоит в решении данной задачи. Мне очень нужна ваша помощь по той причине что мне задали задачу по...

Класс, полиморфизм (Написать класс, который хранит в себе некий номер ''nip'', проверит его на правильность и вывести результат) - C++
Задача. Написать класс, который хранит в себе некий номер ''nip'', проверит его на правильность и вывести результат. Вообщем-то ни...

Задача (язык С + +). Составить программу-калькулятор на 4 арифметические действия, используя операторы ветвления - C++
Приветик)))


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.10.2013, 23:27
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru