Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/16: Рейтинг темы: голосов - 16, средняя оценка - 4.63
-8 / 0 / 0
Регистрация: 03.05.2012
Сообщений: 10
1

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

05.05.2012, 10:37. Показов 2974. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Уважаемые программисты помогите пожалуйста с заданием!!!!!!!!!

Задание: Написать программу, представляющую математические выражения в форме обратной польской записи. Используя полученную бесскобочную форму записи выражения рассчитать его

R=a/b-((c+d)*e) a=1.2 b=0.7 c=9.3 d=6.5 e=8.4 R=-131.006

Заранее огромное спасибо вам!!!!!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.05.2012, 10:37
Ответы с готовыми решениями:

Лексический анализ выражений. Формы записи выражений
Написать программу, представляющую математические выражения в форме обратной польской записи....

Лексический анализ выражений. Формы записи выражений
Уважаемые форумчане помогите пожалуйста с задачей: Заранее спасибо! Добавлено через 19 часов...

Некоторый анализ кода CS с испольованием регулярных выражений
Привет.Мне нужно проанализировать файл формата *.cs. Я уже сделал некоторый анализ. Как мне...

Лексический анализатор для арифметических выражений
Всем привет. Помогите плиз сделать лексический анализатор на C# Задание: Исходный язык содержит...

1
721 / 712 / 168
Регистрация: 15.06.2011
Сообщений: 1,704
05.05.2012, 22:56 2
Лучший ответ Сообщение было отмечено pop2101 как решение

Решение

Есть пример, недавно написал:
C#
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
48
49
50
51
52
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;
}
P.S. Решение мое возможно не лучшее, т.к. я его не особо оптимизировал.
0
05.05.2012, 22:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.05.2012, 22:56
Помогаю со студенческими работами здесь

Компилятор. Лексический анализ кода Pascal
Добрый день. Пишу лексический анализатор для кодов Pascal. И как вывести переменные которые...

Провести лексический анализ строки и сказать является ли она верным арифметическим выражением
Прошу сильно не пинать, т.к. только начал изучать дискретку. Есть некоторый алфавит состоящий из...

Калькулятор выражений
Всем привет! Нужен калькулятор выражений типа 8*9*(3+1-9)\12, с приоритетами в скобках, знаков и...

Деревья выражений
Здравствуйте, помогите пожалуйста разобраться с деревьями выражений. Хочу вызвать метод в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru