Diseño de algoritmos.



Documentos relacionados
Tema: FUNCIONES, PROCEDIMIENTOS Y RECURSIVIDAD.

Introducción a los Tipos Abstractos de Datos

Estructuras de Datos y Algoritmos Tecnólogo en Informática

Diseño orientado a los objetos

Java Inicial (20 horas)

Estructuras de Sistemas Operativos

GESTIÓN DOCUMENTAL PARA EL SISTEMA DE CALIDAD

INSTRUCTIVO DEL COMANDO MAKE

Fundamentos del diseño 3ª edición (2002)

Oficina Online. Manual del administrador

Contenidos. Funciones (suplemento) Funciones. Justificación del uso de Funciones

Tema 6. Reutilización de código. Programación Programación - Tema 6: Reutilización de código

Formularios. Formularios Diapositiva 1

Fundamentos de la Programación

CONSULTAS DE RESUMEN SQL SERVER Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

GENERACIÓN DE TRANSFERENCIAS

Visual Basic 1. Empleo de módulos y Procedimientos. Procedimientos definidos por el usuario

OPERACIONES ELEMENTALES CON VECTORES

SISTEMAS NUMERICOS CAMILO ANDREY NEIRA IBAÑEZ UNINSANGIL INTRODUCTORIO A LA INGENIERIA LOGICA Y PROGRAMACION

Departamento de Lenguajes y Ciencias de la Computación. Contenido

Sistema de Gestión Académica TESEO. Revisión 1.0. Servicio de Informática Área de Gestión (GESTIÓN DE RESÚMENES DE TESIS DOCTORALES)

DISEÑO DE FUNCIONES (TRATAMIENTOS)

UNIDADES FUNCIONALES DEL ORDENADOR TEMA 3

Capítulo 4. Vectores y matrices. 4.1 Declaración de tablas. 4.2 Declaración estática de tablas

MANUAL DE USUARIO DE LA APLICACIÓN DE ACREDITACION DE ACTIVIDADES DE FORMACION CONTINUADA. Perfil Entidad Proveedora

CRONO SISTEMA DE CONTROL DE PRESENCIA. Software abierto. Distintas opciones para realizar las picadas. Web personal para cada usuario

APLICACIÓN PERFIL DE CONTRATANTE. MANUAL NUEVAS FUNCIONALIDADES: CORRECCIÓN DE ERRORES Y COPIAR

Introducción a la programación orientada a objetos

LABORATORIO Nº 2 GUÍA PARA REALIZAR FORMULAS EN EXCEL

a) Cita y comenta brevemente los grados de acoplamiento. Clasifícalos y ordénalos en orden creciente al nivel de acoplamiento asociado.

Centro de Capacitación en Informática

Funciones y subrutinas

Autor: Microsoft Licencia: Cita Fuente: Ayuda de Windows

ESTRUCTURA DE DATOS: ARREGLOS

Preliminares. Tipos de variables y Expresiones

1.- INTRODUCCIÓN 2.- PARÁMETROS

Árboles AVL. Laboratorio de Programación II

MANUAL PARA LA GESTIÓN DEL PRÉSTAMO ENTRE LAS BIBLIOTECAS DE LA RED DE LECTURA PÚBLICA DE EUSKADI

Capítulo 3 Diseño del Sistema de Administración de Información de Bajo Costo para un Negocio Franquiciable

TEMA 3. EL PROCESO DE COMPILACIÓN, DEL CÓDIGO FUENTE AL CÓDIGO MÁQUINA

Introducción al tipo de dato ARRAY

Hacer clic sobre la figura, para extraer todos los registros o presionar la tecla F2.

Proceso de desarrollo del software modelo en cascada

Sistema de Gestión Portuaria Sistema de Gestión Portuaria Uso General del Sistema

forma de entrenar a la nuerona en su aprendizaje.

Curso de Java POO: Programación orientada a objetos

Teclado sobre una PDA para Personas con Parálisis Cerebral

TEMA 8: DIAGRAMA DE CLASE EN UML

