Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 24.12.2012
Сообщений: 6

Разбор числового выражения

11.01.2013, 19:24. Показов 1854. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
нужно преобразовать программу
Разбор числового выражения
например: (((1+2)+3)*10-(3-1))/10=
Если расстановка скобок верна, то выводить ответ, если нет-"ошибка"
Решить через рекурсию.
Подскажите как?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.01.2013, 19:24
Ответы с готовыми решениями:

Найти максимум числового выражения
Задано числовое выражение (sin1 + ... + sin(k)) * (sin(k+1) + ... + sin(n)) в двух скобках проставлены суммы синусов от чисел ...

Найти максимум числового выражения 2
ТС предлагает вам решить эту задачу. Она принесет вам счастье и радость грядущего лета... Введем обозначение. sin = s. Дано числовое...

Вычислить значение числового выражения
Нужна помощь! Вычислить значение числового выражения. C++ Выражение указано в изображении. Может кто с таким сталкивался? Я новичок((

5
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
12.01.2013, 04:31
для целочисленных выражений

А. перед открывающей скобкой могут быть:
А1. ещё одна открывающая скобка --> (
А2. обозначение одного из четырёх арифметических действий --> +, -, *, /
А3. мнимый символ начала строки (как частный и единственный случай) --> ^

Б. после открывающей скобки могут быть:
Б1. ещё одна открывающая скобка --> (
Б2. любая из десяти цифр --> \d
Б3. знак минуса перед отрицательным числом --> -

В. перед закрывающей скобкой могут быть:
В1. ещё одна закрывающая скобка --> )
В2. любая из десяти цифр --> \d

Г. после закрывающей скобки могут быть:
Г1. ещё одна закрывающая скобка --> )
Г2. обозначение одного из четырёх арифметических действий --> +, -, *, /
Г3. символ равенства (как частный и единственный случай) --> =

Д. число открывающих скобок должно быть равно числу закрывающих
-----

вызываете функцию, в которой сначала:
-- находите ближайшую к началу строки скобку (открывающую или закрывающую)
-- запоминаете её zero-index
-- для А-Г составляете шаблоны для регулярных выражений для предыдущего и последующего символов (одно, увы, не получится) и проверяете их методом test
-- параллельно подсчитываете количество скобок (пункт Д)

затем снова вызываете эту же функцию (это и есть "рекурсия"), где повторяете проделанное, но уже ищете следующую скобку, в подстроке, начинающейся с ранее определённого zero-индекса + 1

и так до момента, когда скобок в оставшейся подстроке уже не будет
-----

сами справитесь?
если не получится - сообщите, сделаю
0
0 / 0 / 0
Регистрация: 24.12.2012
Сообщений: 6
12.01.2013, 14:32  [ТС]
боюсь не справлюсь(((можете сам код написать?
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
12.01.2013, 20:36
поддерживаются выражения:
-- с целыми числами (типа 1, -58, 897)
-- с числами с десятичной дробной частью в полной алгебраической записи (типа 1.234, -17.08, 256.6)

не поддерживаются:
-- сокращённая компьютерная форма записи чисел, меньших единицы по модулю (типа .54 вместо 0.54 и -.85 вместо -0.85)
-- научная компьютерная форма записи (типа 1e3 вместо 1000 и -2.54e-2 вместо -0.0254)
-- излишний плюс перед положительными числами (типа +1.32 вместо 1.32)
HTML5
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
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<script>
do var str = prompt ('Ââåäèòå âûðàæåíèå', '');
while (
       str == null
    || str.length == 0
    || str.replace (/[\+\-\*\/\(\)\d\.\=]/g, '').length != 0
      )
 
function tstPar (index)
{
var opn = str.indexOf ('(', index),
    cls = str.indexOf (')', index);
if (opn == -1 && cls == -1) {vld = numOpn == numCls; return}
 
if (opn != -1 && opn < cls)
   {
   if (opn != 0 && !((/[\+\-\*\/\(]/  ).test (str.charAt (opn - 1)))) return;
               if (!((/[\-\(\d]/      ).test (str.charAt (opn + 1)))) return;
   frst = true; numOpn++; index = opn;
   }
else
   {
   if (cls != 0 && !((/[\)\d]/        ).test (str.charAt (cls - 1)))) return;
               if (!((/[\+\-\*\/\)\=]/).test (str.charAt (cls + 1)))) return;
   if (!frst) return;
   numCls++; index = cls;
   } 
tstPar (index + 1);
}
 
var numOpn = numCls = 0, vld = frst = false;
tstPar (0);
with (document)
   {
   open ();
   if (vld) write ('Âû÷èñëåíî: <font color="red">' + str + '</font><b>' + eval (str.slice (0, -1)) + '</b>');
   else write ('Â âûðàæåíèè <font color="red">' + str + '</font> èìååòñÿ <b>îøèáêà</b> â ðàññòàíîâêå ñêîáîê.');
   close ();
   }
</script>
<body>
</body>
</html>
-----------
модераторам: при редактировании использован тег [HTML] для вставки кода вместо [JS] по просьбе топикстартера в ЛС
0
5 / 5 / 0
Регистрация: 10.12.2012
Сообщений: 38
12.01.2013, 22:43
Не проходит выражение: 1-(123/12)-12*(12 +(2-8*(93-102)))=
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
13.01.2013, 05:02
Dof, пробелы недопустимы
а у вас один пробел имеется
Code
1
2
1-(123/12)-12*(12 +(2-8*(93-102)))= ваш вариант
1-(123/12)-12*(12+(2-8*(93-102)))= правильный вариант
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.01.2013, 05:02
Помогаю со студенческими работами здесь

Разбор выражения
Помогите понять как работает это регулярное выражение @&quot;(?x) ( &quot;&quot; (?&gt; (?&lt;=@.) (?&gt;+|&quot;&quot;&quot;&quot;)* | (?&gt; + | \\. )* ...

Преобразование числового выражения в словесную форму
Мне надо описать каждую функцию для курсовой работы помогите кто-нибудь пожалуйста. Как она работает вообще. Если можно сделать...

Преобразование числового выражения суммы в строковое
Написать программу преобразования числового выражения суммы(в рублях) в строковое. Например, 345 643.21- это &quot;триста сорок пять...

Разбор математического выражения
Доброго времени суток, уважаемые форумчане. Хотелось бы услышать совет опытных людей по следующему вопросу: имеется некое математическое...

Разбор булевого выражения
Доброго времени суток! Очень сильно требуется ваша помощь! Подскажите пожалуйста, как сделать разбор булевого выражения. Входная...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru