package calculadora;
import [Link]; // Importación de la clase Scanner.
public class TestCalculadora{
public static void main(String[] args) {
Scanner sc = new Scanner([Link]);
double res = 0;
String operacion;
boolean comprobar = false;
do{
//Verificación de los datos puestos por el usuario del número 1.
/* Con matches, hay una condición de que dígitos primero puede
poner el usuario, en la condicional tenemos primero que solo se
admite los caracteres '+' y '-', pero con la condición de que sea una sola vez o
ninguna vez. Después tenemos que se admiten cualquier número del 0 al 9 y que se
ponga o 0 veces o más veces, es decir, se pone algo o no se pone nada. Mas otra
condición de que solo admite el carácter '.' una o ninguna vez. Seguido del
punto, si es que se coloca, se admite cualquier número del 0 al 9 que sea una o
más veces.*/
String numero1;
do {
[Link]("\n Por favor, dame el primer número de la
operación. ");
numero1 = [Link]();
} while ();
double nume1 = [Link](numero1);
double n1 = new Double(numero1);
// Fin de la verificación de los datos puestos por el usuario del
número 1.
do {
[Link]("\n ¿Que operación desea hacer? (Solo coloque
un signo)");
[Link]("Teniendo en cuenta que: \n + = sumar \n - =
restar \n"
+ " x = multiplicar \n / = dividir \n * = elevar primer
número al segundo numero."
+ "\n % = residuo");
operacion = [Link]();
if ([Link]("+") || [Link]("-") ||
[Link]("x") ||
[Link]("X") || [Link]("/") ||
[Link]("%") ||
[Link]("*")) {
comprobar = true;
}else { comprobar = false; }
} while (comprobar != true);
// Verificación de los datos puestos por el usuario del número 2.
String numero2;
do {
[Link]("\n Por favor, dame el segundo número.");
numero2 = [Link]();
} while ();
double nume2 = [Link](numero2);
double n2 = new Double(numero2);
// Fin de la verificación de los datos puestos por el usuario del
número 2.
do{
comprobar = true;
switch(operacion){
case "+":
res = n1 + n2;
break;
case "-":
res = n1 - n2;
break;
case "x":
case "X":
res = n1 * n2;
break;
case "/":
/* Por tal de evitar errores y añadir números complejos,
si el usuario coloca 0 como segundo número, se piensa entonces que el denominador
es 0, y por ello añado una condicional que lo verifique, y para hacer el codigo
mas dinamico y no solo añadir un 1, le vuelvo a preguntar al usuario que añada un
número distinto, podría volver a colocar 0, y es la razón por la que se encuentra
en un ciclo, así que mientras n2 sea 0, el código seguirá ejecutando hasta que
ponga otro. */
while(n2 == 0){
do {
[Link](" En el denominador se
encuentra \n"
+ "un cero, para evitar errores
coloca otro número.");
numero2 = [Link]();
}while ();
nume2 = [Link](numero2);
n2 = new Double(numero2);
res = n1 / n2;
break;
case "*":
res = [Link](n1, n2);
break;
case "%":
while(n2 == 0){
do {
[Link](" En el denominador se
encuentra \n"
+ "un cero, para evitar errores
coloca otro número.");
numero2 = [Link]();
}while ();
nume2 = [Link](numero2);
n2 = new Double(numero2);
res = n1 % n2;
break;
}while(comprobar != true);
[Link]("(" + numero1 + ") " + operacion + " (" + numero2
+ ")" + " = " + res);
[Link]("\n ¿Desea hacer alguna otra operación? \n");
[Link](" [s/n]");
do{
comprobar = true;
operacion = [Link]();
switch (operacion) {
case "s":
case "S":
case "n":
case "N":
break;
default:
[Link]("\n Error, ponga un literal valido.
\n");
comprobar = false;
}while(comprobar != true);
}while([Link]("s") || [Link]("S"));
}
<html>
<head>
<title>Calculadora</title>
<link rel="stylesheet" type="text/css" href="[Link]" />
<script type="text/javascript" src="[Link]"></script>
</head>
<body>
<div class="calculadora"
<form action="#" name="calculadora" id="calculadora">
<p id="textoPantalla">0</p>
<p>
<input type="button" class="largo" value="Retr" onclick="retro()" />
<input type="button" class="largo" value="CE" onclick="borradoParcial()"
/>
<input type="button" class="largo" value="C" onclick="borradoTotal()" />
</p>
<p>
<input type="button" value="7" onclick="numero(7)" />
<input type="button" value="8" onclick="numero('8')" />
<input type="button" value="9" onclick="numero('9')" />
<input type="button" value="/" onclick="operar('/')" />
<input type="button" value="Raiz" onclick="raizc()" />
</p>
<p>
<input type="button" value="4" onclick="numero('4')" />
<input type="button" value="5" onclick="numero('5')" />
<input type="button" value="6" onclick="numero('6')" />
<input type="button" value="*" onclick="operar('*')" />
<input type="button" value="%" onclick="porcent()" />
</p>
<p>
<input type="button" value="1" onclick="numero('1')" />
<input type="button" value="2" onclick="numero('2')" />
<input type="button" value="3" onclick="numero('3')" />
<input type="button" value="-" onclick="operar('-')" />
<input type="button" value="1/x" onclick="inve()" />
</p>
<p>
<input type="button" value="0" onclick="numero('0')" />
<input type="button" value="+/-" onclick="opuest()" />
<input type="button" value="." onclick="numero('.')" />
<input type="button" value="+" onclick="operar('+')" />
<input type="button" value="=" onclick="igualar()" />
</p>
</form>
</div>
</body>
</html>
Página de estilos: [Link]
/*aspectos generales: bordes y color de fondo de calculadora*/
.calculadora { border: 3px blue ridge; width: 250px;text-align: center;
background-color: #f6f8d8; }
/*pantalla de visualización: bordes, posición, color de fondo, estilo
letra.*/
#textoPantalla { width: 185px; border: 2px black solid; text-align:
right;
position: relative; left: 23px; padding: 0px 5px;
background-color: white; font-family: "courier new";
overflow: hidden;}
/*botones normales: anchura y margen*/
.calculadora [type=button] { width: 35px; padding: 0; }
/*botones especiales*/
.calculadora [Link] { color: red; width: 60px; }
Página javascript: [Link]
[Link] = function(){ //Acciones tras cargar la página
pantalla=[Link]("textoPantalla"); //elemento pantalla de
salida
[Link] = teclado; //función teclado disponible
}
x="0"; //número en pantalla
xi=1; //iniciar número en pantalla: 1=si; 0=no;
coma=0; //estado coma decimal 0=no, 1=si;
ni=0; //número oculto o en espera.
op="no"; //operación en curso; "no" = sin operación.
//mostrar número en pantalla según se va escribiendo:
function numero(xx) { //recoge el número pulsado en el argumento.
if (x=="0" || xi==1 ) { // inicializar un número,
[Link]=xx; //mostrar en pantalla
x=xx; //guardar número
if (xx==".") { //si escribimos una coma al principio del
número
[Link]="0."; //escribimos 0.
x=xx; //guardar número
coma=1;
else { //continuar escribiendo un número
if (xx=="." && coma==0) { //si escribimos una coma decimal
pòr primera vez
[Link]+=xx;
x+=xx;
coma=1; //cambiar el estado de la coma
}
//si intentamos escribir una segunda coma decimal no
realiza ninguna acción.
else if (xx=="." && coma==1) {}
//Resto de casos: escribir un número del 0 al 9:
else {
[Link]+=xx;
x+=xx
}
}
xi=0 //el número está iniciado y podemos ampliarlo.
}
function operar(s) {
igualar() //si hay operaciones pendientes se realizan primero
ni=x //ponemos el 1º número en "numero en espera" para poder
escribir el segundo.
op=s; //guardamos tipo de operación.
xi=1; //inicializar pantalla.
}
function igualar() {
if (op=="no") { //no hay ninguna operación pendiente.
[Link]=x; //mostramos el mismo número
}
else { //con operación pendiente resolvemos
sl=ni+op+x; // escribimos la operación en una cadena
sol=eval(sl) //convertimos la cadena a código y resolvemos
[Link]=sol //mostramos la solución
x=sol; //guardamos la solución
op="no"; //ya no hay operaciones pendientes
xi=1; //se puede reiniciar la pantalla.
}
}
function raizc() {
x=[Link](x) //resolver raíz cuadrada.
[Link]=x; //mostrar en pantalla resultado
op="no"; //quitar operaciones pendientes.
xi=1; //se puede reiniciar la pantalla
function porcent() {
x=x/100 //dividir por 100 el número
[Link]=x; //mostrar en pantalla
igualar() //resolver y mostrar operaciones pendientes
xi=1 //reiniciar la pantalla
}
function opuest() {
nx=Number(x); //convertir en número
nx=-nx; //cambiar de signo
x=String(nx); //volver a convertir a cadena
[Link]=x; //mostrar en pantalla.
}
function inve() {
nx=Number(x);
nx=(1/nx);
x=String(nx);
[Link]=x;
xi=1; //reiniciar pantalla al pulsar otro número.
}
function retro(){ //Borrar sólo el último número escrito.
cifras=[Link]; //hayar número de caracteres en pantalla
br=[Link](cifras-1,cifras) //describir último caracter
x=[Link](0,cifras-1) //quitar el ultimo caracter
if (x=="") {x="0";} //si ya no quedan caracteres, pondremos el 0
if (br==".") {coma=0;} //Si el caracter quitado es la coma, se
permite escribirla de nuevo.
[Link]=x; //mostrar resultado en pantalla
}
function borradoParcial() {
[Link]=0; //Borrado de pantalla;
x=0;//Borrado indicador número pantalla.
coma=0; //reiniciamos también la coma
}
function borradoTotal() {
[Link]=0; //poner pantalla a 0
x="0"; //reiniciar número en pantalla
coma=0; //reiniciar estado coma decimal
ni=0 //indicador de número oculto a 0;
op="no" //borrar operación en curso.
}
function teclado (elEvento) {
evento = elEvento || [Link];
k=[Link]; //número de código de la tecla.
//teclas númericas del teclado alfamunérico
if (k>47 && k<58) {
p=k-48; //buscar número a mostrar.
p=String(p) //convertir a cadena para poder añádir en
pantalla.
numero(p); //enviar para mostrar en pantalla
}
//Teclas del teclado númerico. Seguimos el mismo procedimiento
que en el anterior.
if (k>95 && k<106) {
p=k-96;
p=String(p);
numero(p);
}
if (k==110 || k==190) {numero(".")} //teclas de coma decimal
if (k==106) {operar('*')} //tecla multiplicación
if (k==107) {operar('+')} //tecla suma
if (k==109) {operar('-')} //tecla resta
if (k==111) {operar('/')} //tecla división
if (k==32 || k==13) {igualar()} //Tecla igual: intro o barra
espaciadora
if (k==46) {borradoTotal()} //Tecla borrado total: "supr"
if (k==8) {retro()} //Retroceso en escritura : tecla retroceso.
if (k==36) {borradoParcial()} //Tecla borrado parcial: tecla de
inicio.
}