25 Nov 2015 @ 5:15 AM 

Hola todos, en el siguiente post voy describir un ejercicio que fue enviado como trabajo de la clase de Estructuras de Datos con el Ing. Jorge Rodriguez. Cualquier duda, comentario o sugerencia será bienvenido…:)

PROBLEMA

Con la siguiente clase principal Programa dada, realizar lo que se le pide:

a) Crear la unión, intersección y diferencia de conjuntos.

b) Reemplazar los métodos cargarC1 y cargarC2 por lecturas desde archivo.

c) Guardar las listas resultantes de las operaciones en un archivo llamado «resultados.txt».

public class Programa {

public static void main(String[] args){
LinkedList<Coordenada> conjunto1 = new LinkedList<>();
LinkedList<Coordenada> conjunto2 = new LinkedList<>();
LinkedList<Coordenada> union, interseccion, resta;

Programa.cargarC1(conjunto1);
Programa.cargarC2(conjunto2);

union = Conjunto.union(conjunto1,conjunto2);
interseccion = Conjunto.interseccion(conjunto1,conjunto2);
resta = Conjunto.diferencia(conjunto1,conjunto2);

Conjunto.imprimir(union);
Conjunto.imprimir(interseccion);
Conjunto.imprimir(resta);
}

private static void cargarC1(LinkedList<Coordenada> conjunto){
conjunto.add(new Coordenada(10, 10, «Ciudad 1»));
conjunto.add(new Coordenada(20, 20, «Ciudad 2»));
conjunto.add(new Coordenada(30, 30, «Ciudad 3»));
conjunto.add(new Coordenada(40, 40, «Ciudad 4»));
}

private static void cargarC2(LinkedList<Coordenada> conjunto){
conjunto.add(new Coordenada(50, 50, «Ciudad 5»));
conjunto.add(new Coordenada(20, 20, «Ciudad 2»));
conjunto.add(new Coordenada(60, 60, «Ciudad 6»));
conjunto.add(new Coordenada(40, 40, «Ciudad 4»));
}
}

SOLUCIÓN

Asumiendo que ya poseemos la clase Coordenadas debido a que ya la he implementado antes, en caso de que no la tengan, es la siguiente:
ClaseCoordenada

MANEJO DE LISTAS

Ahora bien, una vez que tenemos la clase Coordenada implementada, crearemos una nueva clase en nuestro paquete llamado «Conjunto» en la cual crearemos todos los métodos para el manejo de operaciones entre conjuntos:

  • Unión
  • Intersección
  • Diferencia
  • Imprimir

ClaseConjunto

Antes que nada, analizaremos un poco de teoría de las operaciones sobre conjuntos:

Unión

La unión de dos conjuntos A y B es otro conjunto A B cuyos elementos son todos los elementos de A y de B:

union1

Ejemplo:

union2

Fuente: https://es.wikipedia.org/wiki/Uni%C3%B3n_de_conjuntos

 

Intersección

La intersección de dos conjuntos A y B es otro conjunto A B cuyos elementos son los elementos comunes aA y B :

Int1

Ejemplo:

  • Sean A = {5, λ, ♠, c} y B = {ω, c, 0, Δ, 5, R}. Entonces la intersección es A B = {5, c}.

Fuente: https://es.wikipedia.org/wiki/Intersecci%C3%B3n_de_conjuntos

 

Diferencia

La diferencia de A menos B (o entre A y B) es otro conjunto A \ B (o también AB) cuyos elementos son todos aquellos elementos de A que no lo sean de B:

dif1

Ejemplo:

  • Sean A = {♠, 5, z, R, 0} y B = {0, p, 9, z, Δ}. Sus diferencias son A \ B = {♠, 5, R} y B \ A = {p, 9, Δ}

Fuente: https://es.wikipedia.org/wiki/Diferencia_de_conjuntos

 

A continuación, una vez analizado un poco de teoría sobre operaciones de conjuntos describiré el funcionamiento de cada uno de los métodos.

