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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Де Морган http://www.cyberforum.ru/cpp-beginners/thread281709.html
Вообщем в универе курсач - так как из универа я все равно ухожу - то мне просто интересно написать эту программу. Жутко застопорился на раскрытии отрицания перед скобками по Де Моргану. !(x & y) <=> !x | !y !(x | y) <=> !x & !y Вложенность может быть большая. Со скобками в результате не уверен. Первым открывается самое вложенное отрицание перед скобками... Пытался делать итеративно -...
C++ Шифрование Эль Гамаля Может кто нибудь помочь, я плохо разбираюсь в коде, моей знакомой надо код шифрование, чтоб по предмету получить оценку, методом одиночной перестановки Эль гамаля, у меня есть прога, но она сильно замудрена, её не правильно поймут просто, если надо могу скинуть, просто я не знаю что да и как там, сделать чтобы этот код был по проше, может кто нибудь помочь, буду презнателен очень http://www.cyberforum.ru/cpp-beginners/thread281708.html
Решение нелинейного уравнения. Метод хорд и касательных C++
Написал я программку для решения, но вот незадача: Не находит их на некоторых отрезках. Уравнение: ln(x+1)-p/(x^2)=0 p = -1...1 (т.е. 20 уравнений) Вот класс, реализующий это решение: typedef double(*foo)(double,double); typedef struct _item {
C++ Узнать количество динамической памяти
Здравствуйте. Препод задал задание на работу с динамической памятью. Саму работу сделал, но теперь вопрос - необходимо узнать сколько доступно программе динамической памяти до обработки и после. Можно ли это сделать в с++? На паскале, помнится, была переменная memavail
C++ Не могу найти ошибку.Наследование http://www.cyberforum.ru/cpp-beginners/thread281652.html
Есть код,не компилиться,выдает ошибку,код такой /*13. Задание 1. Создать класс Function с методом вычисления значения функции y=f(x) в заданной точке. 2. Создать производные классы: Line (y=ax+b), Kub (y=ax2+bx+c), Hyperbola ( y=a/x+b ) со своими методами вычисления значения в заданной точке. 3. Создать массив n функций и вывести полную информацию о значении данных функций в точке х. */
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
23.04.2011, 00:39     Строковое выражение!
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);
}
Когда скобки вначале ставлю, работает, В середине-не правильно считает.
Помогите разобраться почему!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru