Se deberá tener en cuenta que no se puede usar una variable de instancia por una función estática. Por ejemplo
class UnaClase{ int i=0; static void funcion(){ System.out.println(i); } //otras funciones miembro }Al compilar se produce un error ya que la variable i es de instancia y no se puede usar en un contexto estático. El lector puede probar esto con cualquier clase que describe una aplicación. Declara una variable de instancia en la clase y la trata de usar en la función estática main.
El valor absoluto de un número.
- Nombre de la función: absoluto
- Parámetros: un entero
- Devuelve: un número entero positivo.
int absoluto(int x){ int abs; if(x>0) abs=x; else abs=-x; return abs; }Podemos simplificar el código sin necesidad de declarar una variable temporal abs.
int absoluto(int x){ if(x>0) return x; else return -x; }O bien,
int absoluto(int x){ if(x>0) return x; return -x; }Una función similar nos hallará el valor absoluto de un dato de tipo double.
double absoluto(double x){ if(x<0) return -x; return x; }
La potencia de exponente entero de un número entero
- Nombre de la función: potencia
- Parámetros: la base y el exponente, ambos enteros
- Devuelve: el resultado, un número del tipo long.
35=3*3*3*3*3
Podemos realizar este producto en un bucle for, de manera que en la variable resultado se vaya acumulando el resultado de los sucesivos productos, tal como se recoge en la Tabla, entre paréntesis figura el valor de resultado en la iteración previa, el valor inicial es 1.
iteración | valor de resultado |
1ª | (1)*3 |
2ª | (1*3)*3 |
3ª | (1*3*3)*3 |
4ª | (1*3*3*3)*3 |
5ª | (1*3*3*3*3)*3 |
long resultado=1; for(int i=0; i<5; i++) resultado*=3;El siguiente paso es la generalización del proceso a un exponente positivo cualquiera y a una base entera cualesquiera. La variable resultado es de tipo long, porque al hallar la potencia de un número entero se puede sobrepasar el rango de dichos números.
long resultado=1; for(int i=0; i<exponente; i++) resultado*=base;Por último, le pondremos una etiqueta a esta tarea, asociaremos esta rutina al nombre de una función.
long potencia(int base, int exponente){ long resultado=1; for(int i=0; i<exponente; i++){ resultado*=base; } return resultado; }
El factorial de un número
- Nombre de la función: factorial
- Parámetros: un entero int
- Devuelve: el resultado, un número positivo del tipo long.
long resultado=1; while(numero>0){ resultado*=numero; numero--; }Es mucho más lógico definir una función que calcule el factorial del número num,
long factorial(int num){ long resultado=1; while(num>0){ resultado*=num; num--; } return resultado; }que repetir tres veces el código del cálculo del factorial para hallar el número combinatorio m sobre n, de acuerdo a la siguiente fórmula.

El numerador y el denominador del número combinatorio m sobre n se obtiene del siguiente modo:
long num=factorial(m); long den=factorial(n)*factorial(m-n);
Determinar si un número es o no primo
- Nombre de la función: esPrimo
- Parámetros: un entero int
- Devuelve: true o false, un dato del tipo boolean
- un número par no es primo, excepto el 2
- un número impar es primo si no es divisible por los números impares comprendidos entre 1 y numero/2
boolean bPrimo=true; for(int i=3; i<numero/2; i+=2){ if(numero%i==0){ bPrimo=false; break; } }Ahora, se trata de poner las líneas de código dentro de una función que determine si un número es primo (devuelve true) o no es primo (devuelve false), para que pueda ser reutilizada. El código de la función esPrimo es la siguiente
boolean esPrimo(int numero){ if(numero==2) return true; if(numero%2==0) return false; boolean bPrimo=true; for(int i=3; i<numero/2; i+=2){ if(numero%i==0){ bPrimo=false; break; } } return bPrimo; }Podemos ahorrarnos la variable bPrimo, escribiendo la función esPrimo de la siguiente forma equivalente
boolean esPrimo(int numero){ if((numero!=2)&&(numero%2==0)) return false; for(int i=3; i<numero/2; i+=2){ if(numero%i==0){ return false; } } return true; }
La clase Matematicas
Ahora solamente nos queda poner todas las funciones en el interior de una clase que le llamaremos Matematicas, anteponiéndole a cada una de las funciones la palabra reservada static.public class Matematicas { static long factorial(int num){ //... } static long potencia(int base, int exponente){ //... } static boolean esPrimo(int numero){ //... } static double absoluto(double x){ //... } static int absoluto(int x){ //... } } |
Llamada a las funciones miembro
Para llamar a las funciones miembro se escribeNombre_de_la_clase.función_miembro(...);
- Hallar el número combinatorio m sobre n
int m=8, n=3; System.out.print("El número combinatorio "+m +" sobre "+ n); long numerador=Matematicas.factorial(m); long denominador=Matematicas.factorial(m-n)*Matematicas.factorial(n); System.out.println(" vale "+numerador +" / "+ denominador);
- Encontrar los números primos comprendidos entre 100 y 200
for(int num=100; num<200; num++){ if(Matematicas.esPrimo(num)){ System.out.print(num+" - "); } }
- Hallar la potencia de un número entero
System.out.print("La potencia 5 elevado a 4 "); System.out.print("vale "+Matematicas.potencia(5, 4));
- Hallar el valor absoluto de un número
double y=-2.5; System.out.print("El valor absoluto de "+y); System.out.println(" vale "+Matematicas.absoluto(y));
No hay comentarios:
Publicar un comentario