Activación de un Escritorio Remoto

Base de datos en Excel

Manual del Alumno de la plataforma de e-learning.

PASO 1: Entrada. a FOCO

Departamento CERES Área de Tarjetas Inteligentes Manual de Usuario

EJERCICIOS RESUELTOS SOBRE ERRORES DE REDONDEO

GENERACIÓN DE ANTICIPOS DE CRÉDITO

Concurrencia. Primitivas IPC con bloqueo

Ejercicio 1 (2 puntos. Tiempo: 25 minutos)

Manual de usuario de Cambio de Nombre de Diseños Industriales

La pestaña Inicio contiene las operaciones más comunes sobre copiar, cortar y pegar, además de las operaciones de Fuente, Párrafo, Estilo y Edición.

MANUAL DE AYUDA TAREA PROGRAMADA COPIAS DE SEGURIDAD

La explicación la haré con un ejemplo de cobro por $ más el I.V.A. $16.00

Propuesta de Portal de la Red de Laboratorios Virtuales y Remotos de CEA

Manual uso software de gestión de educación continua (SGEC)

Servicios Educativos Del Estado De Chihuahua Sistema Integral de Presupuestos y Materiales. Indice. Introducción Barra de Herramientas...

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

Definición de vectores

MANUAL DE USUARIO PANEL DE CONTROL Sistema para Administración del Portal Web.

Entre los más conocidos editores con interfaz de desarrollo tenemos:

GUÍA RÁPIDA DE TRABAJOS CON ARCHIVOS.

Notación algorítmica (seudocódigo en castellano) (fecha: )

Vectores: Producto escalar y vectorial

Manual de Pago a Tarjeta de Crédito

5. Diseño e Implementación del sistema (software)

Programación Orientada a Objetos con Java

19. Packages o paquetes

UNIVERSIDAD DR. JOSE MATIAS DELGADO

LiLa Portal Guía para profesores

Microsoft Access proporciona dos métodos para crear una Base de datos.

Operación Microsoft Access 97

Diseño orientado al flujo de datos

Tema 2 Conceptos básicos de programación. Fundamentos de Informática

PROGRAMACIÓN ORIENTADA A OBJETOS

GUIA PROGRAMACIÓN ORIENTADA A OBJETOS

ETSIINGENIO 2009 DIBUJO DE GRAFOS MEDIANTE ALGORITMOS GENÉTICOS

CASO PRÁCTICO DISTRIBUCIÓN DE COSTES

TEMA 3: MÉTODO CONTABLE. LAS CUENTAS

La ventana de Microsoft Excel

Práctica 1 - Pista de Carreras Programación II

3.1 INGENIERIA DE SOFTWARE ORIENTADO A OBJETOS OOSE (IVAR JACOBSON)

AgroDATA Laboral Versión 4.17

Implementando un ERP La Gestión del Cambio

UNIDAD EJECUTORA DE CONSERVACION VIAL MANUAL DEL USUARIO DEL SISTEMA INTEGRAL DE CONTROL DE PROYECTOS

Cuentas Contables. Para Generar y/o modificar las cuentas contables hay que ir a: Parámetros Plan de Cuentas Cuentas Contables

Curso de PHP con MySQL Gratis

Paso 1 de 13. Paso 2 de 13. Guía de aprendizaje de Flash CS5 Tutorial 3. Creación de un logotipo textual.

MANUAL DE USUARIO SISTEMA DE ALMACEN DIF SONORA

Transcripción:

TEMA 5 Diseño de algoritmos. Elementos de Programación I Contenido del Tema T E M A 5 5.1.- Programación Modular y desarrollo de Programas 5.2.- Diseño de interfaces. 5.3.- Notación algorítmica. Elementos de Programación I

