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

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

Celtic Hammer Мудрец (12306), на голосовании 10 месяцев назад
 

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

Формула в по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
}
}
Голосование за лучший ответ
Даня Каргин Ученик (191) 11 месяцев назад
// Глобальные переменные
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 Искусственный Интеллект (185909) 11 месяцев назад
у вас ошибкой считается любой символ кроме закрытой скобки.
Professional Professional Мудрец (15235) 11 месяцев назад
Этот код представляет собой парсер для обработки арифметических выражений, представленных в инфиксной нотации, и преобразования их в обратную польскую нотацию. "Ошибка при задании формулы" возникает, когда во входной формуле обнаруживается что-то, что не соответствует ожидаемой грамматике (т.е., ожидаемым символам и их порядку).

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

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

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

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