Descargar la presentación
La descarga está en progreso. Por favor, espere
1
Clase 3: Funciones Valeria Herskovic – vherskov@dcc.uchile.cl
CC1001 Computación I
2
Problema Escribir las instrucciones principales de un programa que establezca el diálogo indicado en el siguiente ejemplo: Invertir número entero de 2 dígitos Número a invertir: 56 Número invertido: 65
3
Solución 1: aritmética enteros
public static void main(String args[]) throws IOException{ U.println(“Invertir numero entero de dos digitos”); U.print(“Numero a invertir: “); int aInvertir = U.readInt(); int primerDigito = aInvertir/10; int segundoDigito = aInvertir – primerDigito*10; U.print(“Numero invertido ”+segundoDigito+””+primerDigito);
4
Solución 2: aritmética reales
… U.print(“Numero a invertir: ”); int aInvertir = U.readInt(); int primerDigito = aInvertir/10; int segundoDigito = (int)((aInvertir/10.0 – primerDigito)*10); U.print(“Numero invertido : ”); U.print(segundoDigito+””+primerDigito);
5
Solución 3: con % … U.print(“Numero a invertir: ”);
int aInvertir = U.readInt(); int primerDigito = aInvertir/10; int segundoDigito = aInvertir%10; U.print(“Numero invertido : ”); U.print(segundoDigito+””+primerDigito);
6
Propuesto Obtener una fecha (por ej: ) y escribirla de la forma 08/03/2007.
7
Problema Escribir las instrucciones principales de un programa que establezca el siguiente diálogo: Perímetro y área de triángulo de lados a, b, c a ? ___ b ? ___ c ? ___ Perimetro = N° Area = N° Nota. El área se calcula como s(s-a)(s-b)(s-c) con s=a+b+c (semi-perímetro) 2
8
Solución U.println(“Perimetro y área de triángulo de lados a, b, c");
//obtener lados double a = U.readDouble(“a?”); double b = U.readDouble(“b?”); double c = U.readDouble(“c?”); //calcular y mostrar perimetro y area U.println(“Perimetro = ”+(a+b+c)); double s= (a+b+c)/2; U.println("Area = "+Math.sqrt(s*(s-a)*(s-b)*(s-c))); o U.println("Area = "+Math.pow(s*(s-a)*(s-b)*(s-c),0.5));
9
Uso (invocación) de métodos (funciones) predefinidas
Ejemplos Math.sqrt(s*(s-a)*(s-b)*(s-c)) Math.pow (s*(s-a)*(s-b)*(s-c), 0.5) Sintaxis Math.nombre(argumentos) ¿argumentos? cero o más expresiones aritméticas (separadas por comas) Semántica 1° evaluar argumentos. Ejemplo: s*(s-a)*(s-b)*(s-c) 2° evaluar función (método) con/en valores de argumentos 3° recibir resultado de la función (en el lugar o punto de invocación)
10
Funciones predefinidas en el lenguaje Java (métodos de clase predefinida Math)
función significado ejemplo resultado sqrt(x) x, x 0 sqrt(4.0) 2.0 pow(x,y) xy pow(2.0,3.0) 8.0 exp(x) ex exp(1.0) log(x) logex log(Math.E) 1.0 sin(x) seno de angulo x sin(Math.PI) 0.0 cos(x) coseno de x cos(Math.PI) -1.0 tan(x) tangente de x tan(Math.PI) asin(x) arco-seno de x asin(1.0) Π/2 acos(x) arco-coseno x acos(1.0) atan(x) arco-tangente x atan(0.0) todas las funciones reciben y entregan un double un argumento double admite un int (int es asignable a double)
11
Funciones predefinidas en el lenguaje Java (métodos de clase Math)
función significado arg result ejemplo abs(x) |x| int double abs(-3) abs(-3.0) 3 3.0 max(x,y) mayor entre x e y max(4, 6) max(4.1, 6.5) 6 6.5 min(x,y) menor entre min(4, 6) min(4.1, 6.5) 4 4.1 random() Nº al azar en [0,1[ random( ) 0.x....
12
Problema Ordenar dos reales entre 0 y 9 generados al azar Ej:
Números = 7 3 Ordenados = 3 7
13
Problema Ordenar dos reales entre 0 y 9 generados al azar Ej:
Números = 7 3 Ordenados = 3 7 //generar nº reales en rango [0,1[: 0.dd… double a=Math.random(), b=Math.random(); //generar enteros en rango [0,9] (de un dígito) int i=(int)(10*a), j=(int)(10*b); U.println(“Numeros= “ + i + “ “ + j); //ordenar dos enteros U.println(“Ordenados= “+ Math.min(i,j) + “ “ + Math.max(i,j));
14
Problema (10 min) Escribir las instrucciones principales de un programa que establezca el diálogo indicado en el siguiente ejemplo: Ordenar 3 enteros entre 1 y 100 generados al azar Numeros = Ordenados = Indicación. Si multiplica por 100 el Nº real 0.x1x2x3... (ej: ) que entrega la función random() obtendrá un número de la forma x1x2.x3.... (ej: ). De la parte entera del resultado, usando coerción (int)(expresión), se puede obtener un Nº entero de 2 dígitos (valor entre 00 y 99). Sumando uno se obtiene un número entre 1 y 100.
15
Solución 1 //generar al azar 3 enteros entre 1 y 100
int a = (int)(Math.random()*100) + 1, b = (int)(Math.random()*100) + 1, c = (int)(Math.random()*100) + 1; U.println("Numeros="+a+" "+b+" "+c); //obtener 2º restando el menor y el mayor a suma de los 3 int mayor = Math.max(Math.max(a,b),c), menor = Math.min(Math.min(a,b),c), medio = a + b + c - menor - mayor; U.println("Ordenados="+ menor+" "+medio+" "+mayor);
16
Soluciones 2 y 3 Sol. 2: obtener 2º como el menor de los ganadores (de los 3 “partidos” entre dos números) int medio = Math.min(Math.max(a,b), Math.min(Math.max(a,c),Math.max(b,c))); Sol. 3: obtener 2º como el mayor de los perdedores int medio = Math.max(Math.min(a,b),Math.max(Math.min(a,c),Math.min(b,c)));
17
Solución 4: ordenar dos primeros, y después considerar 3º
int minab = Math.min(a,b), maxab = Math.max(a,b); int menor = Math.min(minab,c), aux = Math.max(minab,c); int medio = Math.min(aux,maxab), mayor = Math.max(aux,maxab);
18
Solución 5 Con funciones (métodos) definidos por el programador
class Ordenar3{ static public void main(String[]args) { U.println(“Ordenar 3 numeros “ + “entre 1 y 100 generados al azar”); int a=azar(1,100),b=azar(1,100),c=azar(1,100); U.println("Numeros="+a+" "+b+" "+c); U.println("Ordenados = " + minimo(a,b,c) + " “ + medio(a,b,c) + " " + maximo(a,b,c)); }
19
Solución 5 (continúa) static public int azar(int x,int y){
return x + (int)(Math.random()*(y-x+1)); } static public int minimo(int x,int y,int z){ return Math.min(Math.min(x,y),z); static public int maximo(int x,int y,int z){ return Math.max(Math.max(x,y),z); static public int medio(int x,int y,int z){ return x+y+z - minimo(x,y,z) -maximo(x,y,z); }//fin de la clase Ordenar3
20
Funciones definidas por el programador
sintaxis static public tipo-resultado nombre(parámetros) { instrucciones return expresión; } ¿parámetros? tipo nombre, ... semántica 1º copiar (asignar) argumentos de llamada en parámetros 2º ejecutar las instrucciones 3º devolver valor de la expresión (del tipo-resultado) en el punto de invocación (uso)
21
Propuestos 1. Ordenar 4 números generados al azar.
Indicación. Ordene los 3 primeros y en seguida determine el lugar del 4º. 2. Escribir la función : static public int mayor(int x,int y) sin usar la función Math.max ni Math.min
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.