Sunteți pe pagina 1din 2

Class Empresa

/** * PREGUNTA 1 DEL EXAMEN DE SEGUNDO PARCIAL * SE REQUIEREN DOS PILAS UNA PARA FORMAR LA TIRA DE NO REPETIDOS * Y OTRA PARA ALMACENAR LOS REPETIDOS * * ESTRATEGIA: * 1 CONSTRUIR LA PRIMERA TIRA SIN REPETICIONES * RESULTADO DE ESTE PROCESO SE TENDRA UNA PRIMERA TIRA * Y UNA PILA DE ELEMENTOS REPETIDOS QUE NO SE PUDIERON ACOMODAR EN UNA PASADA * 2 INSERTAR LOS REPETIDOS EN LA TIRA * RESULTADO DE ESTE PROCESO SE TENDRA QUE LA PILA DE REPETIDOS * SE VACIARA Y SE OBTENDRA LA TIRA FINAL * 3 MOSTRAR LA CADENA RESULTANTE * RESULTADO DE ESTE PROCESO ES LA CADENA RESULTADO DE LOS BANDERINES * QUE SE ENCUENTRAN EN LA TIRA * * LA CONDICION DEL PROBLEMA ES QUE EN LA ENTRADA ORIGINAL, JAMAS SE * TENDRA MAS DE 3 INSTANCIAS DE BANDERIN DEL MISMO COLOR CONSECUTIVO * Y QUE LA CANTIDAD DE COLORES ES LA MISMA. POR LO QUE, EN DOS RONDAS * SE TENDRA UNA TIRA CON LAS CONDICIONES QUE SE REQUIEREN. * * @author MLBC * @version 31.12.09 */ import EDL.*; public class Empresa { /* * Metodo que dirige todo el proceso, y procesa los tres pasos * generales de la solucion * */ public String generar(String entrada) { Pila<Character> tira, repetidos; tira = new Pila<Character>(); repetidos = new Pila<Character>(); crearTira(entrada, tira, repetidos); eliminarRepetidos(tira, repetidos); return mostrar(tira); } /* Metodo crearTira, que lee cada caracter de una cadena de entrada * e intenta acomodar en una tira sin repeticiones. * Al mismo tiempo genera la pila de repticiones, pero tambien * intenta la insercion de las repeticiones en la tira * * el resultado de este proceso es que las pilas cambiaran de estado */ private void crearTira(String entrada, Pila<Character> tira, Pila<Character> repetidos) { Character band; for(int i = 0; i < entrada.length(); i ++) {

1/2

Dec 31, 2009 8:32:04 AM

Class Empresa (continued) band = entrada.charAt(i); if(tira.vacia()) tira.push(band); else if(tira.top().equals(band)) repetidos.push(band); else { tira.push(band); if(!repetidos.vacia()) if(!repetidos.top().equals(band)) tira.push(repetidos.pop()); } } } /* Metodo que permite insetar los elementos repetidos en la tira * que se ha generado en una primera pasada. * * Esta demostrado que este problema se resuleve en a lo sumo dos * pasadas sobre la tira * * Al terminar, la pila tira tendra los nuevos elementos incorporados * y la pila repetidos quedara vacia */ private void eliminarRepetidos(Pila<Character> tira, Pila<Character> repetidos) { if(!repetidos.vacia()) crearTira(mostrar(tira), tira, repetidos); } /* * Metodo que permite reconstruir la cadena resultante sobre la base * de los elementos de la pila * * El resultado de este proceso es una cadena y en consecuencia la pila * tira queda vacia */ private String mostrar(Pila<Character> tira) { String res = ""; while(!tira.vacia()) res = tira.pop() + res; return res; } }

2/2

Dec 31, 2009 8:32:05 AM

S-ar putea să vă placă și