Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
arsen___
1 / 1 / 0
Регистрация: 19.07.2013
Сообщений: 36
#1

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

19.10.2013, 11:56. Просмотров 223. Ответов 5
Метки нет (Все метки)

Вот программа, которая решает арифмитические вырожения.

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;
}

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

Вот видеоурок по этому коду, но там всеравно не все понятно:
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.10.2013, 11:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разбор арифмитических вырожений (C++):

Нужен алгоритм написания функции подсчета вырожений - C++
int count(char* b) { int c=0; int words=1;// Первый пробел отделит первое слово от второго. while(b!='\0'){ ...

С++ класс (создайте класс с именем Complex для выполнения в арифмитических операий с комплексными числами)) - C++
Кто сможет помогите пожалуйста! (Класс Complex). Создайте класс с именем Complex для выполнения в арифмитических операий с...

разбор программы - C++
Друг написал прогу, но комментарии к ней не сделал, поэтому не понятно. Помогите разобраться с программой. Вот условие: Создать класс...

Разбор строки - C++
Помогите разобрать вот такие строки: 2011/07/01 22:08:29 1 104725943 127.0.0.1 a4c58fa5aa21a67deceaa8420802346e aaaaaa bbbbbb ...

Разбор OpenSource - C++
Есть опенсоурс сайт sourceforge.net, на котором много готовых и не очень проектов на С++. Многие из них собраны и зачастую состоят из...

Разбор кода - C++
Есть такой код. #include&lt;vcl.h&gt; #pragma hdrstop #pragma argsused #include &lt;dos.h&gt; #include &lt;stdio.h&gt; #include &lt;windows.h&gt; ...

5
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
19.10.2013, 14:20 #2
Цитата Сообщение от arsen___ Посмотреть сообщение
Можете пожалуйста раскомментировать ее строки?
Увы, вынужден Вас огорчить, но в данном листинге нет ни одного комментария
0
arsen___
1 / 1 / 0
Регистрация: 19.07.2013
Сообщений: 36
19.10.2013, 19:03  [ТС] #3
и как можно понять логику алгоритма?
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.10.2013, 19:09 #4
Цитата Сообщение от arsen___ Посмотреть сообщение
и как можно понять логику алгоритма?
реализовать его самому, пройтись отладчиком
0
arsen___
1 / 1 / 0
Регистрация: 19.07.2013
Сообщений: 36
19.10.2013, 23:29  [ТС] #5
И час то вы таким методом разбераете алгоритмы?
0
iRomul
159 / 100 / 11
Регистрация: 17.10.2012
Сообщений: 480
Завершенные тесты: 1
19.10.2013, 23:44 #6
arsen___, а как иначе?
0
19.10.2013, 23:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.10.2013, 23:44
Привет! Вот еще темы с ответами:

Разбор кода - C++
Нужно разобрать код. не могу понять что тут выполняется, кроме открытия файлов #include &lt;iostream&gt; #include &lt;fstream&gt; ...

Разбор ошибок - C++
Задача - Для целочисленной квадратной матрицы найти число элементов , кратных К и наибольший элемент из найденных кратных числу К...

Разбор кода - C++
Здравствуйте! Подскажите, пожалуйста, что обозначает вот это Utf8_16::utf8 Utf8_16::k_Boms зачем тут нужны двоеточия :) const...

Разбор задания - C++
Добрый вечер уважаемые эксперты! Есть следующее задание: составить двусвязный список объектов класса описывающего студента (Ф.И.О. номер...


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

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

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