sábado, 12 de noviembre de 2011

Serie Fibonacci

Autor: Lidia Bachsmann
Competencia: Aplica las Ciencias de la ingeniería. (Nivel 1)
Palabras Clave: Fibonacci, Java.


Descripción de la Actividad
En esta ocasión, en la clase se planteó solucionar un problema matemático denominado "Serie de Fibonacci", creando una aplicación en JAVA.
Esta sucesión es infinita de números naturales: 0, 1, 1, 2, 3, 5, 8, 13, 21, ...

Como anécdota, antes de que Fibonacci escribiera su trabajo, la sucesión de los números de Fibonacci había sido descubierta por matemáticos indios tales como Pingala (200 a.c.), Gopala (antes de 1135) y Hemachandra (c. 1150), quienes habían investigado los patrones rítmicos que se formaban con sílabas o notas de uno o dos pulsos. El número de tales ritmos (teniendo juntos una cantidad n de pulsos) era fn + 1, que produce explícitamente los números 1, 2, 3, 5, 8, 13, 21, etc. La sucesión fue descrita por Fibonacci como la solución a un problema de la cría de conejo.
De seguro, alguna vez has escuchado de esta serie, pero... ¿Te preguntaste alguna vez cómo imprimir esta serie en pantalla, si el usuario es quien determina el límite? Por ejemplo, si ese sujeto pide al programa que imprima los primeros 3 números de esta serie, como respuesta debería dar: 0, 1, 1, 2, 3.


Solución: 

Primero que todo, hay que pensar la manera de expresar algebraicamente. Lo más sencillo es expresar este "pensamiento" mediante el Método de los Cuatro Pasos" (estrategia: "Divide y vencerás")

Paso 1: Ejemplificación
En esta sección, plantea la entrada y salida del programa, buscando los posibles errores que el usuario haría.
ENTRADA > [PROCESO]>SALIDA

1) A > [PROCESO] > “Ingrese número”
2) @.-¡#$%&/()=?¿¡* > [PROCESO] > “Ingrese sólo número”
3) 1,2 > [PROCESO] > “Ingrese número entero”
4) ¼ > [PROCESO] > “Ingrese número entero”
5) -8 > [PROCESO] > “No se permite número negativo”
6) 4+2i > [PROCESO] > “Sólo se permite número entero”
7) 7-1 > [PROCESO] > “No se permite restar”
8) 1+2 > [PROCESO] > “No se permite sumar”
9) 56^2  > [PROCESO] > "Ingrese sólo número"
10) 13/02/2011 > [PROCESO] > “No se permite fecha”
11) > [PROCESO] > “Ingrese número”
12) a90nm > [PROCESO] > “Ingrese sólo número”
13) hg kjh > [PROCESO] > “Ingrese sólo número, sin espacios”
14) log 3 > [PROCESO] > “No se permite obtener logaritmo”
15) 2*4 > [PROCESO] > “No se permite multiplicar”
Entrada: Se considera sólo número entero, mayor que cero
Ejemplo:
9 > [PROCESO] > 0, 1, 1, 2, 3, 5, 8, 13, 21
Salida: Serie de Fibonacci

Paso 2: Análisis y Diseño
La Sucesión o Serie de Fibonacci se genera a partir de dos valores iniciales, que son datos establecidos por defecto. El usuario deberá ingresar el número (n) que limitará esta sucesión.
Valor 1: a= 0
Valor 2: b=1
nuevoTermino= a+b









Pseudocódigo
  • Inicio
  • Solicitar al usuario que ingrese el número que limitará la sucesión
  • Captura el dato y lo almacena en la variable <n>
  • Validamos si el número ingresado es tal, es decir, debemos evitar que ingrese símbolos o letras.
  • Iniciamos las variables a y b, donde a=0; b=1;
  • Para (i=0; i<n; i++)
    • Muestra resultado en pantalla
    • a=a+b;
    • b=a-b;
  • Fin Para
  • Fin tarea principal
  • Fin del programa

Paso Nº 3: Especificación en Diagrama de Actividades 






















Paso Nº 4: Implementación en JAVA

package fibonacci;
import java.io.*;
/*
 * @author Lidia Bachsmann Riquelme
 * @date 12/08/2011
 *
 * Asunto: Genera los <n> numeros de la serie de Fibonacci,
 * donde <n> es ingresado por el usuario.
 */