Programación Modular No usar una metodología de diseño conlleva: Rigidez e inflexibilidad en los programas Pérdida excesiva de tiempo en corrección de errores Documentación insuficiente o nula Imposibilidad de Reutilización Diseño descendente. Normalmente las componentes que van surgiendo son bastante independientes del algoritmo principal (y unas de otras), en el sentido de que pueden ser diseñadas sin considerar el contexto en el que van a ser usadas. Programación Modular Módulo es un algoritmo autocontenido, que puede ser diseñado independientemente del contexto en el que va a ser usado. Los procedimientos y funciones son los mecanismos más comunes que ofrecen los lenguajes de programación para permitir esta modularidad. Algunos lenguajes consiguen un nivel superior de modularidad, permitiendo agrupar procedimientos y funciones en entidades mayores.

Programación Modular Ventajas: Simplificación del diseño. Programación aislada (encapsulamiento). Conocimiento de lo que hace el subprograma, no cómo lo hace (Abstracción procedimental o de Operaciones). Reutilización del módulo en otro contexto. Simplificación de la comprensión del algoritmo (mantenimiento). Transportabilidad, agrupando las operaciones dependientes de la máquina en un módulo. Trabajo en equipo. Cada programador se encarga de desarrollar un módulo. Compilación separada. No es necesario recompilar todo el programa sino sólo el módulo que se ha modificado. Encapsulamiento: Programación Modular Si el método para solucionar una tarea T cambia, cualquier otra tarea Q no se ve afectada. T. 1ª implementación Q Llamada a T T. 2ª implementación Ejemplo: Cambio del algoritmo de ordenación.

Especificaciones: Programación Modular Conjunto de condiciones que deben cumplirse para que se ejecute un módulo correctamente. Q Llamada a T T Q debe saber: -Lo que hace T. -En que condiciones lo ejecuta. Ejemplo: Paso del array a ordenar. Programación Modular Criterios de Modularización. No existe un algoritmo formal para descomponer un problema en módulos. Criterios a seguir: Minimizar el acoplamiento (los módulos deben ser lo más independientes posible). Maximizar la cohesión (relación entre las diferentes partes internas de un módulo).

Programación Modular Ejemplo: Algoritmo de proceso de nóminas Procesar Nómina Calcular Ingresos Calcular Retención Antes de Impuestos Calcular Impuesto Calcular Retención Después de Impuestos Calcular Impuesto Autonómico Calcular Impuesto Estatal Diseño de Interfaces Un programa constará de: El programa principal Uno o más módulos de biblioteca: Una parte de definición pública. Una parte de implementación privada.

Diseño de Interfaces En un módulo se puede declarar: Constantes. Se pueden declarar en la parte de: Definición. Cualquier Módulo o programa la podrá importar y utilizar. Implementación. Local al Módulo. No es importable. (Las constantes declaradas en la parte de Definición son visibles en la parte de Implementación). Variables. Se pueden declarar en la parte de: Definición. Cualquier Módulo o programa la podrá importar y utilizar. Solo es recomendable en casos fuera del ámbito de la asignatura. Implementación. Local al Módulo. No es importable. Actúa como una variable global dentro del módulo. No es aconsejable. (Las variables declaradas en la parte de Definición son visibles en la parte de Implementación como variables globales). Diseño de Interfaces En un módulo se puede declarar: Procedimientos y Funciones. Definición. En esta parte solo se declara la cabecera del algoritmo. Estos algoritmos podrán ser importados y llamados por cualquier otro módulo o programa. Se deben especificar todos los parámetros y, en el caso de una función, el tipo devuelto. Implementación. Por cada cabecera declarada en la parte de definición, se debe escribir el subalgoritmo correspondiente. Su cabecera debe coincidir en el número y tipo de los parámetros. Además, se pueden declarar otros algoritmos, pero estos no podrán ser importados por otros módulos ni programas. (Estos algoritmos pueden servir para descomponer los algoritmos exportables).

