1 / 1 / 0
Регистрация: 31.03.2018
Сообщений: 10
1

Операции "*" и "/" не работают в калькуляторе

31.03.2018, 13:45. Показов 873. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
подскажите пожалуйста в чем проблема: в этом калькуляторе работают только + и -
делить и умножить как-будто не существуют
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
#include "calculate_string.h"
 
using namespace std;
 
typedef calculate_string calc;
 
int main () {
    system ("title Калькулятор");
    system ("color F0");
    string s;
    cin >> s;
    calc mainString (s);
    float result = mainString. getValue ();
    cout << result << endl;
    system ("pause");
    return 0;
}
вот calculate string.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
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
#ifndef CALCULATE_STRING_H_INCLUDED
#define CALCULATE_STRING_H_INCLUDED
 
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <sstream>
 
using namespace std;
 
class calculate_string {
    friend istream& operator >> (istream &, calculate_string &);
private:
    float result;
    string mainString;
    vector < float > digits;
    vector < char > chars;
public:
    getValue () { return result; }
    calculate_string (string);
private:
    bool ismath (char);
    string deleteTrash (string a);
};
 
calculate_string :: calculate_string (string cs) {
    mainString = cs;
    result = 0;
    deleteTrash (mainString);
    istringstream stream (mainString);
    for (float f; stream >> f; ) {
        digits. push_back (f);
    }
    for (char ch; stream >> ch; ) {
        if (ch == '*' || ch == '/' || ch == '-' || ch == '+') { chars. push_back (ch); }
    }
    /** сначала делить и умножить */
    for (int i = 0; i < chars. size (); i++) {
        switch (chars [i]) {
        case '*':
            digits [i] *= digits [i + 1];
            digits. erase (digits. begin () + i + 1);
            chars. erase (chars. begin () + 1);
        case '/':
            digits [i] /= digits [i + 1];
            digits. erase (digits. begin () + i + 1);
            chars. erase (chars. begin () + 1);
        default:
            break;
        }
    }
    /** потом сложить */
    for (vector < float > :: iterator i = digits. begin (); i != digits. end (); i++) {
        result += *i;
    }
}
 
bool calculate_string :: ismath (char ch) {
    string important = "1234567890-+*/.";
    for (int i = 0; i < 18; i++) {
        if (ch == important [i] ) { return true; }
    }
    return false;
}
 
string calculate_string :: deleteTrash (string a) {
    for (string :: iterator i = a. begin (); i != a. end (); i++) {
        if (*i == ' ') { a.erase (i); }
    }
    for (string :: iterator i = a. begin (); i != a. end (); i++) {
        if (!ismath (*i)) { cerr << " error\n"; }
    }
    return a;
}
 
#endif
P.S. пишу в codeblocks
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.03.2018, 13:45
Ответы с готовыми решениями:

Не работают кнопки на калькуляторе
на созданном калькуляторе. При нажатии на любую кнопку ничего не происходит. код html ...

Унарные операции в калькуляторе
Я делаю калькулятор не как не могу доделать унарные операции например: нажал на кнопку появилась...

Арифметические операции в калькуляторе
Всем привет) Помогите прописать арифметические операции в калькуляторе по следующему принципу: ...

Не работают арифметические действия в калькуляторе
Помоги не работают арифметические действия в калькулятор. namespace Калькулятор { public...

Как выполнять операции в калькуляторе?
Помогите пожалуйста! Нужно написать калькулятор в приложении windows forms, вся граф оболочка...

4
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
31.03.2018, 15:40 2
Криво всё. С + и - работает потому, что перед числами могут быть знаки + или - (знак числа).
0
1 / 1 / 0
Регистрация: 31.03.2018
Сообщений: 10
31.03.2018, 15:42  [ТС] 3
а с делением и умножением?
или, если несложно, можно подсказку, как это реализовать?
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
31.03.2018, 15:45 4
Лучший ответ Сообщение было отмечено nemo-nemo как решение

Решение

Цитата Сообщение от nemo-nemo Посмотреть сообщение
а с делением и умножением?
Там просто поток чтения ломается. Ожидается число, а приходит * или /.
0
1 / 1 / 0
Регистрация: 31.03.2018
Сообщений: 10
31.03.2018, 15:51  [ТС] 5
спасибо

Добавлено через 3 минуты
а не подскажите, как это исправить?
C++
1
2
3
4
for (float f; char ch; stream >> f > ch ) {
        digits. push_back (f);
        if (ch == '*' || ch == '/' || ch == '-' || ch == '+') { chars. push_back (ch); }
}
делать так, или считывать пару
C++
1
pair < float, char >
0
31.03.2018, 15:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.03.2018, 15:51
Помогаю со студенческими работами здесь

Сброс циферблата в калькуляторе после операции
Мне нужно прописать код так, чтобы после операции умножения/сложения.деления при нажатии на любое...

Ввод символа операции с клавиатуры в калькуляторе
Доброго времени суток, есть не большая проблема, есть калькулятор, он работает, но необходимо что...

Как сделать выбор операции в калькуляторе?
я первый день учусь в c++ мне понравилось но у всех всегда трудности я не понимаю как сделать выбор...

Реализация операции нахождения остатка в калькуляторе
Вот канкулятор: #include &lt;iostream&gt; using namespace std; char operation; float number1;...

Косяк при выборе операции через switch в калькуляторе
всем доброго времени суток. пишу тут курсач и столкнулся со следующей проблемой: в консоли само по...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru