métodos y funciones - java - algoritmia
DESCRIPTION
Universidad del Valle, 2013. Algoritmia y Programación.TRANSCRIPT
Algoritmia y Programación
FUNCIONES O MÉTODOS
Slide 2
Algoritmia y programación Universidad del Valle
CONTENIDO Funciones/métodos
Definición
Partes de una función
Ejemplos
Ámbito de variables
Variables Locales
Variables Globales
Slide 3
Algoritmia y programación Universidad del Valle
DEFINICIÓN
Una función ó método es una porción de código (sub-algoritmo) que forma parte de un algoritmo principal, el cual se encarga de resolver una tarea específica.
Slide 4
Algoritmia y programación Universidad del Valle
DEFINICIÓN
Una función ó método es una porción de código (sub-algoritmo) que forma parte de un algoritmo principal, el cual se encarga de resolver una tarea específica.
Divide y vencerás: Es una estrategia para resolver problemas grandes, dividiéndolo en problemas más pequeños
Slide 5
Algoritmia y programación Universidad del Valle
Los métodos reciben datos del programa principal, realizan operaciones y le devuelven los resultados.
Es como una oficina: El programa principal es el jefe, que da instrucciones a sus subordinados (métodos), ellos realizan una tarea, y cuando terminan le devuelven el resultado y control al jefe.
DEFINICIÓN
Slide 6
Algoritmia y programación Universidad del Valle
VENTAJAS DE USAR MÉTODOS
Los problemas pequeños son más fáciles de entender, de desarrollar y de mantener (localizar errores).
Se evita código innecesario, pues los métodos se escriben una sola vez, y pueden ser utilizados (llamados) desde diferentes partes del programa, las veces que sea necesario
Slide 7
Algoritmia y programación Universidad del Valle
PROBLEMA Desarrolle un programa que lea los datos de 2 catetos (a,b)
y determine cual de los 2 es mayor y muestre su hipotenusa.
Slide 8
Algoritmia y programación Universidad del Valle
PROBLEMA Desarrolle un programa que lea los datos de 2 catetos (a,b)
y determine cual de los 2 es mayor y muestre su hipotenusa.
1. Análisis del problema
Entrada: a, b
Slide 9
Algoritmia y programación Universidad del Valle
PROBLEMA Desarrolle un programa que lea los datos de 2 catetos (a,b)
y determine cual de los 2 es mayor y muestre su hipotenusa.
1. Análisis del problema
Entrada: a, b
Salidas : hipotenusa, mayor
Proceso: ??
Slide 10
Algoritmia y programación Universidad del Valle
PROBLEMA Desarrolle un programa que lea los datos de 2 catetos (a,b)
y determine cual de los 2 es mayor y muestre su hipotenusa.
1. Análisis del problema
Entrada: a, b
Salidas : hipotenusa, mayor
Proceso: determinar mayor de 2 números
calcular hipotenusa
Slide 11
Algoritmia y programación Universidad del Valle
PROBLEMA Desarrolle un programa que lea los datos de 2 catetos (a,b)
y determine cual de los 2 es mayor y muestre su hipotenusa.
1. Análisis del problema
Entrada: a, b
Salidas : hipotenusa, mayor
Proceso: entero determinarMayor(a, b :entero) {
a y b son datos necesarios para calcular el mayor de los dos números
Slide 12
Algoritmia y programación Universidad del Valle
PROBLEMA Desarrolle un programa que lea los datos de 2 catetos (a,b)
y determine cual de los 2 es mayor y muestre su hipotenusa.
1. Análisis del problema
Entrada: a, b
Salidas : hipotenusa, mayor
Proceso: entero determinarMayor(a, b :entero) {
m: entero
SI a>b
m= a
SINO
m=b
retornar m
}
Slide 13
Algoritmia y programación Universidad del Valle
PROBLEMA Desarrolle un programa que lea los datos de 2 catetos (a,b)
y determine cual de los 2 es mayor y muestre su hipotenusa.
1. Análisis del problema
Entrada: a, b
Salidas : hipotenusa, mayor
Proceso: real calcularHipotenusa(a, b :entero)
Slide 14
Algoritmia y programación Universidad del Valle
PROBLEMA Desarrolle un programa que lea los datos de 2 catetos (a,b)
y determine cual de los 2 es mayor y muestre su hipotenusa.
1. Análisis del problema
Entrada: a, b
Salidas : hipotenusa, mayor
Proceso: real calcularHipotenusa(a, b :entero)
a y b son datos necesarios para calcular la hipotenusa
Slide 15
Algoritmia y programación Universidad del Valle
PROBLEMA Desarrolle un programa que lea los datos de 2 catetos (a,b)
y determine cual de los 2 es mayor y muestre su hipotenusa.
1. Análisis del problema
Entrada: a, b
Salidas : hipotenusa, mayor
Proceso: real calcularHipotenusa(a, b :entero) {
h: real
h=√( a2+b2)
retornar h
}
Slide 16
Algoritmia y programación Universidad del Valle
PROBLEMA Desarrolle un programa que lea los datos de 2 catetos (a,b)
y determine cual de los 2 es mayor y muestre su hipotenusa.
1. Análisis del problema
Entrada: a, b
Salidas : hipotenusa, mayor
Proceso: real calcularHipotenusa(a, b :entero) {
h: real
h= √( a2+b2)
retornar h
}
¿Cómo se escribe un método en Java?
Slide 17
Algoritmia y programación Universidad del Valle
Tiene un nombre,
Recibe unos parámetros o argumentos (opcionalmente),
Contiene sentencias o instrucciones para realizar algo, y
Devuelve un valor de algún Tipo de dato conocido (opcionalmente).
Tiene un modificador de acceso
PARTES DE UN MÉTODO
Modificador_de_acceso Tipo_de_retorno nombre(parámetros,…)
{
declaración_variables_locales
cuerpo_del_método
valor_de_retorno
}
Sintaxis global es:
Slide 18
Algoritmia y programación Universidad del Valle
public double calcularHipotenusa(int a, int b)
{
double h;
h= Math.sqrt((a*a)+(b*b));
return h;
}
PARTES DE UN MÉTODO
Slide 19
Algoritmia y programación Universidad del Valle
public double calcularHipotenusa(int a, int b)
{
double h;
h= Math.sqrt((a*a+(b*b));
return h;
}
Modificador de acceso:
public – cualquiera puede acceder usar e invocar al método private – Sólo puede acceder ó invocarse el método desde otro método de la clase. protected - proporciona acceso público para las clases derivadas y acceso privado (prohibido) para el resto de clases.
PARTES DE UN MÉTODO
Slide 20
Algoritmia y programación Universidad del Valle
public double calcularHipotenusa(int a, int b)
{
double h;
h= Math.sqrt((a*a+(b*b));
return h;
}
Tipo de Retorno Corresponde al tipo de dato del valor que el método debe retornar, que puede ser: •int, float, double, char, String. etc •void – Indica que el método no retorna ningún valor
PARTES DE UN MÉTODO
Slide 21
Algoritmia y programación Universidad del Valle
public double calcularHipotenusa(int a, int b)
{
double h;
h= Math.sqrt((a*a+(b*b));
return h;
}
Tipo de dato del valor que devuelve
Valor que devuelve
PARTES DE UN MÉTODO
Slide 22
Algoritmia y programación Universidad del Valle
public double calcularHipotenusa(int a, int b)
{
double h;
h= Math.sqrt((a*a+(b*b));
return h;
}
Nombre Es el nombre con el que se hará referencia al método dentro del programa. El cual debe estar relacionado con las operaciones que va a realizar
PARTES DE UN MÉTODO
Slide 23
Algoritmia y programación Universidad del Valle
public double calcularHipotenusa(int a, int b)
{
double h;
h= Math.sqrt((a*a+(b*b));
return h;
}
Parámetros / argumentos Hay métodos que reciben algunos valores para poder hacer operaciones con ellos. Si son varios se separan con comas ,
PARTES DE UN MÉTODO
Slide 24
Algoritmia y programación Universidad del Valle
public double calcularHipotenusa(int a, int b)
{
double h;
h= Math.sqrt((a*a+(b*b));
return h;
}
PARTES DE UN MÉTODO
Este método recibe 2 argumentos de tipo entero
Slide 25
Algoritmia y programación Universidad del Valle
public double calcularHipotenusa(int a, int b)
{
double h;
h= Math.sqrt((a*a+(b*b));
return h;
}
PARTES DE UN MÉTODO
¿Cómo llamar a un método desde el programa principal?
Slide 26
Algoritmia y programación Universidad del Valle
Desarrolle un programa que lea los datos de 2 catetos (a,b) y determine cual de los 2 es mayor y muestre su hipotenusa
2. Diseñar el algoritmo y escribirlo en pseudocódigo
Inicio a,b,mayor : entero hipotenusa : real leer (a) leer (b)
hipotenusa = calcularHipotenusa(a,b) mayor = determinarMayor(a,b) imprimir(hipotenusa, mayor) Fin
La variable hipotenusa va a tomar el valor que le devuelva el método calcularHipotenusa(a,b)
LLAMADO DE MÉTODOS
Slide 27
Algoritmia y programación Universidad del Valle
LLAMADO DE MÉTODOS
import javax.swing.JOptionPane;
public class Hipotenusa{
public static double calcularHipotenusa(int a, int b){
double h;
h= Math.sqrt((a*a)+(b*b));
return h;
}
public static int determinarMayor(int a,int b){
int m;
if(a>b){
m=a;}
else{
m=b;}
return m;
}
Slide 28
Algoritmia y programación Universidad del Valle
LLAMADO DE MÉTODOS
public static void main (String args[]){
int a, b, mayor;
double hipotenusa;
a=Integer.parseInt(JOptionPane.showInputDialog(
“Digite el valor de a: “));
b=Integer.parseInt(JOptionPane.showInputDialog(
“Digite el valor de b: “));
hipotenusa = calcularHipotenusa(a,b);
mayor= determinarMayor(a,b);
JOptionPane.showMessageDialog(null,”Hipotenusa: ”+ hipotenusa +
”\n Mayor: “+ mayor );
}
}
Inicio a,b,mayor : entero hipotenusa : real leer (a) leer (b)
hipotenusa = calcularHipotenusa(a,b) mayor = determinarMayor(a,b) imprimir(hipotenusa, mayor) Fin
Slide 29
Algoritmia y programación Universidad del Valle
PROBLEMA Se desea reforestar un bosque que mide un número n de hectáreas. Si la superficie del terreno excede a 1’000.000m2, entonces se siembra así:
Si la superficie del terreno es menor o igual a 1’000.000m2 entonces se siembra así:
Se desea saber el número de pinos, oyameles y cedros que se deben sembrar, si se sabe que en 10m2 caben 8 pinos; en 15m2 caben 15 oyameles, y en 18m2 caben 10 cedros.
% superficie Tipo de árbol
70% Pino
20% Oyamel
10% Cedro
% superficie Tipo de árbol
50% Pino
30% Oyamel
20% Cedro
Slide 30
Algoritmia y programación Universidad del Valle
1. Análisis del problema
Entrada: n
Salidas : cant_pinos, cant_oyamel, cant_cedro
Proceso: hallarCantidades
EJEMPLO
Slide 31
Algoritmia y programación Universidad del Valle
1. Diseñar el algoritmo y escribirlo en pseudocódigo
Inicio
n: entero
leer(n)
hallarCantidades( n)
Fin
EJEMPLO
Slide 32
Algoritmia y programación Universidad del Valle
1. Diseñar el algoritmo y escribirlo en pseudocódigo
hallarCantidades(n: entero){
cant_pino,cant_oyamel,cant_cedro, hectarea=10000 : entero
SI (n*hectarea) > 1000000
cant_pino= (((n*hectarea) *0.7)/10)*8
cant_oyamel = (((n*hectarea) *0.2)/15)*15
cant_cedro= (((n*hectarea) *0.1)/18)*10
SINO
cant_pino= (((n*hectarea) *0.5)/10)*8
cant_oyamel = (((n*hectarea) *0.3)/15)*15
cant_cedro= (((n*hectarea) *0.2)/18)*10
Imprimir (cant_pino, cant_oyamel, cant_cedro);
}
EJEMPLO
Slide 33
Algoritmia y programación Universidad del Valle
EJEMPLO public class Reforestacion{
public static void hallarCantidades(int n){
int cant_pino, cant_oyamel, cant_cedro;
final int hectarea=10000;
if ( (n*hectarea) > 1000000){
cant_pino= (((n*hectarea) *0.7)/10)*8;
cant_oyamel = (((n*hectarea) *0.2)/15)*15;
cant_cedro= (((n*hectarea) *0.1)/18)*10;
}
else{
cant_pino= (((n*hectarea) *0.5)/10)*8;
cant_oyamel = (((n*hectarea) *0.3)/15)*15;
cant_cedro= (((n*hectarea) *0.2)/18)*10;
}
JOptionPane.showMessageDialog(null, “cantidad de pinos”+ cant_pino+ “\n cantidad de pinos”+
cant_oyamel+“\n cantidad de pinos”+ cant_cedro);
}
hallarCantidades(n: entero){
cant_pino,cant_oyamel,cant_cedro: entero
SI (n*hectarea) > 1000000
cant_pino= (((n*hectarea) *0.7)/10)*8
cant_oyamel = (((n*hectarea) *0.2)/15)*15
cant_cedro= (((n*hectarea) *0.1)/18)*10
SINO
cant_pino= (((n*hectarea) *0.5)/10)*8
cant_oyamel = (((n*hectarea) *0.3)/15)*15
cant_cedro= (((n*hectarea) *0.2)/18)*10
Imprimir (cant_pino, cant_oyamel, cant_cedro);
}
Slide 34
Algoritmia y programación Universidad del Valle
EJEMPLO public class Reforestacion{
public static void hallarCantidades(int n){
int cant_pino, cant_oyamel, cant_cedro;
final int hectarea=10000;
if ( (n*hectarea) > 1000000){
cant_pino= (((n*hectarea) *0.7)/10)*8;
cant_oyamel = (((n*hectarea) *0.2)/15)*15;
cant_cedro= (((n*hectarea) *0.1)/18)*10;
}
else{
cant_pino= (((n*hectarea) *0.5)/10)*8;
cant_oyamel = (((n*hectarea) *0.3)/15)*15;
cant_cedro= (((n*hectarea) *0.2)/18)*10;
}
JOptionPane.showMessageDialog(null, “cantidad de pinos”+ cant_pino+ “\n cantidad de pinos”+
cant_oyamel+“\n cantidad de pinos”+ cant_cedro);
}
void especifica que el método no va a devolver ningún valor a quién lo llamó, sino que va a realizar alguna operación e imprimir su resultado dentro del mismo método.
Slide 35
Algoritmia y programación Universidad del Valle
EJEMPLO
public static void main(String args[])
{
int n;
n=Integer.parseInt(JOptionPane.showInputDialog(“Ingrese el número de hectáreas:”));
hallarCantidades(n);
}
}
Inicio
n: entero
leer(n)
hallarCantidades( n)
Fin
Slide 36
Algoritmia y programación Universidad del Valle
ÁMBITO DE VARIABLES
El ámbito de una variable es el contexto (espacio)
dentro del programa en donde ella puede ser
utilizada y reconocida.
Slide 37
Algoritmia y programación Universidad del Valle
VARIABLES GLOBALES Y LOCALES
Las variables se clasifican en 2 tipos:
Variables Locales
Variables Globales
Variables Locales: Son aquellas variables que se crean dentro de un método. Estas variables solamente son reconocidas dentro de ese método donde fueron creadas, y su valor se pierde al finalizar la ejecución del mismo.
Slide 38
Algoritmia y programación Universidad del Valle
Variables Globales: Son aquellas variables que se crean en el programa principal, por fuera de cualquier método. Éstas son reconocidas en todo lugar del programa.
VARIABLES GLOBALES Y LOCALES
Slide 39
Algoritmia y programación Universidad del Valle
VARIABLES GLOBALES Y LOCALES
x,y : entero
Ambito de x,y
c : entero
w,p : real
Ámbito de c
Ámbito de w,p
Slide 40
Algoritmia y programación Universidad del Valle
Variable Local del método calcularHipotenusa
public static double calcularHipotenusa(int a, int b)
{
double h;
h= Math.sqrt((a*a)+(b*b));
return h;
}
VARIABLES GLOBALES Y LOCALES
Slide 41
Algoritmia y programación Universidad del Valle
EJEMPLO
Desarrollemos el ejemplo de la reforestación, usando variables globales y métodos que no reciben parámetros
Slide 42
Algoritmia y programación Universidad del Valle
EJEMPLO public class Reforestacion{
static int n;
public static void hallarCantidades(){
int cant_pino, cant_oyamel, cant_cedro;
final int hectarea=10000;
if ( (n*hectarea) > 1000000){
cant_pino= (((n* hectarea) *0.7)/10)*8;
cant_oyamel = (((n* hectarea) *0.2)/15)*15;
cant_cedro= (((n* hectarea) *0.1)/18)*10;
}
else{
cant_pino= (((n* hectarea) *0.5)/10)*8;
cant_oyamel = (((n* hectarea) *0.3)/15)*15;
cant_cedro= (((n* hectarea) *0.2)/18)*10;
}
JOptionPane.showMessageDialog(null, “cantidad de pinos”+ cant_pino+ “\n cantidad de
pinos”+ cant_oyamel+“\n cantidad de pinos”+ cant_cedro);
}
n: Variable Global
Slide 43
Algoritmia y programación Universidad del Valle
EJEMPLO public class Reforestacion{
static int n;
public static void hallarCantidades(){
int cant_pino, cant_oyamel, cant_cedro;
final int hectarea=10000;
if ( (n*hectarea) > 1000000){
cant_pino= (((n* hectarea) *0.7)/10)*8;
cant_oyamel = (((n* hectarea) *0.2)/15)*15;
cant_cedro= (((n* hectarea) *0.1)/18)*10;
}
else{
cant_pino= (((n* hectarea) *0.5)/10)*8;
cant_oyamel = (((n* hectarea) *0.3)/15)*15;
cant_cedro= (((n* hectarea) *0.2)/18)*10;
}
JOptionPane.showMessageDialog(null, “cantidad de pinos”+ cant_pino+ “\n cantidad de
pinos”+ cant_oyamel+“\n cantidad de pinos”+ cant_cedro);
}
n: Variable Global
Método hallarCantidades no recibe parámetros
Slide 44
Algoritmia y programación Universidad del Valle
EJEMPLO public class Reforestacion{
static int n;
public static void hallarCantidades(){
int cant_pino, cant_oyamel, cant_cedro;
final int hectarea=10000;
if ( (n*hectarea) > 1000000){
cant_pino= (((n* hectarea) *0.7)/10)*8;
cant_oyamel = (((n* hectarea) *0.2)/15)*15;
cant_cedro= (((n* hectarea) *0.1)/18)*10;
}
else{
cant_pino= (((n* hectarea) *0.5)/10)*8;
cant_oyamel = (((n* hectarea) *0.3)/15)*15;
cant_cedro= (((n* hectarea) *0.2)/18)*10;
}
JOptionPane.showMessageDialog(null, “cantidad de pinos”+ cant_pino+ “\n cantidad de
pinos”+ cant_oyamel+“\n cantidad de pinos”+ cant_cedro);
}
n: Variable Global
Método hallarCantidades no recibe parámetros
Como n es global es reconocida dentro del método hallarCantidades sin haber sido pasada como parámetro
Slide 45
Algoritmia y programación Universidad del Valle
EJEMPLO
public static void main(String args[])
{
n=Integer.parseInt(JOptionPane.showInputDialog(“Ingrese el número de
hectáreas :”));
hallarCantidades();
}
}
Inicio
leer(n)
hallarCantidades()
Fin
Slide 46
Algoritmia y programación Universidad del Valle
EJERCICIOS Usando métodos, desarrollar un programa que dado el peso, la altura
y el sexo de un estudiante. Determine la cantidad de vitaminas que debe
consumir, con base en los siguientes criterios:
Si es hombre, y su estatura es mayor a 1.60, y su peso es mayor o igual a 75 kilos,
su dosis, será: 20% de la estatura y 80% de su peso, si la estatura es menor o
igual a 1.60, la dosis será la siguiente: 30% de la estatura y 70% de su peso.
Si es mujer, y su estatura es mayor o igual a 1.55 y su peso es mayor o igual a
65 kilos, su dosis será: 25% de la estatura y 75% de su peso. Si el peso es menor
a 65 kilos, será: 35% de la estatura y 65% de su peso.
Slide 47
Algoritmia y programación Universidad del Valle
EJERCICIOS Un comerciante se dedica a la venta de sillas. Vende tres tipos de sillas:
Por cada cinco sillas compradas se obtiene un descuento, de acuerdo a la tabla
El resto de sillas se cobran a precio normal. Diseñe un programa que lea el tipo de
silla y la cantidad a comprar e imprima la cantidad, el precio unitario, el descuento
y el precio total, de lo que debe cancelar el cliente por la compra.
Nota: El almacén sólo vende UN tipo de silla a cada cliente.
Tipo Precio
1 $5.000
2 $7.000
3 $10.000
Tipo Descuento
1 3%
2 5%
3 10%
Slide 48
Algoritmia y programación Universidad del Valle
CLASE DECIMALFORMAT
import java.text.DecimalFormat;
DecimalFormat formateador = new DecimalFormat("####.####");
double numero= 3.43242383;
// Esto sale en pantalla con cuatro decimales, es decir, 3,4324
System.out.println (formateador.format (numero));
Se debe importar la clase DecimalFormat
Se debe declarar una variable que contenga el formato que se le quiera aplicar al número
En el momento de imprimir, se coloca la variable a la que se le quiere dar el formato dentro del método format