Diseño de Interfaces En un módulo se puede declarar: Tipos. Definición. Se define el tipo de la misma forma que se ha visto hasta ahora. Cualquier Módulo puede importarlos y utilizarlos como si fuesen suyos. Implementación. Los tipos declarados en la parte de definición son visibles en la de implementación, por tanto no se pueden volver a declarar. En un diseño apropiado, por cada tipo definido en un módulo se definirán también las operaciones que se pueden realizar con las variables declaradas de ese tipo. Notación Algorítmica Módulos. Comenzarán con la palabra Módulo seguida del nombre del módulo. Tanto el programa principal como los módulos podrán importar de otros módulos. Parte de Definición. Visible a los algoritmos que la importen. Parte de Implementación. Local al módulo.

Notación Algorítmica EJEMPLO: Programa que calcula el tercer lado de un triángulo. Tercer Lado Conversión GradosARadines El módulo Tercer Lado (en este caso el programa principal) utiliza la función GradosARadianes del módulo Conversión Módulo Coversión (* Módulo para pasar de grados a radianes y viceversa *) Definición FUNC GradosARadianes ( grados : REAL) : REAL (* Devuelve el ángulo en radianes*) FUNC RadianesAGrados ( radianes : REAL ) : REAL (* Devuelve el ángulo en grados *) Implementación Constantes Pi = 3.1416 FUNC GradosARadianes ( grados : REAL) : REAL (* Devuelve el ángulo en radianes*) RESULTADO grados * Pi / 180.0 FUNC RadianesAGrados ( radianes : REAL ) : REAL (* Devuelve el ángulo en grados *) RESULTADO 180.0 * radianes / Pi (* Conversión *)

Algoritmo TercerLado (* Calcula el tercer lado de un triángulo a partir de los otros dos y del ángulo entre ellos *) Desde Conversión Importa GradosARadianes Variables lado1, lado2, lado3, ángulograd, ángulorad : REAL Escribir ( Introduce la longitud de un lado ) Leer (lado1) Escribir ( Introduce la longitud del otro lado ) Leer (lado2) Escribir ( Introduce el ángulo (en grados) ) Leer (ángulograd) ángulorad GradosARadianes (ángulograd) lado3 Sqrt ( lado1* lado1 + lado2 * lado2-2.0 * lado1 * lado2 * cos (ángulorad)) (* cos devuelve el coseno del ángulo *) Escribir ( La longitud del tercer lado es, lado3) (* TercerLado *) Notación Algorítmica Ejemplo: Tipo de Datos Complejo. Definición: Tipo de datos capaz de guardar la información de un numero complejo. NumeroComplejo. Operaciones: Asignación: Toma la parte real y la imaginaria y devuelve un número complejo. FUNC Asignación( r, i:real) : NumeroComplejo Real: Toma un número complejo y devuelve su parte real. FUNC Real( c : NumeroComplejo) : REAL Imaginaria: Toma un Numero Complejo y devuelve su parte imaginaria. FUNC Imaginaria( c : NumeroComplejo) : REAL Suma: Toma dos Números Complejos y devuelve su suma. FUNC Suma( c1, c2 : NumeroComplejo) : NumeroComplejo Producto: Toma dos Números Complejos y devuelve su producto. FUNC Producto( c1, c2 : NumeroComplejo): NumeroComplejo

Notación Algorítmica En el módulo que lo usa basta con la Definición del Tipo y de sus Operaciones para poder trabajar con él. (No necesitamos saber cómo esta implementado) Algoritmo SumaComplejos (* Lee y suma dos números complejos *) Desde Complejos Importa NumeroComplejo, Asignación, Suma, Real, Imaginaria Variables c1, c2, resultado : NumeroComplejo real, imag : REAL Escribir ( Introduzca la parte real y la imaginaria del primer número ) Leer (real, imag) c1 Asignación (real, imag) Escribir ( Introduzca la parte real y la imaginaria del segundo número ) Leer (real, imag) c2 Asignación (real, imag) resultado Suma (c1, c2) Escribir ( El resultado es: ) Escribir (Real (resultado), +,Imaginaria (Resultado), i )

