programación: funciones
TRANSCRIPT
Programación 1
Modularización: funciones y parámetros
Angel Vázquez-Patiñ[email protected]
Departamento de Ciencias de la ComputaciónUniversidad de Cuenca
5 de diciembre de 2016
05/12/16 Angel Vázquez-Patiño 2/42
Objetivos
1) Conocer el concepto de función
2) Conocer el concepto de parámetro
3) Definir funciones en Java
4) Comprender las variables locales y su ámbito
5) Comprender las variables globales y su ámbito
05/12/16 Angel Vázquez-Patiño 3/42
Funciones
05/12/16 Angel Vázquez-Patiño 4/42
Divide et impera
Resolver un problema difícil dividiéndole en partes más simples
05/12/16 Angel Vázquez-Patiño 5/42
Divide et impera
Tantas veces hasta que la resolución sea obvia
05/12/16 Angel Vázquez-Patiño 6/42
Función
Definición● Subalgoritmo, parte de un algoritmo principal
que permite resolver una tarea específica● Puede ser invocada desde otras partes del
algoritmo cuantas veces se necesite● Puede recibir valores (parámetros o
argumentos)● Puede devolver valores
05/12/16 Angel Vázquez-Patiño 7/42
Función
5 25
05/12/16 Angel Vázquez-Patiño 8/42
Función
Función resultado <- Potencia (base, exponente)
resultado <- base ^ exponente;
FinFunción
Algoritmo funcionPotencia
Definir base, exponente Como Entero;
Escribir "Ingrese Base: ";
Leer base;
Escribir "Ingrese Exponente: ";
Leer exponente;
Escribir "Resultado: ", Potencia(base, exponente);
FinAlgoritmo
05/12/16 Angel Vázquez-Patiño 9/42
Función
En Java● Método● Deben estar dentro de clases
public class tiposDeDatos {
public static void main (String args[]) {
System.out.println(“Hola mundo.”);
}
}
05/12/16 Angel Vázquez-Patiño 10/42
Función
Cómo nombrar una función● Letras del alfabeto inglés, dígitos y el carácter _● El primer carácter no puede ser número● No usar palabras reservadas● Usar nombres descriptivos (nemotécnicos)● No usar el mismo nombre de las funciones
para variables ni viceversa
05/12/16 Angel Vázquez-Patiño 11/42
Ejemplo guiado 1
Problema: calcular el cubo de un número
public class Principal {
public static int cubo(int numero) {
return numero * numero * numero;
}
}
Nombre ParámetroTipoTipo
Para devolver un valor
05/12/16 Angel Vázquez-Patiño 12/42
Ejemplo guiado 1
Uso del método cubo
05/12/16 Angel Vázquez-Patiño 13/42
Ejemplo guiado 1
● Otras formas de llamar a la función cubo
05/12/16 Angel Vázquez-Patiño 14/42
Ejemplo guiado 2
Problema: calcular el área de un triángulo● Para más parámetros, se separa con coma
14/42
05/12/16 Angel Vázquez-Patiño 15/42
Ejemplo guiado 3
Problema: calcular el factorial de 5● Es posible usar funciones sin parámetros
15/42
05/12/16 Angel Vázquez-Patiño 16/42
Ejemplo guiado 4
Problema: mostrar la tabla de multiplicar (1-10) de un número● Un método no necesariamente devuelve un
valor
● En Java se usa void para indicar que el método no devuelve ningún valor. Y no se usa nunca return (porque nunca se devuelve nada)
16/42
05/12/16 Angel Vázquez-Patiño 17/42
Ejemplo guiado 4
Problema: mostrar la tabla de multiplicar (1-10) de un número
17/42
05/12/16 Angel Vázquez-Patiño 18/42
Ejemplo guiado 5
Problema: mostrar la tabla de multiplicar del 7● Es posible definir métodos sin parámetros ni
valores de retorno
18/42
05/12/16 Angel Vázquez-Patiño 19/42
Ejercicio propuesto 1
● Definir un método que reciba un número entero y devuelva true si dicho valor es impar y false si es par
● Utilizar un nombre adecuado para la función, i.e., un nombre nemotécnico
19/42
05/12/16 Angel Vázquez-Patiño 20/42
Ejercicio propuesto 1
20/42
05/12/16 Angel Vázquez-Patiño 21/42
Ejercicio propuesto 2
● Realizar una función que reciba un número entero e imprima en pantalla los valores anterior y posterior a ese número
● No es necesario que el método devuelva ningún valor
21/42
05/12/16 Angel Vázquez-Patiño 22/42
Ejercicio propuesto 2
05/12/16 Angel Vázquez-Patiño 23/42
Ámbito de las variables
23/42
05/12/16 Angel Vázquez-Patiño 24/42
Variables locales
● Las que se crean dentro del ámbito del método (dentro de las llaves del método)
24/42
05/12/16 Angel Vázquez-Patiño 25/42
Variables globales
● Se definen en el programa principal● Por defecto, el ámbito de las variables globales
incluye el ámbito local de las funciones● Existen desde el momento en que se declaran
hasta que termina el programa
25/42
05/12/16 Angel Vázquez-Patiño 26/42
Variables locales vs globales
● Las variables locales tiene un tiempo de vida que dura todo el tiempo que dura la ejecución del método que la contiene. Las variables globales duran todo el tiempo que dura la ejecución de la clase (el programa)
● Las variables globales se inicializan por defecto, e.g., los de tipo entero se inicializan con cero. Las variables locales no se inicializan por defecto.
26/42
05/12/16 Angel Vázquez-Patiño 27/42
Variables locales vs globales
05/12/16 Angel Vázquez-Patiño 28/42
Variables locales vs globales
05/12/16 Angel Vázquez-Patiño 29/42
Variables locales vs globales
¡Identifique!
05/12/16 Angel Vázquez-Patiño 30/42
Variables locales vs globales
¿Es correcto?
05/12/16 Angel Vázquez-Patiño 31/42
Variables locales vs globales
¿Y ahora?
05/12/16 Angel Vázquez-Patiño 32/42
Variables locales vs globales
● Aunque tanto el caso (1) como el caso (3) del ejemplo funcionan, es mucho más adecuado el caso(1), ya que permite el uso de la función con cualquier variable o valor que se esté utilizando (y no con una en particular)
05/12/16 Angel Vázquez-Patiño 33/42
Variables locales vs globalesnum es en todos los
casos la variable global
05/12/16 Angel Vázquez-Patiño 34/42
Variables locales vs globales
¿Cuál es el resultado?
¿Cuál es la variable global y cuál la local?
05/12/16 Angel Vázquez-Patiño 35/42
Variables locales vs globales
¿Cuál es el resultado?
¿Cuál es la variable global y cuál la local?
05/12/16 Angel Vázquez-Patiño 36/42
Variables locales vs globales
¿Cuál es el resultado?
05/12/16 Angel Vázquez-Patiño 37/42
Variables locales vs globales
¿Cuál es el resultado?
05/12/16 Angel Vázquez-Patiño 38/42
Ejercicio propuesto 3num <- cociente
ac <- num
Repetir
num <- ac
ac <- 0
Mientras num > 0 Hacer
ac <- ac + num MOD 10
num <- trunc(num / 10)
FinMientras
Hasta Que ac < 10
//****************************************
num <- residuo
ar <- num
Repetir
num <- ar
ar <- 0
Mientras num > 0 Hacer
ar <- ar + num MOD 10
num <- trunc(num / 10)
FinMientras
Hasta Que ar < 10
num <- a_d * ac + ar
a_dc_r <- num
Repetir
num <- a_dc_r
a_dc_r <- 0
Mientras num > 0 Hacer
a_dc_r <- a_dc_r + num MOD 10
num <- trunc(num / 10)
FinMientras
Hasta Que a_dc_r < 10
//****************************************
Escribir "Dividendo: ", dividendo, ". Suma: ", aD
Escribir "Divisor : ", divisor, ". Suma: ", a_d
Escribir "Cociente : ", cociente, ". Suma: ", ac
Escribir "Residuo : ", residuo, ". Suma: ", ar
Escribir " "
Escribir " D = d * c + r -> ", aD, " = ", a_dc_r
Escribir " "
Si aD = a_dc_r Entonces
Escribir " División correcta."
Sino
Escribir " División incorrecta."
Fin Si
FinAlgoritmo
Algoritmo pruebaDelNueve
// Versión de Angel Vázquez
Leer dividendo
Leer divisor
cociente <- trunc(dividendo / divisor)
residuo <- dividendo MOD divisor
//****************************************
num <- dividendo
aD <- num
Repetir
num <- aD
aD <- 0
Mientras num > 0 Hacer
aD <- aD + num MOD 10
num <- trunc(num / 10)
FinMientras
Hasta Que aD < 10
//****************************************
num <- divisor
a_d <- num
Repetir
num <- a_d
a_d <- 0
Mientras num > 0 Hacer
a_d <- a_d + num MOD 10
num <- trunc(num / 10)
FinMientras
Hasta Que a_d < 10
05/12/16 Angel Vázquez-Patiño 39/42
Conceptos y términos importantes
● Variable local y variable global● Ámbito de cada tipo de variable● Actuación de Java ante casos en los que
coinciden los nombres de una variable local con los de una variable global
39/42
05/12/16 Angel Vázquez-Patiño 40/42
Conceptos y términos importantes
● Cómo se comporta una función cuando se usa como parámetro una variable de tipo de dato primitivo (¿funciona de manera similar a una variable global?)
● Palabras reservadas en Java que no pueden ser usadas como nombres de funciones o variables
40/42
05/12/16 Angel Vázquez-Patiño 41/42
Referencia
● Departamento de Ciencias de la Computación, 2016. Guía de aprendizaje del MOOC de Fundamentos de Programación: parte II. Universidad de Cuenca, Cuenca, Ecuador.
● Plataforma MOOC Cedia, https://goo.gl/VDWwKV
05/12/16 Angel Vázquez-Patiño 42/42
Preguntas