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

Непонятно - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Большие числа. http://www.cyberforum.ru/cpp-beginners/thread208858.html
Здравствуйте. Помогите найти оптимальный алгоритм решения задачи. Известно, что число 123^137 при делении на m = 1395667104275780136328137029621666356023102373828208614259008333518048661758896451829091736021396841, дает в остатке 948246464846080658559020072780751602760246005936374576753853072533734283521476558512528028591507652. Написать программу, которая находит целое число x такое, что...
C++ не получается! никак не могу правильно сосотавить решение задачи: ввести с клавиатры вещественное число Х .Вычислить y=lg(x2+3)/arccos0.1x http://www.cyberforum.ru/cpp-beginners/thread208853.html
C++ тип переменной
Подскажите пожалуйста, можно ли в С++ задать тип переменной, ограничивающий значение дробного числа, по своему усмотрению (например 17 знаков после запятой) ?:)
транспонирования C++
Составить подпрограмму – функцию для транспонирования квадратной матрицы A(n*n) и использовать ее для транспонирования матриц С(2*2) и D(5*5). Операция транспонирования заключается в замене i – тых строк матрицы i – ми столбцами этой же матрицы (i=1, ….., n)
C++ Последняя лаба для допуска к Экзамену http://www.cyberforum.ru/cpp-beginners/thread208845.html
Реалізувати структуру, що містить інформацію: факультет, група, кількість студентів, кількість студентів в групі, що отримають стипендію, середній бал успішності по групі, прізвище старости. Виконати операції: - додавання елементу; - видалення елементу; - пошук елементів по введеному параметру (факультет, група); - виведення всього списку груп; - підрахунок загальної кількості студентів...
C++ Чтение массива из файла Здравствуйте, господа. Заранее извиняюсь за то, что задаю, скорее всего, не самый умный вопрос на этом форуме и за то, что такая тема уже, возможно, тут когда-либо присутствовала, однако стоит отметить, что поиском я пользоваться всё же пытался. Если у вас есть время прочитать о том, что у меня не получается сделать, буду очень признателен. Мне необходимо сделать две функции - записи... подробнее

Показать сообщение отдельно
vx5
 Аватар для vx5
187 / 171 / 4
Регистрация: 04.09.2010
Сообщений: 656
12.12.2010, 20:28     Непонятно
Есть простая програмка, решающая логические уравнения. Все решает замечательно, но при вводе короткого уравнения a|b по непонятной причине ждет продолжения ввода, при вводе аналогичного уравнения с другим оператором a&b все проходит замечательно - получаем ответ.

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 <iostream>
#include <vector>
#include <string>
using namespace std;
 
struct token
{
  char variable;
  bool value;
};
 
bool calc(vector<token>& var);
 
void error(string err_msg)
{
  cout << "Error: " << err_msg << endl;
}
 
int set_var(vector<token>& var)
{
  char ch=' ';
  while (true)
    {
      cin >> ch;
      if (ch==';') break;
      for (int i=0;i<var.size();i++) 
    if(var[i].variable==ch) 
      {
        error("This variable is already in use!"); 
        return var.size();
      }
      if((int(ch)>=65 && int(ch)<=90)||(int(ch)>=97 && int(ch)<=122)) 
    {
      char tmp=' ';
      bool val=false;
      cin >> tmp;
      if (tmp!='=') {error("'=' require!");break;}
      cin >> tmp;
      if(tmp!='0' && tmp!='1') 
        {
          error("Unknown value! Use 0 and 1!");
          break;
        }
      val=int(tmp)-48;//48-код нуля, 49 единицы
      token tok;
      tok.variable=ch;
      tok.value=val;
      var.push_back(tok);
    }
      else {error("Bad syntax!");break;}
    }
  return var.size();
}
 
bool primary(vector<token>& var)
{
  char ch;
  cin >> ch;
  switch(ch)
    {
    case '(': 
      {
    double tmp_val; 
    tmp_val=calc(var); 
    char tmp_ch; 
    if (tmp_ch!=')') 
      error("Missing ')'!");
    return tmp_val;
      }
    case '!': 
      {
    double tmp_val; 
    tmp_val=primary(var); 
    if(tmp_val) 
      tmp_val=false;
    else 
      tmp_val=true;
    return tmp_val;
      }
    default : 
      if((int(ch)>=65 && int(ch)<=90)||(int(ch)>=97 && int(ch)<=122))
    {
      for(int i=0;i<var.size();i++) 
        if(var[i].variable==ch) 
          return var[i].value;
    }
      error("primary(): Unknown variable!");
      
    }
}
 
bool calc(vector<token>& var)
{
  bool val1=primary(var);
  while(true)
    {
      char op;
      error("Zhdem op");
      cin >> op;
      switch(op)
    {
    case '&': 
      if(val1==true && primary(var)==true) val1=true; 
      else val1=false;
      error("v & ");
      break;
    case '|': 
      if(val1==true || primary(var)==true) val1=true; 
      else val1=false;
      error("v | ");
      break;
    default : 
      //error("calc(): Unknown operator!");
      cin.putback(op);
      error("v default ");
      return val1;
    }
    }
}
 
int main()
{
  cout << "Vvedite peremennie i ih znacheniia (naprimer a=0 b=1 c=0;)\n";
  vector<token> var;
  cout << set_var(var) << " peremennih zadano\n";
  //for (int i=0;i<var.size();i++) cout << var[i].variable << " = " << var[i].value << endl;
  char ch;
  cout << "Vvedite uravnenie\n";
  cout << "OTBET: " << calc(var) << endl;
}
Самое интересное, что если поменять условие в
C++
1
2
3
4
5
    case '|': 
      if(val1==true || primary(var)==true) val1=true; 
      else val1=false;
      error("v | ");
      break;
на
C++
1
2
3
4
5
    case '|': 
      if(val1==true && primary(var)==true) val1=true; 
      else val1=false;
      error("v | ");
      break;
все идет как должно быть и вода от меня не ожидается

Добавлено через 9 часов 58 минут
может кто объяснить такое поведение?

Добавлено через 7 часов 59 минут
помогите разобраться
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 21:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru