Estructura de Datos Arreglos Experiencia Educativa de Algorítmica ESTRUCTURA DE DATOS - ARREGLOS 1 Introducción Una estructura de datos es una colección de datos que pueden ser caracterizados por su organización y las operaciones que se definen en ella. Son muy importantes en todos los sistemas que realizamos. Como vimos anteriormente teníamos los Datos Simples: Estándar (entero, real, carácter, lógico) y los definidos por el programador. Ahora agregamos los datos estructurados, estos son de tipo estáticos y dinámicos Los estáticos son: • Arreglos (Vectores y Matrices) • Registros • Ficheros (Archivos) • Conjuntos • Cadenas Dinámicos: • Listas (Pilas y Colas) • Listas enlazadas • Árboles • Grafos Las estructuras de datos estáticas se les define el tamaño ocupado en memoria antes de que el programa se ejecute y no puede modificarse durante su ejecución. Las estructuras de datos dinámicas, por otro lado no tienen limitaciones o restricciones, su tamaño puede crecer o disminución en el tiempo de ejecución. ARREGLOS Un array o arreglo (matriz o vector) es un conjunto finito, ordenado y homogéneo de elementos. Cuando decimos que ordenado no referimos a que los elementos van del primero, segundo, tercero, etc… Es homogéneo porque son del mismo tipo de datos, esto es si es un arreglo de números todos serán números, si es de carácter, todos serán carácter. ESTRUCTURA DE DATOS - ARREGLOS 2 El tipo más simple de un arreglo es aquel que denominamos por unidimencional, es decir una matriz de una dimensión Comando usado en pseint es Dimension seguido del nombre del arreglo y su tamaño entre corchetes [ ] Hay que recordar que un arreglo antes de ser utilizado debe de ser definido, en caso de ser de tipo numérico, ya sea entero o real, se define como “Numeros”, si es de Carácter como “Caracter”. Dimension variable [ ] Ejemplo Proceso Arreglo1 Definir arreglo Como Entero; Definir x, num como Entero; Dimension arreglo[5]; Para x<-0 Hasta 4 Hacer Escribir "Introduce un numero"; Leer num; arreglo[x] <- num; FinPara Escribir "El arreglo contiene los elementos: "; Para x<-0 Hasta 4 Hacer Escribir arreglo[x] ; FinPara FinProceso ESTRUCTURA DE DATOS - ARREGLOS 3 Práctica 6 Nota: En todos los ejercicios deben leer los elementos desde pantalla y posteriormente imprimirlos en pantalla. 1.- Capturar 5 nombres desde pantalla 2.- Llenar un arreglo numérico de tamaño 5 3.- Llenar un arreglo de números reales de tamaño 10 4.- Llenar un arreglo numérico de tamaño 10 e imprimir en orden inverso 5.- Obtener el tamaño del arreglo y llenarlo 6.- Hacer la suma de los elementos de un arreglo de tamaño definido por el usuario. 7.- Obtener el promedio de los elementos de un arreglo de tamaño definido por el usuario 8.- Manejar dos arreglos paralelamente, en donde un arreglo corresponda a la matricula y otro al nombre del alumno. 9.- Hacer la suma de dos arreglos y obtener un arreglo resultado 10.- Hacer la suma de tres arreglos 11.- Llenar un arreglo estático ESTRUCTURA DE DATOS - ARREGLOS 4 Respuesta: Proceso Ejercicio1 Definir nombres como Caracter; Definir x como Entero; Dimension nombres[5]; Para x<-0 Hasta 4 Hacer Escribir "Introduce un nombre"; Leer nombres[x]; FinPara Para x<-0 Hasta 4 Hacer Escribir nombres[x]; FinPara FinProceso Proceso Ejercicio2 Definir x, num como Entero; Dimension num[5]; Para x<-0 Hasta 4 Hacer Escribir "Introduce un numero"; Leer num[x]; FinPara Para x<-0 Hasta 4 Hacer Escribir num[x]; FinPara FinProceso Proceso Ejercicio3 Definir x como Entero; Definir num como Real; Dimension num[5]; Para x<-0 Hasta 4 Hacer Escribir "Introduce un numero"; Leer num[x]; FinPara Para x<-0 Hasta 4 Hacer Escribir num[x]; FinPara FinProceso ESTRUCTURA DE DATOS - ARREGLOS 5 Proceso Ejercicio4 Definir x, num como Entero; Dimension num[10]; Para x<-0 Hasta 4 Hacer Escribir "Introduce un numero"; Leer num[x]; FinPara Para x<-4 Hasta 0 Con Paso -1 Hacer Escribir num[x]; FinPara FinProceso Proceso Ejercicio5 Definir x, num, tam como Entero; Escribir "Define el tamaño del arreglo: "; Leer tam; Dimension num[tam]; Para x<-0 Hasta tam-1 Hacer Escribir "Introduce un numero"; Leer num[x]; FinPara Para x<-0 Hasta tam-1 Hacer Escribir num[x]; FinPara FinProceso Proceso Ejercicio6 Definir x, num, tam, suma como Entero; suma<- 0; Escribir "Define el tamaño del arreglo: "; Leer tam; Dimension num[tam]; Para x<-0 Hasta tam-1 Hacer Escribir "Introduce un numero"; Leer num[x]; FinPara Para x<-0 Hasta tam-1 Hacer suma<- suma + num[x]; FinPara Escribir "Suma = " , suma; FinProceso ESTRUCTURA DE DATOS - ARREGLOS 6 Proceso Ejercicio7 Definir x, num, tam como Entero; Definir promedio como Real; promedio<- 0; Escribir "Define el tamaño del arreglo: "; Leer tam; Dimension num[tam]; Para x<-0 Hasta tam-1 Hacer Escribir "Introduce un numero"; Leer num[x]; FinPara Para x<-0 Hasta tam-1 Hacer promedio<- promedio + num[x]; FinPara promedio <- promedio / tam; Escribir "Promedio = " , promedio; FinProceso Proceso Ejercicio8 Definir x, tam como Entero; Definir matricula, nombre como Caracter; Escribir "Define el tamaño del arreglo: "; Leer tam; Dimension matricula[tam], nombre[tam]; Para x<-0 Hasta tam-1 Hacer Escribir "Introduce la matricula"; Leer matricula[x]; Escribir "Indroduce el nombre"; Leer nombre[x]; FinPara Para x<-0 Hasta tam-1 Hacer Escribir matricula[x], " - ", nombre[x]; FinPara FinProceso ESTRUCTURA DE DATOS - ARREGLOS 7 Proceso Ejercicio9 Definir x, tam, num1, num2, total como Entero; Escribir "Define el tamaño del arreglo: "; Leer tam; Dimension num1[tam], num2[tam], total[tam]; Escribir "llenando arreglo 1"; Para x<-0 Hasta tam-1 Hacer Leer num1[x]; FinPara Escribir "llenando arreglo 2"; Para x<-0 Hasta tam-1 Hacer Leer num2[x]; FinPara Para x<-0 Hasta tam-1 Hacer total[x] <- num1[x] + num2[x]; FinPara Para x<-0 Hasta tam-1 Hacer Escribir total[x]; FinPara FinProceso Proceso Ejercicio10 Definir x, tam, num1, num2, total como Entero; Escribir "Define el tamaño del arreglo: "; Leer tam; Dimension num1[tam], num2[tam], total[tam]; Escribir "llenando arreglo 1"; Para x<-0 Hasta tam-1 Hacer Leer num1[x]; FinPara Escribir "llenando arreglo 2"; Para x<-0 Hasta tam-1 Hacer Leer num2[x]; FinPara Para x<-0 Hasta tam-1 Hacer total[x] <- num1[x] + num2[x]; FinPara Para x<-0 Hasta tam-1 Hacer Escribir total[x]; FinPara FinProceso ESTRUCTURA DE DATOS - ARREGLOS 8 Proceso Ejercicio11 Definir x, tam, num1 como Entero; Dimension num1[5]; num1[0] <- 1; num1[1] <- 2; num1[2] <- 3; num1[3] <- 4; num1[4] <- 5; Para x<-0 Hasta 4 Hacer Escribir num1[x]; FinPara FinProceso ESTRUCTURA DE DATOS - ARREGLOS 9 Práctica 7: Realizar los siguientes ejercicios 1.- Llenar una pila de tamaño 10 dinámicamente a través de la secuencia numérica de 2, 4, 8, 16, 32, …. e imprimir sus elementos 2.- Llenar una cola de tamaño 20 dinámicamente a través de la secuencia numérica de 2, 4, 6, 12, 14, 16,…. e imprimir sus elementos 3.- Llenar una cola de procesos de acuerdo a la metodología de First-come, first-served (FCFS) y determinar el Tiempo de Finalización (TF) y el Tiempo de Retorno (TR) de los procesos enlistados a continuación: Proceso Tiempo de Servicio (TS) • 1 4 2 2 3 3 4 6 TF = Tiempo de Servicio del proceso Actual + Tiempo de Espera de los procesos anteriores. • El Tiempo de Espera (TE) lo calculas con la suma de los tiempos de espera de los procesos anteriores • El Tiempo de Retorno (TR), es el tiempo transcurrido entre el Tiempo de Llegada del proceso y el Tiempo de Finalización (TR = TF – Llegada) 4.- Hacer la simulación de sistema de turnos para pasar a una ventanilla a hacer un movimiento o consulta. Para esto se sabe que el sistema de turnos tiene una cola de tamaño máximo de 20 por día, cuando llega un cliente se le asigna un turno, si la cola esta llena se le manda el mensaje de regresar otro día. Para avanzar la cola, el empleado de la ventanilla va solicitando los turnos hasta que la cola queda vacía. ESTRUCTURA DE DATOS - ARREGLOS 10 Matrices También conocidos como arreglos bidimensionales son el inicio de una base de datos, ya que contienen filas y columnas Es un conjunto de elementos, todos del mismo tipo. una matriz tiene al menos dos dimensiones y por cada una de ellas un subíndice. para el caso de una matriz de dos dimensiones el subíndice de la izquierda se refiere a las filas y el de la derecha a las columnas [Filas, Columnas] Una matriz es muy utilizada para calificaciones de una clase, datos estadísticos, datos financieros, calendarios, juegos como ajedrez o gato etc.. Proceso Ejercicio1 Definir matriz, x, y como Entero; Dimension matriz[2,2]; matriz[0,0] <- 0; matriz[0,1] <- 1; matriz[1,0] <- 2; matriz[1,1] <- 3; Para x<-0 Hasta 1 Hacer Para y<-0 Hasta 1 Hacer Escribir matriz[x,y]; FinPara FinPara FinProceso ESTRUCTURA DE DATOS - MATRICES 11 Práctica 8: Realizar los siguientes ejercicios 1.- Crear una matriz de enteros, llenarla estáticamente e imprimirla en pantalla. 2.- Crear una matriz de números reales, llenarla estáticamente e imprimirla en pantalla. 3.- Crear una matriz de enteros de tamaño, llenarla dinámicamente e imprimirla en pantalla. 4.- Crear una matriz de caracteres, llenarla dinámicamente e imprimirla en pantalla. 5.- crear una tabla que contenga el nombre de 5 atletas de salto de longitud y almacene los resultados correspondientes a la longitud de sus saltos en sus 5 pruebas realizadas. 6.- En una escuela se desea controlar los resultados de los alumnos en las distintas asignaturas. El programa debe permitir ingresar las calificaciones de los alumnos y visualizar en pantalla el promedio de las notas por alumno y el promedio de notas por asignatura. Se tienen 5 materias y están inscritos 10 alumnos (las calificaciones las pueden introducir de forma dinámica o estática) 7.- En un complejo habitacional se cuenta con 7 edificios de departamentos de 10 pisos cada uno de ellos y cada piso tiene 2 departamentos. Debes almacenar de forma estática el número de habitantes por departamento. Se desea saber: a) Cantidad total de habitantes del complejo b) Cantidad promedio de habitantes por piso de cada edificio c) Cantidad promedio de habitantes por edificio ESTRUCTURA DE DATOS - MATRICES 12 Funciones Una función no es más que un bloque de código con un determinado fin o propósito, podemos definir más de una y nos permiten ahorrar líneas código si nuestros programas son muy extensos o hay codificación redundante. En PseInt las Funciones o Subprocesos comienzan con la palabra reservada Función y terminan con FinFuncion o también se puede usar SubProceso - FinSubProceso. Siempre se declaran afuera del proceso principal para ser llamados o invocados en éste. También pueden o no retornar un valor o recibir cierta cantidad de argumentos. El ejemplo base del uso de funciones es: Funcion mensaje() Escribir "Usando funciones"; FinFuncion Proceso Ejercicio1 mensaje(); FinProceso En el caso de SubProcesos: SubProceso mensaje() Escribir "Usando sub procesos"; FinSubProceso Proceso ejercicio2 mensaje(); FinProceso Ahora como se hace el envío de variables sin retornar: SubProceso Operación (num1, num2) Definir suma Como Entero; suma <- num1 + num2; ESTRUCTURA DE DATOS - FUNCIONES 13 Escribir suma; FinSubProceso Proceso Ejercicio3 Operacion(10, 5); FinProceso Envio de variables y retornando un valor: SubProceso suma <- Operacion (num1, num2) Definir suma Como Entero; suma <- num1 + num2; FinSubProceso Proceso Ejercicio3 Escribir Operacion(10, 5); FinProceso ESTRUCTURA DE DATOS - FUNCIONES 14