class Fibonacci
{
/*
 * Aquí se define la funcion principal. Para ejecutar el programa,
 * se requiere que la funcion sea publica, además que debe ser estatica,
 * es decir, podemos llamar a este método sin un objeto de la clase
 * Fibonacci (se crea una instancia) y no tiene que devolver nada, ya que
 * será dirigida por el intérprete, que se encargará el estado de salida.
 */
  public static void main(String args[])
  {
  /* Indica en pantalla al usuario la instruccion para que inicie el
   * programa.
   */
     System.out.println("¿Cuántos números de Fibonacci quieres ver?: ");
     // Creación del flujo para leer datos
     InputStreamReader sr = new InputStreamReader(System.in);
     //Creación del filtro para optimizar la lectura de datos
     BufferedReader br = new BufferedReader(sr);
     // Aquí indicamos al programa como enfrentar a los posibles errores
     //El programa comienza con la validación de datos. En <try> da la pauta de  
     //que trabajara con numeros enteros.
     try
     {
        //La aplicacion lee el dato ingresado (del tipo String) y lo transforma a 
        //un numero entero
        String input = br.readLine();
        int n = Integer.valueOf(input).intValue();
        fibonacci(n);
     }
     catch (NumberFormatException e)
     {
        //Comienza con la captura de errores. Si el usuario ingresa "algo" 
        //diferente de un numero entero y/o String aparecerá en pantalla el 
        //mensaje "No es válido. Ingrese un número entero"
        System.out.println("No es válido. Ingrese un número entero");
     }
     catch (IOException e)
     {
        System.out.println("No ha ingresado nada");
     }
   }
  /*
   * En este ámbito, se define la función de Fibonacci como principal,
   * que es público y pueden ser llamados sin crear un objeto de Fibonacci.
   * También se introduce un nuevo método de cálculo de la secuencia sin
   * necesidad de utilizar una variable temporal.
   */
   public static void fibonacci(int n)
   {
     int a=0,b=1;
     for (int i=0;i<n;i++)
     {
        System.out.println(a);
        a=a+b;
        b=a-b;
     }
   }
}

Paso Nº 4.1. : Captura de pantalla de la aplicación


























Reflexión:

A partir del Método de los Cuatro Pasos podemos organizar la manera de resolver los problemas o crear aplicaciones interesantes. Es muy útil (aunque a veces podemos perder la paciencia en realizar estos ejercicios) ya que permite organizar paso a paso la resolución del ejercicio de manera eficaz.
Antes de programar, te sugiero que imagines cómo vas a resolver el problema (ayuda mucho escribir en papel, e incluso hacer esquemas y dibujos)

Si tienes otra alternativa para analizar los programas me gustaría que comentaras

Saludos.

lunes, 10 de octubre de 2011

Mis Competencias

CREAR EJEMPLO DE EXCEPCIONES PROPIAS

Autor: Lidia Bachsmann
Competencia: Desarrollo de Software (Nivel 1)
Palabras Clave: JAVA, excepciones propias.

Descripción de la Actividad
Quiero compartirles mi experiencia, como estudiante de informática de 1er año, de crear un ejemplo para crear excepciones en JAVA, utilizando el método de los cuatro pasos.

Solución: 
Para llevar a cabo la actividad, se requiere conocer conceptos esenciales.

El "Método de los Cuatro Pasos" es un proceso de ingeniería que se aplica al realizar un programa (también se conoce como "Resolución de Problemas"). Consta de:

1) Ejemplos: básicamente está compuesto por
    --> Entrada de datos (por ejemplo, que son otorgados por el usuario)
    --> Proceso: En este segmento se especifica más en detalle en Proceso de Ingeniería
    --> Salida: lo que se quiere obtener (todo depende del ejercicio propuesto)
Los ejemplos muestran los errores frecuentes que realizan los usuarios (por ejemplo, si pides al usuario que ingrese por teclado su nombre, debes pensar que la persona puede teclear números, es decir es una pauta que deberás impedir que suceda)

2) Proceso de Ingeniería: En este paso, debe mencionar en detalle (con imágenes, diagramas, etc) cómo vams a resolver el problema.
    Los elementos básicos para utilizar son opcionales, ya que dependerá del programador definir qué acciones realizar, pero deberá detallarse lo mejor posible (sirve de documentación al estilo "gráfico"), los cuales son:
       -> Diagrama de flujo (es una representación gráfica de un algoritmo o proceso)
       -> Fragmento del código (principal)
       -> Explicación (con tus propias palabras describes que hiciste para solucionar el problema planteado)
     -> Declaración de atributos (debes justificar cantidad, tipo - int, double, long, etc -,  si es público, privado, protejido, etc)
        -> Pseudocódigo: es una forma sencilla de describir pasos del código. Puedes abstraer los pasos a seguir si describes de manera secuencial como vas a programar. El pseudocódigo sirve para cualquier lenguaje de programación (es una gran ayuda, así que sugiero que comiences a practicar =D )

