Foros del Web » Programación para mayores de 30 ;) » C/C++ »

operaciones arimetica c++

Estas en el tema de operaciones arimetica c++ en el foro de C/C++ en Foros del Web. hola a todos y gracias por su ayuda alguien sabe como puedo hacer que el programa lea una operacion combinada (ejemplo: 5*8+3) en un archivo ...
  #1 (permalink)  
Antiguo 13/03/2010, 20:48
 
Fecha de Ingreso: septiembre-2007
Mensajes: 8
Antigüedad: 16 años, 6 meses
Puntos: 0
operaciones arimetica c++

hola a todos y gracias por su ayuda

alguien sabe como puedo hacer que el programa lea una operacion combinada (ejemplo: 5*8+3) en un archivo txt e imprima la respuesta de esta en la pantalla?

ya huice que lea el archivo (con fstream), pero no se como hacer para que los lea como operacion arimetica y la opere

agradesco su ayuda
  #2 (permalink)  
Antiguo 27/03/2010, 11:25
Avatar de CapacProg  
Fecha de Ingreso: marzo-2010
Ubicación: Lima - Perú
Mensajes: 324
Antigüedad: 14 años
Puntos: 71
Respuesta: operaciones arimetica c++

Lee caracter a caracter y ve identificando si es número u operación, ten cuidado de que uses paréntesis, para salvarlte de ello aplica notación polaca ya sea prefija o postfija.
  #3 (permalink)  
Antiguo 27/03/2010, 12:59
 
Fecha de Ingreso: diciembre-2007
Ubicación: Valencia
Mensajes: 92
Antigüedad: 16 años, 3 meses
Puntos: 3
Respuesta: operaciones arimetica c++

Aqui te dejo mi versión de ese problema
* Utilizo la Clase Pila.h
* No cuento con precedencia de parentesis.

Te puede servir para cojer alguna idea...

Código C++:
Ver original
  1. #include <iostream>
  2.  
  3. #include "Pila.h"
  4. using namespace std;
  5. int ChanStrinInt(string text);
  6. int Calcula(string operador,int axul, int axu2);
  7. int main()
  8. {
  9.  
  10.     Pila calculadora;
  11.   string infija , operador = "" , posfijo = "" , auxiliar = "";
  12.   int pos = 0, tamano , axul , axu2;
  13.   //lee por teclado el numero en infija.
  14.   getline(cin,infija);
  15. tamano = infija.length();
  16. for(int i = 0; i < tamano;i++)
  17. {
  18.  
  19.     if((infija[i] - '0') >= 0)
  20.     {
  21.      posfijo += infija[i];
  22.  
  23.    }
  24.    else
  25.    {
  26.         posfijo += " " + operador ;
  27.         if(operador != "")
  28.           posfijo += " ";
  29.         operador = "";
  30.      operador = infija[i];
  31.    }
  32.  
  33. }
  34.    posfijo +=" "+operador + " ";  
  35.   // ya esta el string pasado en posfijo.
  36.   cout<<posfijo<<endl;
  37.  while((pos = posfijo.find(" ")) != -1)
  38.  {
  39.     if(pos > 1)
  40.      calculadora.Apilar(ChanStrinInt(posfijo.substr(0,pos)));
  41.     else  if((posfijo[0] - '0') >= 0)
  42.      calculadora.Apilar(ChanStrinInt(posfijo.substr(0,pos)));
  43.           else
  44.           {
  45.                calculadora.CimaPila(axul);
  46.                calculadora.Desapilar();
  47.                calculadora.CimaPila(axu2);
  48.                calculadora.Desapilar();
  49.                calculadora.Apilar(Calcula(posfijo.substr(0,pos),axul,axu2));
  50.           }
  51.     posfijo = posfijo.substr(pos+1,posfijo.length()-pos);
  52.  }
  53.  calculadora.CimaPila(axu2);
  54.  cout<<axu2;
  55.     system("PAUSE"); //PAUSA EL SISTEMA
  56.     return 0;   // para la aplicación tambien puedo usar exit.
  57. }
  58. int Calcula(string operador,int axul, int axu2)
  59. {  
  60.      int result;
  61.     switch(char(operador[0]))
  62.     {
  63.        case '*' :
  64.          result = axul *  axu2 ;
  65.        break;  
  66.        case '/' :
  67.          result = axul / axu2 ;
  68.        break;  
  69.        case '-' :
  70.          result = axul - axu2 ;
  71.        break;
  72.        case '+' :
  73.          result = axul + axu2 ;
  74.        break;  
  75.     }
  76.     return result;
  77. }
  78. int ChanStrinInt(string text)
  79. {
  80.   int numero = 0;
  81.     for(int i = 0; i < text.length(); i++)
  82.         numero = numero * 10 + (text[i] - '0');    
  83.   return numero ;
  84. }

Saludos...

Etiquetas: operaciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:41.