IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Вычисление выражения в постфиксной форме.
Krjuger
сообщение 17.12.2009 0:04
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +



#include <iostream>
#include <conio.h>
 
struct stek
{   
 int d;         
 struct stek *next;       //указатель на следующий элемент списка (стека)
 };
 
void push(stek **netx, int d);  //функция будет помещать элемент в стек 
                               // next – указатель на вершину стека
int pop(stek **netx);               //функция будет извлекать элемент их стека   
                                    //вершина которого - next
 
void push(stek **next, int d)   
{ stek *pv = new stek;        //объявляем новую динамическую переменную типа stek
  pv->d=d;                    //записываем  значение, которое помещается в стек
  pv->next=*next;                 //связываем новый элемент стека с предыдущим
  *next=pv;                    //новый элемент стека становится его вершиной
}
 
int pop(stek **next)        
{ int temp=(*next)->d;    //извлекаем в переменную temp значение в вершине стека
  stek *pv=*next;         //запоминаем указатель на вершину стека, чтобы затем 
                         //освободить выделенную под него память   
  *next=(*next)->next;        //вершиной становится предшествующий top элемент
  delete pv;             //освобождаем память, тем самым удалили вершину
  return temp;           //возвращаем значение, которое было в вершине
}
 
 
int main()
{
 char v[25]="5 9 8 + 4 6 * * 7 + * ";
 stek *next=0;
 int a,b;
 int i=0;
 while (v[i]!='\0')
 {
    if (v[i] == '+') push(&next,pop(&next)+pop(&next));
    if (v[i] == '*') push(&next,pop(&next)*pop(&next));
	if (v[i] == '-') push(&next,-(pop(&next)-pop(&next)));
    if ((v[i]>='0') && (v[i]<='9'))  push(&next,0);
    while ((v[i]>='0')&&(v[i]<='9')) push(&next,10*pop(&next)+(v[i++]-'0'));
	i++;
 }
 printf("\n %i \n",pop(&next));
 return 0;
}


Проблема в том,что я не знаю как реализовать операцию деления,потому что стек построен таким образом что
1 2 \ выдаст мне не 0.5,как должно а выдаст 2,потому что будет поделено не 1 на 2,а 2 на 1 изза того что двойка будет выше по стеку.С + и * не имеет значение положение,с - просто беру обратное число,а вот что с делением сделать ума не приложу.Еще мне не очень нравится,как выглядить эта прога,поэтому хотелось бы чтобы дали советы как это реализовать по другому,чтобы поэффективнее было.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 26.07.2025 12:36
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"