Está en la página 1de 6

Universidad Abierta y a Distancia de Mxico

La siguiente actividad te permitir identificar errores en la codificacin de un caso prctico


en el que se han utilizadomtodos de ordenacin.
Caso: Patentes
Las antiguas patentes (de automviles), por ejemplo PL7812, estn compuestas por un string de
dos caracteres, en el ejemplo PL, y por un nmero entero de cuatro dgitos, en el ejemplo 7812.
Suponga que exista una clase Patente y otra TablaDePatentes de la siguiente forma:

public class Patente {


Universidad Abierta y a Distancia de Mxico
private String letras ;
private int numero ;
public Patente () {}
public String obtLetras () { return letras ; }
public int obtNumero () { return numero ; }
}
public class TablaDePatentes {
private String [] tabla ;
public TablaDePatentes () { tabla = new String [9999]; }
public boolean buscar (Patente patente ) {}
otros mtodos
}

La idea es que TablaDePatentes almacena en el atributotabla todas las patentes


autorizadas a estacionarse en el campus San Joaqun. En particular, si la patente PL7812
est autorizada, entonces tabla [7812] = PL, y si la patente JK2345 est autorizada,
entonces tabla [2345] = JK. Adems, si dos o ms patentes autorizadas tienen el mismo
nmero, entonces sus pares de letras aparecen consecutivamente en el string
correspondiente de tabla. Por ejemplo, si las patentes PL7812 y MB7812 estn
autorizadas, entonces tabla [7812] = PLMB; y si las patentes JK2345, RC2345 y
DW2345 estn todas autorizadas, entonces tabla [2345] = JKRCDW.
Escriba el mtodo buscar de la clase TablaDePatentes, que busca rpidamente la Patente
en el atributo tabla, y devuelve true (verdadero) si patente est en tabla, yfalse (falso) en
caso contrario.

Criterios
Lo primero de
quesolucin:
tenemos que hacer es declarar el mtodo como nos indican en el enunciado.
Luego, con los mtodos de la clase Patente, obtenemos las letras y los nmeros que la componen.
Con el nmero de la patente obtenemos lo almacenado en el arreglo y luego debemos recorrer
este string obteniendo substring de largo 2 e ir comparando cada substring con las letras de la
patente a buscar. Si coincide con alguno retornamos true, de lo contrario retornamos false.

Posible solucin:

public boolean buscar (Patente patente ) {


int num = patente. obtNumero ();
String letras = patente . obtLetras ();
String validas = tabla [ num ];
if( validas != null ){
int largo = validas . length ();
int k = 1;
while (k < largo ) {
if ( letras . equals ( validas . substring (k - 1, k + 1)))
return true;
k = k + 2;
}
}
return false ;
}
Universidad Abierta y a Distancia de Mxico
Ahora:
1. Crea un proyecto nuevo enNetBeans.

2. Transcribe el cdigo que se encuentra lneas arriba.

3. Identifica los errores en el cdigo.

4. Con comentarios (// o /*, */) documentalos errores encontradosy realiza las
correcciones necesarias para que el programa pueda funcionar correctamente.
5. Una vez corregido el cdigo,ejecuta el programa.

6. Si la ejecucin ha sido correctaguarda el archivo con los comentarios realizados.

7. Documenta el cdigo explicando de forma breve pero concisa las partes del mismo
donde se ha empleado algn mtodo de ordenacin, seala de forma puntual qu mtodo
de ordenacin se ha empleado y por qu.

Esta vez vengo con otro post que fue otra peticion de un usuario de Codemania que nuevamente
les ago una invitacion a que se registren dejen sus dudas en los diferentes foros de programacion o
simplemente compartan sus codigos.

Esta vez veremos un poco de java(no lo manejo a gran nivel como c# pero me defiendo xD), en
este articulo veremos como implementar el mtodo de bsqueda secuencial para buscar un dato
en un arreglo.

El mtodo de bsqueda secuencial es de los mas fciles que podemos utilizar para buscar
datos(es aconsejable utilizarlo cuando el vector no es de gran tamao), ya que no requiere que el
vector este ordenado, el mtodo consiste en recorrer el vector de manera secuencial hasta
encontrar el dato a buscar.

El ejemplo lo desarrolle con Jcreator.

En el ejemplo creo un vector con 10 datos y luego hago la bsqueda de un dato para saber si
esta o no en el vector.

Veamos el cdigo y luego explicare lo mas importante.


/**
* BusquedaSecuencial Application
*
* Author: Cristian Torres
*
* Pais: El Salvador
*/
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
Universidad Abierta y a Distancia de Mxico
public class BusquedaSecuencial extends JFrame implements ActionListener {
private JButton btnbuscar;
private JTextField num;
private Label lbl;

int[] valores = {20,10,100,5,30,0,3,500,50,1};//vector donde aremos la busqueda

//metodo donde creo y aado los controles


public void Controles(){
//panel Contenedor
Container contenedor = getContentPane();
contenedor.setLayout( new FlowLayout(FlowLayout.CENTER) );
//agrego los controles al contenedor
lbl = new Label("Numero a Buscar");
contenedor.add(lbl);
num = new JTextField(10);
contenedor.add(num);
btnbuscar = new JButton("Buscar");
contenedor.add(btnbuscar);
btnbuscar.addActionListener(this);
}
//constructor
public BusquedaSecuencial(){
super("Busqueda Secuencial");
//cargo controles
Controles();
//tamao ventana y mostrar y centrar
setSize(350,120);
setLocationRelativeTo(null);//centrar
setVisible(true);
}

//evento del boton


public void actionPerformed(ActionEvent e){
if (e.getSource()==btnbuscar){
int x;
x = Integer.parseInt(num.getText());
if(BusquedaSecuencial(valores,x) !=-1){
JOptionPane.showMessageDialog(null,
"El Dato"+" "+ x + " "+ "Esta en la Posicion: "+ BusquedaSecuencial(valore
s,x),
"Busqueda",JOptionPane.INFORMATION_MESSAGE);
}
else
JOptionPane.showMessageDialog(null, "El Dato no se Encuentra",
"Error",JOptionPane.ERROR_MESSAGE);

}
}
//metodo de busqueda secuencial
public static int BusquedaSecuencial(int vector[], int Elem){
for (int i = 0; i < vector.length; ++i)
if (vector[i] == Elem)
return i;
return -1;
}

public static void main(String[] args) {


JFrame.setDefaultLookAndFeelDecorated(true);
BusquedaSecuencial busqueda = new BusquedaSecuencial();//Instanciamos la
clase que creamos
busqueda.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//cerrar ventana
Universidad Abierta y a Distancia de Mxico
}

Los 2 aspectos mas importantes del cdigo son los siguientes.

El mtodo que se encarga de hacer la bsqueda, que es el siguiente.


//metodo de busqueda secuencial
public static int BusquedaSecuencial(int vector[], int Elem){
for (int i = 0; i < vector.length; ++i)
if (vector[i] == Elem)
return i;
return -1;
}
Como puede verse se crea un mtodo que retornara un valor entero y que recibir 2 parmetros,
que sera el vector y el dato a buscar. El mtodo recorre el vector y va comparando los datos y si
encuentra el dato retorna laposicin en la que se encontr, si no se encuentra el dato retorna -1.

Y el otro aspecto importante es como implementar el mtodo.


int x;
x = Integer.parseInt(num.getText());
if(BusquedaSecuencial(valores,x) !=-1){
JOptionPane.showMessageDialog(null,
El Dato"+" "+ x + " "+ "Esta en la Posicion: "+ BusquedaSecuencial(valores,x),
"Busqueda",JOptionPane.INFORMATION_MESSAGE);
}
else
JOptionPane.showMessageDialog(null, "El Dato no se Encuentra",
"Error",JOptionPane.ERROR_MESSAGE);
Declaramos una variable que sera la que tendr el dato a buscar, y luego hacemos uso
del mtodo de bsqueda validando si encontr el dato o no, y le enviamos como argumentos, el
vector que contiene los datos y el dato a buscar.
Universidad Abierta y a Distancia de Mxico