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

Написать программу,которая вычисляет значение арифметического выражения записанного в постфиксной форме,с помощью стека - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.68
anya1433
0 / 0 / 0
Регистрация: 20.01.2010
Сообщений: 49
18.05.2011, 20:55     Написать программу,которая вычисляет значение арифметического выражения записанного в постфиксной форме,с помощью стека #1
Написать программу,которая вычисляет значение арифметического выражения записанного в постфиксной форме,с помощью стека.Выражение правильное,допускаеются только однозначные числа и знаки +,-,*,/.
На С++
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2011, 20:55     Написать программу,которая вычисляет значение арифметического выражения записанного в постфиксной форме,с помощью стека
Посмотрите здесь:

Вычисление выражения, записанного в постфиксной форме C++
C++ Написать программу, которая вычисляет значение выражения, и определить ее значение для введенных пользователем значений фактических параметров.
организовать функцию для вычисления арифметического выражения записанного в постфиксной форме C++
C++ организовать функцию для вычисления арифметического выражения записанного в постфиксной форме
Вычисление выражения записанного в постфиксной форме C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
magirus
18.05.2011, 21:22
  #2
 Комментарий модератора 
прошу называть темы максимально информативно
ValeryLaptev
Эксперт C++
1004 / 783 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
18.05.2011, 21:23     Написать программу,которая вычисляет значение арифметического выражения записанного в постфиксной форме,с помощью стека #3
А что такое постфиксная форма знаешь?
AC-93
13 / 13 / 0
Регистрация: 27.01.2010
Сообщений: 150
18.05.2011, 21:24     Написать программу,которая вычисляет значение арифметического выражения записанного в постфиксной форме,с помощью стека #4
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
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <locale.h>
#define MAX 100
#define MAX_INT 2000000
 
double get_doub(double numb, int *ok)
{
    char c;
    int rank = 0;
    while(isdigit(c = getchar()))
        numb = numb*10 + c-'0';
    if (c == '.')
        while(isdigit(c = getchar()))
        {
            rank++;
            numb = numb + (c-'0')/pow(10, rank);
        }
        if (c == '\n')
            *ok = 0;
        return numb;
}
 
double post(int *ok2)
{
    char c = 'a';
    int i = -1, j = 0;
    double stack[MAX] = {0};
    stack[0] = -(MAX_INT);
    
    c = getchar();
    while ((c != '\n') && (i < 1000))
    {
        if (isdigit(c))
        {
            int ok = 1;
            i++;
            *ok2 = 1;
            stack[i] = c-'0';
            stack[i] = get_doub(stack[i],&ok);
            if (ok == 0 && i != 0) 
            {
                *ok2 = ok;
                return stack[0];
            }
            else 
                if (ok == 0)
                {
                    return stack[0];
                }
        }
        else 
            if (i >= 1)
            {
                *ok2 = 1;
                i--;
                switch (c){
                case '+':
                    stack[i]+= stack[i+1];
                break;
                case '-':
                    stack[i]-= stack[i+1];
                break;
                case '*':
                    stack[i]*= stack[i+1];
                break;
                case ' ':
                    i++;
                break;
                case '/':
                    if (stack[i+1] == 0)
                    {
                        *ok2 = 0;
                        return stack [i];
                    }
                    else
                        stack[i]/= stack[i+1];
                break;
                default:
                    {   
                        *ok2 = 0;
                        return stack[0];
                    }
                }
            }
            else 
            {   
                *ok2 = 0;
                return stack[0];
            }
 
        c = getchar();
    }
    return stack[0];
}
 
int main()
{
    double numb = 1;
    int ok = 0 ;
    setlocale(LC_ALL, "Russian");
    numb = post(&ok);
    if (numb != -(MAX_INT))
    printf("%f \n ",numb);
    if (ok == 0)
        printf("Исходная строка содержала ошибку\n");
    return 0;
}
только тут норм программа, с поддержкой неправильных вводов и десятичных дробей, но думаю догадаешься как убить.
anya1433
0 / 0 / 0
Регистрация: 20.01.2010
Сообщений: 49
18.05.2011, 21:28  [ТС]     Написать программу,которая вычисляет значение арифметического выражения записанного в постфиксной форме,с помощью стека #5
Что это за функция isdigit?
AC-93
13 / 13 / 0
Регистрация: 27.01.2010
Сообщений: 150
18.05.2011, 21:30     Написать программу,которая вычисляет значение арифметического выражения записанного в постфиксной форме,с помощью стека #6
проверка яв-ся ли данный чар цифрой
Yandex
Объявления
18.05.2011, 21:30     Написать программу,которая вычисляет значение арифметического выражения записанного в постфиксной форме,с помощью стека
Ответ Создать тему
Опции темы

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