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

> Внимание!

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

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> постфиксный калькулятор, С++
сообщение
Сообщение #1


Новичок
*

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

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


Нужно написать постфиксный калькулятор с использованием стека

вот что я нашел,но здесь вводится последовательно,а нужно чтоб вводилось в 1 строчку т.е. 2 3+=

#include <stdio.h>
#include <stdlib.h>

#define MAX 100

int *p;
int *tos;
int *bos;

void push(int i);
int pop(void);

int main(void)
{
int a, b;
char s[80];

p = (int *) malloc(MAX*sizeof(int));
if(!p) {
printf("Ошибка при выделении памяти\n");
exit(1);
}
tos = p;
bos = p + MAX-1;


printf("Нажмите 'q' для выхода\n");

do {
printf(": ");
gets(s);
switch(*s) {
case '+':
a = pop();
b = pop();
printf("%d\n", a+b);
push(a+b);
break;
case '-':
a = pop();
b = pop();
printf("%d\n", b-a);
push(b-a);
break;
case '*':
a = pop();
b = pop();
printf("%d\n", b*a);
push(b*a);
break;
case '/':
a = pop();
b = pop();
if(a==0) {
printf("Деление на 0.\n");
break;
}
printf("%d\n", b/a);
push(b/a);
break;
case '.':
a = pop();
push(a);
printf("Текущее значение на вершине стека: %d\n", a);
break;
default:
push(atoi(s));
}
} while(*s != 'q');

return 0;
}

/* Занесение элемента в стек. */
void push(int i)
{
if(p > bos) {
printf("Стек полон\n");
return;
}
*p = i;
p++;
}


int pop(void)
{
p--;
if(p < tos) {
printf("Стек пуст\n");
return 0;
}
return *p;
}

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Например, так:
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>

#define MAX 100
int *p;
int *tos;
int *bos;

void push(int i);
int pop(void);

int main(void)
{
int a, b, i;
char s[80], st[10], *ps;
p = (int *) malloc(MAX*sizeof(int));
if(!p) {
printf("Ошибка при выделении памяти\n");
exit(1);
}
tos = p;
bos = p + MAX-1;
printf("-> ");
gets(s);
ps = s;

do {
switch(*ps) {
case '+':
a = pop();
b = pop();
printf("%d\n", a+b);
push(a+b);
ps++;
break;
case '-':
a = pop();
b = pop();
printf("%d\n", b-a);
push(b-a);
ps++;
break;
case '*':
a = pop();
b = pop();
printf("%d\n", b*a);
push(b*a);
ps++;
break;
case '/':
a = pop();
b = pop();
if(a==0) {
printf("Деление на 0.\n"); ps++;
break;
}
printf("%d\n", b/a);
push(b/a);
ps++;
break;
case '.':
a = pop();
push(a);
printf("Текущее значение на вершине стека: %d\n", a);
ps++;
break;

default:
i = 0;
for(; isdigit(*ps); ps++) {
st[i++] = *ps;
}
st[ i ] = '\0';
push(atoi(st));
}
while(*ps == ' ') ps++;
} while(*ps);
getchar();
return 0;
}
/* Занесение элемента в стек. */
void push(int i)
{
if(p > bos) {
printf("Стек полон\n");
return;
}
*p = i;
p++;
}
int pop(void)
{
p--;
if(p < tos) {
printf("Стек пуст\n");
return 0;
}
return *p;
}

Контрольный пример: 2 3 + 4 * 5 +. Знак "равно" вводить не надо, конец строки это вычисление окончательного результата. Использование точки можешь выбросить, в НЕдиалоговом режиме оно не надо...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


Благодарю=) good.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 28.04.2024 23:53
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name