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

Разбор арифмитических вырожений - C++

Восстановить пароль Регистрация
 
arsen___
1 / 1 / 0
Регистрация: 19.07.2013
Сообщений: 36
19.10.2013, 11:56     Разбор арифмитических вырожений #1
Вот программа, которая решает арифмитические вырожения.

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
136
137
138
139
140
141
142
143
144
145
146
147
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
 
 
float number()
{
  int res = 0;
  for (;;)
  {
    char c = cin.get();
    if (c >= '0' && c <= '9')
      res = res * 10 + c - '0';
    else
    {
      cin.putback(c);
      break;
    }
  }
  return res;
}
 
 
float expr();
 
 
float func()
{
  struct FuncList
  {
    const char *n;
    float (*f)(float);
  }; 
  const FuncList funcList[] = {
    { "cos", cos },
    { "sin", sin },
    { "tan", tan },
    { "acos", acos },
    { "asin", asin },
    { "atan", atan },
    { "cosh", cosh },
    { "sinh", sinh },
    { "tanh", tanh },
    { "exp", exp },
    { "log", log },
    { "sqrt", sqrt },
    { "ceil", ceil },
    { "fabs", fabs },
    { "floor", floor },
    { 0, 0 }
  };
  float res;
  string name;
  for (;;)
  {
    char c = cin.get();
    if (c >= 'a' && c <= 'z')
      name += c;
    else
    {
      cin.putback(c);
      break;
    }
  }
  res = expr();
  for (const FuncList *i = funcList; i -> n != 0; ++i)
  {
    if (i -> n == name)
      return i -> f(res);
  }
  cerr << "Неизвестная функция: " << name << endl;
  return res;
}
 
 
float hiLevel()
{
  float x;
  char c = cin.get();
  if (c == '(')
  {
    x = expr();
    cin.get();
  }
  else
  {
    cin.putback(c);
    if (isdigit(c))
      x = number();
    else
      x = func();
  }
  return x;
}
 
 
float factor()
{
  float x = hiLevel();
  while (true)
  {
    char c = cin.get();
    switch (c)
    {
    case '*':
      x *= hiLevel();
      break;
    case '/':
      x /= factor();
      break;
    default:
      cin.putback(c);
      return x;
    }
  }
}
 
 
float expr()
{
  float x = factor();
  while (true)
  {
    char c = cin.get();
    switch (c)
    {
    case '+':
      x += factor();
      break;
    case '-':
      x -= factor();
      break;
    default:
      cin.putback(c);
      return x;
    }
  }
}
 
 
int main()
{
  cout << "Введите выражение: ";
  float r = expr();
  cout << "Результат: " << r << endl;
}

Можете пожалуйста раскомментировать ее строки?
Или объяснить логику, что для чего ...

Вот видеоурок по этому коду, но там всеравно не все понятно:
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.10.2013, 11:56     Разбор арифмитических вырожений
Посмотрите здесь:

C++ Нужен алгоритм написания функции подсчета вырожений
Разбор кода C++
C++ Разбор строки
C++ Разбор кода
разбор среды C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
19.10.2013, 14:20     Разбор арифмитических вырожений #2
Цитата Сообщение от arsen___ Посмотреть сообщение
Можете пожалуйста раскомментировать ее строки?
Увы, вынужден Вас огорчить, но в данном листинге нет ни одного комментария
arsen___
1 / 1 / 0
Регистрация: 19.07.2013
Сообщений: 36
19.10.2013, 19:03  [ТС]     Разбор арифмитических вырожений #3
и как можно понять логику алгоритма?
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.10.2013, 19:09     Разбор арифмитических вырожений #4
Цитата Сообщение от arsen___ Посмотреть сообщение
и как можно понять логику алгоритма?
реализовать его самому, пройтись отладчиком
arsen___
1 / 1 / 0
Регистрация: 19.07.2013
Сообщений: 36
19.10.2013, 23:29  [ТС]     Разбор арифмитических вырожений #5
И час то вы таким методом разбераете алгоритмы?
iRomul
 Аватар для iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 474
Завершенные тесты: 1
19.10.2013, 23:44     Разбор арифмитических вырожений #6
arsen___, а как иначе?
Yandex
Объявления
19.10.2013, 23:44     Разбор арифмитических вырожений
Ответ Создать тему
Опции темы

Текущее время: 10:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru