Temas:
Motivación
Escribir un programa que determine la cantidad de combinaciones que se pueden realizar tomando k elementos distintos de un grupo de n elementos. El número de combinaciones está dado por la siguiente fórmula:
| n | n!
| | = ---------
| k | k! (n-k)!
Por esta razón, prácticamente todos los lenguajes incorporan algún mecanismo para que los programadores puedan definir sus propias funciones cuando no existe la función predefinida apropiada. Para definir una nueva función, el programador debe escribir el código (programa) que calcula esa función.
Por ejemplo, el siguiente programa calcula el número de combinaciones:
El siguiente patrón de programación se usa para definir varias funciones
que pueden ser usadas en un programa:
class Combinaciones extends Program {
void run() {
print("Ingrese k ? ");
int k= readInt();
print("Ingrese n ? ");
int n= readInt();
int combinaciones= fact(n)/(fact(k)*fact(n-k));
println("Combinaciones= "+combinaciones);
}
// Definición de la funcion fact
int fact(int x) {
// fact recibe un argumento entero y entrega un resultado entero.
// El siguiente código calcula el factorial de x
int prod= 1;
int i= 1;
while (i<=x) {
prod= prod*i;
i= i+1;
}
// Indica qué valor entrega esta función.
return prod;
}
}
Explicación:
class ... extends Program {
void run() {
...
}
tipo nombre-función ( parámetros ) {
... programa que calcula esta función ...
return expresión;
}
... Más funciones ...
}
en donde argumentos son 0, 1, 2 o más expresiones separadas por coma.
Por ejemplo:
nombre-función ( argumentos )
La semántica de una invocación de función es la siguiente:
fact(n-k)
x= 5;
Después de ejecutar este código, la variable prod almacena el
valor 120 (5!) e i el valor 6.
int prod= 1;
int i= 1;
while (i<=x) {
prod= prod*i;
i= i+1;
}
Como esta expresión es simplemente la variable prod, el resultado
de la evaluación es 120. Este valor es el resultado de
la invocación de fact y substituye toda la expresión de invocación:
return prod;
fact(n-k)
En cada invocación el argumento es distinto y por tanto el valor entregado por la función.
Ejemplo:
Definir la función repite(s,n) que entrega el string s concatenado con sí mismo n veces. Es decir, se desea que repite("hola",3) entregue (o retorne) como resultado el string "holaholahola".
El programa anterior produce la siguiente salida:
class Triangulo extends Program {
String repite(String s, int n) {
String r= "";
int i= 1;
while (i<=n) {
r= r+s;
i= i+1;
}
return r;
}
void run() {
int i=1;
while (i<=8) {
println(repite("*",i));
i= i+1;
}
}
}
*
**
***
****
*****
******
*******
********
Tarea:
esPrimo(2) | true |
esPrimo(3) | true |
esPrimo(25) | false |
esPrimo(31) | true |
esPrimo(9) | false |