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

Вычислить значение выражения, используя стек операндов - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Зацикливание программы при вводе http://www.cyberforum.ru/cpp-beginners/thread855856.html
Добрый день. У меня почему то происходит зацикливание программы при вводе строки с пробелами. Есть структураstruct sklad { char nazva; int kilkist; float vaga; int sort; float tsina; char otrymuvach;
C++ Передача в функцию вот есть такие строки кода: typedef vector< vector<char> > string_sound; void sound_func(string_sound &text_sound, int sum_words) { conson = consonants(text_sound, text_sound); } int consonants(char symb_2, char symb_3){ //функция проверки на открытость слога http://www.cyberforum.ru/cpp-beginners/thread855822.html
Появляющиеся нули при переводе из массива char в double C++
Здравствуйте! Пишу калькулятор и описываю кнопку "+/-". a=atof(nBuf); a=a*(-1); sprintf (nBuf, "%f", a); nBuf - массив char, в котором записано число. a - переменная типа double. Вообще массив nBuf размером 10, поэтому фактически, имея в нем всего 1 цифру (например 4), при переводе с помощью функции atof переменная a получает число 4.000000000. А уже sprintf сокращает число незначащих...
C++ Дана целочисленная квадратная матрица. Определить: 1. сумму элементов в тех столбцах, которые не содержат отрицательных элементов;=
Дана целочисленная квадратная матрица. Определить: 1. сумму элементов в тех столбцах, которые не содержат отрицательных элементов; 2. минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы. #include <iostream> #include <clocale> #include <iomanip> using namespace std;
C++ Начало работы со встроенным ассемблером http://www.cyberforum.ru/cpp-beginners/thread855761.html
Помогите, кто знает как с этим работать Проходим в универе встроенные в с++ ассемблер, накидал простейшую программку(ввод строки символов с клавиатуры и её же вывод на экран) Собственно код: #include <iostream> using namespace std; int main() { _asm { .data
C++ Многочлен от одной переменной Описать класс многочленов от одной переменной, задаваемых степенью многочлена и массивом коэффициентов. Обеспечить следующие возможности: • вычисление значения многочлена для заданного аргумента; • операции сложения, вычитания и умножения многочленов с получением нового объекта-многочлена; • получение коэффициента, заданного по индексу; • вывод на экран описания многочлена. Написать... подробнее

Показать сообщение отдельно
Bulding
0 / 0 / 0
Регистрация: 13.12.2012
Сообщений: 47
04.05.2013, 18:23  [ТС]     Вычислить значение выражения, используя стек операндов
Здравствуйте. Помогите с прогой пожалуйста.

Дано арифметическое выражение длиной до 30 символов, заканчивающееся знаком равенства. Выражение содержит знаки операции +, -, *, / и однозначные целые числа и представлено в обратной польской записи. Вычислить значение выражения, используя стек операндов. Язык программирования С++. Помогите пожалуйста

Пример: 345+2*63/-+ = 19

Прогу сделал, но почему-то выводит не тот результат.

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
#include <stdio.h>
#include <iostream>
using namespace std;
 
int Chislo ( char text [], int *i )
{
    int c = 0;
    while ( text [*i] >= '0' && text [*i] <= '9' )
    {
        c = c * 10 + ( text [*i] - '0' );
        (*i)++;
    }
    return c;
}
 
int main()
{
    char text [80];
    int i;
    float opd [3];
    char opc [3];
    int pr [3];
    int j = -1;
    cout << "Vvedite verazenie: ";
    gets ( text );
    i = -1;
    do
    {
        i++;
        opd [++j] = Chislo ( text, &i );
        opc [j] = text [i];
        switch ( text [i] )
        {
            case '+':
            case '-': pr [j] = 1; break;
            case '*':
            case '/': pr [j] = 2; break;
            case ' ': pr [j] = 0;
        }
        while ( j > 0 && pr [j] <= pr [j-1])
        {
            switch ( opc [j-1])
            {
                case '+': opd [j-1] = opd [j-1] + opd [j]; break;
                case '-': opd [j-1] = opd [j-1] + opd [j]; break;
                case '*': opd [j-1] = opd [j-1] + opd [j]; break;
                case '/': opd [j-1] = opd [j-1] / opd [j];
            }
            opd [j-1] = opc [j];
            pr [j-1] = pr [j];
            j = j-1;
        }
    }
    while ( text [i] != ' ');
    cout << "Rezultat: " << opd [0] << endl;
 
    system ( "pause" );
    return 0;
}
 
Текущее время: 03:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru