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

Evaluenme programa hecho en C++

Estas en el tema de Evaluenme programa hecho en C++ en el foro de C/C++ en Foros del Web. Hola, este es mi primer post en el foro y queria pedirles consejos de codigo con este programa que e hecho en C++. Este es ...
  #1 (permalink)  
Antiguo 24/01/2009, 20:36
 
Fecha de Ingreso: enero-2009
Mensajes: 7
Antigüedad: 15 años, 3 meses
Puntos: 0
Evaluenme programa hecho en C++

Hola, este es mi primer post en el foro y queria pedirles consejos de codigo con este programa que e hecho en C++.
Este es mi primer programa completo que hago y considero que no esta malo.
El programa es una calculadora que muestra un menú y hace elegir si sumar, restar, multiplicar, dividir, Potencia, Limpiar Pantalla, Acerca de Calculer...(Asi se llama), salir y realiza la acción seleccionada (las operaciones aritmeticas tambien pueden ser con varios operadores) y muestra el resultado en pantalla, tambien puede sacar potencias.

Última edición por Raykro; 26/01/2009 a las 15:14 Razón: Codigo mas largo
  #2 (permalink)  
Antiguo 26/01/2009, 15:17
 
Fecha de Ingreso: enero-2009
Mensajes: 7
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Evaluenme programa hecho en C++

Aqui esta:


Cabecera.hpp:
Código:
//Cabecera.hpp

#include <iostream>

enum ELEGIR { //Constante elegir del menu
	Sumar = 1,
	Restar,
	Multiplicar,
	Dividir,
	Potencia,
	LimpiarPantalla,
	AcercaDe,
	Salir};

class Operaciones //Clase de operaciones aritmeticas
{
public:
	/*=============Accesores=============*/
	//Configurar
	//Valores Aritmeticos
	void ConfigurarPrimerValor(double Valor){PrimerValor = Valor;} //Inline
	void ConfigurarSegundoValor(double Valor){SegundoValor = Valor;} //Inline	

	//Valores de Potencias
	void ConfigurarPotenciaValor(double Valor){PotenciaValor = Valor;} //Inline
	void ConfigurarPotenciaElevador(double Valor){PotenciaElevador = Valor;} //Inline

	//Resultado
	void ConfigurarResultado(double Valor){suResultado = Valor;} //Inline

	//Obtener
	//Valores aritmeticos
	double& ObtenerPrimerValor() {return PrimerValor;} //Inline
	double& ObtenerSegundoValor() {return SegundoValor;} //Inline

	//Valores de Potencias
	double& ObtenerPotenciaValor() {return PotenciaValor;} //Inline
	double& ObtenerPotenciaElevador() {return PotenciaElevador;} //Inline

	//Resultado
	double& ObtenerResultado() {return suResultado;} //Inline
	/*============Fin Accesores==========*/

	/*==========Metodos generales=========*/
	//Aritmeticos
	double aSumar(double &rPrimerValor,double &rSegundoValor); //Suma dos valores
	double aRestar(double &rPrimerValor,double &rSegundoValor); //Resta dos valores
	double aMultiplicar(double &rPrimerValor,double &rSegundoValor); //Multiplica dos valores
	double aDividir(double &rPrimerValor,double &rSegundoValor); //Divide dos valores

	//Potencias
	double aPotencia();

	//Preguntar número valores
	int PreguntarNumeroValores();
	/*=========Fin Metodos generales==========*/
private:
	//Variables miemro valores aritmeticos
	double PrimerValor;
	double SegundoValor;

	//Numero Valores
	int NumeroValores;

	//Variables miembro valores de potencias
	double PotenciaValor;
	double PotenciaElevador;

	//Resultado
	double suResultado;
};



Funciones.hpp:
Código:
/*=============Funciones============*/
void HacerBienvenida();
void HacerMenu(short &Elegido);
void HacerAcercaDe();
void MostrarResultado(Operaciones &ObjetoResultado);



Calculadora.cpp:
Código:
//Calculadora.cpp

#include "Cabecera.hpp"
#include "Funciones.hpp"

using namespace std;

/*=============Función main===============*/
int main()
{
	Operaciones ObjSumar;
	Operaciones ObjRestar;
	Operaciones ObjMultiplicar;
	Operaciones ObjDividir;
	Operaciones ObjPotencia;

	//Variables
	short Elegir = Sumar;
	bool fSalir = false;
	int Retorno = 0;

	HacerBienvenida();

	do	
		while (!fSalir)
		{
			HacerMenu(Elegir);
			if(Elegir != -1)
			{
			if(Elegir < Sumar || Elegir > Salir)
				{
					cout << "ERROR:El valor '" << Elegir << "' no es valido." << endl << endl;
					system("pause > nul");
					Retorno = 1;
					Elegir = 0;
					break;
				}
			}
			
				switch(Elegir)
				{
					case Sumar:
						ObjSumar.PreguntarNumeroValores();
						ObjSumar.aSumar(ObjSumar.ObtenerPrimerValor(),ObjSumar.ObtenerSegundoValor());

						MostrarResultado(ObjSumar);

						Retorno = 1;
						break;

					case Restar:
						ObjRestar.PreguntarNumeroValores();
						ObjRestar.aRestar(ObjRestar.ObtenerPrimerValor(),ObjRestar.ObtenerSegundoValor());

						MostrarResultado(ObjRestar);

						Retorno = 1;
						break;

					case Multiplicar:
						ObjMultiplicar.PreguntarNumeroValores();
						ObjMultiplicar.aMultiplicar(ObjMultiplicar.ObtenerPrimerValor(),ObjMultiplicar.ObtenerSegundoValor());

						MostrarResultado(ObjMultiplicar);

						Retorno = 1;
						break;

					case Dividir:
						ObjDividir.PreguntarNumeroValores();
						ObjDividir.aDividir(ObjDividir.ObtenerPrimerValor(),ObjDividir.ObtenerSegundoValor());					

						MostrarResultado(ObjDividir);

						Retorno = 1;
						break;

					case Potencia:
						ObjPotencia.ConfigurarResultado(ObjPotencia.aPotencia());

						MostrarResultado(ObjPotencia);

						Retorno = 1;
						break;

					case LimpiarPantalla:
						system("cls");

						Retorno = 1;
						break;

					case AcercaDe:
						HacerAcercaDe();

						Retorno = 1;
						break;

					case Salir:
						fSalir = true;
						cout << "Saliendo..." << endl;

						Retorno = 0;
						break;

					default:
						cout << "ERROR:El valor ingresado no es valido." << endl << endl;
						system("pause > nul");

						Retorno = 0;
						break;
				} //Fin switch
				break;
		} //Fin while
	while(Retorno == 1);
		return 0;
} //Fin main

//Difiniciones de Metodos

double Operaciones::aSumar(double &rPrimerValor,double &rSegundoValor) //Suma dos valores
{	
	cout << endl << "Primer valor: ";
	cin >> rPrimerValor;
	cout << endl << endl << "Segundo valor: ";
	cin >> rSegundoValor;
	cout << endl;

	suResultado = rPrimerValor + rSegundoValor;
	cout << "Resultado actual: " << suResultado << endl << endl;

	if(NumeroValores > 0)
	{
		for(;NumeroValores > 2;NumeroValores--)
		{
			rPrimerValor = suResultado;
			cout << endl << "Siguiente Valor: ";
			cin >> rSegundoValor;
			cout << endl;

			suResultado = rPrimerValor + rSegundoValor;

			if(NumeroValores >= 3)
			{
				cout << "Resultado actual: " << suResultado << endl << endl;
			}
		}
	}

	return (rPrimerValor + rSegundoValor);
}

double Operaciones::aRestar(double &rPrimerValor,double &rSegundoValor) //Resta dos valores
{	
	cout << endl << "Primer valor: ";
	cin >> rPrimerValor;
	cout << endl << endl << "Segundo valor: ";
	cin >> rSegundoValor;
	cout << endl;

	suResultado = rPrimerValor - rSegundoValor;
	cout << "Resultado actual: " << suResultado << endl << endl;

	if(NumeroValores > 0)
	{
		for(;NumeroValores > 2;NumeroValores--)
		{
			rPrimerValor = suResultado;
			cout << endl << "Siguiente Valor: ";
			cin >> rSegundoValor;
			cout << endl;

			suResultado = rPrimerValor - rSegundoValor;

			if(NumeroValores >= 3)
			{
				cout << "Resultado actual: " << suResultado << endl << endl;
			}
		}
	}

	return (rPrimerValor - rSegundoValor);
}

double Operaciones::aMultiplicar(double &rPrimerValor,double &rSegundoValor) //Multiplica dos valores
{	
	cout << endl << "Primer valor: ";
	cin >> rPrimerValor;
	cout << endl << endl << "Segundo valor: ";
	cin >> rSegundoValor;
	cout << endl;

	suResultado = rPrimerValor * rSegundoValor;
	cout << "Resultado actual: " << suResultado << endl << endl;

	if(NumeroValores > 0)
	{
		for(;NumeroValores > 2;NumeroValores--)
		{
			rPrimerValor = suResultado;
			cout << endl << "Siguiente Valor: ";
			cin >> rSegundoValor;
			cout << endl;

			suResultado = rPrimerValor * rSegundoValor;

			if(NumeroValores >= 3)
			{
				cout << "Resultado actual: " << suResultado << endl << endl;
			}
		}
	}

	return (rPrimerValor * rSegundoValor);
}

double Operaciones::aDividir(double &rPrimerValor,double &rSegundoValor) //Divide dos valores
{	
	cout << endl << "Primer valor: ";
	cin >> rPrimerValor;
	cout << endl << endl << "Segundo valor: ";
	cin >> rSegundoValor;
	cout << endl;

	suResultado = rPrimerValor / rSegundoValor;
	cout << "Resultado actual: " << suResultado << endl << endl;

	if(NumeroValores > 0)
	{
		for(;NumeroValores > 2;NumeroValores--)
		{
			rPrimerValor = suResultado;
			cout << "Siguiente Valor: ";
			cin >> rSegundoValor;
			cout << endl << endl;

			suResultado = rPrimerValor / rSegundoValor;

			if(NumeroValores >= 3)
			{
				cout << "Resultado actual: " << suResultado << endl << endl;
			}
		}
	}

	return (rPrimerValor / rSegundoValor);
}

double Operaciones::aPotencia()
{
	double Resultado;

	cout << endl << "El valor a aplicar la potencia: ";
	cin >> PotenciaValor;
	cout << endl << endl << "Elevado a: ";
	cin >> PotenciaElevador;
	cout << endl;

	Resultado = PotenciaValor;

	for(;PotenciaElevador > 1;PotenciaElevador--)
	{
		Resultado *= PotenciaValor;
	}

	return Resultado;
}

int Operaciones::PreguntarNumeroValores()
{
	char siNo;
	NumeroValores = 0;

	cout << endl << "\xa8La operaci\xa2n sera con mas de dos operandos? (S/N): ";
	cin >> siNo;
	cout << endl << endl;
	
	if(siNo == 's' || siNo == 'S')
	{
		cout << "\xa8.Cuantos operandos.?: ";
		cin >> NumeroValores;
		cout << endl << endl;
	}

	return NumeroValores;
}

//Definición de Funciones
void HacerBienvenida()
{
	cout << "		========================================" << endl;
	cout << "		|Bienvenido a la calculadora 'Calculer'|" << endl;
	cout << "		|Espero que te sirva                   |" << endl;
	cout << "		|                           Por Raykro |" << endl;
	cout << "		========================================" << endl << endl << endl;
}

void HacerMenu(short &Elegido) //Crea el menu
{
	Elegido = -1;

	cout << "*****Menu*****" << endl;
	cout << "(1) Sumar" << endl;
	cout << "(2) Restar" << endl;
	cout << "(3) Multiplicar" << endl;
	cout << "(4) Dividir" << endl;
	cout << "(5) Potencia" << endl;
	cout << "(6) Limpiar Pantalla" << endl;
	cout << "(7) Acerca de Calculer..." << endl;
	cout << "(8) Salir" << endl;

	cin >> Elegido;
}

void HacerAcercaDe() //Muestra en pantalla la información de la aplicación
{
	system("cls");
	cout << endl << "Calculer v1.0" << endl;
	cout << "Creado por Raykro" << endl;
	cout << "P\xa0gina..." << endl;
	cout << "[email protected]" << endl;
	cout << endl << "Software de libre distribuci\xa3n" << endl << endl;
	system("pause > nul");
}

void MostrarResultado(Operaciones &ObjetoResultado) //Muestra el resultado en pantalla
{
	cout << endl << "Resultado: " << ObjetoResultado.ObtenerResultado() << endl << endl;
}

/*=============================Fin del Programa==================================*/

Última edición por Raykro; 26/01/2009 a las 21:22
  #3 (permalink)  
Antiguo 26/01/2009, 15:52
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Respuesta: Evaluenme programa hecho en C++

No esta mal en general.
Yo solo le veo un pequeño problema que es mas bien de diseño.

Si vas a usar clases como contenedores de funciones mejor usa estructuras.

En teoria las clases son para poder hacer una abstraccion de un elemento(de una idea). Aqui practicamente usas una clase para ponerle muchas funciones. Para eso mejor lo hubieras implementado en C.

Como te digo, es solo cuestion de diseño, no de codigo. fuera de eso, esta bien.

Saludos
  #4 (permalink)  
Antiguo 26/01/2009, 21:19
 
Fecha de Ingreso: enero-2009
Mensajes: 7
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Evaluenme programa hecho en C++

Cita:
Iniciado por Instru Ver Mensaje
Si vas a usar clases como contenedores de funciones mejor usa estructuras.
Muchas gracias por responer.

Con usar Estructuras te refieres a usar la palabra clave "struct" en vez de "class"
o te refieres a otra cosa?.

Última edición por Raykro; 27/01/2009 a las 00:06
  #5 (permalink)  
Antiguo 28/01/2009, 18:36
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Respuesta: Evaluenme programa hecho en C++

En C++, puedes sar estructuras(si, con struct) como contenedores de datos y funciones. Es parecido a las clases, pero con todos sus elementos publicos. No se acostumbra mucho a usarlas pero existen.

Saludos
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:14.