1. Funciones/M´todos
e
Las funciones/m´todos son trozos de c´digo que encapsulan
e o
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´n en matem´ticas:
o a
funcion(x) = x 2 + 3
Esta funci´n tiene una definici´n y puede ser evaluada con
o o
distintos valores, por ejemplo si hacemos
funcion(5)
sabemos que el resultado ser´ 28.
a
Jorge P´rez
e – Programaci´n Estructurada en JAVA
o 1 / 20
2. Funciones/M´todos en JAVA
e
La funci´n matem´tica funcion(x) = x 2 + 3 podr´ verse en
o a ıa
JAVA como
funcion(x)
{
resultado = x * x + 3
}
veremos que es un poco m´s complicado....
a
La idea ser´ poder usar la funcion en un c´digo cualquiera,
a o
por ejemplo:
int x, y;
x = 1 + funcion(2);
y = funcion(x);
System.out.println(x);
System.out.println(y);
Jorge P´rez
e – Programaci´n Estructurada en JAVA
o 2 / 20
3. Funciones/M´todos
e
Las funciones en JAVA tienen varias partes importantes en su
definici´n:
o
Nombre → funcion
Nombres de los datos de entrada → x
Tipos de datos de entrada → ???
Tipo de dato de retorno → ???
C´digo v´lido interno
o a
Instrucci´n de retorno → ???
o
En JAVA se un poco m´s como:
a
int funcion(int x)
{
int resultado = x * x + 3;
return resultado;
}
adicionalmente tenemos que empezar la funci´n con
o
public static luego veremos qu´ significa...
e
Jorge P´rez
e – Programaci´n Estructurada en JAVA
o 3 / 20
4. Un ejemplo completo
class EjemploFuncion
{
public static void main(String[] args)
{
int x, y;
x = 1 + funcion(2);
y = funcion(x) * funcion(x - 2);
System.out.println(x);
System.out.println(y);
System.out.println( funcion(0) );
}
public static int funcion(int x)
{
int resultado;
resutado = x * x + 3;
return resultado;
}
}
Jorge P´rez
e – Programaci´n Estructurada en JAVA
o 4 / 20
5. Temas importantes en el uso de funciones
M´todo principal main.
e
Par´metros y ´mbito de las variables.
a a
Valor e instrucci´n de retorno return.
o
Orden de ejecuci´n de las instrucciones.
o
Distintos tipos de datos de entrada y salida.
Distinta cantidad de par´metros.
a
Veremos estos conceptos con otros ejemplos.
Jorge P´rez
e – Programaci´n Estructurada en JAVA
o 5 / 20
6. Ejemplo
class Ejemplo
{
public static void main(String[] args)
{
double a = AreaCirc(2);
System.out.println(a);
}
public static double AreaCirc(double radio)
{
double area;
area = 3.14 * radio * radio;
return area;
}
}
Jorge P´rez
e – Programaci´n Estructurada en JAVA
o 6 / 20
7. Ejemplo
class Ejemplo
{
public static void main(String[] args)
{
int n;
System.out.println("Dime un numero");
n = In.readInt();
if ( esPrimo(n) )
{ System.out.println( n + " es primo"); }
else
{ System.out.println( 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´rez
e – Programaci´n Estructurada en JAVA
o 7 / 20
8. Ejemplo
class Ejemplo
{
public static void main(String[] args)
{
int num, f;
System.out.println("Ingrese un numero");
num = In.readInt();
f = factorial(num);
System.out.println("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´rez
e – Programaci´n Estructurada en JAVA
o 8 / 20
9. Ejemplo
class Ejemplo
{
public static void main(String[] args)
{
int num = 1;
while( factorial(num) < 110 )
{
num++;
}
System.out.println(num);
}
public static int factorial(int numero)
{
int factorial = 1;
for(int i =1; i<=numero; i++)
{
factorial = factorial * i;
}
return factorial;
}
}
Jorge P´rez
e – Programaci´n Estructurada en JAVA
o 9 / 20
10. Varios par´metros
a
Haga una funci´n potencia que reciba dos datos enteros y retorne
o
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´todo principal
e
Jorge P´rez
e – Programaci´n Estructurada en JAVA
o 10 / 20
11. Ejemplo potencia
class Ejemplo
{
public static void main(String[] args)
{
int n, i;
System.out.print("Dime un entero positivo");
n = In.readInt();
System.out.println("Las primeras 5 potencias de " + n + " son:");
for( i = 1; i <= 5; i++)
{
System.out.println(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´rez
e – Programaci´n Estructurada en JAVA
o 11 / 20
12. Ejemplo dos funciones
class Ejemplo
{
public static void main(String[] args)
{
int n, i;
System.out.println("Dime un entero positivo");
n = In.readInt();
System.out.println( n + "! = " + factorial(n) );
System.out.println( 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´rez
e – Programaci´n Estructurada en JAVA
o 12 / 20
13. Funciones/M´todos
e
Los m´todos nos sirven entre otras cosas para:
e
No repetir lo mismo varias veces en el c´digo.
o
Ordenar el c´digo.
o
Comprender m´s f´cilmente el c´digo.
a a o
Separar trabajo entre programadores.
Realizar trabajos m´s complejos.
a
Veremos otras formas de interacci´n entre funciones.
o
Jorge P´rez
e – Programaci´n Estructurada en JAVA
o 13 / 20
14. 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 = In.readInt();
while( n != 0 )
{
.....
.....
muestraMenu();
n = In.readInt();
}
}
public static void muestraMenu()
{
System.out.println("Menu:");
System.out.println("=====");
System.out.println("0 para salir");
System.out.println("1 para obtener promedio");
System.out.println("2 para obtener minimo");
System.out.println("3 para obtener maximo");
}
}
Jorge P´rez
e – Programaci´n Estructurada en JAVA
o 14 / 20
15. 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++)
{
System.out.print(M[i][j] + " ");
}
System.out.println();
}
}
}
Jorge P´rez
e – Programaci´n Estructurada en JAVA
o 15 / 20
16. Arreglos como datos de entrada
Cuidado cuando se pasa un arreglo a un m´todo.
e
Como vimos un arreglo es una referencia.
Cuando un arreglo se entrega a un m´todo cualquier cambio
e
que se haga al arreglo se mantendr´ al terminar el llamado a
a
la funci´n.
o
Podemos usar esto para generar m´todos que implicitamente
e
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´rez
e – Programaci´n Estructurada en JAVA
o 16 / 20
17. M´todos y Arreglos
e
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++)
{ System.out.print(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´rez
e – Programaci´n Estructurada en JAVA
o 17 / 20
18. 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´rez
e – Programaci´n Estructurada en JAVA
o 18 / 20
19. Arreglos como matrices y m´todos
e
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++)
{ System.out.println(b[i]); }
swap(A[0], 0, 2)
for(i = 0; i < 3 i++)
{ System.out.println(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´rez
e – Programaci´n Estructurada en JAVA
o 19 / 20
20. Funciones que llaman a otras funciones
El m´todo principal (main) puede llamar a otros m´todos y
e e
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´rez
e – Programaci´n Estructurada en JAVA
o 20 / 20