You are on page 1of 4

3) Conocimiento procedural

Variables de Entrada: Sern las palabras a evaluar, almacenadas en un vector de cadenas llamado
palabras.
Variable de Salida: Una cadena que indica si es posible o imposible que exista un alfabeto
compatible con las palabras indicadas como variables de entrada.

Variables como parmetro:

- El mtodo isOrdered recibe el vector palabras y lo almacena en su parmetro words


- Como parmetro de salida se tiene un String que puede tomar solo dos valores Possible
y Impossible.
-

int main()
Palabra1

Palabra2 Vector <String>


Palabras Mtodo String Resultado String
isOrdered()

Palabra n

Mtodo isOrdered()

P1
Vector <String>
Declarar un vector Parents
Words
de sets, para almacenar los
antecesores de cada letra

SI

Hay
palabras NO
para o
analizar?

SI

Resultado Resultado NO String Resultado


Analizar Palabra
= Possible? o esultado_final
P2
P2

n=1

Final de la SI
Palabra a analizar palabra?
Resultado

NO
Insertar los antecesores
Comparar letras de dos en del a letra en el vector
dos ( posicin n y n-1) Parents

Resultado =Possible;
La letra en n SI
n=n+1
tiene antecesores
validos en
Parents?

Resultado
NO
=Impossible
4. Descripcin del conocimiento procedural

El proceso consiste en recibir como entradas las palabras a evaluar, las cuales sern almacenadas
en una vector de String, por ejemplo podemos tener el vector Palabras {angular; aguila}.

Luego creamos un arreglo al que llamaremos Parents, dicho arreglo es un vector de sets, y tendr
26 listas set, cada lista le corresponde a una determinada letra, y almacenar los antecesores de
dicha letra en el alfabeto que intentamos descifrar.

A
B
C
D

Vector Parents



X
Y
Z

Comenzamos a analizar palabra por palabra, en nuestro ejemplo, primero analizaramos la


palabra Angular. El proceso de anlisis de cada palabra consiste en recorrer la palabra
carcter por carcter y analizar por pares de letras. A la letra en la posicin i la llamaremos
letra x, y a la letra en la posicin i+1, la llamaremos letra y

Tomamos a la letra x y buscamos en el vector Parents, verificando que no tenga registrado


en su lista de antecesores a la letra y. Si se encuentra a la letra y como antecesora de x, se
retorna como resultado Impossible. En caso contrario, registramos en la lista de antecesores
de la letra y a la letra x y las dems letras que puedan estar antes de y. Es decir:

Tomando el ejemplo de angular, analizaramos las letras a y n, primero buscamos en el vector


de sets Parents, la lista de antecesores de a, y verificamos que no tenga registrada a la letra n
como antecesor. Dado que son las primeras letras, no habr problemas, por lo que
procedemos a registrar como antecesor de la letra n a la letra a.

n a Antecesores de n
Luego analizamos las letras n y g, buscamos entre los antecesores de g, a la letra n, como la
encuentra procedemos a registrar los antecesores de g.

g a n
Antecesores de g y n
n a

Analizamos g y u, y obtenemos como resultado:

g a n
n a Antecesores de g, n y u

u a n g

Analizamos l y u, y obtenemos como resultado:

g a n
a Antecesores de g, n, u y l
n
u a n g
a n g u
l

Analizamos l y a, pero al buscar a la letra a entre los antecesores de l, observamos que se


encuentra registrado como antecesor, por lo que el resultado ser Impossible.