Funciones/M etodos
Las funciones/m etodos son trozos de c odigo que encapsulan cierta funcionalidad especial. En general tienen datos de entrada y datos de salida (pueden no tenerlos). Son muy similares a la idea de una funci on en matem aticas: funcion(x ) = x 2 + 3
Esta funci on tiene una denici on y puede ser evaluada con distintos valores, por ejemplo si hacemos funcion(5) sabemos que el resultado ser a 28.
Jorge P erez Programaci on Estructurada en JAVA 1 / 20
Funciones/M etodos en JAVA
La funci on matem atica funcion(x ) = x 2 + 3 podr a verse en JAVA como
funcion(x) { resultado = x * x + 3 }
veremos que es un poco m as complicado.... La idea ser a poder usar la funcion en un c odigo cualquiera, por ejemplo:
int x, y; x = 1 + funcion(2); y = funcion(x); [Link](x); [Link](y);
Jorge P erez Programaci on Estructurada en JAVA 2 / 20
Funciones/M etodos
Las funciones en JAVA tienen varias partes importantes en su denici on:
Nombre funcion Nombres de los datos de entrada x Tipos de datos de entrada ??? Tipo de dato de retorno ??? C odigo v alido interno Instrucci on de retorno ???
En JAVA se un poco m as como:
int funcion(int x) { int resultado = x * x + 3; return resultado; }
adicionalmente tenemos que empezar la funci on con public static luego veremos qu e signica...
Jorge P erez Programaci on Estructurada en JAVA 3 / 20
Un ejemplo completo
class EjemploFuncion { public static void main(String[] args) { int x, y; x = 1 + funcion(2); y = funcion(x) * funcion(x - 2); [Link](x); [Link](y); [Link]( funcion(0) ); } public static int funcion(int x) { int resultado; resutado = x * x + 3; return resultado; } }
Jorge P erez Programaci on Estructurada en JAVA 4 / 20
Temas importantes en el uso de funciones
M etodo principal main. Par ametros y ambito de las variables. Valor e instrucci on de retorno return. Orden de ejecuci on de las instrucciones. Distintos tipos de datos de entrada y salida. Distinta cantidad de par ametros. Veremos estos conceptos con otros ejemplos.
Jorge P erez
Programaci on Estructurada en JAVA
5 / 20
Ejemplo
class Ejemplo { public static void main(String[] args) { double a = AreaCirc(2); [Link](a); } public static double AreaCirc(double radio) { double area; area = 3.14 * radio * radio; return area; } }
Jorge P erez
Programaci on Estructurada en JAVA
6 / 20
Ejemplo
class Ejemplo { public static void main(String[] args) { int n; [Link]("Dime un numero"); n = [Link](); if ( esPrimo(n) ) { [Link]( n + " es primo"); } else { [Link]( n + " no es primo"); } } public static boolean esPrimo(int n) { int i = 2; while ( (n % i) != 0 && i < n ) { i++; } if ( i == n ) { return true; } else { return false; } } }
Jorge P erez
Programaci on Estructurada en JAVA
7 / 20
Ejemplo
class Ejemplo { public static void main(String[] args) { int num, f; [Link]("Ingrese un numero"); num = [Link](); f = factorial(num); [Link]("El factorial de " + num + " es " + f); } public static int factorial(int numero) { int factorial = 1; for(int i =1; i<=numero; i++) { factorial = factorial * i; } return factorial; } }
Jorge P erez Programaci on Estructurada en JAVA 8 / 20
Ejemplo
class Ejemplo { public static void main(String[] args) { int num = 1; while( factorial(num) < 110 ) { num++; } [Link](num); } public static int factorial(int numero) { int factorial = 1; for(int i =1; i<=numero; i++) { factorial = factorial * i; } return factorial; } }
Jorge P erez Programaci on Estructurada en JAVA 9 / 20
Varios par ametros
Haga una funci on potencia que reciba dos datos enteros y retorne el resultado de elevar el primer dato al segundo.
public static int potencia(int base, int exponente) { int resultado = 1; int i; for(i = 1; i <= exponente; i++) { resultado = resultado * base; } return resultado; }
ahora podemos usarlo en el m etodo principal
Jorge P erez
Programaci on Estructurada en JAVA
10 / 20
Ejemplo potencia
class Ejemplo { public static void main(String[] args) { int n, i; [Link]("Dime un entero positivo"); n = [Link](); [Link]("Las primeras 5 potencias de " + n + " son:"); for( i = 1; i <= 5; i++) { [Link](potencia(n,i)); } } public static int potencia(int base, int exponente) { int resultado = 1; int i; for(i = 1; i <= exponente; i++) { resultado = resultado * base; } return resultado; } }
Jorge P erez
Programaci on Estructurada en JAVA
11 / 20
Ejemplo dos funciones
class Ejemplo { public static void main(String[] args) { int n, i; [Link]("Dime un entero positivo"); n = [Link](); [Link]( n + "! = " + factorial(n) ); [Link]( n + "^" + n + " = " + potencia(n,n)); } public static int potencia(int base, int exponente) { int resultado = 1; int i; for(i = 1; i <= exponente; i++) { resultado = resultado * base; } return resultado; } public static int factorial(int numero) { int factorial = 1; for(int i =1; i<=numero; i++) { factorial = factorial * i; } return factorial; } }
Jorge P erez
Programaci on Estructurada en JAVA
12 / 20
Funciones/M etodos
Los m etodos nos sirven entre otras cosas para: No repetir lo mismo varias veces en el c odigo. Ordenar el c odigo. Comprender m as f acilmente el c odigo. Separar trabajo entre programadores. Realizar trabajos m as complejos. Veremos otras formas de interacci on entre funciones.
Jorge P erez
Programaci on Estructurada en JAVA
13 / 20
Funciones sin valor de retorno
Algunas funciones pueden no retornar un valor pero servirnos en alguna tarea repetitiva. Si no hay valor de retorno usamos void como valor de retorno:
class Ejemplo { public static void main(String[] args) { int n; muestraMenu(); n = [Link](); while( n != 0 ) { ..... ..... muestraMenu(); n = [Link](); } } public static void muestraMenu() { [Link]("Menu:"); [Link]("====="); [Link]("0 para salir"); [Link]("1 para obtener promedio"); [Link]("2 para obtener minimo"); [Link]("3 para obtener maximo"); } } Jorge P erez Programaci on Estructurada en JAVA 14 / 20
Funciones sin valor de retorno
class ImprimeMatriz { public static void main(String[] args) { int[][] Tablero = {{2, 3, 5}, {4, 6, 1}}; muestraMatriz(Tablero, 2, 3); } public static void muestraMatriz(int[][] M, int n, int m) { int i,j; for(i = 0; i < n; i++) { for(j = 0; j < m; j++) { [Link](M[i][j] + " "); } [Link](); } } }
Jorge P erez Programaci on Estructurada en JAVA 15 / 20
Arreglos como datos de entrada
Cuidado cuando se pasa un arreglo a un m etodo. Como vimos un arreglo es una referencia. Cuando un arreglo se entrega a un m etodo cualquier cambio que se haga al arreglo se mantendr a al terminar el llamado a la funci on. Podemos usar esto para generar m etodos que implicitamente generen varios valores de salida.
public static void transponer(int[][] M, int n) { int i,j,t; for(i = 0; i < n; i++) { for(j = i; j < n; j++) { t = M[i][j]; M[i][j] = M[j][i]; M[j][i] = t } } } Jorge P erez Programaci on Estructurada en JAVA 16 / 20
M etodos y Arreglos
class Ejemplo { public static void main(String[] args) { double[] a= {1.0, 2.4, 5.6, 4.5, 6.7}; int i; swap(a, 0, 3); for(i = 0; i < 5; i++) { [Link](a[i]+ " "); } } public static void swap(double[] A, int i, int j) { double temp; temp= A[i]; A[i]= A[j]; A[j]=temp; } }
Jorge P erez Programaci on Estructurada en JAVA 17 / 20
Matrices como arreglos
Cuando creamos una matriz en realidad lo que estamos creando es un arreglo de arreglos. Por ejemplo, si escribimos:
int[][] a;
lo que creamos es una variable a que hace referencia a un arreglo (de arreglos), no a una matriz. Luego cuando escribimos:
a = new int[3][4];
lo que creamos es un arreglo de tres elementos, a[0], a[1], a[2].
Jorge P erez
Programaci on Estructurada en JAVA
18 / 20
Arreglos como matrices y m etodos
class Ejemplo { public static void main(String[] args) { int[][] A={{1,2,3}, {4,5,6}, {7,8,9}}; int[] b = A[0]; int i; for(i = 0; i < 3 i++) { [Link](b[i]); } swap(A[0], 0, 2) for(i = 0; i < 3 i++) { [Link](b[i]); } } public static void swap(double[] A, int i, int j) { double temp; temp= A[i]; A[i]= A[j]; A[j]=temp; } }
Jorge P erez
Programaci on Estructurada en JAVA
19 / 20
Funciones que llaman a otras funciones
El m etodo principal (main) puede llamar a otros m etodos y estos a su vez pueden llamar a otros.
class Ejemplo { public static void main(String[] args) { ... } public static double combinaciones(int n, int k) { int c; c = factorial(n) / ( factorial(k) * factorial(n-k) ); return c; } public static double factorial (int numero) { int factorial = 1; for(int i = 1; i <= numero; i++) { factorial = factorial * i; } return factorial; } } Jorge P erez Programaci on Estructurada en JAVA 20 / 20