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

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

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

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

19.04.2011, 22:20. Просмотров 820. Ответов 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++
Работа с рядами(массива букв) Задание №1 1.Напечатать начальный ряд. 2.Напечатать букву , которая должно быть удалена из ряда(буква...

СРОЧНО - C++
Надо написать программу на C++

на экзаменене срочно - C++
програма котора я определяет суммму элементов расположеных между максимальным и минмальным элементом заданой целочисленной послед. или...

срочно!задаchи! - C++
помогите кто-нибудь с задачками,срочно нужно! Задание 2. Написать программу, которая вводит с клавиатуры два символа, являющихся...

Срочно....Турбо С - C++
Помогите пожалуйста... Турбо СИ cos(x)+2 cos(cos(x))+3 cos(cos(cos(x)))+...+n cos(cos(...cos(x)...)) я не пойму как...

Циклы - срочно - C++
Пишу в Borland C++. Ежемесячная стипендия студента составляет А р., а расходы на проживание превышают стипендию и составляют В р. в месяц....

срочно экзамен... - C++
1. Сумма цифр трехзначного числа кратна 7, само число также делится на 7. Найти все такие числа. 2. Создать двумерный массив (5х5)...

массивы срочно - C++
дан одномерный массив, состоящий из N веществ. элементов . заполнить массив случайными числами. найти минимум отрицательных...

2 последовательности (срочно) - C++
1)дана последовательность из 2n символов. Выяснить в какой половине в первой или во второй больше вопросительных знаков. (не исключается...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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