En la descripción del funcionamiento de cada método, veremos que la solución de cada operación se guarda en un archivo, este funcionamiento de manejo de archivos se lo describirá mas adelante.

Método Unión

Uno de los puntos a notar es que en el caso de que un elemento pertenezca a ambos conjuntos, este no se repetirá en el conjunto solución.

Para llevar a cabo la unión de los 2 conjuntos, lo primero que hago es recorrer el primer conjunto con un lazo for, y en otro lazo for anidado recorro el segundo conjunto.

Al estar recorriendo el primer conjunto voy agregando cada elemento a la lista resultante, tanto que en el for anidado iré recorriendo el conjunto 2 en busca del mismo elemento, en caso de que lo encuentre levantare una bandera(found), la cual me dirá que no debo agregar dicho elemento debido a que esta repetido en ambos conjuntos; en caso de que no encuentre ese elemento en el segundo conjunto, agregare el primer elemento del segundo conjunto; así hasta que termine recorrer ambos conjuntos. Al terminar de recorrer los conjuntos se guarda la solución en un archivo (resultados.txt) y se retorna el conjunto solución.

Método Intersección

El funcionamiento de este método es muy sencillo, debido a que lo único que hay que validar es que al recorrer un cada uno de los conjuntos al encontrar un elemento en común, este se lo añade al conjunto solución, en caso de que no, no se lo agrega. Al terminar de recorrer los conjuntos se guarda la solución en un archivo (resultados.txt) y  se retorna el conjunto solución.

Método Diferencia

Para la operación de Diferencia entre 2 conjuntos, lo que he implementado es que al recorrer ambos conjuntos y encontrar que un elemento del conjunto 1 se encuentre en el conjunto 2, levanta una bandera (found) la cual indicara que no se debe agregar dicho elemento al conjunto solución; caso contrario si no se encuentre el elemento del conjunto 1 en el conjunto 2, la bandera indicara que debe ser agregado al conjunto solución. Una vez terminado de recorrer los conjuntos se guarda la solución en un archivo (resultados.txt) y se retorna el conjunto solución.

Método Imprimir

En este caso implemente el método Imprimir para una vez realizadas las operaciones, imprimir el resultado por pantalla y poder estar seguros de que el método funciona correctamente. Esto lo he realizado con el uso de un lazo for, con el cual recorro a lista y voy imprimiendo cada elemento.

 

MANEJO DE ARCHIVOS

Asumiendo que ya poseen conocimientos sobre manejo de archivos, he creado una clase llamada Archivo, en la cual he creado los métodos para el manejo de guardar en un archivo los resultados de las operaciones y para poder cargar los conjuntos de archivos dados, cada uno con su manejo de errores. Los métodos creados son los siguientes:

  • Cargar
  • Crear
  • Guardar

ClaseArchivo

Método Cargar

Este método se encarga de buscar los archivos en los cuales se encuentran la información con la cual se llenaran la lista de conjuntos.

Método Crear

Para crear el archivo en el cual se guardaran los resultados de las operaciones entre conjuntos.

Método Guardar

Al guardar los datos del conjunto solución para cada operación, este método escribe al final del archivo para poder mantener los resultados de las operaciones anteriores.

En caso de que el archivo en el cual se guardaran los resultados no se encuentre creado, este sera creado y luego se guardaran los datos

Posted By: jrmite
Last Edit: 26 Nov 2015 @ 04:10 PM

EmailPermalink
Tags
Categories: Uncategorized


 

Responses to this post » (None)

 
Post a Comment

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>



 Last 50 Posts
 Back
Change Theme...
  • Users » 11164
  • Posts/Pages » 10
  • Comments » 0
Change Theme...
  • VoidVoid « Default
  • LifeLife
  • EarthEarth
  • WindWind
  • WaterWater
  • FireFire
  • LightLight

Información



    No Child Pages.

Condiciones!!!!



    No Child Pages.