Programación: funciones

42
Programación 1 Modularización: funciones y parámetros Angel Vázquez-Patiño [email protected] Departamento de Ciencias de la Computación Universidad de Cuenca 5 de diciembre de 2016

Transcript of Programación: funciones

Page 1: Programación: funciones

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

Page 2: Programación: funciones

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

Page 3: Programación: funciones

05/12/16 Angel Vázquez-Patiño 3/42

Funciones

Page 4: Programación: 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

Page 5: Programación: funciones

05/12/16 Angel Vázquez-Patiño 5/42

Divide et impera

Tantas veces hasta que la resolución sea obvia

Page 6: Programación: funciones

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

Page 7: Programación: funciones

05/12/16 Angel Vázquez-Patiño 7/42

Función

5 25

Page 8: Programación: funciones

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

Page 9: Programación: funciones

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.”);

}

}

Page 10: Programación: funciones

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

Page 11: Programación: funciones

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

Page 12: Programación: funciones

05/12/16 Angel Vázquez-Patiño 12/42

Ejemplo guiado 1

Uso del método cubo

Page 13: Programación: funciones

05/12/16 Angel Vázquez-Patiño 13/42

Ejemplo guiado 1

● Otras formas de llamar a la función cubo

Page 14: Programación: funciones

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

Page 15: Programación: funciones

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

Page 16: Programación: funciones

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

Page 17: Programación: funciones

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

Page 18: Programación: funciones

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

Page 19: Programación: funciones

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

Page 20: Programación: funciones

05/12/16 Angel Vázquez-Patiño 20/42

Ejercicio propuesto 1

20/42

Page 21: Programación: funciones

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

Page 22: Programación: funciones

05/12/16 Angel Vázquez-Patiño 22/42

Ejercicio propuesto 2

Page 23: Programación: funciones

05/12/16 Angel Vázquez-Patiño 23/42

Ámbito de las variables

23/42

Page 24: Programación: funciones

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

Page 25: Programación: funciones

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

Page 26: Programación: funciones

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

Page 27: Programación: funciones

05/12/16 Angel Vázquez-Patiño 27/42

Variables locales vs globales

Page 28: Programación: funciones

05/12/16 Angel Vázquez-Patiño 28/42

Variables locales vs globales

Page 29: Programación: funciones

05/12/16 Angel Vázquez-Patiño 29/42

Variables locales vs globales

¡Identifique!

Page 30: Programación: funciones

05/12/16 Angel Vázquez-Patiño 30/42

Variables locales vs globales

¿Es correcto?

Page 31: Programación: funciones

05/12/16 Angel Vázquez-Patiño 31/42

Variables locales vs globales

¿Y ahora?

Page 32: Programación: funciones

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)

Page 33: Programación: funciones

05/12/16 Angel Vázquez-Patiño 33/42

Variables locales vs globalesnum es en todos los

casos la variable global

Page 34: Programación: funciones

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?

Page 35: Programación: funciones

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?

Page 36: Programación: funciones

05/12/16 Angel Vázquez-Patiño 36/42

Variables locales vs globales

¿Cuál es el resultado?

Page 37: Programación: funciones

05/12/16 Angel Vázquez-Patiño 37/42

Variables locales vs globales

¿Cuál es el resultado?

Page 38: Programación: funciones

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

Page 39: Programación: funciones

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

Page 40: Programación: funciones

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

Page 41: Programación: funciones

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

Page 42: Programación: funciones

05/12/16 Angel Vázquez-Patiño 42/42

Preguntas