using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Calculadora
{
public partial class Formulariocalculadora : Form
{
private enum Entrada
{
NINGUNA,
DIGITO,
OPERADOR,
CE
}
private byte numOperandos;
private double operando1;
private double operando2;
private Entrada ultimaEntrada;
private bool comaDecimal;
private char operador;
private double memoria;
public Formulariocalculadora()
{
numOperandos = 0;
operando1 = 0;
operando2 = 0;
operador = '\0';
comaDecimal = false;
ultimaEntrada = Entrada.NINGUNA;
memoria = 0;
InitializeComponent();
}
private void btDigito_Click(object sender, EventArgs e)
{
Button objButton = (Button)sender;
if (ultimaEntrada != Entrada.DIGITO)
{
if (ultimaEntrada != Entrada.OPERADOR)
if (objButton.Text == "0") return;
etPantalla.Text = "";
if (objButton.Text == ",")
etPantalla.Text = "0";
ultimaEntrada = Entrada.DIGITO;
comaDecimal = false;
}
if (objButton.Text == ",")
{
if (comaDecimal == false)
{
etPantalla.Text += ",";
comaDecimal = true;
}
return;
}
etPantalla.Text += objButton.Text;
}
private void btOPeracion_Click(object sender, EventArgs e)
{
Button objButton = (Button)sender;
// Obtener el texto del botón pulsado
string textoBoton = objButton.Text;
if ((numOperandos == 0) && (textoBoton[0] == '-'))
ultimaEntrada = Entrada.DIGITO;
if (ultimaEntrada == Entrada.DIGITO)
numOperandos += 1;
if (numOperandos == 1)
operando1 = double.Parse(etPantalla.Text);
else if (numOperandos == 2)
{
operando2 = double.Parse(etPantalla.Text.Replace(',', '.'));
switch (operador)
{
case '+':
operando1 += operando2;
break;
case '-':
operando1 -= operando2;
break;
case 'x':
operando1 *= operando2;
break;
case '/':
operando1 /= operando2;
break;
case '=':
operando1 = operando2;
break;
}
etPantalla.Text = operando1.ToString();
numOperandos = 1;
}
operador = textoBoton[0];
ultimaEntrada = Entrada.OPERADOR;
}
private void btIniciar_Click(object sender, EventArgs e)
{
if (ultimaEntrada != Entrada.NINGUNA)
{
etPantalla.Text = "0,";
ultimaEntrada = Entrada.NINGUNA;
comaDecimal = false;
operador = '\0';
numOperandos = 0;
operando1 = 0;
operando2 = 0;
}
}
private void btBorrarEntrada_Click(object sender, EventArgs e)
{
if (ultimaEntrada != Entrada.NINGUNA)
{
if (etPantalla.Text.EndsWith(","))
comaDecimal = false;
etPantalla.Text = etPantalla.Text.Substring(0, etPantalla.Text.Length - 1);
if (etPantalla.Text.Length == 0 || ultimaEntrada == Entrada.CE)
{
etPantalla.Text = "0,";
ultimaEntrada = Entrada.CE;
//comaDecimal = false;
}
}
}
private void Formulariocalculadora_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar > 47 && e.KeyChar < 58)
{
if (ultimaEntrada != Entrada.DIGITO)
{
if(ultimaEntrada!=Entrada.OPERADOR)
if (e.KeyChar== 0) return;
etPantalla.Text = "";
ultimaEntrada = Entrada.DIGITO;
comaDecimal = false;
}
etPantalla.Text += e.KeyChar;
}
if (e.KeyChar == 27)
btIniciar.PerformClick();
else if (e.KeyChar == 8)
btBorrarEntrada.PerformClick();
else if (e.KeyChar == 43)
btMas.PerformClick();
else if (e.KeyChar == 45)
btMenos.PerformClick();
else if (e.KeyChar == 47)
btDividir.PerformClick();
else if (e.KeyChar == 37)
btTantoPorCiento.PerformClick();
else if (e.KeyChar == 42)
btpor.PerformClick();
else if (e.KeyChar == 44)
btComaDec.PerformClick();
}
private void button1_Click(object sender, EventArgs e)
{
if (ultimaEntrada != Entrada.NINGUNA)
{
double aux;
aux = double.Parse(etPantalla.Text.Replace(',', '.'));
aux = aux * (-1);
etPantalla.Text = aux.ToString().Replace('.', ',');
}
}
private void funciones_matematicas(object sender, EventArgs e)
{
ToolStripMenuItem menu = (ToolStripMenuItem)sender;
numOperandos = 1;
if (menu.Text == "sqrt")
{
operando1 = double.Parse(etPantalla.Text.Replace(',', '.'));
operando1=Math.Sqrt(operando1);
}
else if (menu.Text == "1/x")
{
operando1 = double.Parse(etPantalla.Text.Replace(',', '.'));
if (operando1 == 0)
{
MessageBox.Show("ERROR: Division por cero.");
return;
}
operando1 = 1 / operando1;
}
else if (menu.Text == "^")
{
operando1 = double.Parse(etPantalla.Text.Replace(',', '.'));
numOperandos = 1;
operador = '^';
}
ultimaEntrada = Entrada.OPERADOR;
etPantalla.Text = operando1.ToString().Replace('.',',');
}
private void teclas_de_memoria(object sender, EventArgs e)
{
ToolStripMenuItem menu = (ToolStripMenuItem)sender;
if (menu.Text == "M+")
memoria = double.Parse(etPantalla.Text.Replace(',', '.'));
else if (menu.Text == "M-")
memoria = 0;
else if (menu.Text == "MR")
etPantalla.Text = memoria.ToString().Replace('.', ',');
}
private void btComaDec_Click(object sender, EventArgs e)
{
if (ultimaEntrada != Entrada.DIGITO)
{
etPantalla.Text = "0,";
ultimaEntrada = Entrada.DIGITO;
}
else if (comaDecimal == false)
etPantalla.Text = etPantalla.Text + ",";
comaDecimal = true;
}
private void btTantoPorCiento_Click(object sender, EventArgs e)
{
double resultado;
if (ultimaEntrada == Entrada.DIGITO)
{
resultado = operando1 * double.Parse(etPantalla.Text) / 100;
// Visualizar el resultado
etPantalla.Text = resultado.ToString();
// Simular que se ha hecho clic en "="
btIgual.PerformClick();
// Enfocar la tecla %
btTantoPorCiento.Focus();
}
}
}
}
Resultado: