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

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

11.01.2013, 19:24. Показов 1843. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru