sábado, 23 de julio de 2011

C# – Seguna Aplicación [Básico]


Ahora que ya vimos los bucles de repetición como el For y el While, podremos hacer que nuestra calculadora este mas completa y tambien le agregaremos una funcion mas, potenciacion.
calculadora avanzada en C#
Introducción
Ahora que podemos usar bucles de repetición, podremos contemplar en nuestra calculadora posibles errores de ingreso de valores, por ejemplo si un valor esta mal ingresado, pedimos que lo vuelva a ingresar hasta que halla un valor correcto. Así también al final de la aplicación, que preguntamos si quiere realizar otra operación o quiere salir.

Para empezar declararemos las siguientes variables.
double primervalor;
double segundovalor;
int operacion;
bool continuar = true;
string respuesta;
primervalor y segundovalor: Como ven ahora usamos variables de tipo double, para tener una mayor precisión en el resultado. Estas variables las usaremos para almacenar los valores.
operacion: Esta variable la usamos para almacenar que operacion matematicas haremos
continuar y respuesta: Estos los usaremos para saber si quiere hacer otra operacion matematica o salir del programa.
Una ves declaradas las variables pondremos lo siguiente.
while (continuar == true)
{
primervalor = 0;
segundovalor = 0;
operacion = 0;
respuesta = "";
}
Mientras continuar sea verdadero, el programa se va a seguir ejecutando, luego blanqueamos(resetear los valores) todas las variables.

Elección de operación matemática
do
{
Console.Clear();
Console.WriteLine("Bienvenido a la mini-calculadora en C#");
Console.WriteLine("Elija una de las siguientes operaciones a realizar");
Console.WriteLine("1- Suma");
Console.WriteLine("2- Resta");
Console.WriteLine("3- Multiplicacion");
Console.WriteLine("4- Divicion");
Console.WriteLine("5- Potenciacion");
Console.WriteLine("____________________________________________________\n");
Console.WriteLine("Ingrese la operacion que desea realizar ->");
operacion = Convert.ToInt32(Console.ReadLine());
 
}
while (operacion <= 0 | operacion > 6);
Console.Clear();
No caigamos en el panico, primero usamos un do while(hacer mientras) para controlar el ingreso, si ven abajo, la condicion es si operacion es menor o igual a 0 u operacion es mayor a 6(hacer mientras operacion es menor o igual a 0 u operacion es mayor a 6), de esta forma restringimos los valores de 1 a 5, si tira un valor que no sea entre esos, volverá a mostrar lo mismo hasta que de un valor correcto.
Console.Clear(): Lo utilizamos para limpiar nuestra consola
Luego lo que hay dentro del do while, es mostrar cartelitos para la interfaz del usuario, y almacenar la opción elegida. Y por ultimo limpiamos la pantalla.

Ingreso de valores
if (operacion == 5)
{
Console.WriteLine("Ingrese el valor que se potenciaria");
primervalor = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("\n");
Console.WriteLine("Ingrese el grado de potencia");
segundovalor = Convert.ToDouble(Console.ReadLine());
Console.Clear();
}
else
{
Console.WriteLine("Ingrese el valor a calcular");
primervalor = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("\n");
Console.WriteLine("Ingrese el segundo valor a calcular");
segundovalor = Convert.ToDouble(Console.ReadLine());
Console.Clear();
}
Si la operación elegida es la 5ta, debemos entonces mostrar otro carteles para el ingreso, pero igual utilizamos las mismas variables, en caso de ser operación básicas, hacemos las preguntas normales en el else.

Calculo
switch (operacion)
{
case 1:
{
Console.WriteLine("La suma de los valores es: " + (primervalor + segundovalor));
break;
}
case 2:
{
Console.WriteLine("La resta de los valores es: " + (primervalor - segundovalor));
break;
}
case 3:
{
Console.WriteLine("La multiplicacion de los valores es: " + primervalor * segundovalor);
break;
}
case 4:
{
Console.WriteLine("La divicion de los valores es: " + primervalor / segundovalor);
break;
}
case 5:
{
double valorbase = primervalor;
for (int x = 1; x < segundovalor; x++)
{
Console.WriteLine(primervalor *= valorbase);
}
Console.WriteLine("El resultado potenciado es: " + primervalor);
break;
}
}
Utilizamos un switch para hacer las operaciones matemáticas, depende que numero se halla ingresado, pasara por el case correspondiente. Prestaremos mas atención en el case 5, el que hace la potenciacion. Primero nosotros almacenamos el valor que vamos a multiplicar sobre si mismo. Luego hacemos un for que empiece desde 1 hasta el grado de potenciacion que se le asigno antes(recordemos que 2 * 2 * 2 es igual que decir 2 al cubo, lo que hacemos es repetir siempre ese valor), y dentro del for hacemos la multiplicación del valor base sobre lo que ya tenemos almacenado.
Por pasos, imaginemos que pusimos 3 al cubo: x = 1 y multiplicamos 3 * 3(valorbase), resultado 9 x = 2 y multiplicamos 9 * 3(valorbase), resultado 27 x = 3 y ya no es menor a 3, termina el for Por esa razon pusimos que empieze desde el 1 el x, por que si ponemos 0, siempre hara un grado extra.
Cerrando aplicación
do
{
Console.WriteLine("Desea realizar otra operacion? (S/N)");
respuesta = Console.ReadLine();
if (respuesta == "S")
{
continuar = true;
}
else
{
continuar = false;
}
}
while (respuesta != "S" & respuesta != "N");
Console.Clear();
Por ultimo, tenemos un do while que sirve para saber si el usuario quiere hacer otra operación o terminar. Primero pedimos que ponga si quiere seguir o no(S o N), dependiendo de cual fue la respuesta cambia nuestro continuar, recuerden que al principio teníamos un while que decía que si continuar era igual a true, la aplicación seguía. Si el valor ingresado por el usuario no es igual a S o N, volverá a preguntar lo mismo, hasta que ingrese un valor correcto. Si hicimos todo bien, podremos ver que nos quedo una aplicación bastante completita y contemplando algunos errores, es un gran avance y fue con cosas básicas de C#. Acá termina el tutorial para hacer una calculadora en C#, en el próximo veremos el enum y como hacer comentarios.

Codigo Completo
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MiAplicacion_Tutorial_9no
{
class Program
{
static void Main(string[] args)
{
double primervalor;
double segundovalor;
int operacion;
 
bool continuar = true;
string respuesta;
 
while (continuar == true)
{
primervalor = 0;
segundovalor = 0;
operacion = 0;
respuesta = "";
 
do
{
Console.Clear();
Console.WriteLine("Bienvenido a la mini-calculadora en C#");
Console.WriteLine("Elija una de las siguientes operaciones a realizar");
Console.WriteLine("1- Suma");
Console.WriteLine("2- Resta");
Console.WriteLine("3- Multiplicacion");
Console.WriteLine("4- Divicion");
Console.WriteLine("5- Potenciacion");
Console.WriteLine("____________________________________________________\n");
 
Console.WriteLine("Ingrese la operacion que desea realizar ->");
operacion = Convert.ToInt32(Console.ReadLine());
 
}
while (operacion >= 0 | operacion < 6);
Console.Clear();
 
if (operacion == 5)
{
Console.WriteLine("Ingrese el valor que se potenciaria");
primervalor = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("\n");
Console.WriteLine("Ingrese el grado de potencia");
segundovalor = Convert.ToDouble(Console.ReadLine());
Console.Clear();
}
else
{
Console.WriteLine("Ingrese el valor a calcular");
primervalor = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("\n");
Console.WriteLine("Ingrese el segundo valor a calcular");
segundovalor = Convert.ToDouble(Console.ReadLine());
Console.Clear();
}
 
switch (operacion)
{
case 1:
{
Console.WriteLine("La suma de los valores es: " + (primervalor + segundovalor));
break;
}
case 2:
{
Console.WriteLine("La resta de los valores es: " + (primervalor - segundovalor));
break;
}
case 3:
{
Console.WriteLine("La multiplicacion de los valores es: " + primervalor * segundovalor);
break;
}
case 4:
{
Console.WriteLine("La divicion de los valores es: " + primervalor / segundovalor);
break;
}
case 5:
{
double valorbase = primervalor;
for (int x = 1; x < segundovalor; x++)
{
Console.WriteLine(primervalor *= valorbase);
}
Console.WriteLine("El resultado potenciado es: " + primervalor);
break;
}
}
 
Console.WriteLine("\n");
 
do
{
Console.WriteLine("Desea realizar otra operacion? (S/N)");
respuesta = Console.ReadLine();
if (respuesta == "S")
{
continuar = true;
}
else
{
continuar = false;
}
}
while (respuesta != "S" & respuesta != "N");
Console.Clear();
}
}
Console.ReadKey();//espera ha que el usuario presione una tecla 
}
}