Fecha y hora actual: Jueves 17 Ene 2019 05:01
Índice del Foro

Foros de programación informática, diseño gráfico y Web

En esta comunidad intentaremos dar soporte de programación a todos los niveles, desde principiantes a profesionales de la informática, desarrollo de programas, programación web y mucho más.

Curso VB .NET - Tema 1.12 - Funciones Java

Responder al Tema

Índice del Foro > Visual Basic .NET > Curso VB .NET - Tema 1.12 - Funciones Java

Autor Mensaje
Tesis
Administrador


Registrado: 04 Mar 2007
Mensajes: 3200
Ubicación: Valencia - España

Mensaje Publicado: Martes 25 Nov 2008 14:46

Título del mensaje: Curso VB .NET - Tema 1.12 - Funciones Java

Responder citando

Curso de programación - Tema 1.12

1. Funciones Java
1.1 Objetivos del tema.

Vamos a ver en este tema las funciones en el lenguaje Java.

1.2 Introducción.
La programación está basada en las estructuras.
Estructuras de datos y estructuras de programas.
Los programas son a su vez contenedores de estructuras de elementos individuales que ejecutan código.
El elemento más pequeño es la instrucción.
Después nos encontramos con procedimientos y funciones.
El siguiente nivel es la clase y por último el programa.

Los procedimientos y las funciones, dependiendo de la estructura del lenguaje utilizado, y del estilo de programación individual de cada uno, están bien en módulos independientes, de forma que son públicos para toda la aplicación, o de forma privada en el interior de un programa, o una clase.

Aunque como comprobaremos en los ejemplos, también pueden estar en un programa, si queremos entender lo de “public class main” como tal, en lugar de una clase.

En Java las funciones se denominan métodos, y se albergan en el interior de una clase, haciendo referencia al mismo mediante el nombre de la clase y a continuación el de la función, método, o si está en el mismo nivel, con utilizar la función es suficiente, como vemos en el ejemplo.

Código:
System.out.println("Factorial de 3 es " + FuncionFactorial(3));


Pero no toda la resolución de una clase se realiza mediante código que se pueda o se tenga que traducir en un método.

La programación además se basa en la división de un problema grande, en varios pequeños, aquello de divide y vencerás, por lo que por esa misma filosofía es imposible, e ilógico, que todo se convierta en métodos.

Los métodos son la parte lógica visible de una clase, lógica en cuanto a que es aquello que cara al usuario le ayuda a resolver un problema en pasos “ comprensibles “ para él.

Con las funciones sucede lo mismo, al fin y al cabo, no son nada más que otra de las herramientas de programación.

Para crear una función la sintaxis es la siguiente:

Código:
static int FuncionFactorial(int n)


El tipo de dato que se devuelve en la función, int
Después lo que sigue es el nombre de la función, FuncionFactorial
Entre paréntesis los datos que se reciben, indicando el tipo de cada uno de ellos, (int n)
A continuación una pareja de llaves que delimitan el código que se escribe en la función, el Begin y End en otros lenguajes.

Código:
static int FuncionFactorial(int n)
{
  if ( n <=1 )
  {
    return 1;
  }
  else
  {
    return n * FuncionFactorial(n -1);
  }
}


En el ejemplo vemos la función, esta función calcula el factorial de un número, otro tema es que sea la mejor solución, pero es una función.

En el siguiente ejemplo se calcula la longitud de un registro en un archivo random.

Código:
static int LongitudRegistro(List Estructura)
{
  int longitud = 0;
  TipoCampos Campo = new TipoCampos();
  Iterator x = Estructura.iterator();
  while (x.hasNext())
  {
    Campo = (TipoCampos) x.next();
    longitud = longitud + Campo.Longitud;
    System.out.println(Campo.Longitud);
    System.out.println(Campo.Nombre);
  }
  return longitud;
}


El uso de la función anterior puede quedar :

Código:
int Longitud = LongitudRegistro(Estructura);