3) Diagrama de Actividades: muestra el flujo de control general (más adelante detallaré de qué se trata)
4) Código Fuente de la Aplicación: nuestro programa expresado en un lenguaje de programación específico (en este caso JAVA)

Ahora comienza el Método de los Cuatro Pasos:
Paso 1: “Ejemplos Entrada/Salida”
1) 1O , 9O     → [Proceso] → ”Error, Valida solo para números”
2) -345 → -1 → [Proceso] → “La suma de los numeros es = -346”
3) 2 → 2        → [Proceso] → “La suma de los numeros es = 4”
4) 0 → 0        → [Proceso] → “La suma de los numeros es = 0”
5) 5ª → 5b     → [Proceso] → “Imposible sumar letras”
6) 5+→ 8i      → [Proceso] → “Imposible sumar letras o signos”
7)                   → [Proceso] → ”Error, Valida solo para números”
8) 10/2 → 5/2 → [Proceso] → ”Error, No valida operatorias”
9) 8*45 → 6*3 → [Proceso] → ”Error, No valida operatorias”
10) 8,0 → 5,7 → [Proceso] → ”Error, Valida solo para números enteros”
11) 1234567890 → 09876543210→ [Proceso] → ”Error, Valida solo para n° entero menores a 10000”
12) 7.4 → 6.6 → [Proceso] → ”Error, Valida solo para números enteros”
13) #678 → 6=7 → [Proceso] → ”Error, Valida solo para números”
14) “ 800” → “82” → [Proceso] → ”Error, Valida solo para números”
15) 7^3 → 3*12 → [Proceso] → ”Error, No valida operatorias”

Paso 2: “Análisis y diseño”
--> Entrada de datos: 2 datos
--> Tipo: Int (integer: entero)
--> Nombre de la variable:
            A = numer1
            B = numer2

Paso 3:  Especificación del Diagrama de Actividades 

Los símbolos de este diagrama consta de:
       Representa el inicio de la aplicación

      Representa los procesos


      Representa una bifurcación (por ejemplo, if-else)

       Representa el término del programa (FIN)



Paso 4: Código Fuente
//----------------------------------------------------------------------------------------------------------
import java.util.*;  //importamos toda la biblioteca de escaner

public class Points
{
        public static void main(String[] args) 
       {
             boolean continuar = true;
             int numero1 = 0;
             int numero2=0;
             while(continuar) 
             {
                    System.out.println("Introduce los valores de a y b para sumar ");
                    Scanner leer = new Scanner(System.in);
                    try 
                   {
                        /* System.out.print("Introduce un número entero: ");
                        Scanner leer = new Scanner(System.in);
                        int numero1 = leer.nextInt();
                         */
                        System.out.println("ingrese valor de a");
                        String numer1 = leer.nextLine();
                        System.out.println("ingrese valor de b");
                        String numer2 = leer.nextLine();
                        numero1 =Integer.parseInt(numer1);
                        numero2 =Integer.parseInt(numer2);

                        if( numero1>=10000 || numero2 >=10000)
                                throw new Exception("12");
                        
                        int sumar = numero1+numero2;
                        System.out.println("La suma de los numeros es = " + sumar);
                        continuar = false;
                  }
                  catch(NumberFormatException e)
                  {
                        System.out.println("Imposible sumar letras ");
                  }
                 catch(Exception m) 
                 {
                       System.out.println("Ingrese numeros menores a 10000");}
                 }
         }
}

//-------------------------------------------------------------------------------------------------------------

Un paso adicional  importante es agregar la captura de pantalla (así corrobora si funciona o no el programa creado)

Paso 5: Captura de Pantalla

Reflexión:

A partir del Método de los Cuatro Pasos podemos organizar la manera de resolver los problemas o crear aplicaciones interesantes (un videojuego, por ejemplo). 
No es la única manera, hay muchos modelos para realizar una aplicación (Sólo muestro uno de ellos)

Si tienes otra alternativa para analizar los programas me gustaría que comentaras

Saludos.