Лексический анализ выражений. Формы записи выражений - C#

  1. Уважаемые программисты помогите пожалуйста с заданием!!!!!!!!! Задание: Написать программу, представляющую математические выражения в форме обратной польской записи. Используя полученную бесскобочную форму записи выражения рассчитать его R=a/b-((c+d)*e) a=1.2 b=0.7 c=9.3 d=6.5 e=8.4 R=-131.006 Заранее огромное спасибо вам!!!!!


textual

Код:

static private string GetExp(string str) //Метод принимает строку - выражение, и возвращает его вид в ОПН
{
    string outString = "";
    Stack<char> operStack = new Stack<char>();
 
    for (int i = 0; i < str.Length; i++)
    {
        if (str[i] == ' ') //Если пробел
            continue; //пропускаем
 
        if (Char.IsDigit(str[i])) //Если число
        {
            while (!IsDelimetr(str[i])) //Пока не разделитель
            {
                outString += str[i]; //Добаляем
                i++;
                if (i == str.Length) break;
            }
            outString += " ";
            i--;
            continue;
        }
 
        if (IsOperator(str[i]))
        {
            if (operStack.Count > 0)
                if (GetPriority(str[i]) <= GetPriority(operStack.Peek()))
                    outString += operStack.Pop().ToString() + " ";
 
            operStack.Push(char.Parse(str[i].ToString()));
        }
 
        if (str[i] == '(')
            operStack.Push(str[i]);
 
        if (str[i] == ')')
        {
            char s = operStack.Pop();
 
            while (s != '(')
            {
                outString += s.ToString() + ' ';
                s = operStack.Pop();
            }
        }
    }
 
    while (operStack.Count > 0)
    outString += operStack.Pop() + " ";
 
        return outString;
}


Похожие ответы
  1. Всем доброго времени суток! Мне нужно распарсить Designer файл, собственно, большинство уже сделано, осталось только пройтись по той его части, где поочередно описываются свойства элементов управления. Синтаксис таков:

  1. Здравствуйте ! Прошу Вашей помощи в составлении , точнее советах по составлению Синтаксического анализатора дифференциальных уравнений. (уравнения однородные второго порядка вида y'' (плюc-минус) a*y (плюс-минус)b=0) Предложите пожалуйста идеи, как это можно "сконструировать" . Теорию то я понимаю, как это работает , но вся проблема в переводе этих мыслей на язык C# . Должно быть текстовое поле и по кнопке , анализатор должен проверять написанное в этом текстовом поле , естесственно с выдачей соответствующих ошибок , если таковые будут иметься. пробовал что-то подобное сделать для квадратного уравнения , к чему впринципе и сводится дифференциальное , но опять же результатов не добился. Жду.

  1. Доброго времени суток, форумчане! Подскажите как в анализатор арифметических выражений можно подставить вместо буквы значение из массива. Анализатор считает математические выражения (н-р: 10-5/2). Добавил в него возможность распознавания кроме цифр и знаков арифм. операций букв, которым присваивается тип "VARIABLE", но вот как в процессе вычисления вместо них подтянуть их значение из массива хранящего эти значения не знаю. Это нужно для того, что бы например если на вход подаётся функция x^2+2*x+1, программа рассчитала её значения, при х равном определённым значениям, которые будут хранится в массиве. Распознавание переменной прописано в функции get_token, её замена на конкретное значение в account7 (ref double rezult):

  1. Пишем код для шифровки и расшифровки по Цезарю. Дали задание: расшифровать без ключа(т.е. Методом частотных анализ) Вот код, который решает мою проблему , но только для частного случая, когда буква "о" встречается в тексте больше чем количество других букв. Помогите реализовать для всех случаев.

  1. Доброго времени суток, форумчане! Прошу помочь со следующей проблемой. Есть строка, в которое вводится выражение с консоли. Как в С# создать указатель на данную строку, который бы мог перемещаться по её элементам в зависимости от условия? Ну например если текущий элемент, на который указывает указатель является пробелом или кавычками, то указатель должен перейти на следующий элемент строки. Вариант через цикл for, пробегом по всем элементам не подходит, так как проверяться условие и соответственно смещаться указатель будет последовательно в разных функциях (в разных частях программы), начиная с той позиции, на которой он был в предыдущей функции. Следующий вариант, который я пробовал оказался не верным:

  1. Выполнить анализ кода программы на наличие в нем всех операторов присваивания языка C#

  1. Добрый день. Делаю скриншот части окна стороннего приложения и анализирую получившийся результат. Например, я хочу анализировать квадратик 100 x 100 пикселей в правом нижнем углу окна приложения. Очень много информации удалось найти, но понимания, как правильно, и почему именно так, нет. Использую как .Net 3.5, так и .Net 4.0. Хотелось бы, чтобы правильно работало везде. Сразу вопросы:Вопрос 1. Можно ли, в принципе, реализовывать задачу так (ниже подробное описание)? Вопрос такой потому, что я часто встречал реализации через SelectObject, CreateCompatibleDC, CreateCompatibleBitmap и так далее. Вопрос 2. Иногда в bitmap попадает чернота, почему? Именно иногда. То есть обычно всё работает, но, порой, просто чёрная картинка получается. Вопрос 3. Почему координаты части изображения в BitBlt так странно выставляются? Поясню. Берём картинку Width=400, Height=400. Хотим получить квадрат в правом углу размером 100x100. Координаты для второй части BitBlt какие надо ставить? Я ставлю Width * 0.25, Height * 0.25. И... Нет, не получается на выходе то, что требуется. Всё время область куда-то смещена. Почему так? Мне каждый раз приходится подбирать коэффициенты, чтобы вырезалось именно то, что я хочу. Итак, как делаю я:1. Получаю хендл окна приложения:

  1. Нужно разработать лексический анализатор, получающий на вход строку и выделяющий из неё лексемы Лексемы записываются в формате: код лексемы; пробел; выделенная лексема; виды лексем: десятичные числа(целые и вещественные); арифметическая операция; идентификаторы - буквы; Можно код пожалуйстаДобавлено через 1 час 55 минут Пример: целые числа - код 1, арифметическая операция - код 2, идентификаторы - код 3. исходная строка 23*b+a04*2 Массив лексем 1)23 2)* 3)b 2)+ 3)a04 2)* 1)2

  1. У меня есть программа шифрования методом Цезаря. Нужно доделать, добавив частотный анализ введенного текста, т.е. сколько раз встречаются в тексте буквы. Как это сделать?

  1. Привет! Пишу для себя простенький мат анализатор вводимой строки с целью вычислить введенное математическое выражение. Найденные мною синтаксичесические анализаторы большие и страшные. Он еще не готов, но ошибки не дают продолжить.