|
UNITEC SUR Prof. Ing. José Luis Lozoya Vázquez - Resumen1 TDA
|
|
|
1.1Clasificacion de los tipos de datos.
Clasificación de los tipos de datos.
Los datos se pueden clasificar en:
Los tipos de datos principales (primitivos:
· Cadena.
· Numérico.
· Booleano.
Los tipos de datos compuestos (de referencia:
· Objeto.
· Matriz.
Tipos de datos especiales:
· null.
· Undefined.
1.2Apuntadores.
Un Apuntador es una variable que contiene una dirección de memoria, la cual corresponderá a un dato o a una variable que contiene el dato. Los apuntadores también deben de seguir las mismas reglas que se aplican a las demás variables, deben tener nombre únicos y deben de declararse antes de usarse.
Cada variable que se utiliza en una aplicación ocupa una o varias posiciones de memoria. Estas posiciones de memoria se accesan por medio de una dirección.
En la figura el texto Hello ésta guardado en memoria, comenzando en la dirección 1000. Cada carácter ocupa un espacio de dirección único en memoria. Los apuntadores proporcionan un método para conservar y llegar a estas direcciones en memoria. Los apuntadores facilitan el manejo de datos, debido a que conservan la dirección de otra variable o ubicación de datos.
1.3Cadenas, Arreglos y Registros.
Arreglos. Es una serie de datos del mismo tipo, también conocidos como vectores o rangos. Una arreglo esta constituido por varias posiciones de memoria de igual tamaño consecutivas que tienen el mismo tipo de variable y se accesan usando el mismo nombre seguido de un subíndice entre corchetes. La cantidad total de espacio que se usa por un arreglo depende de 2 cosas: El número de elementos en el arreglo y El tamaño del arreglo.

1.4Recursión.
Se dice que algo es recursivo si se define en función de sí mismo o a sí mismo. También se dice que nunca se debe incluir la misma palabra en la definición de ésta. El caso es que las definiciones recursivas aparecen con frecuencia en matemáticas, e incluso en la vida real. Un ejemplo: basta con apuntar una cámara al monitor que muestra la imagen que muestra esa cámara. El efecto es verdaderamente curioso, en especial cuando se mueve la cámara alrededor del monitor.
En matemáticas, tenemos múltiples definiciones recursivas:
- Números naturales:
(1) 1 es número natural.
(2) el siguiente número de un número natural es un número natural
- El factorial: n!, de un número natural (incluido el 0):
(1) si n = 0 entonces: 0! = 1
(2) si n > 0 entonces: n! = n · (n-1)!
1.5Principios de los TDA
El concepto de tipo de dato abstracto (TDA, Abstract Data Type), fue propuesto por primera vez hacia 1974 por John Guttag y otros, pero no fue hasta 1975 que por primera vez Liskov lo propuso para el lenguaje CLU.
El lenguaje Turbo Pascal fue determinante para la común aceptación de los TDAs con la introducción de las Units, si bien estas no cumplen con las características básicas de un Tipo de dato Abstracto como por ejemplo la encapsulación de los datos. El lenguaje Ada pudo implementar exitosamente los TDAs con sus Packages. Vale recordar que estos dos últimos lenguajes soportan formalmente la Programación modular.
2.1Definición.
Un tipo de dato abstracto (TDA) o Tipo abstracto de datos (TAD) es un modelo matemático compuesto por una colección de operaciones definidas sobre un conjunto de datos para el modelo.
2.2Especificacion
La solidez de un TDA reposa en la idea de que la implementación está escondida al usuario. Solo la interfaz es pública. Esto significa que el TDA puede ser implementado de diferentes formas, pero mientras se mantenga consistente con la interfaz, los programas que lo usan no se ven afectados.
2.3Implantación.
Hay una diferencia, aunque a veces sutil, entre el Tipo de Dato Abstracto y la Estructura de Dato usada en su implementación. Por ejemplo, un TDA de una lista puede ser implementado mediante un Arreglo o una Lista Enlazada o hasta un Árbol binario de búsqueda. Una lista es un Tipo de Dato Abstracto con operaciones bien definidas (agregar elemento, agregar al final, agregar al principio, recuperar, eliminar, etc) mientras una lista enlazada es una estructura de datos basada en punteros o referencias (dependiendo del lenguaje) que puede ser usada para crear una representación de una Lista. La Lista Enlazada es comúnmente usada para representar una TDA Lista, y a veces, hasta confundida. Un ejemplo es la clase Linked List de Java, la cual ofrece una gran cantidad de métodos que no corresponden a una Lista Enlazada "pura", sino a un fuerte TDA.
2.4Aplicaciones.
Algunos ejemplos de utilización de TDAs en programación son:
* Conjuntos: Implementación de conjuntos con sus operaciones básicas (unión, intersección y diferencia), operaciones de inserción, borrado, búsqueda...
* Árboles Binarios de Búsqueda: Implementación de árboles de elementos, utilizados para la representación interna de datos complejos. Aunque siempre se los toma como un TDA separado son parte de la familia de los grafos.
* Pilas y Colas: Implementación de los algoritmos FIFO y LIFO.
* Grafos: Implementación de grafos; una serie de vértices unidos mediante una serie de arcos o aristas.
3.1Definición.
Las pilas son otro tipo de estructura de datos lineales, las cuales presentan restricciones en cuanto a la posición en la cual pueden realizarse las inserciones y las extracciones de elementos.
Una pila es una lista de elementos en la que se pueden insertar y eliminar elementos sólo por uno de los extremos. Como consecuencia, los elementos de una pila serán eliminados en orden inverso al que se insertaron. Es decir, el último elemento que se metió a la pila será el primero en salir de ella.
3.2Especificación.
En la vida cotidiana existen muchos ejemplos de pilas, una pila de platos en una alacena, una pila de latas en un supermercado, una pila de papeles sobre un escritorio, etc.
Debido al orden en que se insertan y eliminan los elementos en una pila, también se le conoce como estructura LIFO (Last In, First Out: último en entrar, primero en salir).
3.3Implantación.
utilizando memoria estática
Se utilizará un arreglo unidimensiottal en el que se guardarán los datos a partir de la posición inicial del
mismo. La posición de inicio del arreglo actuará como fondo de la pila y se requerirá de un apuntador que
indique la posición donde se encuentra el tope de la pila (último elemento añ adido).
3.4Aplicación.
Aplicaciones de las pilas
Cualquier aplicación que requiera administrar el orden de entrada de un conjunto de datos requerirá
alguna de estas estructuras.
Una pila será útil cuando la aplicación requiera de un orden inverso al orden de entrada original de los
datos. Un ejemplo típico del uso de una pila lo podernos ver en el manejo de las llamadas a módulos o
subrutinas en un programa (razón por la que un stack está siempre presente en la ejecución de cualquier
programa, aunque sea implícito para el programador). Otro ejemplo del uso de una pila se da en el proceso de
conversión de expresiones a diferentes formatos (situación que se requiere en la implantación de un
compilador).
Expresiones regulares
1. Introducción
2. Creación de una expresión regular
3. Creación de los patrones
4. Aplicación a la validación de campos de formularios
1. Introducción
Las Expresiones Regulares son patrones que permiten buscar coincidencias con combinaciones de caracteres dentro de cadenas de texto. Estos patrones pueden utilizarse con los metodos exec y text del objeto RegExp, y con los metodos match, replace, search y split del objeto String.
Las expresiones regulares están disponibles a partir de la versión 1.2 de JavaScript (Netscape Navigator 4.x y Microsoft Internet Explorer 4.x).
2. Creación de una expresión regular
Par crear una expresión regular, puede utilizarse uno de los siguientes métodos:
exp_reg = /ab+c/
exp_reg = new RegExp("ab+c")
La primera opción compila la expresion regular cuando se evalúa el script, por lo que es mejor cuando la expresión regular es una constante y no va a variar a lo largo de la ejecución del programa. La segunda opción compila la expresión regular en tiempo de ejecución.
3. Creación de los patrones
Una expresión regular es una combinación de carácteres normales con carácteres espciales. Por ejemplo, la expresión regular /ejemplo/ encontrará la subcadena "ejemplo" dentro de la cadena "Esto es un ejemplo."
Con la utilización de carácteres especiales se consigue encontrar coincidencias con los retornos de carro, los tabuladores, el inicio o el final de las palabras, las repeticiones de caracteres...
La siguiente tabla muestra una lista de los carácteres especiales más importantes, así como su significado y un ejemplo de aplicacion:
Caracter Significado Ejemplo
Indica que el siguiente caracter normal debe ser considerado como especial. También se utiliza como caracter de escape para los caracteres especiales. /n/ encuentra un salto de líena. Si se desea buscar el caracter '', habrá que utilizar //
^ Se utiliza para encontrar el comienzo de una línea. /a/ encuentra una 'a' en cualquier lugar, pero /^a/ haya una coincidencia con el caracter 'a' si se encuentra al comienzo de una línea.
$ Se utiliza para encontrar el final de una línea.
* Encuentra coincidencia del caracter que le precede cuando aparece 0 o más veces en la cadena. /hola*/ encuentra coincidencias en las cadena "hol", "hola" y "holaaaa".
+ Igual que el '*', pero cuando el caracter aparece 1 o más veces.
? Igual que el '*', pero cuando el caracter aparece 0 o 1 vez.
. Se utiliza para encontrar cualquier caracter que no sea un caracter de nueva línea. /.sa/ encontrará coincidencias en las cadenas "casa", "cosa" y "cesa", pero no en "asa".
(x) Encuentra coincidencias con 'x', y recuerda el patrón para su posterior utilización.
x|y Encuentra coincidencia si aparece el caracter 'x' o el caracter 'y'.
{n} Encuentra coincidencia si hay exactamente n apariciones del caracter que precede. Por ejemplo, /a{3}/ encuentra coincidencia en "holaaa", pero no en "holaa".
{n,} Encuentra coincidencia si hay al menos n apariciones del caracter que precede.
{n,m} Encuentra coincidencia si hay como mínimo n y com máximo m apariciones del caracter que precede.
[xyz] Representa un conjunto de caracteres individuales. /[aeiou]/ encuentra coincidencias con cualquier vocal. Si se utiliza el caracter '-' se pueden definir rangos. Por ejemplo, /[0-3]/ encuentra coincidencias si aparecen en la cadena los caracteres '0', '1', '2' o '3'.
[^xyz] Representa un conjunto de caracteres individuales complementario. Encunetra coincidencias con aquellos caracteres que NO aparezcan en el conjunto. Al igual que en el caso anterior, con el '-' se pueden definir rangos.
[b] Encuentra coincidencia con el caracter de retroceso.
b Encuentra coincidencias con los límites de las palabras. Por ejemplo, /bola/ encuentra la cadena "ola" en "Viene una ola", pero no en "Viene una cola".
4. Aplicación a la validación de campos de formularios
Una de las aplicaciones más habituales de las expresiones regulares es la validación de campos de formularios. Para ello, se crea una función de validación que contiene una expresión regular por cada tipo de campo que se desea validar.
Por ejemplo, podemos crear una expresión regular para campos de teléfono, que compruebe que se han introducido sólo números, espacios o el caracter '-' en el campo correspondiente.
Para validar los campos se utiliza el método test de la expresión regular correspondiente. Este método compara la cadena que se le pasa como argumento con el patrón de la expresión regular.
El siguiente ejemplo valida campos de teléfono y direcciones de correo electrónico:
function ValidaCampos(formulario) {
//expresion regular para telefonos
//permite campos vacios y guiones
var er_tlfono = /(^[0-9s+-])+$/
//expresion regular para emails
var er_email = /^(.+@.+..+)$/
//comprueba campo tlfono de formu
//usa el metodo test de expresion regular
if(!er_tlfono.test(formu.tlfono.value)) {
alert('Campo TELEFONO no válido.')
return false //no submit
}
//comprueba el campo email de formu
//usa metodo test de la expresion regular
if(!er_email.test(formu.email.value)) {
alert('Campo E-MAIL no válido.')
return false //no submit
}
return true //pasa al submit
}
La función de validación se invoca utilizando el evento onSubmit del formulario. Cuando la validación no da positivo, la función de validación devuelve false. Esto cancela el submit, de modo que el usuario pueda corregir la entrada incorrecta. En caso contrario, se devuelve true. El tag form quedaría así:
<form name="formu" action="enviar.cgi" onSubmit="return ValidaCampos(this)">
|
Hoy habia 12 visitantes (17 clics a subpáginas) ¡Aqui en esta página!
|
|
|
|