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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 17.12.2009 14:43
Сообщение #2


Гость






Цитата
P.s. Ненадо сравнивать себя(состоявшегося программиста) и человека, который лиш учится программировать
А знаешь, почему я состоялся, как программист? Потому, что когда я школу заканчивал - то раз в неделю мы ездили на "практические занятия по ВТ" (так это тогда называлось) черт знает куда - на другой конец города, только так были компьютеры, за которые нас пускали. И мы всю неделю готовились к этой поездке, и программы "вылизывали" именно в уме, потому что другого способа просто не было. А сидеть и ловить ошибки, когда тебе дают 3 часа машинного времени в неделю - это, знаешь ли, глупо.

И когда я начинал учиться в институте - к нам на кафедру ВМКСС (!!!) привезли два новеньких 80386, так завкафедрой закрыл их в сейф, чтоб не сломали чего, а мы программировали на ВЦ на Примусе (опять же, не чаще 2-3 часов в неделю). И опять приходилось отлаживать код ручками. Потому что если ты знаешь, что такое Примус - то поймешь, сколько надо ждать, чтоб твою задачу поставили в очередь, а поставят же с минимальным приоритетом, пока там до ее исполнения дойдет... И тут что? Ага. ошибка. Тебе возвращают список ошибок, ты исправляешь, опять в очередь... больше 3 раз времени не хватало никогда. Программа не отработала - значит не сдал. Считай, на экзамене проблемы гарантированы. Как тебе такая подготовочка? А вы сейчас сидите за компьютером, и прямо текст набиваете в редактор... А качество программ все ниже и ниже. Думать надо, прежде, чем программу-то набирать...

Цитата
Я думаю есть люди,которые другого мнения о методах проектирования и программирования и ,в отличии от меня,они смогут достаточно аргументированно высказать достоинства и недостатки вашего способа и их способа проектирования и программирования
Мой способ (не я его выбирал, мне его навязали, но я об этом ничуть не жалею) себя оправдал по крайней мере. Был бы постоянный доступ к компьютеру и Интернету - ничего б из меня не получилось.

Цитата
Четкое задание есть и алгоритм его решения я прекрасно представляю.
Вот это называется "представляю"???
Цитата
Проблема в том,что я не знаю как реализовать операцию деления,потому что стек построен таким образом что 1 2 \ выдаст мне не 0.5,как должно а выдаст 2
Это при работе с int-ами-то он у тебя ДОЛЖЕН выдать 0.5??? Проснись уже, что ты себе представляешь? Кто работу со стеком запихал в одну строку, а потом удивляется, почему же из стека сначала читается последнее число, и только потом - предпоследнее? Пушкин что-ли? Ты вообще про стек слышал когда-нибудь? Так вот стек В ПРИНЦИПЕ именно так и работает, и если тебе надо другое поведение - значит стек тебе просто не подходит! Знают они всё, всё прекрасно представляют, а потом НАМ приходится ошибки править и костыли всякие устанавливать, чтоб хоть как-то работало после вот таких "знаек", ибо переписывать код полностью уже времени нет... dry.gif
 К началу страницы 
+ Ответить 

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


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

 



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