Ладно, тогда попробуем без огульного отрицания ИИ. Найдет ИИ здесь ошибку? Почему выдает "Ошибка при задании формулы"?
Celtic Hammer
Мудрец
(16454),
на голосовании
1 год назад
// Глобальные переменные 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 } }
// Глобальные переменные 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; } }
Этот код представляет собой парсер для обработки арифметических выражений, представленных в инфиксной нотации, и преобразования их в обратную польскую нотацию. "Ошибка при задании формулы" возникает, когда во входной формуле обнаруживается что-то, что не соответствует ожидаемой грамматике (т.е., ожидаемым символам и их порядку).
Если вы получаете это сообщение об ошибке, то, скорее всего, входное выражение не соответствует ожиданиям парсера. Он ожидает выражение, состоящее из операторов +, -, *, / и букв от a до z, которые обозначают переменные или операнды. Все операции должны быть заключены в скобки, за исключением самого верхнего уровня выражения.
Вот некоторые возможные причины ошибки:
1. Выражение не заканчивается на операнд (буква от a до z). 2. Выражение содержит незакрытую открывающую скобку или лишнюю закрывающую скобку. 3. Выражение содержит недопустимый символ (не от a до z, +, -, *, /, или скобки). 4. Операнды или операции идут подряд без скобок или оператора между ними.
Для получения более конкретной помощи вам нужно предоставить пример выражения, которое вызывает ошибку.
imgsmail.ru/download/11706893_b344652719ac62c8658993cfb38f7c3a.png В функции postmn() условие if ((c >= "а") && ( c <= "z")) содержит латинскую букву "а" вместо русской "а". Правильно: if ((c >= "а") && ( c <= "я")).
Там русских букв вообще быть не должно. Только латинские. Так что это не правильно
Саня Семенов
Оракул
(60497)
Celtic Hammer, ой не 3.14зди! набрал в поиске русскую букву вон она подсвечивается в русских словах и том месте кода куда указал чатЁПТ