Problema Un programa debe leer 2 números desde un objeto Console. El primero es el monto que un cliente debe pagar por una compra y el segundo la cantidad de plata que pasa para pagarlo. El programa debe responder cuántos billetes de 10.000, 5.000, 1.000 y monedas de 500, 100, 50, 10, 5 y 1 son necesarias para dar el vuelto correspondiente Enter the value to pay:3561 Enter the value given by the customer :10000 Give 1 of 5000 Give 1 of 1000 Give 0 of 500 Give 4 of 100 Give 0 of 50 Give 3 of 10 Give 1 of 5 Give 4 of 1 Programm3.java
Algoritmo Leer la cantidad a pagar “topay” Leer la cantidad realmente pagada “ammount” calcular change = ammount - topay dividir change por 5000, tomar la parte entera Ese es el número de billetes de 5000 a devolver dividir lo que queda por pagar por 1000, tomar la parte entera Ese es el número de billetes de 1000 a devolver repetir la operación para el resto de los billetes y monedas que hay
Declaraciones Los nombres de las variables empiezan con letra y siguen con digitos y/o letras + el subrayado. Estas pueden ir en cualquier parte del programa pero siempre antes de usar la variable int i; //declaración int i = 1; //declaración e inicialización int i; i = 1; int i, j, k; int i = 1, j = 2, k = 3; double pi = 3.14159; char c = ‘a’; Console c; c = new Console(); String myName = new String(“Nelson”); String myName; myName = “Nelson”; final int MAX = 100000; //constante !!!
“Tipos de datos primitivos” Objetos Typ bytes Range byte 1 -27 ... -27 -1 short 2 -215 ... -215 -1 int 4 -231 ... -231 -1 long 8 -263 ... -263 -1 float +/- 3.438 double +/- 1.8308 boolean true, false char Unicode String S = new String(“hello”) Console C = new Console()
Operadores Matemáticos Operator Ejemplo significado +, -, *, / valor1 + valor2 Aritmética normal % 10 % 3 (1) Resto de división
Hagamos algo de matemáticas Lea el radio de un círculo y calcule su área y perímetro Lea 5 números y calcue el máximo, mínimo y promedio de ellos Lea a, b y c y resuelva ax2 + bx + c = 0 Programm4 Programm41 Programm5 Programm6
Qué pasa si la ecuación no tiene solución en el espacio de los reales ? Podemos primero preguntar si la expresión Math.sqrt(Math.pow(b,2)-(4*a*c)) es menor que cero. En ese caso tomamos el valor absoluto de la expresión y damos la solución con números imaginarios Hagamos una mejor versión del programa del vuelto Programm7 Programm8
Controlando la secuencia de las instrucciones Ejecución condicional de instrucciones: if (condition) instruction; if(condition) else Siempre es posible reemplazar una instrucción por una lista de ellas agrupadas dentro de { }
Encontrando el mayor, menor y promedio de 100 números Veamos el programa 5 de nuevo Programm5 Para 100 números (o una lista indeterminada de ellos) es mejor usar un ciclo Programm9 Programm10
Escribiendo Loops La instrucción básica para un cliclo es el while while (condition) instruction; Para tener varias instrucciones en un ciclo while (condition) { instructions; } Para roper el ciclo desde adentro while (true) { .... if (condicion) break;
El formateo public class ProgrammX { ---public static void main(String args[]) { --------int a = 0, b=0, sum = 0, num; --------Console c = new Console(); --------while (true) { -------------num = c.readInt(); -------------if (num == -1) break; // breaks the loop -------------if (num %2 == 0) { ------------------sum = sum +num; ------------------a = a+1; -------------} -------------else { -------------------sum = sum + num; -------------------b = b + 1; --------} ---} }
Otros ejemplos interesantes Calculando el Mcd de 2 números Jugando al cachipun contra el computador hasta que el usuario o el computador llegan a 3 puntos 1 = Tijera 2 = Piedra 3 = Papel MCD JanKenPo
Operadores lógicos Operator example meaning == if (a == b) equals != while(n != 0) Not equal ! while (! (A == b)) not <,>,<=,>= if (a >= b) comparission || if (a > b || a == 0) or && if (a>30 && a < 40) and
Propuesto Escriba un programa que lea una cantidad indeterminada de números hasta que llegue un -1. Luego el programa debe iprimir la siguiente información: Cantidad de números ingresados Promedio de los menores que 50 promedio de los mayores que 100 promedio de los que estaban entre 50 y 100, ambos incluidos
Ejercicio: Calcular el coeficioente binomial para las combinaciones posibles de k sobre n elementos El número de combinaciones de k objetos de entre n se calcula como: n! / (k!*(n-k)!) La forma larga de programarlo sería: ProgramCombinations1.java La forma corta (y reusable) es definiendo un método: ProgramCombinations2.java
Un método estático public puede ser usado desde otro archivo (otra clase) El método debe ser declarado como public El otro archivo que lo usa debe escribir NombreClase.nombreMétodo(parametros) ej. int i = ProgramCombinations2.fac(25); El archivo (clase) ProgramCombinations2 debe estar “visible” según las mismas reglas usadas para la clase Console Ver ejemplo AA.java
Definiendo metodos estáticos Tipo de valor que el método devolverá (se pone void si no devuelve ningún valor Nombre del método (definido por el programador) public static int fact( int x ) { ……. …… return a; } Se define public para que pueda ser usado desde afuera como Math.min(x,y); Las intrucciones del método van entre paréntesis {} Return is obligatorio si no se puso void Parámetros del método
Clase predefinida Math
Propuestos Escriba un método como el siguiente: public static int power( int x, int y) Que retorna el valor de xy Escriba un programa que lea dos números e imprima el valor que resulta de elevar el primero al segundo Escriba un método que reciba un string y retorne el valor numérico del string public int valorEntero(String x) Escriba un método public static int random(int x, int y) que devuelva un número entero generado aleatoriamente entre x e y
Abreviaturas: cómo escribir menos i++ : usar i en el contexto donde aparece y luego sumarle 1 ++i : sumarle 1 a i y luego usarlo en el contexto donde aparece int i = 5; int a = i++; a queda con 5, i con 6 int a = ++i; a queda con 6 , i con 6 lo mismo para --, resta uno
Otras formas de escribir ciclos while loop int i = 1; while (i <= 10) { c.println(”5 X ” + i + ” = ”+(i*5)) i = i + 1; } do while loop do { c.println(”5 X ” + i + ” = ”+(i*5)); while (i <= 10); for loop for (i = 1; i <= 10; i = i +1)
Expresiones y asignaciones Ejemplo: suma += nota Sintaxis: var op= exp Semántica: var = var op (exp) Ej: a*=b+c es equivalente a a=a*(b+c) y no a=a*b+c Aplicación double suma=0, nota; int n=0; while( true ) { C.print(“nota ? “); if( (nota = C.readDouble()) == 0 ) break; C.println(“promedio=” + (suma+=nota) / (n+=1) ); }
La isntrucción switch