Algoritmo ArrayComplejos (*Multiplica una array de complejos *) Desde Complejos Importa NumeroComplejo, Asignación, Producto, Real, Imaginaria Constantes TamañoVector = 1000 Tipos VectorComplejos = ARRAY [1..TamañoVector] DE NumeroComplejo Variables vcomplejos: VectorComplejos resultado : NumeroComplejo índice : NATURAL Leer_Vector (vcomplejos) (* Lee el vector de Complejos *) resultado Asignación (1.0, 0.0) PARA índice 1 HASTA TamañoVector HACER resultado Producto (resultado, vcomplejos[índice ]) FINPARA Escribir ( El resultado es: ) Escribir (Real (resultado), +, Imaginaria (Resultado), i ) Notación Algorítmica Nivel de Implementación. Definimos un módulo donde se implementan sus operaciones.

Módulo Complejos (* Implementación del tipo NumeroComplejo *) Definición Tipos NumeroComplejo = REGISTRO parte_real, parte_imag : R FINNREGISTRO FUNC Producto( c1, c2 : NumeroComplejo): NumeroComplejo FUNC Asignación( r, i:real) : NumeroComplejo (* Toma la parte real y la imaginaria y devuelve un número complejo. *) FUNC Real( c : NumeroComplejo) : REAL (* Toma un número complejo y devuelve su parte real. *) FUNC Imaginaria( c : NumeroComplejo) : REAL (* Toma un Numero Complejo y devuelve su parte imaginaria.*) FUNC Suma( c1, c2 : NumeroComplejo) : NumeroComplejo (* Toma dos Números Complejos y devuelve su suma *) FUNC Producto( c1, c2 : NumeroComplejo): NumeroComplejo (* Toma dos Números Complejos y devuelve su producto. *) Implementación FUNC Asignación( r, i:real) : NumeroComplejo Variables c : NumeroComplejo c.parte_real := r c.parte_imag := i RESULTADO c FUNC Real( c : NumeroComplejo): REAL (* Toma un número complejo y devuelve su parte real. *) RESULTADO c.parte_real FUNC Imaginaria( c : NumeroComplejo) : REAL (* Toma un número complejo y devuelve su parte imaginaria. *) RESULTADO c.parte_imag FUNC Suma( c1, c2 : NumeroComplejo) : NumeroComplejo (* Toma dos Números Complejos y devuelve su suma *) Variables res : NumeroComplejo res.parte_real c1.parte_real + c2.parte_real res.parte_imag c1.parte_imag + c2.parte_imag RESULTADO res FUNC Producto( c1, c2 : NumeroComplejo): NumeroComplejo (* Toma dos Números Complejos y devuelve su producto. *) Variables res : NumeroComplejo res.parte_real c1.parte_real * c2.parte_real - c1.parte_imag * c2.parte_imag res.parte_imag c1.parte_real * c2.parte_imag + c1.parte_imag * c2.parte_real RESULTADO res (* Módulo Complejos *)

Notación Algorítmica La implementación se separa de la utilización. La implementación del tipo se puede hacer de muchas formas: NumeroComplejo = ARRAY [1..2 ] DE REAL NumeroComplejo = REGISTRO Módulo, Argumento : REAL FINREGISTRO Un cambio en la implementación no debe suponer cambios en la utilización. Notación Algorítmica Ejercicio: Realizar la implementación de NumeroComplejo como un registro donde se guarda módulo y argumento. El algoritmo de multiplicación del vector de complejos será más eficiente sin haber sido modificado

Bibliografía. C. Galán. Paraninfo. 1987! "! # $ % $ # & ' # # ( Wirth N Ed. Ed del Castillo. ) * +, -. / 0, 1 2 3-0 4 5 2 6 5. /. 7 8 9, : ; <6 2 5 8 1 / 2 3 = 0 3 1 5 + 7 1 + 5. 3-0 -. 1 2 3. L. Joyanes. McGraw-Hill. 1996 >? @ A B @ C D E F G H I J G I H K F L M L K G N F. N. Dale & S. Lilly. McGraw-Hill. 1992 O P Q R R S Q T U V W X X Y X S Z [ Y U \ R Q ] ^ _ U W ` W Y T a Hellman, Veroff.. Ed. Benjamin/Cummings Series. 1988.