Fecha y hora actual: Martes 13 Nov 2018 23:58
Índice del Foro

Foros de programación informática, diseño gráfico y Web

En esta comunidad intentaremos dar soporte de programación a todos los niveles, desde principiantes a profesionales de la informática, desarrollo de programas, programación web y mucho más.

plantillas

Responder al Tema

Índice del Foro > C, C#, Visual C++ > plantillas

Autor Mensaje
angeljonh
Usuario Iniciado


Registrado: 06 Nov 2016
Mensajes: 10

Mensaje Publicado: Sábado 23 Sep 2017 22:24

Título del mensaje: plantillas

Responder citando

Como puedo instanciar este codigo en Plantillas para que no me quede todo junto

ejem
Template<typename E>
class Pila


Código:
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <string>

using namespace std;
int prioridad(char op) {
 switch (op) {
  case '^': return 3;
  case '*':
  case '/': return 2;
  case '+':
  case '-': return 1;
  case ')': return -1;
  default: return 0;
 }
}
string convertir(string in) {
 stack<char> pila;
 string posf = "";
 for (int i=0; i < in.size(); i++) {
  switch (in[i]) {
   case '(':
    pila.push('(');
    break;
   case ')':
    while (!pila.empty() && pila.top() != '(') {
     posf += string(1,pila.top()) + " ";
     pila.pop();
    }
    pila.pop();
    break;
   case '+':
   case '-':
   case '*':
   case '/':
   case '^':
    while (!pila.empty() && prioridad(in[i]) <= prioridad(pila.top())) {
     posf += string(1,pila.top()) + " ";
     pila.pop();
    }
    pila.push(in[i]);
    break;
   default:
    while (isdigit(in[i]) || in[i] == '.')
     posf += string(1, in[i++]);
    posf += " ";
    i--;
  }
 }
 while (!pila.empty()) {
  posf += string(1, pila.top()) + " ";
  pila.pop();
 }
 return posf;
}
double evaluar(string p) {
 stack<double> pila;
 double op1, op2;
 for (int i=0; i < p.size(); i+=2) {
  switch (p[i]) {
   case '^':
    op2 = pila.top(); pila.pop();
    op1 = pila.top(); pila.pop();
    pila.push(pow(op1, op2));
    break;
   case '*':
    op2 = pila.top(); pila.pop();
    op1 = pila.top(); pila.pop();
    pila.push(op1*op2);
    break;
   case '/':
    op2 = pila.top(); pila.pop();
    op1 = pila.top(); pila.pop();
    pila.push(op1 / op2);
    break;
   case '+':
    op2 = pila.top(); pila.pop();
    op1 = pila.top(); pila.pop();
    pila.push(op1 + op2);
    break;
   case '-':
    op2 = pila.top(); pila.pop();
    op1 = pila.top(); pila.pop();
    pila.push(op1 - op2);
    break;
   default:
    string aux = "";
    while (p[i] != ' ')
     aux += string(1, p[i++]);
    pila.push(atof(aux.c_str()));
    i--;
  }
 }
 return pila.top();
}
int main() {
 string s, p;
 cout<<"Defina la expresion: ";
 cin >> s;
 p = convertir(s);
 cout << "Posfija: " << p << endl;
 cout << "Evaluada: " << evaluar(p) << endl;
 return 0;
}



Ayuda

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Pedrolo
Usuario Inquieto


Registrado: 07 May 2017
Mensajes: 50
Ubicación: Posiblemente lejos de ti

Mensaje Publicado: Domingo 24 Sep 2017 04:48

Título del mensaje: plantillas

Responder citando

Querrás decir implementar y no instanciar. Instanciar es cuando creas un objeto por medio del operador new. El Template o plantilla en C++ es para definir una clase o una función que trabaje con distintos tipos de datos. De esa forma no tienes que estar realizando la misma clase repetida para cada tipo con el que tengas pensado usar. En el caso que expones, no veo de que forma sería práctico usar una plantilla, pues únicamente trabajas con cadenas (que representan las operaciones aritméticas) y guardas en una pila los valores de cada operación en formato double.

Volver arriba
Ver perfil del usuario Enviar mensaje privado Visitar sitio web del autor
Responder al Tema
Mostrar mensajes anteriores:   
Ir a:  
Todas las horas están en GMT + 2 Horas

Temas relacionados

Tema Autor Foros Respuestas Publicado
El foro no contiene ningún mensaje nuevo

El precio de las plantillas

Vero190 Diseño gráfico en general 4 Domingo 17 Dic 2017 00:52 Ver último mensaje
El tema está bloqueado: no pueden editarse ni agregar mensajes.

URGENTE - SE NECESITA PROGRAMADOR EXPERTO EN PL...

ciberaula Bolsa de trabajo 1 Viernes 20 Jun 2014 21:34 Ver último mensaje
El foro no contiene ningún mensaje nuevo

tema plantillas/sitios/¿decisión del cliente?

breaststroke Diseño gráfico en general 0 Viernes 18 Nov 2011 17:46 Ver último mensaje
Panel de Control
No puede crear mensajes, No puede responder temas, No puede editar sus mensajes, No puede borrar sus mensajes, No puede votar en encuestas,