Tema 2 Conceptos básicos de programación Fundamentos de Informática
Índice Metodología de la programación Programación estructurada 2
Pasos a seguir para el desarrollo de un programa (fases): Análisis del problema. Diseño o de el/los algoritmos. Codificación n del programa. Compilación. Verificación/depuraci n/depuración. n. Documentación. n. 3
Análisis del problema ANÁLISIS DEL PROBLEMA DATOS DE ENTRADA DEFINICIÓN PROBLEMA DATOS DE SALIDA (Resultados) 4
Ejemplo Leer el radio de un círculo y calcular e imprimir su superficie y la longitud de la circunferencia. Análisis Metodología de la Programación Análisis del problema Entradas: Radio del círculo (variable RADIO). Salidas: Superficie del círculo (variable AREA), Circunferencia del círculo (variable CIRCUNFERENCIA). Variables: RADIO, AREA, CIRCUNFERENCIA (tipo real). 5 5
Diseño o de el/los algoritmos Conjunto preescrito de operaciones (reglas o instrucciones) bien definidas para resolver un problema en un número finito de pasos Un algoritmo: Finito (Resultado en el tiempo), Definido (No puede ser ambiguo), Preciso (ejecución paso a paso). El diseño del algoritmo es bastante independiente del lenguaje de programación (sí depende del enfoque) Definir paso a paso con detalle Diseño descendente o modular: División del problema en subproblemas PROBLEMA DATOS DE ENTRADA DEFINICIÓN PROBLEMA Problema 1 DATOS DE SALIDA Dato 1. Dato 2. Subproblema 1. 1 Subproblema 1.2 Salida 1. Salida 2. 6
Diseño o de el/los algoritmos Diagrama de flujo INICIO Acumuladores a cero s=0 Contador a cero n=0 Introducir un número en a SI Promedio p=s/n a=0 NO Contarlo n=n+1 Imprimir Promedio Acumulativo s=s+a FIN Introducir un número 7
Diseño o de el/los algoritmos Diagrama de flujo TERMINAL ENTRADA-SALIDA PROCESO SI DECISIÓN NO CONECTOR COMENTARIOS 8 8
Diseño o de el/los algoritmos Diagrama de flujo SUBRUTINA PANTALLA IMPRESORA 9 9
Diseño o de el/los algoritmos Pseudocódigo Se trata de un lenguaje imitación del de un ordenador. No está estandarizado. Ejemplo: Cada programador tiene el propio. Mezcla de lenguaje natural, símbolos, términos y características de varios lenguajes de programación. Definición de variables_componentes. Inicio Escribir_texto ( entrada de dato ); Leer_Dato(dato); Proceso salida = dato * 2; Escribir_resultado_proceso (salida); Fin 10
Codificación n del programa Escribir el algoritmo en un lenguaje de programación Permite ser leído y ejecutado por el ordenador. Tipos de lenguajes: De bajo nivel (dependen de la máquina sobre la que se ejecuta): Lenguaje Máquina (escritura en binario) Ensambladores: (escritura simbólica) De alto nivel (no dependen de la máquina): Imperativos: Estructurados Orientados a Objeto FORTRAN i Java C i C++ PASCAL i Ada 95 Declarativos: LISP / PROLOG La salida de la fase de codificación son los programas fuente (que todavía no se pueden ejecutar directamente sobre el ordenador) Un programa se compone de un conjunto de instrucciones que indican las operaciones elementales a ejecutar y la manera en que se encadenan. 11
Compilación n y enlace Salvo que el programa se escriba directamente en lenguaje máquina (muy improbable) siempre debe existir un traductor. La fase de compilación y enlace permite leer el programa escrito en lenguaje de alto nivel y traducirlo a lenguaje maquina. Hay tres tipos de traductores: Compiladores. Interpretes. Ensambladores Traductor PROGRAMA FUENTE Compilador PROGRAMA OBJETO 12
Compilación Fases de un compilador PROGRAMA FUENTE Analizador Morfológico Analizador Sintáctico Analizador Semántico Programa en lenguaje intermedio Optimizador Generador de Código Programa Objeto 13
Compilación n y enlace Errores de Compilación (léxicos, sintácticos y semánticos) Archivos incluídos Archivos de Biblioteca Programa Fuente (texto) Programa Objeto Compilador Enlazador Otros programas objetos Programa Ejecutable 14
Verificación/depuraci n/depuración Errores en tiempo de ejecución división por cero, apertura de ficheros inexistentes,... Errores lógicos (los más difíciles de detectar) Resultados incorrectos Optimización del algoritmo. 15
Errores de Compilación (léxicos, sintácticos y semánticos) Compilación n y enlace + Verificación n y depurado Archivos incluídos Archivos de Biblioteca Programa Fuente (texto) Compilador Programa Objeto Enlazador Errores de ejecución Errores lógicos Resultados Correctos Verificación y Depurado 16 Programa Ejecutable
Documentación Se genera a lo largo de todas la fases Debe permitir acceder al programa a una persona distinta al programador. Interna: Código de programa fuente Comentarios Externa: Especificación de requisitos Listado de programa fuente Explicación de los algoritmos (CLARO y CONCISO) Diagramas de flujo o pseudocódigo. Especificación de datos, formatos de pantalla,...... 17
: Fases Problema Análisis Definición del Problema Datos de Entrada Datos de Salida Diseño División modular del Problema (Pseudocódigo, Diagrama de Flujo) DE, DS Codificación Documentación Programa fuente Pseudocódigo Diagrama de Flujo Manual de Usuario Especificación de los Datos... Errores de Compilación Errores de Ejecución Errores de Lógica Programa Fuente Compilar y Enlazar Programa Ejecutable Verificar y Depurar 18
Programación Estructurada Un programa estructurado se basa en la aplicación sistemática de las siguientes reglas: Diseño modular: descomponer un módulo complejo en otros submódulos más simples Diseño Descendente Programar cada módulo de manera lo más independiente posible Razonamiento de lo general a lo particular. Ventajas: Mejora la legibilidad del programa Facilita el entendimiento del programa Simplifica el mantenimiento Minimiza la complejidad Cada módulo puede ser programado por personas diferentes Utilización de una metodología de programación disciplinada Favorece el trabajo en equipo Problema: No existe un método estándar para dividir en módulos un programa Teorema de la Programación Estructurada Todo algoritmo puede ser descrito utilizando solamente tres tipos de estructuras de control: secuencial, alternativa, y repetitiva. 19
Programación Estructurada Secuencia Todas las acciones se ejecutan sucesivamente, una a continuación de otra sin posibilidad de bifurcaciones. Sentencias Alternativa Una estructura alternativa bifurca el flujo de un algoritmo según se cumplan una o varias condiciones. Acción 1 Acción 2 Acción 3 Falso Cierto Falso Cierto Condición Condición Acción Acción 1 Acción 2 20
Programación Estructurada Sentencias Repetitivas: Una estructura de control repetitiva permite ejecutar una o varias acciones un número de veces que puede estar definido a priori o indefinido hasta que se cumpla una determinada condición. Tipos de sentencias de control repetitivas: PARA: El nº de repeticiones se conoce antes de iniciar el bucle. MIENTRAS: Repite las acciones mientras la condición se cumple. HACER MIENTRAS: Se realiza siempre una vez la acción y luego se vuelve a realizar mientras la condición se cumpla REPETIR HASTA: Repite las acciones mientras la condición sea falsa (no existe en C) 21
Programación Estructurada PARA Índices Falsa Cierta Acción HACER MIENTRAS MIENTRAS Acción Condición Falso Cierta Falsa Condición Cierta Acción 22
Ejemplos Diseñar un algoritmo que resuelva una ecuación de segundo grado: Datos de entrada: Coeficientes a,b,c Datos de salida: Soluciones de la ecuación si las hay Nota: El algoritmo únicamente resolverá la ecuación en el caso de existir 2 soluciones diferentes (opción 1) En cualquier otro caso mostrara un mensaje de error. Diseñar el algoritmo para hacer una tortilla de patata Diseñar el algoritmo que resuelva la ecuación de segundo grado dando todas las posibles soluciones (opción 2). 23
Ejemplo (opción 1): Ecuación de Segundo Grado Diagrama de flujo INICIO Entrada de datos: a, b, c NO a!= 0 SI SI DECISIÓN NO No ecuación de 2º grado x 1 =(-b+sqrt(b*b-4*a*c))/2*a b*b >4*a*c Datos Incorrectos FIN x 2 =(-b-sqrt(b*b-4*a*c))/2*a Salida x 1, x 2 FIN FIN 24
Ejemplo (opción 1): Ecuación de Segundo Grado Pseudocódigo Algoritmo Ecuación de segundo grado {Cálculo de una ecuación de segundo grado} Variables a, b, c; /*Introducir las constantes con sus signos*/ x1, x2 /*Valores de Salida*/ Inicio Escribir ( Introduzca dato A: ); /*Entrada de Datos*/ Leer (a); Escribir ( Introduzca dato B: ); Leer (b); Escribir ( Introduzca dato C: ); Leer (c); Si (a!= 0) entonces Si (b 2-4*a*c > 0) /*Condición para evitar la raíz cuadrada de un nº negativo*/ x1:=(-b+sqrt((b*b)-(4*a*c)))/(2*a); x2:=(-b-sqrt((b*b)-(4*a*c)))/(2*a); Escribir ( Valor x1=,x1, y Valor x2=,x2); sino /* Raíz negativa */ Escribir ( Datos Incorrectos ); fin_si sino Escribir ( No se trata de una ecuación de 2º grado ) fin_si Fin 25
Alberto Aguilera 25 28015 Madrid Tel +34 91 542 28 00 Fax + 34 91 542 31 76 Iwww.icai.upcomillas.es www.upcomillas.es