1.3 Escribir la función.
Vemos el ejemplo de una función.
Como hemos comentado antes, primero el tipo de la función, el tipo de dato devuelto.

Código:
static int FuncionFactorial(int n)
{
  if ( n <=1 )
  {
    return 1;
  }
  else
  {
    return n * FuncionFactorial(n -1);
  }
}


El nombre de la función “FuncionFactorial” y los argumentos que va a recibir, n como entero.
Después entre llaves el cuerpo de la función, que en el ejemplo es un uso recursivo de la misma.

Código:
return n * FuncionFactorial(n -1);


La palabra reservada “return” indica el valor que se va a devolver en el nombre de la función, que debe coincidir con el tipo de dato de la función, evidentemente.

En el siguiente ejemplo se reciben dos datos, una variable y un objeto.

Código:
static int Funcion(int variable, ClaseDatos Objeto)
{
  System.out.println("Entrada función");
  System.out.println("Variable " + variable);
  System.out.println("Objeto " + Objeto.ventas);
  Objeto.ventas = 234;
  variable = 3456;
  return variable;
}


El dato que se devolverá en el nombre de la función es “variable”, y es, o deberá ser, del tipo entero.

Código:
return variable;


1.4 Envío y recepción de los datos.
La creación de procedimientos y funciones, conlleva la necesidad de envío y recepción de variables, de datos. Hay dos formas de enviar datos a un procedimiento:

    Por valor
    Por referencia


En el primero de los casos la variable que recibe el procedimiento, puede ser utilizada en el interior del mismo, pero los cambios que sufra, no podrán ser devueltos al programa que lo ha llamado, el procedimiento recibe el valor de la variable, pero no la variable.

Por referencia, sin embargo la variable recibida podrá ser utilizada y si ha sufrido cambio en su valor, éste podrá ser devuelto al programa que lo ha llamado, el procedimiento recibe una referencia a la variable, por lo tanto los cambios que se realicen a la misma, perduran a la finalización del procedimiento, o función.

En Java, las variables solo las recibe por valor, y cuando hay que devolver información como consecuencia de la ejecución de un procedimiento, hay que escribir una función.

En el ejemplo se expone un método en el que se asigna un dato a una variable de la clase, y como lo único que hace es eso, pero no devuelve nada, en otros lenguajes lo llamaríamos un procedimiento,

Código:
public void Dato2(double dato )
{
  dat2 = dato;
} // fin del método


Pero cuando se ejecuta el método con los mismos parámetros que antes, o sin los parámetros, si fuera el caso, pero ese método tiene que devolver algo, un dato, un objeto, entonces ese método se debe resolver o se resuelve con una función.

En el ejemplo se expone un método que es capaz de sumar dos valores, y como lo que hace es eso, pero además ha de devolver el resultado, en otros lenguajes lo llamaríamos una función.

Código:
public double Sumar()
{
  resultado = dat1 + dat2;
  return resultado;
} // fin del método


Aquí es donde entra el Void, en Java, si observamos los dos ejemplos veremos que en el primero figura la palabra void, y en el segundo no.

En el caso de devolver un dato se indica que tipo de dato se devuelve,

Código:
public double Sumar() // no hay void, se devuelve un dato de tipo double.


y en caso de no devolver nada se indica con la palabra void.

Código:
public void Dato2(double dato ) // si que hay void, no se devuelve nada.


De hecho en Java no se usan las palabras Procedure o Sub o Function, pero aunque eliminemos esos nombres, la realidad es esa, el procedimiento lleva void y la función no.

En cuanto al resto de características del envío de datos en la llamada a un procedimiento, los datos hay que enviarlos en el mismo orden y del mismo tipo que se define en la línea de entrada al procedimiento.

Sin embargo, hay una excepción, si lo que se pasa es un objeto, entonces si que los cambios que reciba su contenido, permanecerán al final del mismo.

Lo podemos comprobar en el ejemplo que sigue:

Código:
package Pruebas;
class ClaseDatos
{
  public int ventas = 100;
}

public class Main
{
  static double FuncionFactorial(double n)
  {
    if ( n <=1 )
    {
       return 1;
    }
    else
    {
       return n * FuncionFactorial(n -1);
    }
}

static int Funcion(int variable, ClaseDatos Objeto)
{
  System.out.println("Entrada función");
  System.out.println("Variable " + variable);
  System.out.println("Objeto " + Objeto.ventas);
  Objeto.ventas = 234;
  variable = 3456;
  return variable;
}

public static void main(String[] args)
{
  ClaseDatos Objetillo ;
  int varia;
  varia = 0;
  Objetillo = new ClaseDatos();
  System.out.println("Cálculo del factorial de 3");
  System.out.println("Factorial de 3 es " + FuncionFactorial(3));
  System.out.println();
  Objetillo.ventas = 34567;
  System.out.println("Antes de llamar a la función");
  System.out.println("Main variable " + varia);
  System.out.println("Main Objeto " + Objetillo.ventas);
  System.out.println("Después de ejecutar la función.");
  System.out.println();
  System.out.println("La función es " + Funcion(varia, Objetillo ));
  System.out.println("Main variable " + varia);
  System.out.println("Main Objeto " + Objetillo.ventas);
}
}


Como podemos ver en el resultado de la ejecución del ejemplo, se mantienen los criterios de los procedimientos para las funciones.

El resultado de la ejecución es:

compile:
Código:
run:
Cálculo del factorial de 3
Factorial de 3 es 6.0
Antes de llamar a la función
Main variable 0
Main Objeto 34567.0
Después de ejecutar la función.
Entrada función
Variable 0
Objeto 34567.0
La función es 3456
Main variable 0
Main Objeto 234.0


Como podemos ver en el ejemplo el valor de la variable llega a la función, se modifica su valor en la misma, pero no vuelve al programa principal.
Sin embargo, con el Objeto ClaseDato, se recibe el dato, se modifica, y ese mismo valor vuelve al programaprincipal.
Pero a pesar de eso, no debemos utilizar esta estrategia, una función debe devolver el dato en su nombre.

1.5 Conclusiones.
El paso de datos se hace por valor cuando se trata de variables de tipo primitivo del lenguaje.
Se hace por referencia cuando se pasan objetos.

Los datos han de enviarse en el mismo orden en el que se reciben en la función.
Han de ser del mismo tipo.
No tienen porque llamarse de la misma forma.
No hay valores opcionales.
Excepto en el tema de paso por valor y en el de los objetos, es como se utiliza en otros lenguajes.

1.6 Ejercicios propuestos.

    1. Hallar el área y la longitud de una circunferencia, solicitando el radio de la misma R .
    Código:
    Area = PI * R al cuadrado
    Longitud = 2 * PI * R

    2. Hallar el área de un triángulo.
    Código:
    Area = Base por Altura / 2

    3. Introducir un número A y visualizar si es o no primo.

    4. Introducir una calificación (entre cero y diez), e imprimir su equivalente alfabético, según la siguiente tabla.

    Código:
    De 3 -------> M.D.
    Desde 3 y menor que 5 -------> INS.
    Desde 5 y menor que 6 -------> SUF
    Desde 6 y menor que 7 -------> BIEN
    Desde 7 y menor que 9 -------> NOT.
    Desde 9 hasta 10 -------> SOB.

    5. Introducir un valor en metros y visualizar su valor en millas terrestres, marinas , yardas y leguas.

    Código:
    Milla terrestre = 1.609,34 m.
    Milla marina = 1.852,00 m.
    Yarda = 4.190 m.
    Legua = 0,9144 m.

    6. Introducir una fecha en pantalla con el formato día, mes y año en tres variables numéricas, validar la fecha y emitir el mensaje de fecha incorrecta o correcta.

    7. A partir de los siguientes valores de moneda extranjera, crear una función que a partir de un importe en pesetas devuelva su equivalente en la moneda que se indique.

    Código:
    1 Franco francés 25,2400 25,3920
    1 Lira 0,0859 0,0864
    1 Libra esterlina 245,5560 247,0340
    1 Dólar americano 150,2280 151,1320
    1 Marco alemán 84,6480 85,1570
    1 Franco suizo 101,7550 102,3670
    1 Florín holandés 5,1170 75,5690
    1 Escudo portugués 0,8262 0,8312


