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

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

18.05.2011, 20:55. Показов 8922. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написать программу,которая вычисляет значение арифметического выражения записанного в постфиксной форме,с помощью стека.Выражение правильное,допускаеются только однозначные числа и знаки +,-,*,/.
На С++
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.05.2011, 20:55
Ответы с готовыми решениями:

Программа, которая вычисляет значения арифметического выражения, записанного в постфиксной форме, с помощью стека
Составить программу,которая вычисляет значения арифметического выражения, записанного в постфиксной...

Напишите программу, которая вычисляет значение арифметического выражения, записанного в постфиксной форме
Напишите программу, которая вычисляет значение арифметического выражения, записанного в постфиксной...

Рекурсия: вычисление значения арифметического выражения, записанного в постфиксной форме
Разработайте рекурсивную функцию или процедуру для решения задачи. Составьте функцию,...

организовать функцию для вычисления арифметического выражения записанного в постфиксной форме
Нужна программа: Организовать функцию для вычисления арифметического выражения записанного в...

5
magirus
18.05.2011, 21:22
  #2
 Комментарий модератора 
прошу называть темы максимально информативно
0
Эксперт С++
1067 / 846 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
18.05.2011, 21:23 3
А что такое постфиксная форма знаешь?
0
18 / 18 / 1
Регистрация: 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;
}
только тут норм программа, с поддержкой неправильных вводов и десятичных дробей, но думаю догадаешься как убить.
1
0 / 0 / 0
Регистрация: 20.01.2010
Сообщений: 49
18.05.2011, 21:28  [ТС] 5
Что это за функция isdigit?
0
18 / 18 / 1
Регистрация: 27.01.2010
Сообщений: 150
18.05.2011, 21:30 6
проверка яв-ся ли данный чар цифрой
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.05.2011, 21:30
Помогаю со студенческими работами здесь

Организовать функцию для вычисления арифметического выражения записанного в постфиксной форме
Нужна программа: Организовать функцию для вычисления арифметического выражения записанного в...

Вычисление арифметического выражения в постфиксной форме с использованием стека
Помогите найти ошибку в функции. Шлет в стек мусор при выполнении знаковых операций и ничего не...

Вычислить значение выражения, записанного в постфиксной форме
Напишите программу, которая вычисляет значение арифметического выражения, записанного в постфиксной...

Напишите программу вычисления выражения, записанного в постфиксной форме
напишите программу вычисления, записанного в постфиксной форме ( требуется писать через рекурсию )


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

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

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