Teoría Nº 6 Lenguaje de Diseño: Estructuración de Datos Primer Cuatrimestre
Un palíndromo es una palabra, o frase que se lee igual hacia adelante que hacia atrás. Si se trata de un número, se llama capicúa. Ej. neuquen, Afromorfa, Solos, Somos, No deseo yo ese don Cómo sería el algoritmo que permite reconocer si una palabra es palíndromo?.
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.
Versión 1: Versión 2: t 1 - Leer los datos de las sucursales. t 2 - Determinar el promedio. t 3 - Comprobar cual o cuáles de las sucursales tiene venta superior al promedio. t 11 - Para cada sucursal leer sus ventas y acumularlas. t 2 - Determinar el promedio. t 31 - Para cada sucursal leer sus ventas, comparar- las con el promedio. Si es mayor al promedio, informar.
Diagrama de Flujo de la solución en Lenguaje del Problema C 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 F V informo Objetos?
Objetos? venta - guarda la venta de cada sucursal. acumulo - acumula las ventas promedio - almacena promedio. i - lleva la cuenta de la sucursal que trato.
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 FINPARA ACUMULO + VENTA PROMEDIO ACUMULO / 3 PARA I DESDE 1 HASTA 3 CON PASO 1 HACER LEER VENTA SI VENTA > PROMEDIO ENTONCES FINSI FINPARA FIN ESCRIBIR I, VENTA Desventajas?
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.
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 FINSI ESCRIBIR VENT1 SI VENT2 > PROMEDIO ENTONCES ESCRIBIR VENT2 FINSI SI VENT3 > PROMEDIO ENTONCES FINSI ESCRIBIR VENT3 FIN
100 Objetos? vent1 - guarda la venta de sucursal 1. vent2 - guarda la venta de sucursal 2.... vent100 - guarda la venta de sucursal 100.
ALGORITMO Ventas COMENZAR VENT1, VENT2,..., VENT100, PROMEDIO: real LEER VENT1, VENT2,..., VENT100 PROMEDIO (VENT1+ VENT2 +.. + VENT100) / 100 SI VENT1 > PROMEDIO ENTONCES FINSI ESCRIBIR VENT1 SI VENT2 > PROMEDIO ENTONCES ESCRIBIR VENT2 FINSI. SI VENT100 > PROMEDIO ENTONCES FINSI FIN ESCRIBIR VENT100
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 objetos 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
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
Arreglo Lineal Solución 3: Reunir los 100 objetos en un solo objeto estructurado. 120 578 625 1230 1 2 3 99 100 Arreglo Lineal VENTA VECTOR 120 578 625 1230 1 2 3 99 100 VENTA[3] 625
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 (estructuras dinámicas) 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.
Declaración de un Arreglo: VENTA: arreglo[1..100] de real arreglo <Nombre> : [ Li.. Ls] de <tipo>
Usos y operaciones: VENTA[15] VENTA[I] VENTA[K+5] (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[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] 30 Operación J 13 * J + VENTA[I]
ALGORITMO Ventas COMENZAR VENTA: arreglo [1..100] de real PROMEDIO: real I: entero PROMEDIO 0 Objetos: VENTA - arreglo de 100 elementos de tipo real. I - variable índice del arreglo. PARA I DESDE 1 HASTA 100 CON PASO 1 HACER FINPARA LEER VENTA[I] PROMEDIO PROMEDIO + VENTA[I] PROMEDIO PROMEDIO / 100 PARA I DESDE 1 HASTA 100 CON PASO 1 HACER FINPARA FIN SI VENTA[I] > PROMEDIO ENTONCES ESCRIBIR I, VENTA[I] FINSI PROMEDIO - para el cálculo del promedio.
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?
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
Ejemplo: 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 Arreglo M 2 0 1 3 0 0 5 1 1 1 2 3 4 5 6 7 8 9 1 0 1 1 2 1 1 1 0 10 11 12 13 14 15 16 17 18
Ejemplo: 2 0 1 3 0 0 5 1 1 1 2 3 4 5 6 7 8 9 1 0 1 1 2 1 1 1 0 10 11 12 13 14 15 16 17 18 Matrices[1] + Matrices[10] Matrices[2] + Matrices[11] Matrices[3] + Matrices[12] Matrices[4] + Matrices[13] Matrices[5] + Matrices[14] Matrices[6] + Matrices[15] Matrices[7] + Matrices[16] Matrices[8] + Matrices[17] Matrices[9] + Matrices[18]
Ejemplo: 2 0 1 3 0 0 5 1 1 1 2 3 4 5 6 7 8 9 1 0 1 1 2 1 1 1 0 10 11 12 13 14 15 16 17 18 PARA I DESDE?? HASTA?? CON PASO?? HACER M[?? ] M[?? ] + M[?? ] FINPARA PARA I DESDE 1 HASTA 9 CON PASO 1 HACER M[I+18 ] M[I ] + M[I+10] FINPARA
Ejemplo: 2 3 5 0 0 1 1 0 1 1 2 3 4 5 6 7 8 9 1 1 1 0 2 1 1 1 0 10 11 12 13 14 15 16 17 18 Matrices[1] + Matrices[10] Matrices[4] + Matrices[13] Matrices[7] + Matrices[16] Matrices[2] + Matrices[11] Matrices[5] + Matrices[14] Matrices[8] + Matrices[17] Matrices[3] + Matrices[12] Matrices[6] + Matrices[15] Matrices[9] + Matrices[18]
Ejemplo: 2 3 5 0 0 1 1 0 1 1 2 3 4 5 6 7 8 9 1 1 1 0 2 1 1 1 0 10 11 12 13 14 15 16 17 18 PARA I DESDE 1 HASTA 3 CON PASO 1 HACER M[I+18 ] M[I ] + M[(I+10-1)] M[I+18+3 ] M[I+3] + M[(I+10-1)+3] M[I+18+6 ] M[I+6 ] + M[(I+10-1)+6] FINPARA
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.
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
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.
Ejemplo: estado inicial: 21 35 17 8 14 42 2 1º intercambio: 2 35 17 8 14 42 21 2º intercambio: 2 8 17 35 14 42 21 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
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.
Versión 1: t 1 - Ingresar los elementos del arreglo. t 2 - Repetidamente mientras el arreglo no esté ordenado, buscar el menor del arreglo, luego colocarlo en la posición correspondiente. t 3 - Mostrar el arreglo ordenado. Versión 2: t 1 - Ingresar los elementos del arreglo. t 20 - Repetidamente mientras el arreglo no esté ordenado t 21 - Buscar el menor del arreglo y guardarlo en MIN. t 22 - Intercambiar con el lugar que corresponda en el ordenamiento el valor de V[MIN]. t 3 - Mostrar el arreglo ordenado.
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
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] V[2] V[3] V[4] V[5] V[6] V[7] I MIN J VAL_MI 21 35 17 8 14 42 2 1 6 1 1 2 3 3 4 4 5 6 7 7 2 35 17 8 14 42 21 2 2 2 3 3 4 4 5 6 7 2 8 17 35 14 42 21 8 2 7 3 7
Ejemplo: Escribir un algoritmo que le permita al usuario ingresar 10 valores enteros en un arreglo y hasta 25 caracteres en otro arreglo. Objetos? Versión 1: t0 Definir objetos y asignar valores. t1 - Ingresar 10 valores enteros en un arreglo A. t2 - Ingresar hasta 25 caracteres en un otro arreglo B.
Ejemplo: En el último año de una institución privada, se dictan 10 materias que completa el cursado del ciclo Secundario. Almacene en una estructura de datos apropiada el Nro. De documentos de cada alumno y las notas que obtuvo en cada asignatura. Cómo se debería hacer para calcular el promedio?