Diferencia entre revisiones de «Usuario:ManuelRomero/ProgramacionWeb/php/POO/practica»

De WikiEducator
Saltar a: navegación, buscar
(Calculadora Real/Racional)
Línea 535: Línea 535:
 
}}
 
}}
 
-->
 
-->
 +
{{Plegable|hide|Title=Clase Abstracta Operaciona|
 +
<source lang=php>
 +
 +
abstract class Operacion {
 +
 +
    //put your code here
 +
    protected $op1;
 +
    protected $op2;
 +
    protected $operador;
 +
    protected $operacion;
 +
    static protected $tipo;
 +
 +
    const RACIONAL = 1;
 +
    const REAL = 2;
 +
    const ERROR = -1;
 +
 +
/**
 +
    *
 +
    * @param string $operacion es una cadena con la operacion
 +
      * @return int indica el tipo de operaciion (ver constantes anteriores)
 +
    */
 +
    public static function tipoOperacion($operacion) {
 +
//Implementa
 +
 +
 +
    }
 +
 +
 +
    /**
 +
    *
 +
    * @param string $operacion  La operación a realizar leída de una caja de texto
 +
    * inicializa los atributos
 +
    */
 +
    public function __construct($operacion) {
 +
 +
    }
 +
 +
    private function obtenerOperador1($operacion) {
 +
       
 +
    }
 +
 +
    private function obtenerOperador2($operacion) {
 +
       
 +
    }
 +
 +
 +
/** Cuidado con el carácter /, puede ser parte del operadorando en el caso racional
 +
en el caso real es un posible opearador
 +
*/   
 +
private function obtenerOperador($operacion) {
 +
       
 +
    }
 +
 +
    public function getOp1() {
 +
        return $this->op1;
 +
    }
 +
 +
    public function getOp2() {
 +
        return $this->op2;
 +
    }
 +
 +
    public function getOperador() {
 +
        return $this->operador;
 +
    }
 +
 +
    public function getTipo() {
 +
        return $this->tipo;
 +
    }
 +
 +
    public function __toString() {
 +
        return "<br />$this->op1$this->operador$this->op2 = ";
 +
    }
 +
 +
    public function describe() {
 +
        $operacion = "<tr><th>Operando 1 </th> <th> $this->op1</th></tr>";
 +
        $operacion.="<tr><th>Operando 2 </th> <th> $this->op2</th></tr>";
 +
        $operacion.="<tr><th>Operación </th> <th> $this->operador</th></tr>";
 +
        if (self::$tipo == Operacion::RACIONAL)
 +
            $tipo = "Racional";
 +
        else
 +
            $tipo = "Real";
 +
        $operacion.="<tr><th>Tipo de operacion  </th> <th> $tipo</th></tr>";
 +
        return $operacion;
 +
    }
 +
 +
 +
    //Este método convierte a la clase en abstracta
 +
    //Se DEBE implementar en las clases que hereden de ella
 +
    abstract public function opera();
 +
    }
 +
 +
</source>
 +
 +
}}
 +
{{Plegable|hide|Title= Clase OperacionRacional|
 +
<source lang=php>
 +
<?php
 +
 +
/**
 +
* Description of OperacionRacional
 +
*
 +
* @author manuel
 +
*/
 +
class OperacionRacional extends Operacion {
 +
 +
    /**
 +
    inicializa los operandos, ahora ya sabemos que es un Racional ....
 +
*/
 +
    public function __construct($operacion) {
 +
//Implementa
 +
    }
 +
 +
    //Realiza la operacion indicada
 +
    public function opera() {
 +
//Implementa
 +
    }
 +
 +
    public function __toString() {
 +
//Implementa
 +
     
 +
    }
 +
 +
 +
    public function describe() {
 +
        $r = "<table border=1><tr><th>Cocepto</th> <th>Valores</th></tr>";
 +
        $r .= parent::describe();
 +
        $r.= "<tr><th>Resultado </th><th>" . $this->opera() . "</th></tr>";
 +
        $rtdo = $this->opera();
 +
        $r.= "<tr><th>Resultado simplificado</th><th>" . $rtdo->simplificar() . "</th></tr>";
 +
        $r.= "</table>";
 +
        return $r;
 +
    }
 +
}}
 +
{{Plegable|hide|Title= Clase OperacionReal|
 +
 +
<source ang=php>
 +
<?php
 +
 +
/*
 +
* To change this license header, choose License Headers in Project Properties.
 +
* To change this template file, choose Tools | Templates
 +
* and open the template in the editor.
 +
*/
 +
 +
/**
 +
* Description of OperacionReal
 +
*
 +
* @author manuel
 +
*/
 +
class OperacionReal extends Operacion {
 +
 +
    public function __construct($operacion) {
 +
        parent::__construct($operacion);
 +
    }
 +
 +
    public function opera() {
 +
 +
        switch ($this->operador) {
 +
            case '+':
 +
                $resultado = $this->op1 + $this->op2;
 +
                break;
 +
            case '-':
 +
                $resultado = $this->op1 - $this->op2;
 +
                break;
 +
            case '*':
 +
                $resultado = $this->op1 * $this->op2;
 +
                break;
 +
            case '/':
 +
                $resultado = $this->op1 / $this->op2;
 +
                break;
 +
            default :
 +
                $resultado = FALSE;
 +
        }
 +
        return $resultado;
 +
    }
 +
 +
    public function __toString() {
 +
        $r = parent::__toString();
 +
        $r.= $this->opera() . "<br />";
 +
        return $r;
 +
    }
 +
 +
    public function describe() {
 +
        $r = "<table border=1><tr><th>Cocepto</th> <th>Valores</th></tr>";
 +
        $r .= parent::describe();
 +
        $r.= "<tr><th>Resultado </th><th>" . $this->opera() . "</th></tr>";
 +
        $r.= "</table>";
 +
        return $r;
 +
    }
 +
 +
    //put your code here
 +
}
 +
 +
</source>
 +
 +
}}
 
</div>
 
</div>

Revisión de 21:32 12 mar 2018



Calculadora Real/Racional

  • Se pide que realicemos una aplicación web que resuelva cálculos aritméticos con operadores reales o racionales
  • La operación se insertará en una caja de texto
  • La operación tendrá el siguiente formato
OP1 operador OP2
  • Donde
  1. OP1 es un operador real o racional
  2. operador es una operación que puede ser +,-,*,/,:.
    1. según los operandos sean reales o racionales el operador división será / o : respectivamente
  • El tipo de operación, la deberemos obtener según nos indique un método stático de la clase operación según se indica más abajo.
  • En la pantalla mostraremos un pequeño texto explicativo y una caja de texto donde el usuario podrá interactuar

PracticaCalculadoraIndex1.png

  • En el siguiente enlace se puede ver el funcionamiento esperado en esta prácticas


Icon inter.gif
Pŕactica de la calculadora Real - Racional

http://manuel.infenlaces.com/dwes_2017/calculadora/


  • Vamos a aplicar una pequeña css para la pantalla


Icon casestudy.gif
Operaciones que se pueden insertar
9/8+4/7
9.4/2
9/6:6
9/5*5.6 (Éste es un caso de error)


  • Al presionar intro aparecerá un texto (en el primer caso 9/8+4/7)

PracticaCalculadoraUso1.png

  • En el segundo caso ( 9.4 / 2)

PracticaCalculadoraUso2.png

  • En el tercer caso ( 9/6:6)

PracticaCalculadoraUso3.png

  • En el cuarto caso es erróneo ( 9/5*5.6 )

PracticaCalculadoraUso4.png


  • Para realizar este ejercicio, tendremos que implementar las siguientes clases según aparece en el dibujo
  • Es obligatorio usar esta jerarquía de clase.

Racional.png

  • Todos los atributos private o protected (no debe de haber atributos public)
  • Los métodos según correspondan serán private protected o public
  • A continuación una descripción de las clases.
Racional (p.e 10/6)
Propiedades
  1. Num (p.e 10)
  2. Den (p.e 6)
Métodos
  1. constructor. Hay que sobrecargarlo según se indica, aunque en este caso, solo usemos el constructor con cadena de caracteres
$a = new Racional();      //Crea el racional 1/1
$a=  new Racional (10);   //Crea el racional 10/1
$a = new Racional(10,6);  //Crea el racional 10/6 
$a = new Racional("10/6");//Crea el racional 10/6
$a = new Racional("10");//Crea el racional 10/6
No hace falta recoger otras situaciones no deseadas, no obstante si se hace se debería de crear el Racional 1/1
  1. simplifica() Simplifica si se puede numerador y denominador (Utilizar el método de Euclides (mcd))


  1. suma
  2. resta
  3. multiplica
  4. divide
  5. __toString
Todos estos métodos operan con un argumento racional y retorna un Racional resultado de operarse él mismo con el racional que pasamos como argumento
//En la clase
public function suma (Racional $b) {
 $numResultado = ....;
 $denResultado = ....
 $resultado = new Racional......
 return $resultado;
}
.....
//En el programa que use la clase
 
$a = new Racional("5/6");
$b = new Racional (6,4);
$c= $a->sumar($b);
echo "$a+$b=$c"//Me visualizará 5/6+6/4=56/24, o bien simplificado 7/3
  • Por defecto todas las operaciones se deben de facilitar con el racional simplificado, salvo que se pase en la operación un segundo parámetro a valor false, en cuyo caso no se simplifica y se da el valor sin simplificar