Tema 3: Problemas de solución directa Fundamentos de la Programación Enrique Soriano LSUB, GSYC, URJC 26 de septiembre de 2012 (cc) 2012 Grupo de Sistemas y Comunicaciones. Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento NoComercial - SinObraDerivada (by-nc-nd). Para obtener la licencia completa, véase http://creativecommons.org/licenses/by-sa/2.1/es. También puede solicitarse a Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. Por ahora: problemas de solución directa • Solución directa: No hace falta tomar ninguna decisión, simplemente se aplica una fórmula. Definición del problema: Funciones Definir el problema → crear la cabecera de la función • ¿Cuál es el objetivo? → Nombre de la función. • ¿Qué necesita? → Parámetros de la función. • ¿Qué se obtiene? → Tipo del valor de retorno de la función. Definición del problema: Funciones Normas de estilo para Picky: • El nombre de la función tiene que corresponder al objeto que devuelve. p. ej.: areacirculo. • El identificador de la función siempre se escribe en minúsculas • Los identificadores de los parámetros se escriben en minúsculas. • Hay que elegir identificadores apropiados para los parámetro. Definición del problema: Funciones • Argumento: valor que se suministra a la función cuando se llama. • Parámetro: identificador para nombrar al argumento. • Una función puede tener cero, uno o varios parámetros. Definición del problema: Funciones • Una función siempre debe devolver un único valor. • El valor devuelto únicamente puede ser del tipo de la función. Solución del problema: Funciones • La solución se implementa en el cuerpo de la función. • La palabra reservada return es la que provoca que la función retorne un valor. hacer circulo.p Subprogramas • Las funciones son subprogramas. • Los subprogramas resuelven subproblemas. • Cuando los programas se hacen grandes, son difı́ciles de enteder. • Entender el programa entero se basa en entender los distintos subprogramas por separado. “Divide y vencerás” Julio César. Uso de constantes • Son parámetros que vienen impuestos por los requisitos (p.ej el enunciado del ejercicio). • Usar constantes en lugar de literales elimina errores. ver compararreales.p Declaración y definición • Declarar es estipular que algo existe. • Definir es determinar su valor. • Ámbito: Un objeto se puede usar desde que se ha declarado hasta el final del programa/subprograma en el que se ha declarado. • Fuera de su ámbito, un objeto no es visible. ver pesos.p Atacando problemas: top-down • Se basa en ser optimistas. • Cuando detectamos un subproblema, lo damos por resuelto y seguimos. • Para refinar progresivamente, podemos usar subprogramas falsos o vacı́os. Más tarde implementamos el subprograma que resuelve dicho subproblema. • ¡Ası́ rompemos el problema en subproblemas! Nos lleva a un modelo modular de forma natural. • En cualquier fase de la implementación tendremos un prototipo del programa que pueda ejecutar. hacer cilindro.p Ejemplo top-down: dı́a de estudiante Problema: Dı́a de estudiante Ejemplo top-down: dı́a de estudiante Dı́a de estudiante 1 Levantarse 2 Ir a la universidad 3 Regresar a casa 4 Hacer deberes 5 Ir a la cama Ejemplo top-down: dı́a de estudiante Dı́a de estudiante 1 Levantarse 2 Ir a la universidad 3 Regresar a casa Hacer deberes 4 1 2 5 Tareas de programación Ejercicio de álgebra Ir a la cama. Ejemplo top-down: dı́a de estudiante Dı́a de estudiante 1 Levantarse 2 Ir a la universidad 3 Regresar a casa Hacer deberes 4 1 Tareas de programación 1 Leer el capı́tulo del libro 2 Empezar la práctica de la semana 2 5 Ejercicio de álgebra Ir a la cama. Atacando problemas: bottom-up • Se basa en la antelación: antes de programar pensamos en como dividir el problema y pensamos en detalle en los elementos que van a formar el programa. • Empezamos haciendo los subprogramas que resuelven los subproblemas más sencillos. • Seguimos hacia problemas más complejos usando los subprogramas ya implementados. • Problema: hay que usar la intuición (que nos da la experiencia) para definir los elementos. Hay que combinarlas TOP-DOWN PROGRAMA PRINCIPAL USA SUBPROGRAMAS NIVEL 1 USA SUBPROGRAMAS NIVEL 2 USA ... SUBPROGRAMAS NIVEL N BOTTON-UP Atacando problemas: simplificar y generalizar 1 Pensar la solución para un único caso. 2 Probarla. 3 Generalizar la solución. hacer digitos.p