//Proyecto N°9 Calculadora
#include<iostream> //Necesario para cualquier programa de c++.
#include<locale.h> //Sirve para añadir el idioma español para el programa.
#include<string.h> //Para que no haya errores en cadenas.
#include<stdlib.h> //Sirve para el std.
#include<conio.h> //Hará que el programa no se cierre de golpe.
#include<math.h> //Ayudará a realizar operaciones matemáticas más rápidas.
/*
Crea una calculadora que pueda realizar las siguientes funciones; sumar, restar, dividir, sacar raíz y
elevar un numero a cualquier potencia. Utiliza una función para cada operación. El programa debe de
tener un menú donde el usuario pueda elegir qué operación realizar, después se debe de mostrar el
resultado y mostrar la opción de realizar otra operación o finalizar el programa.
autor: Kevin Elián Valarezo Guamán
date: 26/03/2024
*/
//Declaración de funciones.
void sumar(double a[], int n, double); //Usado para realizar las sumas.
void restar(double a[], int n, double); //Usado para realizar las restas.
void dividir(double a[], int n, double); //Usado para realizar las divisiones.
void raiz(int d, int e, double); //Usado para sacar la raíz.
void elevar(double b, double c, double); //Usado para elevar un número.
//Tienen un vector para que el usuario pueda sumar N cantidad de números que desee.
//Variables globales
/*Variables int a usar
u: Sirve para sacar la posición de i de un ciclo for cuando sea mayor que 0.
*/
int u = 0;
/*Variables double a usar
resultado: Son para todos los resultados de las operaciones, ya que pueden llegar a ser enteras o con
decimales.
aux: Servierá para saber el primer número al momento de sumar, restar o dividir N cantidad de números.
*/
double resultado = 0, aux = 0;
//Función principal.
int main()
{
setlocale(LC_CTYPE, "Spanish"); //Sirve para el programa detecte signos del castellaño, aunque con la
//ñ sabe tener problemas en no presentarla bien.
/*Variables int a usar:
opcion: Sirve para navegar en el programa para que elegir unas de las opciones del menú.
n: Será la cantidad de números que va querer ingresar el usuario o índice en caso de la raíz.
m: Sirve para el número entero que debe ser al momento de sacar la raíz de un número.
*/
int opcion = 0, n, m;
/*Vectores double a usar:
a[100]: Será donde se almacenrán los números que se va querer sumar, restar o dividir.
*/
double a[100];
/*Variables double a usar
j y p: Sirven para la opción de elevar un número a cualquier cantidad, siendo el exponente y el número
con decimales.
*/
double j, p;
do
{
opcion = 0;
do
{
//Menú de opcipones del programa.
std::cout<<">> 1 Sumar"<<std::endl;
std::cout<<">> 2 Restar"<<std::endl;
std::cout<<">> 3 Dividir"<<std::endl;
std::cout<<">> 4 Raíz"<<std::endl;
std::cout<<">> 5 Elevar"<<std::endl;
std::cout<<" Opción: ";
std::cin>>opcion;
system("cls"); //Limpiador de pantalla.
switch(opcion) //switch que determinará cada uno de los casos del menú de opciones
{
case 1: //Caso número 1 en sumar
sumar(a, n, resultado); //Función que hará el proceso de sumar N cantidad de números.
break;
case 2: //Caso número 2 en restar
restar(a, n, resultado); //Función que hará el proceso de restar N cantidad de números.
break;
case 3: //Caso número 3 en dividir.
dividir(a, n, resultado); //Función que hará el proceso de dividir N cantidad de números.
break;
case 4: //Caso número 4 en sacar la raíz de un número.
raiz(m, n, resultado); //Función que sacará la raíz de cualquier número que no sea negativo.
break;
case 5: //Caso número 5 en elevar un número a cierta cantidad.
elevar(j, p, resultado); //Función que elevará un número a cualquier cantidad.
break;
default: //Caso default en no ser ningúna de los casos anteriores.
std::cout<<"Error: Opción no disponible\n"; /*Mensaje de error que aparcerá cuando el
usuario elija una opción fuera de los
parametro establecidos en el menú.*/
break;
}
}while(opcion<=0 || opcion>5); //Ciclo do...while() secundario que se repetirá si el usuario elige una opción fuera del rango establecido.
std::cout<<std::endl<<std::endl; //Dos saltos de líneas.
do
{
//Menú de opciones en querer hacer otro proceso o salir del programa.
std::cout<<"Volver al menú de opciones[1] |";
std::cout<<"| Salir del programa[2]"<<std::endl;
std::cout<<" Opción: "; std::cin>>opcion;
if(opcion<=0 || opcion>2) //if en caso de que el usuario elija una opción fuera de los parametros.
{
system("cls");
std::cout<<"Error: Opción no disponible\n"; //Mensaje de error.
}
else if(opcion == 2) //else if en caso de que el usuario quiera salir del programa.
{
std::cout<<"\nGracias por haber usado este programa :D"; //Mensaje de agradecimiento.
getch();
}
else system("cls"); //else en querer hacer otro cálculo.
}while(opcion<=0 || opcion>2); //Ciclo do...while() teceriario que se repetirá si el usuario elige una opción fuera de los parametros.
}while(opcion==1); //Ciclo do...while() principal solo si quiere hacer otro cálculo del programa.
return 0; //Finaliza el programa.
}
//Definición de funciones
void sumar(double a[], int n, double resultado) //Función que hará el proceso de sumar N cantidad de números.
{
do
{
std::cout<<"Ingrese cuantos números va sumar: "; std::cin>>n;
if(n<=0 || n>100)
{
system("cls");
std::cout<<"Cantidad de número no admitida\n";
}
else std::cout<<std::endl;
}while(n<=0 || n>100);
for(int i = 0; i<=n-1; i++)
{
std::cout<<" "; std::cin>>a[i];
if(i<n-1) std::cout<<"+ "<<std::endl; //if para que no aparezca un signo '+' al ingresar el último número.
resultado += a[i]; //En el mismo for se irá sumando todos los números que ingrese el usuario.
}
std::cout<<"--------\n";
std::cout<<" "<<resultado; //Se presentrá el resultado en pantalla.
}
void restar(double a[], int n, double resultado) //Funciín que hará el proceso de restar N cantidad de números.
{
do
{
std::cout<<"Ingrese cuantos números va restar: "; std::cin>>n;
if(n<=0 || n>100)
{
system("cls");
std::cout<<"Cantidad de número no admitida\n";
}
else std::cout<<std::endl;
}while(n<=0 || n>100);
for(int i = 0; i<=n-1; i++)
{
if(i>0) u = i; //u guardará el valor de i solo si 'i' es mayor que 0.
std::cout<<" "; std::cin>>a[i];
if(i<n-1) std::cout<<"- "<<std::endl; //if para no mostrar el signo '-' al ingresar el último número.
if(i==0) resultado = a[0];//Guadrá el primer valor que ingrese el usuario para ser restado con los siguientes.
else resultado -= a[u]; //Se restarán los siguientes números que vaya ingresando el usuario.
}
std::cout<<"--------\n";
std::cout<<" "<<resultado; //Se presentará el resultado en pantalla con el signo correspodiente.
}
void dividir(double a[], int n, double resultado) //Función que hará el proceso de dividir N cantidad de números.
{
int v = 0; //Verificador en caso de que se quiera dividir entre 0.
do
{
std::cout<<"Ingrese cuantos números va dividir: "; std::cin>>n;
if(n<=0 || n>100)
{
system("cls");
std::cout<<"Cantidad de número no admitida\n";
}
else std::cout<<std::endl;
}while(n<=0 || n>100);
for(int i = 0; i<=n-1; i++) //Ciclo for con el mismo proceso de restar cualquier cantidad de números.
{
if(i>0) u = i;
std::cout<<" "; std::cin>>a[i];
/*
if en caso de que un número después del primero sea 0 y se quiera dividir con los otros
se va a salir del for con el break y 'v' valdrá 1 para mostrar el mensaje de que no se puede
dividir entre 0.
*/
if(a[i]==0 && i>0)
{
v = 1;
break; //Se sale del for.
}
if(i<n-1) std::cout<<"/"<<std::endl; //No hará mostrar el signo '/' al ingresar el último número.
if(i==0) resultado = a[0];
else resultado /= a[u];
}
if(v==1) std::cout<<"No se puede dividir entre 0"; //Mensaje de error.
else{
std::cout<<"--------\n";
std::cout<<" "<<resultado;
}
}
void raiz(int d, int e, double resultado) //Función que hará el proceso de sacar raíz a un número.
{
std::cout<<"Ingrese el índice: "; std::cin>>e;
std::cout<<"Número a sacar raíz: "; std::cin>>d;
if(e == 0) std::cout<<"\nResultado: Sin definir"; //if en caso de que el usuario quiera sacar raíz con índice 0 aparece mensaje de error.
else if((e%2==0) && (d<0)) std::cout<<"\nResultado: Número imaginario";//else if en caso de ingresar un índice par y un número negativo.
else{ //else para no tener problemas para sacar la raíz de un número sin problemas para la computadora.
resultado = pow(d, 1.0/e); //Forma de sacar raíz de cualquier número con cualquier índice.
std::cout<<"Resultado: "<<resultado;
}
}
void elevar(double b, double c, double resultado) //Función que hará elevar a cualquier número a cierta cantidad.
{
std::cout<<"Ingrese el exponente: "; std::cin>>c;
std::cout<<"Número: "; std::cin>>b;
if(c<=0 && b == 0) std::cout<<"\nResultado: Sin definir"; //if en caso de que el exponente sea 0 o menor a este y el número sea 0.
else if(c == 0) std::cout<<"\nResultado: 1"; //else if cuando el usuario ingrese el exponente 0 para cualquier número.
else{ //else para no tener problemas al momento de elevar un número a cualquier cantidad.
resultado = pow(b, c);
std::cout<<"\nResultado: "<<resultado;
}
}