Форум программистов, компьютерный форум, киберфорум
Наши страницы

Строковое выражение! - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Де Морган http://www.cyberforum.ru/cpp-beginners/thread281709.html
Вообщем в универе курсач - так как из универа я все равно ухожу - то мне просто интересно написать эту программу. Жутко застопорился на раскрытии отрицания перед скобками по Де Моргану. !(x & y)...
C++ Шифрование Эль Гамаля Может кто нибудь помочь, я плохо разбираюсь в коде, моей знакомой надо код шифрование, чтоб по предмету получить оценку, методом одиночной перестановки Эль гамаля, у меня есть прога, но она сильно... http://www.cyberforum.ru/cpp-beginners/thread281708.html
Решение нелинейного уравнения. Метод хорд и касательных C++
Написал я программку для решения, но вот незадача: Не находит их на некоторых отрезках. Уравнение: ln(x+1)-p/(x^2)=0 p = -1...1 (т.е. 20 уравнений) Вот класс, реализующий это решение: typedef...
C++ Узнать количество динамической памяти
Здравствуйте. Препод задал задание на работу с динамической памятью. Саму работу сделал, но теперь вопрос - необходимо узнать сколько доступно программе динамической памяти до обработки и после....
C++ Не могу найти ошибку.Наследование http://www.cyberforum.ru/cpp-beginners/thread281652.html
Есть код,не компилиться,выдает ошибку,код такой /*13. Задание 1. Создать класс Function с методом вычисления значения функции y=f(x) в заданной точке. 2. Создать производные классы: Line...
C++ как убрать лишний пробел при выводе дня в дате #include <vcl.h> #include <stdio.h> #include <string.h> #pragma hdrstop #pragma argsused #include <iostream.h> #include <iomanip.h> const int m=20; struct date {unsigned int day, подробнее

Показать сообщение отдельно
Liv-pooL
1 / 1 / 0
Регистрация: 17.04.2011
Сообщений: 142

Строковое выражение! - C++

23.04.2011, 00:39. Просмотров 335. Ответов 0
Метки (Все метки)

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
#include <stdio.h>
#include <math.h>
#include <iostream>
using namespace std;
 
char stack_z[10];
double stack_c[10];
int tos_z=0;
int tos_c=0;
char   number[11];  
 
void push_z (char a)
{
    stack_z[tos_z]=a;
    tos_z++;
}
 
void push_c (double a)
{
    stack_c[tos_c]=a;
    tos_c++;
}
 
char pop_z ()
{
    tos_z--; 
    return stack_z[tos_z];
}
 
double pop_c ()
{
    tos_c--; 
    return stack_c[tos_c];
}
 
void do_op (); 
 
int main()      
{
    FILE *in; 
    in=fopen("expr_valin.txt", "r");
    char ch;
    int t=0, i=0; 
    double count;
i=0;
while((ch=getc(in)) != '=')
{
top_of_switch: 
 switch(ch) 
 {
    case '(': 
        {push_c(ch); continue;}    /* при любом содержимом вершины стека */
    case ')': 
        { 
            if(stack_z[tos_z-1]=='(')
            {
                pop_z(); goto top_of_switch;
            }
            else /* любой оператор */
            {do_op(); continue;}
        }
 
    case '+': case '-':
      switch(stack_z[tos_z-1]) 
      {
      case '\0': case '(': push_z(ch); continue;
      case '+'   : case '-': do_op(); push_z(ch); continue;
      default    :  do_op(); goto top_of_switch; /* операторы '*', '/' */
      }
 
      case '/':
      switch(stack_z[tos_z-1]) 
      {
      case '*': {do_op(); push_z(ch); continue;}
      case '/': {do_op(); goto top_of_switch;}
      default : {push_z(ch); continue;} /* пустой стек, '(' и операторы '+', '-' */
      }
    case '*':
      switch(stack_z[tos_z-1]) 
      {
      case '*': {do_op(); push_z(ch); continue;}
      case '/': {do_op(); push_z(ch); goto top_of_switch;}
      default : {push_z(ch); continue;} /* пустой стек, '(' и операторы '+', '-' */
      }
 
    case '^': push_z(ch); continue;/* при любом содержимом вершины стека */
    default :/* если цифровой символ, то считываем  число и заносим в стек */
      i = 0;
      do number[i++] = ch; while(isdigit(ch=getc(in)));
      number[i] = '\0';  ungetc(ch,in);
      push_c(atof(number)); 
      i++;
    }
    }
    fcloseall();
    while(tos_z!=0)
    {
        do_op();
    }
 
 
    cout<<"Vichisleno!\n";
    for (int j=0;j<3;j++)
    {
        count=stack_c[j];
        cout<<count<<" ";
    }
    cout<<endl;
    char c;
    for ( j=0;j<10;j++)
    {
        c=stack_z[j];
        cout<<c<<" ";
    }
    cout<<endl;
    return 0;
}
 
void do_op ()
{
    double op1=pop_c();
    double op2=pop_c();
    char znak=pop_z();
    double res;
    switch (znak)
    {
    case '+': res=op1+op2; break;
    case '-': res=op2-op1; break;
    case '*': res=op1*op2; break;
    case '/': res=op2/op1; 
    }
    cout<<res<<endl;
 
    push_c(res);
}
Когда скобки вначале ставлю, работает, В середине-не правильно считает.
Помогите разобраться почему!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru