Sí, estoy trabajando en una calculadora, a ver que os parece:
Código:
#include <stdlib.h>
#include <math.h>
#include <iostream>
using namespace std;
int operacion, opcion[2], i;
float resultado, operando[20];
char operador[20];
int main()
{ // Inicio
int menu[1];
menu[0]=0, menu[1]=1;
while (!menu[0])
{ // while menú principal
system("cls");
cout << " \n\bÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ CALCULADORA EUCLIDES ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ\n_______________________________[Version 2.0]____________________________________\n\n elige una opcion:\n\n 0: Operaciones basicas \n\n 1: Potencias y raices \n\n 2: Geometria \n\n 3: Ecuaciones\n\n 4: Salir \n\n ";
cin>>opcion[0];
switch(opcion[0])
{ // Switch menú
case 0:
i=1;
while (menu[1]==1)
{ // while operaciones basicas, para poder repetir con el valor obtenido
system("cls");
cout<<" \n Elija quantos numeros quiere operar\n\n ";
cin >> opcion[1];
system("cls");
cout << "\n"; // Ésto es simplemente para la estética
if(i==2) // para que si eliges continuar operando sobre el resultado te lo escriba directamente como operador "1"
{
cout << " " << resultado << "\n ";
cin >> operador[1];
}
for(i; i<=opcion[1]; i++)
{
cout << " "; // Estética, un espacio
cin >> operando[i]; // Le das el primer número que quieres operar
if(i!=opcion[1]) // cuando i sea = a opcion no hará falta pedir signo
{
cout << " "; // estética
cin >> operador[i]; // pide signo i deberías escribir +,-,* o /
}
}
if(resultado==0)
{ // ésto es para que solo se haga la primera vez que operas, si más tarde eliges la opcion "continuar operando sobre el resultado" éste se mantendrá
resultado=operando[1];
}
for(i=1; i<=opcion[1]; i++)
{ // hace los cálculos
switch (operador[i])
{ // switch signo
case '+':
resultado+=operando[i+1];
break;
case '-':
resultado-=operando[i+1];
break;
case '*':
resultado*=operando[i+1];
break;
case '/':
resultado/=operando[i+1];
break;
} // switch signo
} // for calcular
system("cls");
cout <<"\n"; // estética otra vez
for(i=1; i<=opcion[1]; i++)
{
cout << " " << operando[i]; // escribe las operaciones que ha hecho
if (i!=opcion[1]) // para que la última vez no escriba ningún sigo
{
cout << " "<< operador[i];
}
}
cout << " = " << resultado << "\n\n 0: Volver\n 1: Continuar calculando sobre este resultado\n\n ";
cin >> opcion[1];
if(!opcion[1]) // vuelve al menú principal
{
menu[1]=2;
}
else
{
i=2; // así cuando se haga el primer for no te pedirá el operador "1", pues será el resultado que has obtenido antes
}
} // while operaciones basicas
break; // case 0, operaciones basicas
} // Switch menú
} // while menú principal
} // inicio
Al menu principal no le hagais caso, solo funciona de momento las "operaciones básicas" (aunque todo lo demás lo hice en la versión anterior de la calculadora, solo que ahora estoy cambiando muchísimas cosas, ahora uso cout y cin en vez de printf i scanf etc. así que decidí reescribirlo)
Funciona así:
Te pide cuantos números quieres operar y entonces escribes, por ejemplo si elegiste 3:
105 - 15 / 2 i así te funcionaría, aunque tienes que apretar intro cada vez que escribes algo obviamente (sino no tengo ni idea de como hacerlo, pero supongo que será dificilísimo para mi nivel jajajaja)
Pero si calculas varias veces sin cerrar la calculadora una vez vuelves a calcular hay errores y empiezan a salir cosas raras, no sé muy bien porque pero se sulocionaría seguramente si supiera como igualar todas las variables a 0 a ver, podría hacerlo una por una pero me parece que tiene que haber alguna forma más rápida de "resetearlas" todas y esa es mi primera y más importante pregunta.
También he decidido dejar de usar
Código:
system("pause");
Código:
getchar();
Pero no conozco por ahora ninguna alternativa a
Código:
system("cls");
Y bueno aparte de eso echadle un vistazo a ver que tendría que cambiar o que no os convence...
Pero lo que más me interesa saber es lo de devolver a las variables el valor "0" sin hacerlo manualmente
De antemano, gracias.