Форум программистов, компьютерный форум, киберфорум
Наши страницы

Из инфиксной в постфиксную - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как от текущей даты отнять 20 лет http://www.cyberforum.ru/cpp-beginners/thread688906.html
Надо от текущей даты отнять 20 лет... Помогите плиз!
C++ Динамическое выделение памяти Первый раз столкнулся с такой задачей... Дали лабораторную работу: Разработать приложения, реализующее следующие функции: 1) Выделяет всю доступную процессу память. 2)Освобождает всю выделенную... http://www.cyberforum.ru/cpp-beginners/thread688905.html
Как работать с настройками win7 ? C++
Как получить доступ к настройкам win7 таким как "показывать/не показывать скрытые файлы" и изменять их?
Для битового массива C++
Добрый день, форумчане! Подскажите, как можно реализовать данные функции : 1)реализовать процедуру установки значения бита, заданного по индексу, в 0. 2)реализовать процедуру установки значения...
C++ Радиокнопки http://www.cyberforum.ru/cpp-beginners/thread688871.html
Помогите пожалуйста сделать радио кнопки! # include <iostream.h> # include <stdio.h> void main() { int a; cout <<"Program\n" <<"1. Kuhna\n"
C++ Слияние нескольких исполняемых файлов Программа выполняет слияние бинарных файлов, указанных в командной строке в выходной, отличный от входных. Формат командной строки join.exe <inputfile>...<inputfile N> <output> Получилась... подробнее

Показать сообщение отдельно
sanchoflat
4 / 6 / 1
Регистрация: 05.11.2011
Сообщений: 97
05.11.2012, 14:11  [ТС]
Используя стек, определить функцию, которая переводит выражение, записанное в обычной (инфиксной) форме в постфиксную форму. Предусмотреть ввод выражения с клавиатуры и из текстового файла.


Добавлено через 5 минут
Алгоритм брал такой:

1. Если этот символ - число (или переменная), то просто помещаем его в выходную строку.
2. Если символ - знак операции (+, -, *, / ), то проверяем приоритет данной операции. Операции умножения и деления имеют наивысший приоритет (допустим он равен 3). Операции сложения и вычитания имеют меньший приоритет (равен 2). Наименьший приоритет (равен 1) имеет открывающая скобка.
Получив один из этих символов, мы должны проверить стек:
а) Если стек все еще пуст, или находящиеся в нем символы (а находится в нем могут только знаки операций и открывающая скобка) имеют меньший приоритет, чем приоритет текущего символа, то помещаем текущий символ в стек.
б) Если символ, находящийся на вершине стека имеет приоритет, больший или равный приоритету текущего символа, то извлекаем символы из стека в выходную строку до тех пор, пока выполняется это условие; затем переходим к пункту а).
3. Если текущий символ - открывающая скобка, то помещаем ее в стек.
4. Если текущий символ - закрывающая скобка, то извлекаем символы из стека в выходную строку до тех пор, пока не встретим в стеке открывающую скобку (т.е. символ с приоритетом, равным 1), которую следует просто уничтожить. Закрывающая скобка также уничтожается.

Если вся входная строка разобрана, а в стеке еще остаются знаки операций, извлекаем их из стека в выходную строку.

Добавлено через 2 часа 13 минут
Немного подделал алгоритм. Добавил цикл, однако непонятно почему он зацикливается?
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
    else if ( in[i]=='-' || in[i]=='+' || in[i]=='/' || in[i]=='*' || in[i]=='^' )
                            {
                            do
                            {
                                test = false;
                                q=in[i];
                                prior( q, &prioritet); //проверяем приоритет на входе                           
                                    stekNil(stek,&nil,q); // проверяем пустоту стека
                                    if ( nil == true ) // если пустой - помещаем элемент в стек
                                        {   
                                            stek->Push(in[i]);
                                            MessageBox::Show("JH");
                                        }
 
                                    else if ( proritetStek(&prioritet,&pr,gcnew Stack(stek),&priors )==true)// если стек полон, проверяем приоритет элементов в стеке. Если приоритет в стеке меньше чем на входе - помещаем в стек         
                                                {
                                                     stek->Push(in[i]);
                                                }
                                    else 
                                    {
                                    verxnielem (&prioritet,gcnew Stack(stek),&pr,out, &verx);
                                    if (verx == true)
                                        {
                                            test = true ;
                                            MessageBox::Show("D");
                                        }
                                    }
                                }
                                while (test == true);
                            }
 
 
                        if ( in[i] == '(') // если открывающаяся скобка - помещаем в стек
                            {
                                stek->Push(in[i]);
                            }
                        
                        if ( in[i] == ')') // если закрывающаяся скобка - вытаскиваем элементы из стека в выходной стек, пока не встретим откр. скобку.
                            {
                                sakrskobka(gcnew Stack(stek),out);
                            }
                 }
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru