Download Transparencias del tema 7 (Parte 1)

Document related concepts
no text concepts found
Transcript
Tipos de estructuras de datos
Estructuras de datos
(primera parte)
●
Formación (array)
●
Clase
de
hoy
●
●
Javier Miranda, Francisco Guerra, Luis Hernández
[email protected]
[email protected]
[email protected]
●
Sólo exite un índice asociado a la posición.
Especialización de formación
Datos heterogéneos
Vectores en Ada
procedure Ejemplo_Vectores is
Vector_1 : array (1 .. 10) of Integer;
Vector_2 : array (Positive range 1 .. 10) of Integer;
A(2) A(3) A(4) A(5) A(6)
Sueldo
●
●
El tipo del índice debe ser enumerable (no puede ser
Float)
Cada elemento se puede procesar como una variable
independiente.
A (3)
●
Valor
En Ada seria:
A : array (2 .. 6) of Integer;
Ejemplo: Recorrido de un vector
-- Ejemplo: Recorrido de un vector que contiene
-- números naturales
procedure Recorrer_Vector is
Vector: array (2 .. 6) of Natural;
begin
for I in 2 .. 6 loop
...
Vector (I) := 0;
...
end loop;
end Recorrer_Vector;
''En un lugar de
la mancha ...''
Registro (record)
●
Formación Unidimensional
(Vector)
Último
Cadena de caracteres (string)
●
●
Primero
Datos homogéneos
Orden por posición
: array (2004 .. 2025) of Integer;
Tabla_Reales : array (1 .. 30) of Float;
Fíjate que puedes indicar
el tipo de dato del indice
... y que puedes indicar
cualquier rango de valores
válidos para el índice
... y que el contenido de cada
elemento del vector puede ser
cualquier tipo de dato
Tabla_Enteros : array (1 .. 4) of Integer := (1
=> 10,
2
=> 20,
others => 0);
begin
...
Sueldo (2003) := 1000;
end Ejemplo_Vectores;
... y que el puedes
indicar el valor
inicial del vector
Si el programa intenta utilizar elementos
del vector fuera del rango valido Ada eleva
La excepción Constraint_Error
Ejercicios: Recorrido de un vector
1.
Escribe un programa que lea 10 números, los guarde en
una tabla y calcule la suma de los 10 números.
2.
Modifica el programa anterior para que nos diga cual es el
número más grande que hay en la tabla.
3.
Modifica el programa anterior para que nos diga cual es el
la posición (dentro de la tabla) del número más pequeño.
1
Definición de tipo de dato:
Vector
Definición de tipo de dato: Vector
• A veces necesitamos declarar varios vectores del mismo
tamaño. Un error frecuente es que cuando modifiquemos el
tamaño de uno tenemos que recordar modificarlos todos
• Solución: Para evitar errores lo mejor es declarar un
nuevo tipo de dato
procedure Ejemplo is
type T_Tabla is array (1 .. 30) of Integer;
procedure Ejemplo is
Tabla_1 : array (1 .. 30) of Integer;
Tabla_2 : array (1 .. 30) of Integer;
Tabla_3 : array (1 .. 30) of Integer;
Tabla_4 : array (1 .. 30) of Integer;
begin
...
end Ejemplo;
Tabla_1 : T_Tabla;
Tabla_2 : T_Tabla;
Tabla_3 : T_Tabla;
Tabla_4 : T_Tabla;
begin
...
end Ejemplo;
Uso de vectores con
procedimientos y funciones
Ejercicios: Uso de vectores con
procedimientos y funciones
procedure Ejemplo_Subprogramas is
type T_Tabla is array (1 .. 5) of Integer;
procedure Sumar (Tabla
: in T_Tabla;
Resultado : out Integer) is
begin
...
end Sumar;
Para utilizar vectores con
procedimientos y funciones
siempre tenemos que declarar
el tipo de dato (es obligatorio)
function Maximo (Tabla : in T_Tabla) return Integer is
begin
...
end Maximo;
Mi_Tabla
: T_Tabla := (10, 2, 41, 99, 1);
Valor_Maximo : Integer;
begin
Valor_Maximo := Maximo (Mi_Tabla);
end Ejemplo_Subprogramas;
Strings
●
Ahora que conocemos los vectores vemos que las
strings son vectores de caracteres
type String is array (Positive range < >) of Character;
Fíjate que el rango del índice de las strings no
es fijo; < > significa que el rango no se sabe
Aún y que hay indicarlo al declarar las strings
Esta característica se conoce como definición de un array
irrestringidos y puede utilizarse con cualquier tipo de vector,
No solamente con los de caracteres (volveremos a verlo más
adelante)
Primero fijamos el nombre del
nuevo tipo de dato; después
lo utilizamos igual que utilizamos
cualquiera de los tipos básicos
de Ada
Escribe un programa que contenga los siguientes subprogramas:
1.
Procedimiento que calcula la suma de todos los números de una tabla
2.
Función que calcula cual es el número más grande que hay en la tabla.
3.
Función que recibe como parámetro una tabla y un número y calcula cual
es la posición de dicho número dentro de la tabla (comenzando la búsqueda
por el principio de la tabla). Si no encuentra el número la función devuelve
el valor 0.
4.
Función idéntica a la anterior pero que realiza la búsqueda desde el final de
la tabla hacia el principio.
5.
Función que recibe dos vectores de números enteros y devuelve el vector
suma (un vector con la suma de los vectores, componente a componente)
Ejemplo:
Recorrido de
Strings
with Text_IO;
procedure Ejemplo is
Frase
: String (1 .. 40);
Longitud_Frase : Natural := 0;
begin
-- Lleno la frase de espacios en blanco
for I in 1 .. 40 loop
-- Cada una de las letras que componen la frase
-- se trata como un “character” independiente;
-- por eso se pone con comilla simple, no doble
Frase (I) := ' ';
end loop;
-- Leo una frase desde teclado
Text_IO.Get_Line (Frase, Longitud_Frase);
-- Escribo cada letra en una linea
for I in 1 .. Longitud_Frase loop
Text_IO.Put ( Frase (I) );
Text_IO.New_Line;
end loop;
end Ejemplo;
2
Resumen
First
●
●
●
Formación (array)
● Datos homogéneos
● Orden por posición
Last
Range
Hemos visto sólamente arrays unidimensionales
Las cadenas de caracteres (strings) son un caso
particular
type String is array (Positive range < >) of Character;
3