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

Приложение для вычисления значения арифметического выражения - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ алгоритмы и блок схемы http://www.cyberforum.ru/cpp-beginners/thread193633.html
в блок схеме должно все записываться на языке паскаль помогите,обычная блок схема
C++ Не понятно как работают функции bool isstrprint (const char s) { int i = -1, ls = strlen(s); bool rc = true; if (s != 0x00) { while (i <= ls && isprint((int)((unsigned char) s)) > 0); rc = (i == ls)?true:false; }; return rc; http://www.cyberforum.ru/cpp-beginners/thread193629.html
C++ факториал
Я только начал изучать С++ и вот столкнулся с проблемой: дано положительное число A>=10.Найти такое число k, что (k-1)!<=A<=k! заранее спасибо!
Ассемблерная вставка в Visual Studio C++
Есть программа, выполняющая шейкерную сортировку. Функция сортировки представляет собой ассемблерную вставку. Проблема в том что при возврате в главную функцию возникает исключение. Не пойму, в чем его причина. Вот код: #include <iostream> #include <conio.h> using namespace std; const int n=5;
C++ Как из обычной структуры сделать хеш таблицу? http://www.cyberforum.ru/cpp-beginners/thread193612.html
У меня есть такая таблица: #ifndef DIPLOM_H #define DIPLOM_H #include <vector> using namespace std; struct T_Record { char name; //Фамилия, инициалы
C++ Информатика ! очень нужно Дано натуральное число k . Напечатать k-ую цифру (не число!) последовательности из идущих подряд чисел Фибоначчи. 112358132134... Необходимо построить программу так , чтобы она не накладывала ограничений на длину последовательности . подробнее

Показать сообщение отдельно
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
04.12.2010, 12:41     Приложение для вычисления значения арифметического выражения
Wera, вопрос - а зачем упрощали? У вас по заданию есть и возведение в степень, и круглые скобки.

Добавлено через 2 минуты
И ещё - это не упрощение - это, как говорится - "серпом по яйцам". Вы просто вырезали кучу кода, в том числе и жизненно важного для программы. Например, где функция number? Она, бедная, только и делала, что считывала числа, за что ж вы её так?

Добавлено через 13 минут
Если очень хочется, то вот так надо было переделать:

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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#include <iostream>
#include <iomanip>
 
double expression();
double term();
double number();
 
int main()
{
    double n;
 
    setlocale(LC_ALL, "Rus");
 
    std::cout << "Введите выражение: ";
    
    n = expression();
 
    std::cout << std::setprecision(12) << "Результат вычисления: " << n << std::endl;
 
    std::cin.get();
    std::cin.get();
    return 0;
}
 
double expression()
{
    double result;
    char operation;
 
    result = term();
 
    while (true)
    {
        operation = std::cin.get();
 
        switch (operation)
        {
        case '+':
            result += term();
            break;
        case '-':
            result -= term();
            break;
        default:
            std::cin.putback(operation);
            return result;
        }
    }
}
 
double term()
{
    double result;
    char operation;
    double temp;
 
    result = number();
 
    while (true)
    {
        operation = std::cin.get();
 
        switch (operation)
        {
        case '*':
            result *= number();
            break;
        case '/':
            temp = number();
 
            if (temp == 0.0)
            {
                std::cout << "Деление на нуль!" << std::endl;
                exit(-1);
            }
 
            result /= temp;
            break;
        default:
            std::cin.putback(operation);
            return result;
        }
    }
}
 
double number()
{
    double result = 0.0;
    char digit;
    double k = 10.0;
    int sign = 1;
 
    digit = std::cin.get();
    
    while (digit == ' ')
        digit = std::cin.get();
 
    switch (digit)
    {
    case '-':
        sign = -1;
        break;
    default:
        if (digit != '+')
            std::cin.putback(digit);
 
        break;
    }
 
    while (true)
    {
        digit = std::cin.get();
 
        while (digit == ' ')
            digit = std::cin.get();
 
        if (digit >= '0' && digit <= '9')
            result = result * 10.0 + (digit - '0');
        else
        {
            std::cin.putback(digit);
            break;
        }
    }
 
    digit = std::cin.get();
 
    if (digit == '.')
    {
        while (true)
        {
            digit = std::cin.get();
 
            while (digit == ' ')
                digit = std::cin.get();
 
            if (digit >= '0' && digit <= '9')
            {
                result += (digit - '0') / k;
                k *= 10.0;
            }
            else
            {
                std::cin.putback(digit);
                break;
            }
        }
    }
    else
        std::cin.putback(digit);
 
    digit = std::cin.get();
 
    while (digit == ' ')
        digit = std::cin.get();
 
    std::cin.putback(digit);
 
    return sign * result;
}
 
Текущее время: 12:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru