viernes, 19 de julio de 2013

Datos alfabéticamente en un arreglo

Ejemplos prácticos alimentan la noción del emprendedor.

Saludos les comparto un nuevo ejemplo para ampliar aun mas el uso de estructuras de datos del tipo arreglo. En esta oportunidad le muestro como ingresar dato de manera ordenada en un arreglos de string, sin duplicidad. Particularmente siempre suelen pedirse en las practicas este tipo de métodos, puesto que es mas rápido acceder a los datos si tienen un orden especifico.

Cuando se trabaja con arreglos ordenados se debe evitar alterar el orden al insertar nuevos elementos o al modificar los existentes.
Metodología para Inserción:
  • Para insertar un elemento X (cualquiera) en un arreglo unidimensional V ordenado, primero se debe verificar que exista espacio.
  • Luego se encontrará la posición en la que debería estar el nuevo valor para no alterar el orden del arreglo. Cuando se detecte la posición, se procederá a recorrer todos los elementos desde ahí hasta la N-ésima posición. Finalmente se asignará el valor de X en la posición encontrada.
  • Cabe destacar que el desplazamiento no se lleva a cabo cuando el valor a insertar es mayor que el último elemento del arreglo.
    Generalmente, cuando se quiere hacer una inserción se debe verificar que el elemento no se encuentre en el arreglo. En la mayoría de los casos prácticos no interesa tener información duplicada; por tanto, si el valor que se desea insertar ya estuviera en el arreglo, la operación no se llevará a cabo.

Ejemplo

 

Codigo fuente

public class ArregloOrdenado {
    
        //forma#1
  String [] Nombres;
  String [] Mensaje={"Disponible",
                    "Espacio no Disponible",
                    "Error de formato",
                    "Sistema iniciado",
                    "Dato repetido"
                    };
  String linea;
  InputStreamReader Flujo_bytes= new InputStreamReader (System.in);
  BufferedReader entrada= new BufferedReader (Flujo_bytes); 
  
   public void iniciarSistema(){
      System.out.println("Para Iniciar el sistema debe ingresar el numero de datos a registrar:");
      try {
          linea= entrada.readLine();
      
      } catch (IOException ex) {
          System.out.println(Mensaje[2]);
      } 
      
      try{
      int numPersona= Integer.parseInt(linea);
      Nombres= new String[numPersona];
      System.out.println(Mensaje[3]);
       linea=null;
      }catch(NumberFormatException e){
           System.out.println( Mensaje[2] +" debe ingrese numeros");
           iniciarSistema();
      }
       
 }
 
   
    public void registrarUsuario(){
 int tamaño= Nombres.length;
 int contador=0;
  while(contador<tamaño){
            System.out.println("Ingrese el nombre de usuario");  
                try {
                    linea= entrada.readLine();
                    listarOrdenado(linea);

                } catch (IOException ex) {
                    System.out.println(Mensaje[2]);
                }

                contador++;
  
        }
     
 
 }
    
    public void listarOrdenado(String nombre){

   int N=Nombres.length;
   int l = 0;
   int pos =busquedaSecuencial(nombre);
   
 
 
 
    if (pos<N&pos!=-1) {
     System.out.println(Mensaje[0]+" casilla " + pos); 
        switch(pos){//caso 1
            case 0:// este es el caso en que sea el primer elemento
                
                  Nombres[pos] = nombre;
                
                break;
            default: //caso 2
 //*************************** ordenado               
               char[] inicialNombres =  Nombres[pos-1].toCharArray();
               char[] inicialNuevo =  nombre.toCharArray(); 
               int ordenAnterior= (int)inicialNombres[0];
               int ordenNuevo= (int)inicialNuevo[0];
               
                if( ordenAnterior<ordenNuevo|ordenAnterior==ordenNuevo){//
                  System.out.println("Dato en orden");
                  Nombres[pos] = nombre;
                }else{
                //hacer un cambio
                  System.out.println("Se intercabia posiciones");

                  while(l<N&Nombres[l]!=null){
                       inicialNombres =  Nombres[l].toCharArray();
                       int actual= (int)inicialNombres[0];                    
                       if( ordenNuevo<actual|actual==ordenNuevo){               
                    break;
                    }

                  l++;
                  }
                  

                   System.out.println("Debe ir en la posicon: "+ l); 
                   if(l<N){
                       
                  String temp=  Nombres[l];
                  Nombres[l]=nombre;
                  String aux=null;
                  int contador=l+1;
                        while(contador<N){
                       aux=  Nombres[contador]; //toma el dato siguiente   
                       Nombres[contador]= temp;// en la posicion siguiente inserta el nuevo
                       temp=  aux;//asigna el dato anterio que no tiene casilla.
//                          
                            
                        contador++;
                        }
                       
                   
                   }
                    
                }
         
                
  //***************************Fin ordenado          
        
        }
        
      
        
    } else if(pos==-1) {
        
          System.out.println(Mensaje[4]);
    }else{
    System.out.println(Mensaje[1]);
    }


}
    
    private int busquedaSecuencial(String nombre) {
    int respueta=0;
    int N=Nombres.length;
    int l=0;   

            while(l<N&&Nombres[l]!=null){    

               if(Nombres[l].equals(nombre)){
                l=-1;
                break;
               }
               l++;

           }
 respueta=l;
  
    return respueta;
       
    }
    
    public void listarDatos(){
     System.out.println("************Incio de listar******************");
 for (int i = 0; i < Nombres.length; i++) {

               
                System.out.println("Usuario \t"+Nombres[i]);
               
         }
    System.out.println("************Fin de listar******************");

}
  
    
}

// metodo principal 
public static void main(String[] args) {
      ArregloOrdenado objeto= new ArregloOrdenado();
      objeto.iniciarSistema();
      objeto.registrarUsuario();
      objeto.listarDatos();
       
    }

viernes, 12 de julio de 2013

Modelo Vista Controlador

Les dejo un pequeño instructivo el  cual es de mucha utilidad para incursionar en el desarrollo de software de calidad.
En el se describen conceptos que permiten entender sus orígenes e importancia del uso  de patrones de diseño, para dar soluciones a problemas comunes en el mismo desarrollo del software.


lunes, 8 de julio de 2013

Asignación de memoria y Punteros

Les comparto mi primer instructivo, el cual se desarrolla  temas de programación fundamentales para el desarrollo de estructuras de datos.
El cual hace énfasis en el proceso de asignatura de la memoria y  una comparación entre el lenguaje Java y C, en el manejo de punteros.  

Sugerencias son bienvenidas y espero que les sea de gran utilidad.


viernes, 5 de julio de 2013

Ejemplo: estructuras de datos del tipo arreglo

Ejemplos prácticos alimentan la noción del emprendedor.

Diagrama del clase del ejemplo 1
Les comparto la ultima parte del vídeo, en el cual dimos solución a un problema planteado, el cual requería la implementacion de los métodos elementales para la gestión de un registro de datos :
Registrar, buscar, remplazar y eliminar.

Utilizando  un arreglo de datos del tipo String.
El vídeo describe la realización del programa como también el uso de los métodos implementados, en la parte baja del vídeo encontraran el código fuente del mismo.

Temas sugeridos si aun no comprendes el uso de datos del tipo arreglo. Dejo los enlaces a continuación:

Fundamentos de Arreglos o Array
Apuntadores en java.

Ejemplo 1 parte 2

 

Código fuente


public class ArregloSimple {
    
      //Tipos Simples
  private  String mensaje;
  private  String linea;
  private boolean asignado;
  
     //forma#1
//  String [] Nombres;
//  String [] Clasificaciones={"Disponible","Espacio no Disponible","Error de formato","Sistema iniciado"};
  //forma#2
   private  String [] Nombres, Clasificacion={"Disponible","Espacio no Disponible","Error de formato","Sistema iniciado"};
   InputStreamReader Flujo_bytes= new InputStreamReader (System.in);
   BufferedReader entrada= new BufferedReader (Flujo_bytes); 
 public void iniciarSistema(){
      System.out.println("Para Iniciar el sistema debe ingresar el numero de datos a registrar:");
      try {
          linea= entrada.readLine();
      
      } catch (IOException ex) {
          Logger.getLogger(ArregloSimple.class.getName()).log(Level.SEVERE, null, ex);
      }
      
      
      try{
      int numPersona= Integer.parseInt(linea);
      Nombres= new String[numPersona];
      System.out.println( Clasificacion[3]);
      }catch(NumberFormatException e){
           System.out.println( Clasificacion[2] +" debe ingrese numeros");
           iniciarSistema();
      }
       
 }
 
 public void registrarUsuario(){
  boolean respuesta= true;
  while(respuesta){
  System.out.println("Ingrese el nombre de usuario");  
      try {
          linea= entrada.readLine();
          listarSimple(linea);
          
      } catch (IOException ex) {
          Logger.getLogger(ArregloSimple.class.getName()).log(Level.SEVERE, null, ex);
      }
      
      try{
      System.out.println("Desea registrar otro usuario? SI o NO");   
      linea= entrada.readLine();
     
      
       if( linea.equalsIgnoreCase("si")){
              continue;
              }else if( linea.equalsIgnoreCase("no")){
              break;
              }
      
      }catch (IOException ex) {
              Logger.getLogger(ArregloSimple.class.getName()).log(Level.SEVERE, null, ex);
          }
  
  }
     
 
 }
  
public void listarSimple (String nombre){
asignado= false;
if(Nombres!=null){//analizar si existe
        
                for (int i = 0; i < Nombres.length; i++) {

                if(Nombres[i]== null){
                System.out.println("Casilla \t"+i+Clasificacion[0]);
                Nombres[i]=nombre;
                
                asignado=true;
                break;
                }
                    
                
            }
            
        }



if(asignado){
            mensaje="Asignado Exitosamente";
            System.out.println(mensaje); 
        }else{
              mensaje="No existe Espacio suficiente";
            System.out.println(mensaje); 
        }


}

public void listarDatos(){
     System.out.println("************Incio de listar******************");
 for (int i = 0; i < Nombres.length; i++) {

               
                System.out.println("Usuario \t"+Nombres[i]);
               
         }
    System.out.println("************Fin de listar******************");

}

public boolean buscar(String Usuario){
    boolean respueta = false;
    
    for (int i = 0; i < Nombres.length; i++){
       String buscado=  Nombres[i];
    if (buscado.equalsIgnoreCase(Usuario)){
        respueta= true;
        break;
        }
    
    }
    
    
    
    
return respueta;
}


public void reemplazar(String Usuario, String buscado){



    for (int i = 0; i < Nombres.length; i++){
       String existe=  Nombres[i];
    if (buscado.equalsIgnoreCase(existe)){
        String anterior= Nombres[i];
        Nombres[i]=Usuario;
        System.out.println("Fue sustituido" +anterior+" por: "+Usuario);
        break;
        }
    
    }

}

public void reemplazar(String Usuario, int buscado){


 int datos=  Nombres.length;
   
      
    if (buscado < datos){
        String anterior= Nombres[buscado];
        Nombres[buscado]=Usuario;
        System.out.println("Fue sustituido " +anterior+" por: "+Usuario);
       
        }
    
    

}



public void Eliminar(String Usuario){
 
    
    for (int i = 0; i < Nombres.length; i++){
       String buscado=  Nombres[i];
    if (buscado.equalsIgnoreCase(Usuario)){
       Nombres[i]=null;
        break;
        }
    
    }
    
}
public void Eliminar(int index){
 
    
   int datos=  Nombres.length;
   
        
    if (index < datos){ 
       Nombres[index]=null;
    }
    
}
}

//clase principal 
public static void main(String[] args) {
      ArregloSimple objeto= new ArregloSimple();
      objeto.iniciarSistema();
      objeto.registrarUsuario();
      objeto.listarDatos();
      
//        boolean buscar = objeto.buscar("ana");
//        if(buscar){
//        System.out.println("Si existe el dato buscado" );
//        }else{
//        System.out.println("el dato buscado no existe");
//        }
//      objeto.reemplazar("ana", "alex");
//      objeto.reemplazar("ana", 2);
//      objeto.Eliminar("alex");
      objeto.Eliminar(3);
     objeto.listarDatos();
      
      
    }