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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Liv-pooL
1 / 1 / 0
Регистрация: 17.04.2011
Сообщений: 142
#1

Срочно! Алгоритм Бауэра Замельзона! - C++

19.04.2011, 22:20. Просмотров 822. Ответов 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
#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, d[80]={0};
    int t=0, i=0; 
    double count;
    while((ch=getc(in)) != '=')  /*Строку из файла в массив*/
    {
        d[i]=ch;
        ++i;
    }
i=0;
while(d[i]!=0)  /*Сам алгоритм*/
{
top_of_switch: 
switch(d[i]) 
    {
    
    case '(': 
        {push_c(d[i]); continue;}    
    case ')': 
        { 
            if(stack_z[tos_z-1]=='(')
            {
                pop_z(); continue; 
            }
            else 
            { 
                do_op(); 
                goto top_of_switch; 
            }   
        }
 
    case '+': case '-':
      switch(stack_z[tos_z-1]) 
      {
      case '\0': case '(': push_z(d[i]); continue;
      case '+'   : case '-': do_op(); push_z(d[i]); continue;
      default    :  do_op(); goto top_of_switch;
      }
 
    case '*':
      switch(stack_z[tos_z-1]) 
      {
      case '*': {do_op(); push_z(d[i]); continue;}
      case '^': {do_op(); goto top_of_switch; continue;}
      default : {push_z(d[i]); continue;} 
      }
 
    case '^': push_z(d[i]); continue;
    default :
      t = 0;
      do {number[t++] = d[i]; i++;} while (isdigit(d[i]));
      number[t] = '\0';  ungetc(ch,in);
      push_c(atof(number)); 
      i++;
    }
    }
    fcloseall();
    cout<<"Vichisleno!\n";
    for (int j=0;j<3;j++)
    {
        count=stack_c[j];
        cout<<count<<" ";
    }
    cout<<endl;
    char c;
    for ( j=0;j<3;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=op1-op2; break;
    case '*': res=op1*op2; break;
    case '^': res=pow(op1,op2);
    }
    cout<<res<<endl;
    push_c(res);
}
Не работает, не могу найти ошибку, а срочно нужно. Помогите найти где перемудрил((((
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2011, 22:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Срочно! Алгоритм Бауэра Замельзона! (C++):

Алгоритм Бауэра Замельзона - C++
Ребята, у кого-нибудь есть Алгоритм Бауэра Замельзона реальзованый на с++? Нужен срочно(

Нужен алгоритм поиска пути в этом лабиринте (будь то волновой алгоритм или алгоритм правой/левой руки ) - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; void lab () { int s1 = 0; int s2 =...

Волновой алгоритм поиска (Алгоритм A* / Алгоритм А стар) - C++
Хочу разработать алгоритм для решения головоломки с подвижными дисками (перестановочная головоломка). Определение. Перестано́вочные...

Вычислить выражение, используя Алгоритм Бауэра и Замельзона - Visual Basic .NET
помогите написать программу, которая принимает строку - арифметическое выражение и вычисляет его результат по алгоритму Бауэра и...

Разработать алгоритм вычисления сумм ряда, очень срочно - Pascal
Здравствуйте. Мне через 2 часа сдавать, а я не знаю, что делать :( Задание: 1. Разработать алгоритм вычисления частичных сумм ряда...

Алгоритм решения уравнения методом прогонки для 3х многого случая.СРОЧНО! - Физика
СРОЧНО!!! Помогите пожалуйста кто сможет))) Дано дифференциальное уравнение, которое описываете распределение радона в пористой среде...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2011, 22:20
Привет! Вот еще темы с ответами:

Помогите срочно срочно. Вирус блокирует все программы. - Удаление вирусов
Всем привет. пожалуйста помоги срочно надо. поймал вирус, блокирует почти все программы, антивирус в том числе. сижу с безопасного режима....

Линейный алгоритм, Алгоритм с ветвлениями, Циклический алгоритм Линейный алгоритм - Pascal
Линейный алгоритм, Алгоритм с ветвлениями, Циклический алгоритм Линейный алгоритм 1. Объясни, что будет напечатано программой Program...

Построить алгоритм Маркова, который ищет НОД (Алгоритм Евклида) - Алгоритмы
Здравствуйте, ребята, выручайте. Весь инет перерыл, всю голову сломал, но не могу сделать. Суть в чем, надо построить алгорифм Маркова,...

Построить алгоритм ДО и алгоритм ПОКА для вычислений значения функции на отрезке [a,b] с шагом h. - Free Pascal
Построить алгоритм ДО и алгоритм ПОКА для вычислений значения функции на отрезке с шагом h. Написать программу: F=3+tgx Мой...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru