/* Este codigo muestra la llamada a ciertos ejercicios de la guia # 3
   Autor: Tec. Christian Martinez
 */
package programacioniv;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*esta clase servira para crear un objeto que sea accedido por cualquier clase
y que no tengamos la necesidad de volver a digitar estas dos lineas el objeto 
final sera lectura
*/
 class definirobjetos{
     InputStreamReader ins = new InputStreamReader(System.in );
     BufferedReader lectura = new  BufferedReader(ins);   
    }
 //Fin de la clase definir objetos 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 /*Se definie una clase que sera general esta hereda de la clase definir objetos y tendra un metodo que se llamara ImprimirMsg
   esta clase tiene 2 atributos(los dos son heredados de la clase definirobjetos) y un metodo (propio de la clase el cual se llama ImprimirMsg)
 */
 class General extends definirobjetos{
    public void ImprimirMsg(String Cadena){
     System.out.println(Cadena) ;
    }
}
 //Fin de la clase General
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
 //Clase del ejercicio # 1 
class ejercicio1 {
 public void ImprimirMsg(){
    System.out.println("Imprimir un mensaje");
 }
}
//Fin de la clase del ejercicio 1
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*Clase del ejercicio 2 que es herencia de la clase General por lo tanto esta clase contiene 3 atributos (2 que son heredados y uno propio)
 y dos metodos(1 heredado de la clase general y el otro propio) 
  */
class ejercicio2 extends General {
int edad;//Atributo de la clase ejercicio 2 
//Metodo Constructor
public ejercicio2() throws IOException{
    /*fijense en este contructor capturamos los valores para edad y ya no declaramos 
     los objetos inputstreamreader ni el bufferedreader ya que si se fijan heredamos los atributos de la clase general 
     automaticamente tenemos acceso a esos atributos.
     */
        edad = Integer.parseInt(lectura.readLine());
 }
}
//Fin de la clase del ejercicio # 2
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

class ejercicio3 extends General{
double radio;
    public ejercicio3() throws IOException{
   radio = Double.parseDouble(lectura.readLine());
 }
    public double Area(){
        //la formula del area es 4 * Pi * radio al cuadrado
        return 4*3.14*Math.pow(radio,2);//Notese que se usa una funcion que sirve para elevar el radio al cuadrado para usarla hay que llamar a la clase Math y luego el metodo Pow
    }
    public double Diametro(){
       return radio*2;
    }
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Clase principal
public class Ejercicios { 
    public static void main(String[] args) throws IOException {
      int opc;
      System.out.println("Esta Aplicacion Contiene lso Ejercicios de la Guia Practica # 3");
      System.out.println("A continuacion Aparecen 3 opciones para ejecutar la aplicacion:");
      System.out.println("1. Ejercicio 1\n2. Ejercicio 2\n3. Ejercicio 3");
      definirobjetos nuevo = new definirobjetos();//definimos un objeto de la clase definirobjetos
      opc = Integer.parseInt(nuevo.lectura.readLine());
      switch(opc){
          case 1:  //crearemos un objeto de la clase ejercicio 1 
                    ejercicio1 objeto1 = new ejercicio1();
                    objeto1.ImprimirMsg();
                    break;
          case 2 :
              //crearemos un objeto de la clase ejercicio 2
                    System.out.println("Digite la edad");
                    ejercicio2 objeto2 = new ejercicio2();
                    objeto2.ImprimirMsg("La Edad Capturada es: " + objeto2.edad);
                    break;
/*ocupamos el metodo de la clase ejercicio 2  ¿pero como si no lo hemos definido?
 eso es por que por herencia de la clase general en la cual ya se habia definido el metodo 
 ImprimirMsg por lo tanto ya tenemos acceso a ese metodo y le enviamos como parametro la cadena que querremos imprimir
*/
          case 3 : 
              //Creamos un objeto de la clase ejercicio3
                   System.out.println("Digite el radio de la circunferencia"); 
                    ejercicio3 objeto3 = new ejercicio3();
                    objeto3.ImprimirMsg("El area es de la Circunferencia : " + objeto3.Area() + "\nEl Diametro de la Circunferencia es: " + objeto3.Diametro());
              break;
           default : 
                    System.out.println("La opcion Elegida no es Valida");
                        
        }
  
    }
    
}
