Teoría Nº 6 Lenguaje de Diseño: Estructuración de Datos Segundo Cuatrimestre 2016 La determinación de los objetos es una parte importante en el proceso de resolución Restricción: los objetos deben determinarse en función de los cuatro tipos de datos primitivos. Ejemplo: Una empresa recibe mensualmente información sobre las ventas de cada una de sus tres sucursales. Se desea obtener un listado de aquellas sucursales cuyas ventas superan el promedio de las mismas. 2016 Versión 1: t1 - Leer los datos de las sucursales. t2 - Determinar el promedio. t3 - Comprobar cual o cuáles de las sucursales tiene venta superior al promedio. Versión 2: t11 - Para cada sucursal leer sus ventas y acumularlas. t2 - Determinar el promedio. t31 - Para cada sucursal leer sus ventas, compararlas con el promedio. Si es mayor al promedio, informar. 2016 Diagrama de Flujo de la solución en Lenguaje del Problema C ¿Objetos? De 1 a 3 Ingresar la venta de la sucursal . Acumular la venta. Calcular el promedio. De 1 a 3 Ingresar la venta de la sucursal F. venta > promedio V informo F 2016 Objetos? venta - guarda la venta de cada sucursal. acumulo - acumula las ventas promedio - almacena promedio. i - lleva la cuenta de la sucursal que trato. 2016 Algoritmo en lenguaje de diseño: ALGORITMO “Ventas” COMENZAR VENTA, ACUMULO, PROMEDIO: real I: entero PROMEDIO 0 ACUMULO 0 PARA I DESDE 1 HASTA 3 CON PASO 1 HACER LEER VENTA ACUMULO ACUMULO + VENTA FINPARA PROMEDIO ACUMULO / 3 PARA I DESDE 1 HASTA 3 CON PASO 1 HACER LEER VENTA SI VENTA > PROMEDIO ENTONCES ESCRIBIR I, VENTA FINSI FINPARA FIN ¿Desventajas? 2016 Solución 2: Objetos vent1 - guarda la venta de sucursal 1. vent2 - guarda la venta de sucursal 2. vent3 - guarda la venta de sucursal 3. promedio - acumula las ventas y saca promedio. 2016 Algoritmo en Lenguaje de Diseño: ALGORITMO “Ventas” COMENZAR VENT1, VENT2, VENT3, PROMEDIO: real LEER VENT1, VENT2, VENT3 PROMEDIO (VENT1+ VENT2 + VENT3) / 3 SI VENT1 > PROMEDIO ENTONCES ESCRIBIR VENT1 FINSI SI VENT2 > PROMEDIO ENTONCES ESCRIBIR VENT2 FINSI SI VENT3 > PROMEDIO ENTONCES ESCRIBIR VENT3 FINSI FIN 2016 100 Objetos? vent1 - guarda la venta de sucursal 1. vent2 - guarda la venta de sucursal 2. ... vent100 - guarda la venta de sucursal 100. 2016 ALGORITMO “Ventas” COMENZAR VENT1, VENT2, ..., VENT100, PROMEDIO: real LEER VENT1, VENT2, ..., VENT100 PROMEDIO (VENT1+ VENT2 + .. + VENT100) / 100 SI VENT1 > PROMEDIO ENTONCES ESCRIBIR VENT1 FINSI SI VENT2 > PROMEDIO ENTONCES ESCRIBIR VENT2 FINSI . . . SI VENT100 > PROMEDIO ENTONCES ESCRIBIR VENT100 FINSI FIN 2016 Problema: existen ocasiones donde los objetos no se pueden representar solamente con primitivas. Es necesario relacionar 2 o más tipos primitivos para poder construir nuestro nuevo objeto. Ejemplo: Representar el objeto número complejo. número complejo real imaginaria real real Preal Pimag Nuevo objeto, de tipo complejo, conformado o estructurado con objetos de tipo primitivo. 2016 Todas las formas posibles en que nosotros relacionemos lógicamente datos primitivos para construir nuevos objetos se denomina: ESTRUCTURACIÓN DE DATOS Características: 4 toda estructura se construye a partir de tipos de datos primitivos. 4 el conjunto de datos se identifica con un único nombre. 4una estructura se diferencia de otra por la forma en que sus componentes están relacionadas y el tipo de las mismas. 4se encuentran tanto en memoria principal como en memoria secundaria. Nos concentraremos en la estructuras de memoria principal 2016 Tipos de Estructuras de Datos: Estructuras Enlazadas: los datos no se encuentran en posiciones adyacentes de memoria. Estructuras Contiguas o Físicas: los datos se encuentran en posiciones adyacentes de memoria. Existe una estructura en particular que nos interesa denominada: ARREGLO LINEAL DE DATOS 2016 Arreglo Lineal Solución 3: Reunir los 100 objetos en un solo objeto estructurado. 120 578 1 2 625 1230 3 99 100 Arreglo Lineal VECTOR VENTA 120 1 VENTA[3] 578 2 625 1230 3 99 100 625 2016 Donde: 4 Todos los elementos del arreglo son del mismo tipo primitivo por lo tanto es una estructura homogénea. 4Es una estructura estática, es decir su tamaño (cantidad y tipo de elementos del arreglo) se define en tiempo de compilación a partir de la declaración y no cambia durante la ejecución del programa. (Es posible definir arreglos cuya dimensión se modifique en tiempos de ejecución pero este concepto no será abordado en este curso) . 4Es una estructura lineal de acceso directo, es decir se accede a un dato en forma directa con sólo indicar la posición o subíndice. El número que indica la posición (subíndice) es un número natural. 4El número de elementos o dimensión, se define con la declaración junto con el límite mínimo y límite máximo o rango. 2016 Declaración de un Arreglo: VENTA: arreglo[1..100] de real <Nombre> : arreglo [ Li .. Ls] de <tipo> 2016 Usos y operaciones: VENTA[15] VENTA[I] (valor almacenado en la posición 15 del arreglo) (valor almacenado en la posición indicada por el valor almacenado en I) I 20 VENTA[I] VENTA[K+5] VENTA[20] ≡ (valor almacenado en la posición indicada por el valor resultante de la expresión K+5) K 20 VENTA[K+5] ≡ VENTA[20 +5] ≡ VENTA[25] Asignar un valor VENTA[10] Operación J 30 13 * J + VENTA[I] 2016 Objetos: VENTA - arreglo de 100 elementos de tipo real. I - variable índice del arreglo. PROMEDIO - para el cálculo del promedio. ALGORITMO “Ventas” COMENZAR VENTA: arreglo [1..100] de real PROMEDIO: real I: entero PROMEDIO 0 PARA I DESDE 1 HASTA 100 CON PASO 1 HACER LEER VENTA[I] PROMEDIO PROMEDIO + VENTA[I] FINPARA PROMEDIO PROMEDIO / 100 PARA I DESDE 1 HASTA 100 CON PASO 1 HACER SI VENTA[I] > PROMEDIO ENTONCES ESCRIBIR I, VENTA[I] FINSI FINPARA FIN 2016 Ejemplo: Suponga Ud. que se desea hacer un programa relacionado con los 250 empleados de una empresa. Los datos de cada empleado que el programa va a necesitar son: el año de ingreso de esa persona a la empresa, género ( F para Femenino y M para Masculino ) y si es profesional o no ( Verdadero o Falso ). Todos esos datos se almacenarán en un único arreglo. ¿Es posible definir el siguiente arreglo? 2016 Ejemplo: Diseñe y dibuje de que manera estructurar el almacenamiento de los siguientes datos en una única estructura. A y B son matrices de nxn valores enteros. ¿Dimensión del arreglo? La selección de una estructura de datos y de la manera de relacionar dichos datos es una decisión importante, ya que ello influye decisivamente en el algoritmo que va a usarse para resolver un determinado problema. PROGRAMACION= ESTRUCTRAS DE DATOS + ALGORITMOS 2016 Ejemplo: Escribir un algoritmo que dado un arreglo de 7 elementos enteros positivos menores a 5000, los muestre ordenados de menor a mayor. Solución: - Ingresar los elementos en el arreglo. - Encontrar el menor elemento del arreglo y mostrarlo. - Repetir la operación anterior para los restantes sin considerar el elemento ya encontrado. 2016 ALGORITMO “Ordenar” COMENZAR V: arreglo [1..7] de entero I,J, MIN: entero PARA I DESDE 1 HASTA 7 CON PASO 1 HACER LEER V[I] FINPARA PARA I DESDE 1 HASTA 7 CON PASO 1 HACER MIN 1 PARA J DESDE 1 HASTA 7 CON PASO 1 HACER SI V[J] < V[MIN] ENTONCES MIN J FINSI FINPARA ESCRIBIR V[MIN] V[MIN] 100000 FINPARA FIN Se debería controlar que los números ingresados sean positivos y no mayor que 5000 2016 Ejemplo: Escribir un algoritmo que ordene de menor a mayor los elementos de un arreglo de 7 elementos enteros positivos. Solución: - Encontrar el menor elemento del arreglo. - Intercambiarlo con el primero del arreglo. - Repetir la misma operación para los restantes sin considerar al elemento ya ordenado. 2016 Ejemplo: estado inicial: 21 35 17 8 14 42 2 1º intercambio: 2 35 17 8 14 42 21 2º intercambio: 2 8 3º intercambio: 2 8 14 35 17 42 21 4º intercambio: 2 8 14 17 35 42 21 5º intercambio: 2 8 14 17 21 42 35 6º intercambio: 2 8 14 17 21 35 42 17 35 14 42 21 2016 Objetos: V - arreglo de enteros a ordenar. I,J - variables índice del arreglo. MIN - variable auxiliar que indica el índice donde se encuentra el elemento mínimo. VAL_MI - variable auxiliar usada para el intercambio de valores. 2016 Versión 1: t1 - Ingresar los elementos del arreglo. t2 - Repetidamente mientras el arreglo no esté ordenado, buscar el menor del arreglo, luego colocarlo en la posición correspondiente. t3 - Mostrar el arreglo ordenado. Versión 2: t1 - Ingresar los elementos del arreglo. t20 - Repetidamente mientras el arreglo no esté ordenado t21 - Buscar el menor del arreglo y guardarlo en MIN. t22 - Intercambiar con el lugar que corresponda en el ordenamiento el valor de V[MIN]. t3 - Mostrar el arreglo ordenado. 2016 ALGORITMO “Ordenar” COMENZAR V: arreglo [1..7] de entero I,J, MIN, VAL_MI: entero PARA I DESDE 1 HASTA 7 CON PASO 1 HACER LEER V[I] FINPARA PARA I DESDE 1 HASTA 7-1 CON PASO 1 HACER MIN I PARA J DESDE I+1 HASTA 7 CON PASO 1 HACER SI V[J] < V[MIN] ENTONCES MIN J FINSI FINPARA VAL_MI V[MIN] V[MIN] V[I] V[I] VAL_MI FINPARA PARA I DESDE 1 HASTA 7 CON PASO 1 HACER ESCRIBIR V[I] FINPARA FIN 2016 después de la lectura ingreso al para externo 1er iteración sobre I ingreso al para interno 1er iteración sobre J 2da iteración sobre J 3er iteración sobre J 4ta iteración sobre J 5ta iteración sobre J 6ta iteración sobre J salida del para interno 2da iteración sobre I ingreso al para interno 1er iteración sobre J 2da iteración sobre J 3er iteración sobre J 4ta iteración sobre J 5ta iteración sobre J salida del para interno V[1] 21 V[2] 35 V[3] 17 V[4] 8 V[5] 14 V[6] 42 V[7] 2 I MIN J VAL_MI 16 1 1 27 2 3 3 4 4 5 6 7 2 35 17 8 14 42 7 21 2 2 2 37 3 3 4 4 5 6 7 2 8 17 35 14 42 21 8 2016