Вы находитесь на странице: 1из 28

UE#03

PROBLEMAS DE SOLUCIN
DIRECTA
FUNCIONES

ndice
Taxonoma de problemas
n Problemas como funciones
n Concepto de funcin
n Especificacin de una funcin. Clusulas
PRE/POST
n Funciones de usuario en Java
n Parmetros
n

TAXONOMA DE PROBLEMAS
n

Solucin Directa:

Anlisis de casos:

Recorrido:

El algoritmo se especifica a travs de


una frmula. Se representa con una expresin.

El algoritmo tiene que distinguir entre


varios casos posibles. Se representa con construcciones sintcticas
de seleccin de alternativas.
El algoritmo requiere realizar una recombinacin
de clculos. Se representa con una construccin sintctica de
repeticin.

PROBLEMAS COMO FUNCIONES


Hay que enmarcar, constreir, 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.
n

PROBLEMAS COMO FUNCIONES


Las funciones ofrecen una sintaxis clara y
conocida.
n Tienen un nombre.
n Hacen mencin a los datos que manejan.
n Permiten expresar clculos.
n Ofrecen un resultado.
n

CONCEPTO DE FUNCIN
PREcondiciones
CUERPO
POSTcondiciones

CONCEPTO DE FUNCIN
Operacin sobre un conjunto de datos y
sus restricciones, que emite un resultado.
n PRE: restriccin que define el conjunto de
estados para los que se asegura que el
problema va a tener solucin.
n POST: aserto que establece la relacin
entre los datos y el resultado. Lo que
enuncia el problema.
n

ESPECIFICACIN DE UNA
FUNCIN
n

Cabecera:
Nombre
n Lista de parmetros
n Domino del resultado
n

Precondicin
n Postcondicin
n

ESPECIFICACIN DE UNA
FUNCIN
La lista de parmetros da nombre a cada
parmetro y le asigna un dominio.
n La PRE acota el dominio o describe alguna
propiedad, de alguno de los parmetros.
n La POST relaciona todos los parmetros
con el resultado.
n Cuanto ms restrictiva sea la PRE, menos
reutilizable es la funcin.
n

EJEMPLOS DE ESPECIFICACIN
n

Problema1: rea del tringulo

FUNCIN AreaTriangulo (|R base, altura) ----- |R


PRE: (base>=0) /\ (altura>=0)
POST: resultado = (base * altura) / 2

Problema2: Ser un nmero mltiplo de otro

n
n

n
n
n

FUNCIN EsMultiplo (|N m, n) ----- |B


PRE: (m>0) /\ (n>0)
POST: resultado es cierto si existe un nmero
entero positivo que multiplicado por n da m
resultado es falso en caso contrario.

EJERCICIOS DE ESPECIFICACIN

Ejercicio1: Volumen del cilindro

Ejercicio2: Ser un nmero par

Ejercicio3: Menor de dos nmeros

EJERCICIOS DE ESPECIFICACIN
n
n
n
n

n
n
n

n
n
n

Ejercicio1: Volumen del cilindro


FUNCIN VolumenCilindro1 (|R radio, altura) -- |R
PRE: (radio>=0) /\ (altura>=0)
POST: resultado = pi * radio * radio * altura
FUNCIN VolumenCilindro2 (|R radio, altura) -- |R
PRE: (radio>=0) /\ (altura>=0)
POST: resultado = AreaCirculo(radio) * altura
FUNCIN AreaCirculo (|R radio) -- |R
PRE: (radio>=0)
POST: resultado = pi * radio * radio

EJERCICIOS DE ESPECIFICACIN
n
n
n
n

Ejercicio2: Ser un nmero par


FUNCIN EsPar (|N m) ----- |B
PRE: (m>0)
POST1: resultado es cierto si existe un nmero
entero positivo que multiplicado por 2 da m y
resultado es falso en otro caso.
POST2: resultado es cierto si m es mltiplo de
2 y es falso en otro caso.
POST3: resultado es cierto si el resto de la
divisin de m entre 2 da 0 y es falso en otro
caso

EJERCICIOS DE ESPECIFICACIN
n
n
n
n

Ejercicio3: Menor de dos nmeros


FUNCIN Menor2 (|N a, b) |N
PRE: cierto
POST1: resultado es el menor de los dos valores
b
POST2: (resultado <= a) /\ (resultado <= b) /\
(resultado EN {a,b})

Ojo! Sin esta ltima condicin bastara con que resultado


fuese 0 para que se cumplieran las dos anteriores, para todo
nmero natural y sin embargo, estara mal.

FUNCIONES EN Java
n

n
n
n
n

Formato: Cabecera y cuerpo


<<TipoRes>> <<Nombre>> (<<ListaParmetros>>)
{
<<Bloque>>
}

{ y } comienzo y fin del cuerpo de la


funcin.

FUNCIONES EN Java
TipoRes: Dominio (tipo) del resultado.
n Nombre: Identificador que da nombre a la
funcin. Debe empezar por una letra minscula.
n ListaParmetros: Secuencia de pares
n

TipoParametro NombreParametro

separados por ,
n Bloque: Secuencia de rdenes
(sentencias) separadas por ;

FUNCIONES EN Java
Sentencia return
n Formato: return <<expresin>>;
n Funcionamiento:
n

Se evala la expresin. El valor ser el


resultado de la funcin.
n Se termina la funcin.
n

Obligatoria en el bloque de una funcin.

EJEMPLOS DE CODIFICACIN
n
n
n
n
n
n

n
n
n
n
n
n
n

FUNCIN AreaCirculo (|R radio) -- |R


PRE: (radio>=0)
POST: resultado = pi * radio * radio
double areaCirculo (double radio)
{
return Math.PI * radio * radio;
}

FUNCIN VolumenCilindro2 (|R radio, altura) -- |R


PRE: (radio>=0) /\ (altura>=0)
POST: resultado = AreaCirculo(radio) * altura
double volumenCilindro (double radio, double altura)
{
return altura * areaCirculo (radio);
}

EJERCICIOS DE CODIFICACIN
n

Ejercicio4: rea del tringulo


Ejercicio5: Ser un nmero mltiplo de
otro
Ejercicio6: Menor de dos nmeros

EJERCICIOS DE CODIFICACIN
n
n
n
n
n
n
n

n
n
n

n
n
n
n

FUNCIN AreaTriangulo (|R base, altura) ----- |R


PRE: (base>=0) /\ (altura>=0)
POST: resultado = (base * altura) / 2
double areaTriangulo (double base, double altura)
{
return (base * altura) / 2.0;
}
FUNCIN EsMultiplo (|N m,
PRE: (m>0) /\ (n>0)
POST: resultado es cierto
positivo que multiplicado
falso en caso contrario.
boolean esMultiplo (int m
{
return (m % n) == 0;
}

n) ----- |B
si existe un nmero entero
por n da m y resultado es
, int n)

EJERCICIOS DE CODIFICACIN
n
n
n

n
n
n
n

FUNCIN Menor2 (|N a, b) |N


PRE: cierto
POST: (resultado <= a) /\ (resultado <= b) /\
(resultado EN {a,b})
int menor2 (int a , int b)
{
return (a + b - Math.abs (a-b)) / 2;
}

PARMETROS
n

Declaracin de una funcin: El cdigo

Invocacin de una funcin: El nombre

Parmetros formales: Los que aparecen en la

Parmetros actuales: Los que aparecen en la

completo de la funcin (cabecera y cuerpo).


seguido de la lista de parmetros actuales.
declaracin.
invocacin.

PARMETROS

FUNCIN Cubo (|N numero) |N


PRE: cierto
POST: resultado = numero^3
int cubo (int numero)
{
return numero * numero * numero;
}

Invocaciones vlidas:

n
n
n
n
n
n

n
n
n
n
n

int
int
int
int
int

dato
prueba1
prueba2
prueba3
prueba4

=
=
=
=
=

2;
cubo(dato);
cubo(3);
dato + cubo(dato);
cubo(cubo(dato));

PARMETROS
n
n

n
n
n
n
n

Parmetro formal de cubo:


numero
Parmetros actuales en cada prueba:
En la 1: dato
En la 2: 3
En la 3: dato
En la 4: cubo(dato)

EJERCICIO DE RECAPITULACIN
Problema: Superficie o rea total del
cilindro
n La superficie comprende las dos bases,
que son crculos, ms el rea lateral o
rea del contorno, que es un rectngulo.
n

EJERCICIO DE RECAPITULACIN
n
n
n
n
n
n
n
n
n
n
n
n
n
n

FUNCION superficieCilindro (|R radio, altura) |R


PRE: (radio >= 0) /\ (altura >= 0)
POST: resultado = 2 * AC + AR
DONDE: AC = AreaCirculo (radio)
AR = AreaRectangulo (LC, altura)
LC = LongitudCicunferencia (radio)
double superficieCilindro (double radio,
double altura)
{
return 2 *
areaCirculo (radio) +
areaRectangulo (longitudCircunferencia (radio),
altura);
}

EJERCICIO DE RECAPITULACIN
n
n
n
n
n
n
n
n
n
n
n
n
n
n

FUNCION areaRectangulo (|R base, altura) |R


PRE: (base >= 0) /\ (altura >= 0)
POST: resultado = base * altura
double areaRectangulo (double base, double altura)
{
return base * altura;
}
FUNCION longitudCircunferencia (|R radio) |R
PRE: radio >= 0
POST: resultado = 2 * pi * radio
double longitudCircunferencia (double radio)
{
return 2 * Math.PI * radio;
}

VISIBILIDAD
n

Todo lo declarado en el cuerpo de la


funcin tiene consideracin local.
Los parmetros formales quedan
declarados en la cabecera. Tambin tienen
consideracin local.
Lo local es invisible desde fuera.

Вам также может понравиться