Publicado el 2 de Mayo del 2019
436 visualizaciones desde el 2 de Mayo del 2019
7,5 MB
28 paginas
UE#03
PROBLEMAS DE SOLUCIÓN
DIRECTA
FUNCIONES
Índice
n Taxonomía de problemas
n Problemas como funciones
n Concepto de función
n Especificación de una función. Cláusulas
PRE/POST
n Funciones de usuario en Java
n Parámetros
TAXONOMÍA DE PROBLEMAS
n Solución Directa: El algoritmo se especifica a través de
una fórmula. Se representa con una expresión.
n Análisis de casos: El algoritmo tiene que distinguir entre
varios casos posibles. Se representa con construcciones sintácticas
de selección de alternativas.
n Recorrido: El algoritmo requiere realizar una recombinación
de cálculos. Se representa con una construcción sintáctica de
repetición.
PROBLEMAS COMO FUNCIONES
n Hay que enmarcar, constreñir, acotar el
problema
n Hay que identificar los datos y las
ligaduras
n Hay que encasillarlo
n Hay que proporcionarle un aspecto.
Buscarle un traje.
PROBLEMAS COMO FUNCIONES
n Las funciones ofrecen una sintaxis clara y
conocida.
n Tienen un nombre.
n Hacen mención a los datos que manejan.
n Permiten expresar cálculos.
n Ofrecen un resultado.
CONCEPTO DE FUNCIÓN
PREcondiciones
CUERPO
POSTcondiciones
CONCEPTO DE FUNCIÓN
n Operación sobre un conjunto de datos y
sus restricciones, que emite un resultado.
n PRE: restricción que define el conjunto de
estados para los que se asegura que el
problema va a tener solución.
n POST: aserto que establece la relación
entre los datos y el resultado. Lo que
enuncia el problema.
ESPECIFICACIÓN DE UNA
FUNCIÓN
n Cabecera:
n Nombre
n Lista de parámetros
n Domino del resultado
n Precondición
n Postcondición
ESPECIFICACIÓN DE UNA
FUNCIÓN
n La lista de parámetros da nombre a cada
parámetro y le asigna un dominio.
n La PRE acota el dominio o describe alguna
propiedad, de alguno de los parámetros.
n La POST relaciona todos los parámetros
con el resultado.
n Cuanto más restrictiva sea la PRE, menos
reutilizable es la función.
EJEMPLOS DE ESPECIFICACIÓN
n Problema1: Área del triángulo
n FUNCIÓN AreaTriangulo (|R base, altura) -----à |R
n PRE: (base>=0) /\ (altura>=0)
n POST: resultado = (base * altura) / 2
n Problema2: Ser un número múltiplo de otro
n FUNCIÓN EsMultiplo (|N m, n) -----à |B
n PRE: (m>0) /\ (n>0)
n POST: resultado es cierto si existe un número
entero positivo que multiplicado por n da m y
resultado es falso en caso contrario.
EJERCICIOS DE ESPECIFICACIÓN
n Ejercicio1: Volumen del cilindro
n Ejercicio2: Ser un número par
n Ejercicio3: Menor de dos números
EJERCICIOS DE ESPECIFICACIÓN
n Ejercicio1: Volumen del cilindro
n FUNCIÓN VolumenCilindro1 (|R radio, altura) --à |R
n PRE: (radio>=0) /\ (altura>=0)
n POST: resultado = pi * radio * radio * altura
n FUNCIÓN VolumenCilindro2 (|R radio, altura) --à |R
n PRE: (radio>=0) /\ (altura>=0)
n POST: resultado = AreaCirculo(radio) * altura
n FUNCIÓN AreaCirculo (|R radio) --à |R
n PRE: (radio>=0)
n POST: resultado = pi * radio * radio
EJERCICIOS DE ESPECIFICACIÓN
n Ejercicio2: Ser un número par
n FUNCIÓN EsPar (|N m) -----à |B
n PRE: (m>0)
n POST1: resultado es cierto si existe un número
entero positivo que multiplicado por 2 da m y
resultado es falso en otro caso.
n POST2: resultado es cierto si m es múltiplo de
2 y es falso en otro caso.
n POST3: resultado es cierto si el resto de la
división de m entre 2 da 0 y es falso en otro
caso
EJERCICIOS DE ESPECIFICACIÓN
n Ejercicio3: Menor de dos números
n FUNCIÓN Menor2 (|N a, b) à |N
n PRE: cierto
n POST1: resultado es el menor de los dos valores a y
n POST2: (resultado <= a) /\ (resultado <= b) /\
b
(resultado EN {a,b})
n ¡Ojo! Sin esta última condición bastaría con que resultado
fuese 0 para que se cumplieran las dos anteriores, para todo
número natural y sin embargo, estaría mal.
FUNCIONES EN Java
n Formato: Cabecera y cuerpo
n <<TipoRes>> <<Nombre>> (<<ListaParámetros>>)
n {
n <<Bloque>>
n }
n { y } comienzo y fin del cuerpo de la
función.
FUNCIONES EN Java
n TipoRes: Dominio (tipo) del resultado.
n Nombre: Identificador que da nombre a la
función. Debe empezar por una letra minúscula.
n ListaParámetros: Secuencia de pares
TipoParametro NombreParametro
separados por ,
n Bloque: Secuencia de órdenes
(sentencias) separadas por ;
FUNCIONES EN Java
n Sentencia return
n Formato: return <<expresión>>;
n Funcionamiento:
n Se evalúa la expresión. El valor será el
resultado de la función.
n Se termina la función.
n Obligatoria en el bloque de una función.
EJEMPLOS DE CODIFICACIÓN
FUNCIÓN AreaCirculo (|R radio) --à |R
n PRE: (radio>=0)
n POST: resultado = pi * radio * radio
n double areaCirculo (double radio)
n {
n return Math.PI * radio * radio;
n }
n FUNCIÓN VolumenCilindro2 (|R radio, altura) --à |R
n PRE: (radio>=0) /\ (altura>=0)
n POST: resultado = AreaCirculo(radio) * altura
n double volumenCilindro (double radio, double altura)
n {
n return altura * areaCirculo (radio);
n }
EJERCICIOS DE CODIFICACIÓN
n Ejercicio4: Área del triángulo
n Ejercicio5: Ser un número múltiplo de
otro
n Ejercicio6: Menor de dos números
EJERCICIOS DE CODIFICACIÓN
n FUNCIÓN AreaTriangulo (|R base, altura) -----à |R
n PRE: (base>=0) /\ (altura>=0)
n POST: resultado = (base * altura) / 2
n double areaTriangulo (double base, double altura)
n {
n return (base * altura) / 2.0;
n }
n FUNCIÓN EsMultiplo (|N m, n) -----à |B
n PRE: (m>0) /\ (n>0)
n POST: resultado es cierto si existe un número entero
positivo que multiplicado por n da m y resultado es
falso en caso contrario.
n boolean esMultiplo (int m , int n)
n {
n return (m % n) == 0;
n }
EJERCICIOS DE CODIFICACIÓN
(resultado EN {a,b})
n FUNCIÓN Menor2 (|N a, b) à |N
n PRE: cierto
n POST: (resultado <= a) /\ (resultado <= b) /\
n int menor2 (int a , int b)
n {
n return (a + b - Math.abs (a-b)) / 2;
n }
PARÁMETROS
n Declaración de una función: El código
completo de la función (cabecera y cuerpo).
n Invocación de una función: El nombre
seguido de la lista de parámetros actuales.
n Parámetros formales: Los que aparecen en la
declaración.
n Parámetros actuales: Los que aparecen en la
invocación.
PARÁMETROS
n FUNCIÓN Cubo (|N numero) à |N
n PRE: cierto
n POST: resultado = numero^3
n int cubo (int numero)
n {
n return numero * numero * numero;
n }
n Invocaciones válidas:
n int dato = 2;
n int prueba1 = cubo(dato);
n int prueba2 = cubo(3);
n int prueba3 = dato + cubo(dato);
n int prueba4 = cubo(cubo(dato));
PARÁMETROS
n Parámetro formal de cubo:
n numero
n Parámetros actuales en cada prueba:
n En la 1: dato
n En la 2: 3
n En la 3: dato
n En la 4: cubo(dato)
EJERCICIO DE RECAPITULACIÓN
n Problema: Superficie o área total del
cilindro
n La superficie comprende las dos bases,
que son círculos, más el área lateral o
área del contorno, que es un rectángulo.
EJERCICIO DE RECAPITULACIÓN
n FUNCION superficieCilindro (|R radio, altura) à|R
n PRE: (radio >= 0) /\ (altura >= 0)
n POST: resultado = 2 * AC + AR
n DONDE: AC = AreaCirculo (radio)
n AR = AreaRectangulo (LC, altura)
n LC = LongitudCicunferencia (radio)
n double superficieCilindro (double radio,
n double altura)
n {
n return 2 *
n areaCirculo (radio) +
n areaRectangulo (longitudCircunferencia (radio),
n altura);
n }
EJERCICIO DE RECAPITULACIÓN
n FUNCION areaRectangulo (|R base, altura) à |R
n PRE: (base >= 0) /\ (altura >= 0)
n POST: resultado = base * altura
n double areaRectangulo (double base, double altura)
n {
n return base * altura;
n }
n FUNCION longitudCircunferencia (|R radio) à |R
n PRE: radio >= 0
n POST: resultado = 2 * pi * radio
n double longitudCircunferencia (double radio)
n {
n return 2 * Math.PI * radio;
n }
VISIBILIDAD
n Todo lo declarado en el cuerpo de la
función tiene consideración local.
n Los parámetros formales quedan
declarados en la cabecera. También tienen
consideración local.
n Lo local es invisible desde fuera.
Comentarios de: Funciones - Problemas de solución directa (0)
No hay comentarios