Bitacora #5 del ChMaquina

Desarrollo

En esta entrada se documentara la clase ChMaquina donde se encontraran las operaciones que los chprogramas realizaran:

ChMaquina

package chmaquina;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Stack;

import javax.swing.JOptionPane;

public class ChMaquina {

public static void ejecutar(ArrayList programa,boolean paso_paso){
try{

Main.vectorDeMemoria[0]=””; // Vacio el acumulador

boolean mantener=true;
int recorre=(int)programa.get(7); //Obtengo la posicion en donde inicia el codigo a ser ejecutado

String[] linea=Main.vectorDeMemoria[recorre].split(” “);
String instruccion=linea[1]; //la instruccion es la segunda componente de la linea

int pos;

while(!instruccion.equals(“retorne”)&& mantener ){
Main.Ejecucion.setText(Main.vectorDeMemoria[recorre]);
Main.Contador.setText(“”+recorre);

switch (instruccion) {

case “nueva”:
pos=Main.buscarVariable(linea[0]+” “+linea[2]);
Main.vectorDeMemoria[pos]=Main.variableValor(linea[0]+” “+linea[2]);
Main.refrescar((int)programa.get(7), (int)programa.get(8));
break;

case “cargue”:
pos=Main.buscarVariable(linea[0]+” “+linea[2]);
Main.vectorDeMemoria[0]=Main.vectorDeMemoria[pos];
Main.refrescar(0, 1);
Main.Acumulador.setText(Main.vectorDeMemoria[0]);

break;

case “almacene”:
int error=0;
pos=Main.buscarVariable(linea[0]+” “+linea[2]);
String tipo=Main.buscarVariable_tipo(linea[0]+” “+linea[2]);

try{

if(tipo.equals(“C”)){
Main.vectorDeMemoria[pos]=Main.vectorDeMemoria[0];
Main.refrescar((int)programa.get(7), (int)programa.get(8));

}else if(tipo.equals(“I”)){
int entero;
float decimal=Float.parseFloat(Main.vectorDeMemoria[0]);

entero=(int)decimal;

Main.vectorDeMemoria[pos]=Integer.toString(entero);
Main.refrescar((int)programa.get(7), (int)programa.get(8));

}else{
float decimal=Float.parseFloat(Main.vectorDeMemoria[0]);
error++;
Main.vectorDeMemoria[pos]=Float.toString(decimal);
Main.refrescar((int)programa.get(7), (int)programa.get(8));

}
}catch (Exception e) {
if(error==0){
JOptionPane.showMessageDialog(null, “No se puede almacenar el acumulador en una variable entera”, “Error”, JOptionPane.ERROR_MESSAGE);
}else{
JOptionPane.showMessageDialog(null, “No se puede almacenar el acumulador en una variable real”, “Error”, JOptionPane.ERROR_MESSAGE);
}

}
break;

case “sume”:
pos=Main.buscarVariable(linea[0]+” “+linea[2]);
Main.vectorDeMemoria[0]=Float.toString(Float.parseFloat(Main.vectorDeMemoria[0])+Float.parseFloat(Main.vectorDeMemoria[pos]));
Main.Acumulador.setText(Main.vectorDeMemoria[0]);
Main.refrescar(0, 1);

break;

case “reste”:
pos=Main.buscarVariable(linea[0]+” “+linea[2]);
Main.vectorDeMemoria[0]=Float.toString(Float.parseFloat(Main.vectorDeMemoria[0])-Float.parseFloat(Main.vectorDeMemoria[pos]));
Main.Acumulador.setText(Main.vectorDeMemoria[0]);
Main.refrescar(0, 1);

break;

case “multiplique”:
pos=Main.buscarVariable(linea[0]+” “+linea[2]);
Main.vectorDeMemoria[0]=Float.toString(Float.parseFloat(Main.vectorDeMemoria[0])*Float.parseFloat(Main.vectorDeMemoria[pos]));
Main.Acumulador.setText(Main.vectorDeMemoria[0]);
Main.refrescar(0, 1);

break;

case “divida”:
pos=Main.buscarVariable(linea[0]+” “+linea[2]);
float denominador=Float.parseFloat(Main.vectorDeMemoria[pos]);

if(denominador==0){
JOptionPane.showMessageDialog(null,”División por cero”, “Error matemático”,JOptionPane.ERROR_MESSAGE);
int op=JOptionPane.showOptionDialog(null, “Desea continuar la ejecución \n(Si la respuesta es sí, se asignará 0 al resultado)”, “División por cero”,
JOptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE, null, null, null);

if(op==JOptionPane.YES_OPTION){
Main.vectorDeMemoria[0]=”0″;
Main.refrescar(0, 1);
Main.Acumulador.setText(Main.vectorDeMemoria[0]);

}else{
mantener=false;
}
}else{

Main.vectorDeMemoria[0]=Float.toString(Float.parseFloat(Main.vectorDeMemoria[0])/denominador);;
Main.Acumulador.setText(Main.vectorDeMemoria[0]);
Main.refrescar(0, 1);

}

break;

case “vaya”:

int respuesta=JOptionPane.showOptionDialog(null, “¿Desea ejecutar vaya ?”, ” Vaya “,
JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, null);

if(respuesta==JOptionPane.YES_OPTION){

try{

pos=Main.buscarEtiqueta(linea[0]+” “+linea[2]);
recorre=pos-1;

}catch (Exception e) {
JOptionPane.showMessageDialog(null,”Error en ciclo vaya” , “Error”, JOptionPane.ERROR_MESSAGE);
}
}
else{
mantener=false;
}

break;

case “vayasi”:

int respuestaV=JOptionPane.showOptionDialog(null, “¿Desea ejecutar vayasi ?”, ” Vaya Si “,
JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, null);

if(respuestaV==JOptionPane.YES_OPTION){

try{

float acumula=Float.parseFloat(Main.vectorDeMemoria[0]);

if(acumula>0){

int pos1=Main.buscarEtiqueta(linea[0]+” “+linea[2]);
recorre=pos1-1;
}

else if(acumula<0){

int pos2=Main.buscarEtiqueta(linea[0]+” “+linea[3]);
recorre=pos2-1;
}

}catch (Exception e) {
JOptionPane.showMessageDialog(null,”Error en ciclo vayasi” , “Error”, JOptionPane.ERROR_MESSAGE);
}

}else{
mantener=false;
}

break;

case “lea”:
pos=Main.buscarVariable(linea[0]+” “+linea[2]);
String dato=JOptionPane.showInputDialog(“Ingrese el valor:”);
tipo=Main.buscarVariable_tipo(linea[0]+” “+linea[2]);
boolean ciclo=true;

while(ciclo){
try{
if(tipo.equals(“I”)){
Integer.parseInt(dato);
Main.vectorDeMemoria[pos]=dato;
Main.refrescar((int)programa.get(7), (int)programa.get(8));
break;

}else if(tipo.equals(“R”)){
Float.parseFloat(dato);
Main.vectorDeMemoria[pos]=dato;
Main.refrescar((int)programa.get(7), (int)programa.get(8));
break;

}else{
Main.vectorDeMemoria[pos]=dato;
Main.refrescar((int)programa.get(7), (int)programa.get(8));
break;
}

}catch (Exception e) {
JOptionPane.showMessageDialog(null, “Tipo de dato incorrecto, ingrese un valor de tipo : “+tipo, “Error”, JOptionPane.ERROR_MESSAGE);;
}
dato=JOptionPane.showInputDialog(“Ingrese el valor:”);

}

break;

case “potencia”:
int error1=0;
try{

float memoria=Float.parseFloat(Main.vectorDeMemoria[0]);
error1++;
int potencia=Integer.parseInt(linea[2]);

double valor=(double) Math.pow(memoria, potencia);
Main.vectorDeMemoria[0]=””+valor;
Main.refrescar(0, 1);
Main.Acumulador.setText(Main.vectorDeMemoria[0]);

}catch (Exception e) {
if(error1==0){
JOptionPane.showMessageDialog(null, “El acumulador no se puede elevar a una potencia”, “error”, JOptionPane.ERROR_MESSAGE);
mantener=false;
break;
}else{
JOptionPane.showMessageDialog(null, “La potencia debe ser un número entero”, “Error”, JOptionPane.ERROR_MESSAGE);
mantener=false;
break;
}
}
break;

case “modulo”:

try{
pos=Main.buscarVariable(linea[0]+” “+linea[2]);
tipo=Main.buscarVariable_tipo(linea[0]+” “+linea[2]);

if(tipo.equals(“I”)){
int memoria=Integer.parseInt(Main.vectorDeMemoria[0]);

int modulo=Integer.parseInt(Main.vectorDeMemoria[pos]);

int valor=(int) memoria%modulo;
Main.vectorDeMemoria[0]=””+valor;
Main.refrescar(0, 1);
Main.Acumulador.setText(Main.vectorDeMemoria[0]);
}else{
JOptionPane.showMessageDialog(null, “La variable debe ser de tipo entero”);
}

}catch (Exception e) {
JOptionPane.showMessageDialog(null, “El acumulador debe contener un número entero”,”Error”,JOptionPane.ERROR_MESSAGE);
}
break;

case “concatene”:

pos=Main.buscarVariable(linea[0]+” “+linea[2]);
String cadena=Main.vectorDeMemoria[0];
for (int i = 2; i < linea.length; i++) {
cadena=cadena+” “+Main.vectorDeMemoria[pos];
}

Main.vectorDeMemoria[0]=cadena;
Main.refrescar(0, 1);
Main.Acumulador.setText(Main.vectorDeMemoria[0]);
break;

case “elimine”:
try{
Integer.parseInt(Main.vectorDeMemoria[0]);
Float.parseFloat(Main.vectorDeMemoria[0]);

JOptionPane.showMessageDialog(null, “El acumulador debe tener una cadena”);

}catch (Exception e) {

pos=Main.buscarVariable(linea[0]+” “+linea[2]);
String caracteres=Main.vectorDeMemoria[pos];

String cadena_temporal=Main.vectorDeMemoria[0];

for (int i = 0; i < caracteres.length(); i++) {
String c=caracteres.substring(i,i+1);
cadena_temporal=cadena_temporal.replaceAll(c, “”);

}

Main.vectorDeMemoria[0]=cadena_temporal;
Main.refrescar(0, 1);
Main.Acumulador.setText(Main.vectorDeMemoria[0]);
}
break;

case “extraiga”:
String cadena1=Main.vectorDeMemoria[0];
try{
pos=Main.buscarVariable(linea[0]+” “+linea[2]);
int cantidad=Integer.parseInt(Main.vectorDeMemoria[pos]);
Main.vectorDeMemoria[0]=cadena1.substring(0,cantidad);
Main.refrescar(0, 1);
Main.Acumulador.setText(Main.vectorDeMemoria[0]);

}catch (Exception e) {
System.out.println(“Problema en extraiga”);
}

break;

case “muestre”:
if(linea[2].equals(“acumulador”)||linea[2].equals(“Acumulador”)){
Main.Pantalla.setText(Main.Pantalla.getText()+Main.vectorDeMemoria[0]+”\n”);

}else{
pos=Main.buscarVariable(linea[0]+” “+linea[2]);
Main.Pantalla.setText(Main.Pantalla.getText()+Main.vectorDeMemoria[pos]+”\n”);
}

break;

default:
break;

case “imprima”:

if(linea[2].equals(“acumulador”)||linea[2].equals(“Acumulador”)){
Main.Impresora.setText(Main.Impresora.getText()+Main.vectorDeMemoria[0]+”\n”);

}else{
pos=Main.buscarVariable(linea[0]+” “+linea[2]);
Main.Impresora.setText(Main.Impresora.getText()+Main.vectorDeMemoria[pos]+”\n”);
}

break;
}

if(paso_paso){
try{
Thread.sleep(1000);
}catch(InterruptedException e ){
System.out.println(“Thread Interrupted”);
}

int opcion=JOptionPane.showOptionDialog(null, “¿Desea continuar a la siguiente línea?”, “Ejecución paso a paso”,
JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, null);

if(opcion==JOptionPane.YES_OPTION){
linea=Main.vectorDeMemoria[++recorre].split(” “);
instruccion=linea[1];
}else{
mantener=false;
}
}else{

linea=Main.vectorDeMemoria[++recorre].split(” “);
instruccion=linea[1];
}
}

}catch(Exception ex){
System.out.println(ex);
}
}

}

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s