Programación: funciones

Post on 13-Jan-2017

179 views 0 download

Transcript of Programación: funciones

Programación 1

Modularización: funciones y parámetros

Angel Vázquez-Patiñoangel.vazquezp@ucuenca.edu.ec

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