//Fabricio Rodriguez Acevedo
import java.util.Scanner;

public class Quiz02{
  static Scanner teclado = new Scanner(System.in);
  static String operador = "+";
  static double valorMinimo = 0.0, valorMaximo = 0.0, incremento = 0.0;
  static int numeroNuevo = 0, iEntero = 0;
  
  public static void main(String args[]){
    System.out.println("Tablas de operadores");
    
    while(leerOperador()){
      
      switch(operador){
        
        case "+":
          leerValores();
          
          System.out.printf("    +  |");
          for(double i=valorMinimo; i<=valorMaximo; i+=incremento){
            iEntero=(int)(i);
            if(iEntero==i)
              System.out.printf("%6d", iEntero);
            else
              System.out.printf("%6.1f", i);
          }
          
          System.out.println();
          
          for(double rayas=valorMinimo; rayas<=valorMaximo; rayas+=incremento)
            System.out.print("-------");
          
          System.out.println();
          
          for(double i=valorMinimo; i<=valorMaximo; i+=incremento){
            iEntero=(int)(i);
            if(iEntero==i)
              System.out.printf("%6d |", iEntero);
            else
              System.out.printf("%6.1f |", i);
            
            for(double j=valorMinimo; j<=valorMaximo; j+=incremento){
              numeroNuevo=(int)(i+j);
              if(numeroNuevo==(i+j))
                System.out.printf("%6d", numeroNuevo);
              else
                System.out.printf("%6.1f", i+j);
            }
            
            System.out.println();  
          }
          break;
          
          
          
        case "-":
          leerValores();
          
          System.out.printf("    -  |");
          for(double i=valorMinimo; i<=valorMaximo; i+=incremento){
            iEntero=(int)(i);
            if(iEntero==i)
              System.out.printf("%6d", iEntero);
            else
              System.out.printf("%6.1f", i);
          }
          
          System.out.println();
          
          for(double rayas=valorMinimo; rayas<=valorMaximo; rayas+=incremento)
            System.out.print("-------");
          
          System.out.println();
          
          for(double i=valorMinimo; i<=valorMaximo; i+=incremento){
            iEntero=(int)(i);
            if(iEntero==i)
              System.out.printf("%6d |", iEntero);
            else
              System.out.printf("%6.1f |", i);
            
            for(double j=valorMinimo; j<=valorMaximo; j+=incremento){
              numeroNuevo=(int)(i-j);
              if(numeroNuevo==(i-j))
                System.out.printf("%6d", numeroNuevo);
              else
                System.out.printf("%6.1f", i-j);
            }
            
            System.out.println();  
          }
          break;
          
          
          
        case "*":
          leerValores();
          
          System.out.printf("    *  |");
          for(double i=valorMinimo; i<=valorMaximo; i+=incremento){
            iEntero=(int)(i);
            if(iEntero==i)
              System.out.printf("%6d", iEntero);
            else
              System.out.printf("%6.1f", i);
          }
          
          System.out.println();
          
          for(double rayas=valorMinimo; rayas<=valorMaximo; rayas+=incremento)
            System.out.print("-------");
          
          System.out.println();
          
          for(double i=valorMinimo; i<=valorMaximo; i+=incremento){
            iEntero=(int)(i);
            if(iEntero==i)
              System.out.printf("%6d |", iEntero);
            else
              System.out.printf("%6.1f |", i);
            
            for(double j=valorMinimo; j<=valorMaximo; j+=incremento){
              numeroNuevo=(int)(i*j);
              if(numeroNuevo==(i*j))
                System.out.printf("%6d", numeroNuevo);
              else
                System.out.printf("%6.1f", i*j);
            }
            
            System.out.println();  
          }
          break;
          
          
          
        case "/":
          leerValores();
          
          System.out.printf("    /  |");
          for(double i=valorMinimo; i<=valorMaximo; i+=incremento){
            iEntero=(int)(i);
            if(iEntero==i)
              System.out.printf("%6d", iEntero);
            else
              System.out.printf("%6.1f", i);
          }
          
          System.out.println();
          
          for(double rayas=valorMinimo; rayas<=valorMaximo; rayas+=incremento)
            System.out.print("-------");
          
          System.out.println();
          
          for(double i=valorMinimo; i<=valorMaximo; i+=incremento){
            iEntero=(int)(i);
            if(iEntero==i)
              System.out.printf("%6d |", iEntero);
            else
              System.out.printf("%6.1f |", i);
            
            for(double j=valorMinimo; j<=valorMaximo; j+=incremento){
              numeroNuevo=(int)(i/j);
              if(numeroNuevo==(i/j))
                System.out.printf("%6d", numeroNuevo);
              else
                System.out.printf("%6.1f", i/j);
            }
            
            System.out.println();  
          }
          break;
          
          
          
        case "%":
          leerValores();
          
          System.out.print("    %  |");
          for(double i=valorMinimo; i<=valorMaximo; i+=incremento){
            iEntero=(int)(i);
            if(iEntero==i)
              System.out.printf("%6d", iEntero);
            else
              System.out.printf("%6.1f", i);
          }
          
          System.out.println();
          
          for(double rayas=valorMinimo; rayas<=valorMaximo; rayas+=incremento)
            System.out.print("-------");
          
          System.out.println();
          
          for(double i=valorMinimo; i<=valorMaximo; i+=incremento){
            iEntero=(int)(i);
            if(iEntero==i)
              System.out.printf("%6d |", iEntero);
            else
              System.out.printf("%6.1f |", i);
            
            for(double j=valorMinimo; j<=valorMaximo; j+=incremento){
              numeroNuevo=(int)(i%j);
              if(numeroNuevo==(i%j))
                System.out.printf("%6d", numeroNuevo);
              else
                System.out.printf("%6.1f", i%j);
            }
            
            System.out.println();  
          }
          break;
          
      }//switch(operador)
      
      System.out.println();
    }//whilePrincipal
    
  }//main
  
  
  public static boolean leerOperador(){
    System.out.print("Operador [+ | - | * | / | % | Salir]: ");
    operador=teclado.nextLine();
    if(!(operador.equalsIgnoreCase("Salir"))) return true;
    else return false;
    
  }//leerOperador
  
  
  public static void leerValores(){
    System.out.print("Valor minimo: ");
    valorMinimo=teclado.nextDouble();
    
    System.out.print("Valor maximo: ");
    valorMaximo=teclado.nextDouble();
    
    System.out.print("Incremento: ");
    incremento=teclado.nextDouble();
    while(incremento<=0){
      System.out.print("Incremento: ");
      incremento=teclado.nextDouble();
    }//while(incremento<=0)
    
  }//leerValores
  
}//class