Skip to content
This repository was archived by the owner on Sep 20, 2024. It is now read-only.

Commit 064a728

Browse files
committed
Update README.md
1 parent a7a4002 commit 064a728

File tree

1 file changed

+68
-29
lines changed

1 file changed

+68
-29
lines changed

README.md

Lines changed: 68 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,28 @@
22

33
![GitHub release (latest SemVer including pre-releases)](https://img.shields.io/github/v/release/crysok/tci_tpt?include_prereleases&style=flat-square) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/e2ba4a6d2eee4a20ada46eb7e8c1af6b)](https://app.codacy.com/gh/CrysoK/TC1-TPT?utm_source=github.com&utm_medium=referral&utm_content=CrysoK/TC1-TPT&utm_campaign=Badge_Grade_Settings)
44

5-
> :warning: **Si actualmente estás cursando TCI, no deberías estar aquí. Primero debes resolverlo por tu cuenta.**
5+
> :warning: **Si actualmente estás cursando TCI, no deberías estar aquí. Primero
6+
> debes resolverlo por tu cuenta.**
67
78
## Descripción
89

9-
> Si quieres pasar a la acción, avanza a [instalación](#instalaci%C3%B3n) o [cómo usar](#c%C3%B3mo-usar).
10+
> Si quieres pasar a la acción, avanza a [instalación](#instalaci%C3%B3n) o
11+
> [cómo usar](#c%C3%B3mo-usar).
1012
1113
El trabajo está compuesto por dos partes.
1214

13-
La primera es un TAD (tipo abstracto de datos) que permite modelar los objetos matemáticos conjuntos y listas, cuyos componentes más elementales son cadenas de caracteres pero también pueden contener conjuntos o listas de forma recursiva, con cualquier nivel de anidamiento o profundidad.
15+
La primera es un TAD (tipo abstracto de datos) que permite modelar los objetos
16+
matemáticos conjuntos y listas, cuyos componentes más elementales son cadenas de
17+
caracteres pero también pueden contener conjuntos o listas de forma recursiva,
18+
con cualquier nivel de anidamiento o profundidad.
1419

15-
La segunda utiliza el TAD diseñado para implementar algoritmos de autómatas finitos.
20+
La segunda utiliza el TAD diseñado para implementar algoritmos de autómatas
21+
finitos.
1622

1723
### TAD
1824

19-
**L**ST (listas), **S**ET (conjuntos) y **S**TR (cadenas) son los tres tipos de datos que puede representar un nodo **LSS**.
25+
**L**ST (listas), **S**ET (conjuntos) y **S**TR (cadenas) son los tres tipos de
26+
datos que puede representar un nodo **LSS**.
2027

2128
```c
2229
enum NODE_TYPE { LST, SET, STR };
@@ -35,9 +42,12 @@ struct LSSNode {
3542

3643
#### Conjuntos
3744

38-
- Se simbolizan con una llave de apertura, una secuencia de elementos separados por comas y una llave de cierre. Ejemplo: `{uno, dos, tres}`.
45+
- Se simbolizan con una llave de apertura, una secuencia de elementos separados
46+
por comas y una llave de cierre. Ejemplo: `{uno, dos, tres}`.
3947
- No poseen elementos repetidos.
40-
- No tienen orden. El conjunto `{uno, dos, tres}` es el mismo conjunto que `{dos, uno, tres}` o que `{tres, dos, uno}`. En el programa se ordenan para simplificar operaciones como la comparación.
48+
- No tienen orden. El conjunto `{uno, dos, tres}` es el mismo conjunto que
49+
`{dos, uno, tres}` o que `{tres, dos, uno}`. En el programa se ordenan para
50+
simplificar operaciones como la comparación.
4151
- Aritmética de conjuntos:
4252
- Unión (no implementado).
4353
- Intersección.
@@ -47,9 +57,11 @@ struct LSSNode {
4757

4858
#### Listas
4959

50-
- Se simbolizan con un corchete de apertura, la lista de elementos separados por comas y un corchete de cierre. Ejemplo: `[uno, dos, tres]`.
60+
- Se simbolizan con un corchete de apertura, la lista de elementos separados por
61+
comas y un corchete de cierre. Ejemplo: `[uno, dos, tres]`.
5162
- Pueden tener elementos repetidos.
52-
- Tienen orden. La lista `[uno, dos, tres]` es distinta que `[dos, uno, tres]` o que `[tres, dos, uno]`.
63+
- Tienen orden. La lista `[uno, dos, tres]` es distinta que `[dos, uno, tres]` o
64+
que `[tres, dos, uno]`.
5365
- Aritmética de listas:
5466
- Agregar elementos al inicio y al final.
5567
- Remover elementos al inicio y al final (no implementado).
@@ -58,23 +70,36 @@ struct LSSNode {
5870

5971
### Autómatas finitos
6072

61-
Los autómatas finitos pueden ser deterministas o no deterministas. En ambos casos su estructura es una *5-upla* definida por ( 𝑄 , 𝛴 , 𝛿 , 𝑞₀ , 𝐹 ) en donde:
73+
Los autómatas finitos pueden ser deterministas o no deterministas. En ambos
74+
casos su estructura es una *5-upla* definida por ( 𝑄 , 𝛴 , 𝛿 , 𝑞₀ , 𝐹 ) en
75+
donde:
6276

6377
- 𝑄 es el conjunto de estados,
6478
- 𝛴 es el conjunto de símbolos de entrada,
6579
- 𝑞₀ es el estado inicial,
6680
- 𝐹 el conjunto de estados de aceptación
67-
- 𝛿, cuando el AF es determinista, es una función de 𝑄 × 𝛴 en 𝑄 y, cuando el AF es no determinista, es una relación en 𝑄 × 𝛴 × 𝑄. Se puede pensar a 𝛿 como una terna o lista de tres elementos que representan el estado de partida, el carácter leído, y los estados destino (puede ser uno) respectivamente.
81+
- 𝛿, cuando el AF es determinista, es una función de 𝑄 × 𝛴 en 𝑄 y, cuando el
82+
AF es no determinista, es una relación en 𝑄 × 𝛴 × 𝑄. Se puede pensar a 𝛿
83+
como una terna o lista de tres elementos que representan el estado de partida,
84+
el carácter leído, y los estados destino (puede ser uno) respectivamente.
6885

69-
La transición de un AFD 𝛿 { 𝑞₀ , a } = 𝑞₁ se puede representar como [ 𝑞₀ , a , 𝑞₁ ].
86+
La transición de un AFD 𝛿 { 𝑞₀ , a } = 𝑞₁ se puede representar como [ 𝑞₀ , a
87+
, 𝑞₁ ].
7088

71-
La transición de un AFND 𝛿 { 𝑞₀ , a } = { 𝑞₁ , 𝑞₂ } se puede representar como [𝑞₀ , a , { 𝑞₁ , 𝑞₂ } ].
89+
La transición de un AFND 𝛿 { 𝑞₀ , a } = { 𝑞₁ , 𝑞₂ } se puede representar
90+
como [𝑞₀ , a , { 𝑞₁ , 𝑞₂ } ].
7291

73-
Como los AFD son casos particulares de un AFND, se puede pensar en almacenar a los AFD con su tercera componente como un conjunto de un solo elemento. Así, generalizando, se representa a 𝛿 como una terna o lista de tres elementos cuyo primer elemento es una cadena (el estado), segundo elemento también una cadena (el símbolo leído) y tercer elemento un conjunto de cadenas (conjunto de estados destino).
92+
Como los AFD son casos particulares de un AFND, se puede pensar en almacenar a
93+
los AFD con su tercera componente como un conjunto de un solo elemento. Así,
94+
generalizando, se representa a 𝛿 como una terna o lista de tres elementos cuyo
95+
primer elemento es una cadena (el estado), segundo elemento también una cadena
96+
(el símbolo leído) y tercer elemento un conjunto de cadenas (conjunto de estados
97+
destino).
7498

7599
Entonces un AF puede ser almacenado con la siguiente estructura:
76100

77-
[ { 𝑞₀ , 𝑞₁ , ... , 𝑞ₙ } , { a , b } , { [ 𝑞₀ , a , { 𝑞₀ , 𝑞₁ } ] , ... , [ 𝑞₂ , b , { 𝑞₁ } ] } , 𝑞₀ , { 𝑞₂ } ]
101+
[ { 𝑞₀ , 𝑞₁ , ... , 𝑞ₙ } , { a , b } , { [ 𝑞₀ , a , { 𝑞₀ , 𝑞₁ } ] , ... ,
102+
[ 𝑞₂ , b , { 𝑞₁ } ] } , 𝑞₀ , { 𝑞₂ } ]
78103

79104
Donde:
80105

@@ -88,22 +113,29 @@ Se puede concluir que el TAD diseñado permite almacenar autómatas finitos.
88113

89114
### Objetivos
90115

91-
Implementar el [TAD](#tad) descripto utilizando la estructura de datos propuesta. Luego utilizarlo en un programa para las siguientes tareas:
116+
Implementar el [TAD](#tad) descripto utilizando la estructura de datos
117+
propuesta. Luego utilizarlo en un programa para las siguientes tareas:
92118

93-
- Cargar un AF "por partes": primero el conjunto de estados, luego el alfabeto, etc. (cargar la transición de estados por terna).
119+
- Cargar un AF "por partes": primero el conjunto de estados, luego el alfabeto,
120+
etc. (cargar la transición de estados por terna).
94121
- Almacenar el AF en la estructura propuesta.
95122
- Mostrar el autómata finito.
96-
- Dada una cadena, indicar si pertenece al lenguaje regular cuyo autómata finito es el ingresado.
123+
- Dada una cadena, indicar si pertenece al lenguaje regular cuyo autómata finito
124+
es el ingresado.
97125
- Si el AF es no determinista, convertirlo en determinista.
98126

99127
## Instalación
100128

101-
Puedes descargar el código fuente (como archivo comprimido) o un ejecutable (solo para Windows) [aquí](https://github.com/CrysoK/TCI_TPT/releases).
102-
Se incluye `MakeWindows.cmd` y `MakeLinux.sh` para facilitar la compilación ([más información](https://github.com/CrysoK/WLCM)). Otros sistemas operativos no deberian tener problemas si cuentan con `make`.
129+
Puedes descargar el código fuente (como archivo comprimido) o un ejecutable
130+
(solo para Windows) [aquí](https://github.com/CrysoK/TCI_TPT/releases). Se
131+
incluye `MakeWindows.cmd` y `MakeLinux.sh` para facilitar la compilación ([más
132+
información](https://github.com/CrysoK/WLCM)). Otros sistemas operativos no
133+
deberían tener problemas si cuentan con `make`.
103134

104135
## ¿Cómo usar?
105136

106-
El programa cuenta con una interfaz sencilla basada en menús y opciones que se indican por teclado.
137+
El programa cuenta con una interfaz sencilla basada en menús y opciones que se
138+
indican por teclado.
107139

108140
Algunos mensajes utilizan ciertos símbolos, que indican lo siguiente:
109141

@@ -115,27 +147,34 @@ Algunos mensajes utilizan ciertos símbolos, que indican lo siguiente:
115147

116148
### Carga de un autómata finito
117149

118-
Puede cargar cualquier AF siempre que sea correcto y se respete el formato indicado más [arriba](#autómatas-finitos).
150+
Puede cargar cualquier AF siempre que sea correcto y se respete el formato
151+
indicado más [arriba](#autómatas-finitos).
119152

120-
[Estos](afs.md) AF pueden servirle para probar el programa. La forma más rápida de cargarlos es copiar y pegar en la opción de carga directa.
153+
[Estos](afs.md) AF pueden servirle para probar el programa. La forma más rápida
154+
de cargarlos es copiar y pegar en la opción de carga directa.
121155

122156
### Visualización de un autómata finito
123157

124158
#### Consola
125159

126-
Basta con elegir la opción 2 para ver al AF cargado como texto simple en la consola.
160+
Basta con elegir la opción 2 para ver al AF cargado como texto simple en la
161+
consola.
127162

128163
#### Externa
129164

130-
La opción 3 genera el archivo `LSS.dot` en la misma carpeta en la que se encuentra el ejecutable. Este archivo se puede usar con [Graphviz](https://graphviz.org/) para crear una representación gráfica mucho más detallada de los datos cargados.
131-
132-
Está en los planes que el programa genere directamente una imagen si el usuario tiene Graphviz instalado.
165+
La opción 3 permite visualizar la estructura cargada usando
166+
[Graphviz](https://graphviz.org/download/). Genera un archivo `.dot` en la
167+
carpeta donde está el ejecutable y, si
168+
[Graphviz](https://graphviz.org/download/) está instalado correctamente, genera una
169+
imagen y la muestra.
133170

134171
### Aceptación de cadenas
135172

136-
La opción 4 permite ingresar cadenas y comprobar si el AF cargado las acepta o no. Las cadenas deben estar formadas por símbolos que estén definidos en el AF.
173+
La opción 4 permite ingresar cadenas y comprobar si el AF cargado las acepta o
174+
no. Las cadenas deben estar formadas por símbolos que estén definidos en el AF.
137175

138176
### Conversión
139177

140178
En el caso de cargar un AFND, se muestra la opción 5 para convertirlo en un AFD.
141-
El AFD resultante es completamente válido y se puede usar en el resto de opciones.
179+
El AFD resultante es completamente válido y se puede usar en el resto de
180+
opciones.

0 commit comments

Comments
 (0)