1.7 Solución a los ejercicios propuestos.

1.- Hallar el área y la longitud de una circunferencia, solicitando el radio de la misma R .
Código:
Area = PI * R al
cuadrado, Longitud = 2 * PI * R .


Código:
package Funciones;
public class Main
{
  static double AreaCirculo(double Radio)
  {
     return Radio * Radio * 3.1415;
  }
  static double LongitudCirculo(double Radio)
  {
     return Radio * 2 * 3.1415;
  }
  public static void main(String[] args)
  {
    System.out.println("Cálculo del área y longitud de un circulo");
    System.out.println("Area de radio 3 es " + AreaCirculo(3));
    System.out.println("Longitud de radio 4 es " + LongitudCirculo(4));
    System.out.println();
  }
}


2.- Hallar el área de un triángulo.
Código:
 Area = Base por Altura / 2


Código:
package Funciones;
public class Main
{
  static double AreaTriangulo(double Base, double Altura)
  {
    return (Base * Altura) / 2;
  }
  public static void main(String[] args)
  {
    System.out.println("Cálculo del área de un triángulo");
    System.out.println("Area del triangulo " + AreaTriangulo(3,4));
    System.out.println();
  }
}


3.- Introducir un número A y visualizar si es o no primo.

Código:
package Funciones;
public class Main
{
  static boolean EsPrimo(int Valor)
  {
    int x = 0;
    int fin = Valor / 2;
    fin = fin +1;
    boolean Result = true;
    if (Valor > 3)
    {
      x= 2;
      while ((x < fin) & (Result))
      {
        Result = Valor % x !=0;
        x = x + 1;
      }
    }
    return Result;
  }
  public static void main(String[] args)
  {
    System.out.println("Visualizar si un número es primo.");
    System.out.println("Para 27 primo es " + EsPrimo(27));
    System.out.println();
  }
}


4.- Introducir una calificación (entre cero y diez), e imprimir su equivalente alfabético, según la siguiente tabla.
Código:
De 3 -> M.D.
Desde 3 y menor que 5 -> INS.
Desde 5 y menor que 6 -> SUF
Desde 6 y menor que 7 -> BIEN
Desde 7 y menor que 9 -> NOT.
Desde 9 hasta 10 -> SOB.


Código:
package Funciones;
public class Main
{
  static String Calificacion(Double Nota)
  {
    if ((Nota >= 0 ) & (Nota <=10))
     if (Nota < 3 ) return "M.D.";
      else if (Nota <5) return "Ins";
       else if (Nota <6) return "Suf";
        else if (Nota <7) return "Bien";
         else if (Nota <9) return "Not";
          else return "SOB" ;
  else return "Incorrecta";
  }
  public static void main(String[] args)
  {
  System.out.println("Visualizar nota en letras");
  double Nota = 9;
  System.out.println("Calificación " + Nota + " " + Calificacion(Nota));
  System.out.println();
  }
}


5.- Introducir un valor en metros y visualizar su valor en millas terrestres, marinas , yardas y leguas.

Código:
Milla terrestre = 1.609,3400 m.
Milla marina = 1.852,0000 m.
Yarda = 4.190,0000 m.
Legua = 0,9144 m.


Código:
package Funciones;
public class Main
{
  static double Conversion(double Metros, char Unidad)
  {
    double Result = 0;
    if (Metros > 0 )
    {
      switch (Unidad)
     {
       case 'M': Result = Metros / 1852.0; break;
       case 'T': Result = Metros / 1609.34; break;
       case 'Y': Result = Metros / 4190; break;
       case 'L': Result = Metros / 0.9144; break;
      }
    }
   return Result;
  }
  public static void main(String[] args)
  {
  System.out.println("Conversión de distancias ");
  double Dist = 9000;
  System.out.println("Distancia " + Dist + " " + Conversion(Dist,'M'));
  System.out.println();
  }
}


