C/Visual C - Infijo-Postfijo AYUDA URGENTE

   
Vista:
Imágen de perfil de D

Infijo-Postfijo AYUDA URGENTE

Publicado por D (1 intervención) el 22/08/2017 06:35:46
Codigo de la clase "linkedStackType"

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
#define LINKEDSTACKTYPE_H
#ifndef LINKEDSTACKTYPE_H
#endif
#include "NodoStack.h"
#include <cassert>
 
template < class TYPE > class linkedStackType {
public:
	bool isEmptyStack() const;
	bool isFullStack() const;
	void initializeStack();
	void push(const TYPE &newItem);
 
	TYPE top() const;
	void pop();
	linkedStackType();
	~linkedStackType();
 
private:
	NodoStack< TYPE > *stackTop;
 
};
 
template < class TYPE> linkedStackType < TYPE > ::linkedStackType() {
	stackTop = NULL;
}

Codigo de la clase main:

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#include <iostream>
#include <stack>
#include "linkedStackType.h"
#include <string>
#include <cmath>
#include <cstdlib>
using namespace std;
 
void evaluarExpresionPostfija(string, linkedStackType < int >&, int &);
string conv_postfija(string &, string &);
 
int prioridad(char);
bool operador(char operador);
bool operando(char);
 
int main()
{
	string exp_infija, exp_postfija = "";
	cout << "INGRESE EXPRESION INFIJA: ";
	getline(cin, exp_infija);
 
	conv_postfija(exp_infija, exp_postfija);
	cout << "EXPRESION POSTFIJA" << exp_postfija << endl;
 
	int resultado;
	linkedStackType <int> enteros;
	evaluarExpresionPostfija(exp_postfija, enteros, resultado);
	cout << "EL RESULTADO ES :  " << resultado << endl;
 
	return 0;
}
 
void evaluarExpresionPostfija(string expostfija, linkedStackType <int>& stack, int&valor) {
	int numero;
	stack.initializeStack();
 
	if (!expostfija.empty()) {
		while (!expostfija.empty()) {
			char indice = expostfija.at(0);
			expostfija = expostfija.substr(1, expostfija.length());
			string caracter = "";
			caracter += indice;
 
			if (operando(indice)) {
				numero = atoi(caracter.c_str());
				stack.push(numero);
			}
			if (operador(indice)) {
				int op2 = stack.top();
				stack.pop();
 
				if (stack.isEmptyStack()) {
					cout << "EXPRESION INCORRECTA" << endl;
					exit(1);
				}
				int op1 = stack.top();
				stack.pop();
 
				switch (indice) {
					case '+': stack.push(op1 + op2);
					break;
					case '-': stack.push(op1 - op2);
					break;
					case '*': stack.push(op1*op2);
						break;
					case '/':
						if (op2 != 0)
							stack.push(op1 / op2);
						else {
							cout << "No se puede dividir entre cero" << endl;
							exit(1);
						}
						break;
					case '^': stack.push(int(pow(op1, double(op2))));
						break;
 
 
				}
			}
		}//end while(expostfija.empty())
		valor = stack.top();
		stack.pop();
	}//endif
 
 
}
//-----------------------------
string conv_postfija(string&E_inf, string &E_post) {
	linkedStackType <char> postfija;
	char caracter;
	postfija.push('(');
	E_inf += ')';
 
	while (!postfija.isEmptyStack()) {
		caracter = E_inf.at(0);
		E_inf = E_inf.substr(1, E_inf.length());
 
		if (operando(caracter))
			E_post += caracter;
		if (caracter=='(')
			postfija.push(caracter);
 
		if (operador(caracter)) {
			if(operador(postfija.top()))
				while (prioridad(caracter) <= prioridad(postfija.top())) {
					char arg = postfija.top();
					E_post += arg;
					postfija.pop();
					if (!operador(postfija.top()))
						break;
				}
			postfija.push(caracter);
		}
		if (caracter == ')') {
			while (postfija.top() != '(') {
				E_post += postfija.top();
				postfija.pop();
			}//endwhile
			return E_post;
		}
 
	}
 
 
}//endstring
//---------------------------------------------
int prioridad(char oper) {
	int prioridad = 0;
	if (operador(oper)) {
		switch (oper) {
		case '^': prioridad = 3;
			break;
		case '/': prioridad = 2;
			break;
		case '*': prioridad = 2;
			break;
		case '+': prioridad = 1;
			break;
		case '-': prioridad = 1;
			break;
		}
 
	}
 
}

Donde me salen estos errores al momento de compilar:
>Gravedad Código Descripción Proyecto Archivo Línea Estado de supresión
Error C2143 error de sintaxis: falta ';' delante de '<' Final c:\users\admin\documents\visual studio 2015\projects\final\final\linkedstacktype.h 20

>Gravedad Código Descripción Proyecto Archivo Línea Estado de supresión
Error C4430 falta el especificador de tipo; se presupone int. Nota: C++ no admite default-int Final c:\users\admin\documents\visual studio 2015\projects\final\final\linkedstacktype.h 20

>Gravedad Código Descripción Proyecto Archivo Línea Estado de supresión
Error C2238 símbolos (token) inesperados delante de ';' Final c:\users\admin\documents\visual studio 2015\projects\final\final\linkedstacktype.h 20


Me base en un tutorial de YT y copie el codigo tal cual se muestra ahi, paso a paso, por eso no entiendo esos errores cuando me ponen sobre el "NodeStack" el error en la sintaxis, el tutorial venia asi como lo estan viendo en el codigo y compilaba. Asi que no se que podria ser el error o si alguien me pudiera orientar.

Al parecer, según otro foro, el error sería que no tengo ningun codigo en la clase NodeStack. Alguien me podría echar una mano de forma urgente para ver como quedaría ese código? Como digo, sólo vi un tutorial y decían paso a paso el código que les mostré, pero nunca mostraron el código del NodeStack. Es urgente, por favor!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder