Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Ладно, тогда попробуем без огульного отрицания ИИ. Найдет ИИ здесь ошибку? Почему выдает "Ошибка при задании формулы"?

Celtic Hammer Мудрец (16454), на голосовании 1 год назад
 

  
Введите формулу:

Формула в поcтфикcной нотации:





 // Глобальные переменные  
var s // Формула в обратной польcкой запиcи
var st // Иcходная формула в инфикcной нотации
var i // Индекc очередного анализируемого cимвола
var er // Ошибка
var c // Очередной cимвол формулы
// Функция, оcущеcтвляющая начальные уcтановки и
// вызов оcновной функции, оcущеcтвляющей поcтроение
// обратной польcкой запиcи для формулы
function main(obj){
s = "";
st = obj.f1.value // берем value form1.f1 Это Иcходная формула в инфикcной нотации
i = -1; // начальный индекс
er = false;
c = cursym(); // рассматриваемый элемент строки
postform()
if (er)
alert ("Ошибка при задании формулы")
else
{ form1.fres.value=s }
}
// Выбор очередного cимвола
function cursym()
{ i=i+1;
return st.charAt(i);
// возвращает новый рассматриваемый элемент инфиксной строки
}
// Формирование cтроки, предcтавляющей формулу
// в обратной польcкой запиcи
function wrsym(h)
{
s += h
// добавляет элемент в выходную строку
}
// Обратная польcкая запиcь для формулы
function postform()
{ postterm()
while ((c == "+") || (c == "-")) {
var h = c
c = cursym()
postterm()
wrsym(h)
}
}
// Обратная польcкая запиcь для терма
function postterm() {
postmn()
while ((c == "*") || (c == "/")) {
var h = c
c = cursym()
postmn()
wrsym(h)
}
}
// Обратная польcкая запиcь для множителя
function postmn()
{
if ((c >= "а") && ( c <= "z")) {
// если рассматриваемый элемент - буква
wrsym(c) // добавляем в выходную строку
c = cursym(); // переходим к следующему элементу
}
else {
if (c == "(") {
// если (
c = cursym()
postform()
if (c != ")") er = true
else {
c = cursym()
}
}
else er = true
}
}
Голосование за лучший ответ
Даня Каргин Ученик (214) 1 год назад
// Глобальные переменные
var s; // Формула в обратной польской записи
var st; // Исходная формула в инфиксной нотации
var i; // Индекс очередного анализируемого символа
var er; // Ошибка
var c; // Очередной символ формулы

// Функция, осуществляющая начальные установки и вызов основной функции, осуществляющей построение
// обратной польской записи для формулы
function main(obj) {
s = "";
st = obj.f1.value; // берем value формы form1.f1. Это исходная формула в инфиксной нотации
i = -1; // начальный индекс
er = false;
c = cursym(); // рассматриваемый элемент строки
postform();

if (er)
alert("Ошибка при задании формулы");
else
form1.fres.value = s;
}

// Выбор очередного символа
function cursym() {
i = i + 1;
return st.charAt(i);
// возвращает новый рассматриваемый элемент инфиксной строки
}

// Формирование строки, представляющей формулу в обратной польской записи
function wrsym(h) {
s += h;
// добавляет элемент в выходную строку
}

// Обратная польская запись для формулы
function postform() {
postterm();

while ((c == "+") || (c == "-")) {
var h = c;
c = cursym();
postterm();
wrsym(h);
}
}

// Обратная польская запись для терма
function postterm() {
postmn();

while ((c == "*") || (c == "/")) {
var h = c;
c = cursym();
postmn();
wrsym(h);
}
}

// Обратная польская запись для множителя
function postmn() {
if ((c >= "а") && (c <= "z")) {
// если рассматриваемый элемент - буква
wrsym(c); // добавляем в выходную строку
c = cursym(); // переходим к следующему элементу
} else {
if (c == "(") {
// если (
c = cursym();
postform();

if (c != ")")
er = true;
else {
c = cursym();
}
} else
er = true;
}
}
inga zajonc Искусственный Интеллект (195502) 1 год назад
у вас ошибкой считается любой символ кроме закрытой скобки.
Professional Professional Мудрец (15955) 1 год назад
Этот код представляет собой парсер для обработки арифметических выражений, представленных в инфиксной нотации, и преобразования их в обратную польскую нотацию. "Ошибка при задании формулы" возникает, когда во входной формуле обнаруживается что-то, что не соответствует ожидаемой грамматике (т.е., ожидаемым символам и их порядку).

Если вы получаете это сообщение об ошибке, то, скорее всего, входное выражение не соответствует ожиданиям парсера. Он ожидает выражение, состоящее из операторов +, -, *, / и букв от a до z, которые обозначают переменные или операнды. Все операции должны быть заключены в скобки, за исключением самого верхнего уровня выражения.

Вот некоторые возможные причины ошибки:

1. Выражение не заканчивается на операнд (буква от a до z).
2. Выражение содержит незакрытую открывающую скобку или лишнюю закрывающую скобку.
3. Выражение содержит недопустимый символ (не от a до z, +, -, *, /, или скобки).
4. Операнды или операции идут подряд без скобок или оператора между ними.

Для получения более конкретной помощи вам нужно предоставить пример выражения, которое вызывает ошибку.
Celtic HammerМудрец (16454) 1 год назад
Твой бот сам "Капитан Очевидность". Учитывая что я напрямую указал в комментариях для чего этот код
 var s // Формула в обратной польcкой запиcи   
var st // Иcходная формула в инфикcной нотации
var i // Индекc очередного анализируемого cимвола
Celtic HammerМудрец (16454) 1 год назад
Но раз он просит "пример", вскарливаем ему "пример"
a*(b+c)
Что он скажет на сей счет?
Саня Семенов Оракул (60497) 1 год назад
imgsmail.ru/download/11706893_b344652719ac62c8658993cfb38f7c3a.png
В функции postmn() условие if ((c >= "а") && ( c <= "z")) содержит латинскую букву "а" вместо русской "а". Правильно: if ((c >= "а") && ( c <= "я")).
Celtic HammerМудрец (16454) 1 год назад
Там русских букв вообще быть не должно. Только латинские. Так что это не правильно
Саня Семенов Оракул (60497) Celtic Hammer, ой не 3.14зди! набрал в поиске русскую букву вон она подсвечивается в русских словах и том месте кода куда указал чатЁПТ
Похожие вопросы