6.- Introducir una fecha en pantalla con el formato día, mes y año en tres variables numéricas, validar la fecha y emitir el mensaje de fecha incorrecta o correcta.

Código:
package Funciones;
public class Main
{
  static boolean Fecha(int D,int M, int A)
  {
    boolean Result = false;
    if ((M == 1) | (M==3) | (M==5) | (M==7) | (M==8) | (M==10) | (M==12))
      Result = ((D > 0) & (D < 32));
      else if ((M == 4) | (M==6) | (M==9) | (M==11))
        Result = ((D > 0) & (D < 31));
      else if (M == 2)
     {
      if (A % 100 == 0)
        Result = ((D > 0) & (D < 29)) | ((D == 29) & (A % 400 == 0));
      else Result = (D > 0 & D < 29) | (D == 29 & A % 4 == 0);
      }
    return Result;
  }
  public static void main(String[] args)
  {
  System.out.println("Comprobación de fecha”);
  if (Fecha(9,10,2008)) System.out.println("La fecha es válida ");
  else System.out.println("La fecha no es válida ");
  System.out.println();
  }
}


7.- A partir de los siguientes valores de moneda extranjera, crear una función que a partir de un importe en pesetas devuelva su equivalente en la moneda que se indique.

Código:
package Funciones;
public class Main
{
  static double ConversionMoneda(float Pesetas, char Moneda)
  {
    double Result ;
    switch (Moneda)
    {
       case ('F') : Result = Pesetas / 25.24 ; break;
       case ('L') : Result = Pesetas / 0.0859 ; break;
       case ('I') : Result = Pesetas / 245.556; break;
       case ('D') : Result = Pesetas / 150.228; break;
       case ('M') : Result = Pesetas / 84.648; break;
       case ('S') : Result = Pesetas / 101.755; break;
       case ('H') : Result = Pesetas / 5.117; break;
       case ('P') : Result = Pesetas / 0.826; break;
       default : Result = 0;
     }
   return Result;
  }
  public static void main(String[] args)
  {
  System.out.println("Conversión de monedas ");
  System.out.println(ConversionMoneda(1000,'H'));
  }
}


Siendo T una variable de tipo char, que puede venir indistintamente en minúsculas o mayúsculas, de esa forma nos aseguramos su completo funcionamiento, convirtiéndola a mayúsculas.


Autor del curso: Casiopea.


Normas del foro
Aprende a postear correctamente usando las etiquetas
Volver arriba
Ver perfil del usuario Enviar mensaje privado
Responder al Tema
Mostrar mensajes anteriores:   
Ir a:  
Todas las horas están en GMT + 2 Horas

Temas relacionados

Tema Autor Foros Respuestas Publicado
El foro no contiene ningún mensaje nuevo

Ayuda con TestNG Parametrico en java netbeans

baltigo Java 0 Sábado 30 Jun 2018 01:37 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Publicar Aplicación web JAVA en tomcat

Irvin Java Web 1 Viernes 13 Oct 2017 17:54 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Imagen referencial De creación de jtable en apl...

Jensel S.G Java 6 Miércoles 13 Sep 2017 20:06 Ver último mensaje
El tema está bloqueado: no pueden editarse ni agregar mensajes.

EMPLEO ANALISTA PROGRAMADOR/A BACK-END JAVA EE

GRUPOARESTORA Bolsa de trabajo 0 Viernes 23 Jun 2017 14:33 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Curso de PHP-WordPress avanzado

wordpressadict PHP 1 Domingo 27 Nov 2016 19:59 Ver último mensaje
Panel de Control
No puede crear mensajes, No puede responder temas, No puede editar sus mensajes, No puede borrar sus mensajes, No puede votar en encuestas,