Diferencia entre revisiones de «Usuario:ManuelRomero/practica 3»
(16 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 66: | Línea 66: | ||
System.out.println(n1 +" "+n2+" "+n3); | System.out.println(n1 +" "+n2+" "+n3); | ||
}//End main | }//End main | ||
+ | }//End la clase | ||
+ | </source> | ||
+ | ==Ordena 3 números == | ||
+ | Otra forma de hacerlo (hay muhcas más) | ||
+ | En este caso en cuanto tenemos los números ordenados lo visualizamos | ||
+ | no he puesto llaves dentro de los if-else, ya que solo hay una instrucción en cada uno de ellos | ||
+ | <source lang=java> | ||
+ | import java.util.Scanner; | ||
+ | |||
+ | public class Ordena4 { | ||
+ | public static void main(String []lista){ | ||
+ | Scanner leer = new Scanner(System.in); | ||
+ | int n1,n2,n3; | ||
+ | //En lugar de sacar tres mensajes sólo uno y escribilos los tres números separados por espacion | ||
+ | System.out.println("Inserta los números a ordenar separados por espacios, al final introoo"); | ||
+ | n1 = leer.nextInt(); | ||
+ | n2 = leer.nextInt(); | ||
+ | n3 = leer.nextInt(); | ||
+ | //Vamos a dejar en n1 el más grande, en n2 el mediano y en n3 el pequeño | ||
+ | //Ahora vamos visualizando según vayamos encontrando los casos | ||
+ | //Tenemos 6 casos posibles de ordenación (factorial del número de elementos a ordenar) | ||
+ | System.out.println("n1= "+n1 +" n2= "+n2+" n3= "+n3); | ||
+ | if (n1> n2){ | ||
+ | if(n2>n3) | ||
+ | System.out.println(n3 +" "+n2+" "+n1); | ||
+ | else | ||
+ | if (n1>n3) | ||
+ | System.out.println(n2 +" "+n3+" "+n1); | ||
+ | else | ||
+ | System.out.println(n2 +" "+n1+" "+n3); | ||
+ | else | ||
+ | if(n1>n3) | ||
+ | System.out.println(n3 +" "+n1+" "+n2); | ||
+ | else | ||
+ | if (n2>n3) | ||
+ | System.out.println(n1 +" "+n3+" "+n2); | ||
+ | else | ||
+ | System.out.println(n1 +" "+n2+" "+n3); | ||
+ | }//End main | ||
}//End la clase | }//End la clase | ||
</source> | </source> | ||
Línea 88: | Línea 127: | ||
</source> | </source> | ||
==Tabla de multiplicar== | ==Tabla de multiplicar== | ||
− | Te pide un número y visualizas la tabla de multiplicar | + | *Te pide un número y visualizas la tabla de multiplicar |
− | class | + | *Iteramos hasta que inserten 0 como tabla a visualizar |
− | } | + | *Observar que se puede concatenar como un string el resultado de una operacion aritmética |
+ | System.out.println(tabla+"*"+i+"="+(tabla*i)); | ||
+ | '''tabla*i''' es una operacion, y se concatena el resultado | ||
+ | <source lang=java> | ||
+ | import java.util.Scanner; | ||
+ | public class Multiplicar { | ||
+ | public static void main(String []l){ | ||
+ | int tabla; | ||
+ | Scanner leer = new Scanner(System.in); | ||
+ | System.out.println("Inserta un número para obtener la tabla (0 terminar)"); | ||
+ | tabla=leer.nextInt(); | ||
+ | while (tabla!=0){ | ||
+ | for (int i=1;i<=10;i++) | ||
+ | System.out.println(tabla+"*"+i+"="+(tabla*i)); | ||
+ | System.out.println("Inserta un número para obtener la tabla (0 terminar)"); | ||
+ | tabla=leer.nextInt(); | ||
+ | }//end while | ||
+ | }//End main | ||
+ | }//End clase | ||
+ | </source> | ||
+ | |||
==Grados== | ==Grados== | ||
Un programa que me pida grados centígrados y los viualiza en Farhenheit y en Kelving. la equivalencia es la siguiente | Un programa que me pida grados centígrados y los viualiza en Farhenheit y en Kelving. la equivalencia es la siguiente | ||
− | + | :centígrados 0 100 | |
− | class Grados{ | + | :Fahrenheit 32 212 |
− | + | :Kelvin 273 373 | |
+ | |||
+ | <source lang=java> | ||
+ | import java.util.Scanner; | ||
+ | public class Grados { | ||
+ | public static void main(String[] args) { | ||
+ | Scanner leer = new Scanner(System.in); | ||
+ | float centigrados; | ||
+ | System.out.println("Dame grados Centígrados"); | ||
+ | centigrados= leer.nextFloat(); | ||
+ | //Informo en Fahrenheit de los grados centrígrados | ||
+ | //C-F (180/100 y +32) F-C ( -32 y 100/180) | ||
+ | System.out.println(centigrados+" C = "+(centigrados*1.8+32)+" Fahrenheit y "+(centigrados+273)+" Kelvin" ); | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
==cuenta pares e impares== | ==cuenta pares e impares== | ||
− | Introducimos 10 números y me dicen cuantos hay pares y cuantos impares | + | *Introducimos 10 números y me dicen cuantos hay pares y cuantos impares |
− | + | *Solo utilizamos contamos los pares. | |
− | } | + | *El número de impares lo obtenemos como 10-numero de pares |
+ | <source lang=java> | ||
+ | import java.util.Scanner; | ||
+ | public class CuentaPares { | ||
+ | public static void main(String []l){ | ||
+ | Scanner leer = new Scanner(System.in); | ||
+ | int numero; | ||
+ | int cuentaPares=0; | ||
+ | for (int i=0; i<10;i++){ | ||
+ | System.out.println("Inserta un número "); | ||
+ | numero = leer.nextInt(); | ||
+ | if (numero%2==0) | ||
+ | cuentaPares++; | ||
+ | }//End for | ||
+ | System.out.println("Has insertado "+cuentaPares+" numeros pares y "+(10-cuentaPares)+" numeros impares"); | ||
+ | }//End main | ||
+ | }//End clase | ||
+ | </source> | ||
==dígitos== | ==dígitos== | ||
Dado un número entero, que me diga cuantos dígitos tiene (cuantas veces es divisible por 10… | Dado un número entero, que me diga cuantos dígitos tiene (cuantas veces es divisible por 10… | ||
− | + | <source lang=java> | |
+ | import java.util.Scanner; | ||
+ | public class Digitos { | ||
+ | public static void main(String[] args) { | ||
+ | Scanner leer = new Scanner(System.in); | ||
+ | int n, aux; | ||
+ | int digitos=1; | ||
+ | n=leer.nextInt(); | ||
+ | aux=n; | ||
+ | while ((aux/10)!=0){ | ||
+ | aux=aux/10; | ||
+ | digitos++; | ||
+ | } | ||
+ | System.out.println("El número "+aux+" tiene "+digitos+" dígitos"); | ||
} | } | ||
+ | } | ||
+ | </source> | ||
==medias== | ==medias== | ||
Que me pida números hasta que introduzca el 0 y me calcule la media, el mayor y el menor de la lista de números insertados | Que me pida números hasta que introduzca el 0 y me calcule la media, el mayor y el menor de la lista de números insertados | ||
− | + | import java.util.Scanner; | |
− | } | + | <source lang=java> |
+ | public class Medias { | ||
+ | public static void main(String []a){ | ||
+ | Scanner leer = new Scanner(System.in); | ||
+ | int n,suma,min,max,cuenta; | ||
+ | //inicializo variables | ||
+ | cuenta=0; | ||
+ | suma=0; | ||
+ | System.out.println("Inserta un número"); | ||
+ | n=leer.nextInt(); | ||
+ | //El primer número es el menor y el mayor | ||
+ | min = n; | ||
+ | max =n; | ||
+ | //Empiezo el bucle | ||
+ | while (n!=0){ | ||
+ | if (min>n){ | ||
+ | int aux = min; | ||
+ | min = n; | ||
+ | n=aux; | ||
+ | } | ||
+ | if (max<n){ | ||
+ | int aux = max; | ||
+ | max = n; | ||
+ | n=aux; | ||
+ | } | ||
+ | suma=suma+n; | ||
+ | cuenta++; | ||
+ | System.out.println("Inserta un número"); | ||
+ | n=leer.nextInt(); | ||
+ | }//End while | ||
+ | System.out.println("Estadísticas de "+cuenta+" numeros.\n Media: "+((float)suma/cuenta)+"\tMaximo "+max+"\tMínimo "+min); | ||
+ | }//End main | ||
+ | }//End clase | ||
+ | </source> | ||
+ | |||
==Valida fecha== | ==Valida fecha== | ||
Que le introduzca una fecha (tres enteros: dia, mes y año) y me indique si la fecha es o no correcta. En caso de que no sea correcta que me diga por qué motivo no lo es | Que le introduzca una fecha (tres enteros: dia, mes y año) y me indique si la fecha es o no correcta. En caso de que no sea correcta que me diga por qué motivo no lo es | ||
− | + | No se ha optimizado muhco el código | |
+ | *Se recomiendo retocar este código para dejarlo mas algorítmico | ||
+ | *Por comodidad se hace un System.exit(0); para abortar el programa | ||
+ | *mejor salir de forma natural al final | ||
+ | |||
+ | <source lang = java> | ||
+ | import java.util.Scanner; | ||
+ | |||
+ | public class ValidaFechas { | ||
+ | public static boolean bisiesto (int year){ | ||
+ | if ((year %4==0) && ((year %100!=0 )|| (year %400 ==0))) | ||
+ | return true; | ||
+ | else | ||
+ | return false; | ||
+ | } | ||
+ | public static void main(String []l){ | ||
+ | Scanner leer = new Scanner(System.in); | ||
+ | int dia, mes, year; | ||
+ | System.out.println("Inserta fecha dd mm aaaa"); | ||
+ | dia = leer.nextInt(); | ||
+ | mes = leer.nextInt(); | ||
+ | year = leer.nextInt(); | ||
+ | if ((year <1800 )|| (year > 2100)){ | ||
+ | System.out.println("Error en año "+year+ "dato no correcto. Válidos (1900-2100)"); | ||
+ | System.exit(0); | ||
+ | } | ||
+ | switch (mes){ | ||
+ | case 1: | ||
+ | case 3: | ||
+ | case 5: | ||
+ | case 7: | ||
+ | case 8: | ||
+ | case 10: | ||
+ | case 12://Meses de 31 días | ||
+ | if ((dia<1)||(dia > 32)){ | ||
+ | System.out.println("Error en día "+dia+" dato no correcto. Válidos 1-31 para este mes "+mes); | ||
+ | System.exit(0); | ||
+ | } | ||
+ | else | ||
+ | System.out.println("Fecha ok "+dia+"/"+mes+"/"+year); | ||
+ | break; | ||
+ | |||
+ | case 4: | ||
+ | case 6: | ||
+ | case 9: | ||
+ | case 11://Meses de 30 días | ||
+ | if ((dia<1)||(dia > 31)){ | ||
+ | System.out.println("Error en día "+dia+" dato no correcto. Válidos 1-30 para este mes "+mes); | ||
+ | System.exit(0); | ||
+ | } | ||
+ | else | ||
+ | System.out.println("Fecha ok "+dia+"/"+mes+"/"+year); | ||
+ | break; | ||
+ | case 2: | ||
+ | int d; | ||
+ | if (bisiesto(year)) | ||
+ | d = 29; | ||
+ | else | ||
+ | d=28; | ||
+ | if ((dia<1)||(dia >d )){ | ||
+ | System.out.println("Error en día "+dia+" dato no correcto"); | ||
+ | System.exit(0); | ||
+ | } | ||
+ | else | ||
+ | System.out.println("Fecha ok en año bisiesto "+dia+"/"+mes+"/"+year); | ||
+ | break; | ||
+ | default: | ||
+ | System.out.println("Error en mes "+mes+" no correcto válidos 1-12"); | ||
+ | |||
+ | }//End swtich | ||
} | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
==primo== | ==primo== | ||
Que introduzca un número y me diga si es o no primo | Que introduzca un número y me diga si es o no primo | ||
− | class Primo{ | + | <source lang = java> |
− | } | + | import java.util.Scanner; |
+ | public class Primo { | ||
+ | public static void main(String []a){ | ||
+ | int num,factor; | ||
+ | boolean primo = true; | ||
+ | System.out.println("Inserta un número "); | ||
+ | Scanner leer = new Scanner(System.in); | ||
+ | num=leer.nextInt(); | ||
+ | factor = num-1; | ||
+ | //Voy dividiendo el número cada vez por un número menor | ||
+ | //hasta que vea que es divisible | ||
+ | //o hasta que llege a 2 | ||
+ | do{ | ||
+ | if (num%factor==0) | ||
+ | primo= false; | ||
+ | factor--; | ||
+ | }while ((primo==true)&(factor>1)); | ||
+ | |||
+ | if (primo) | ||
+ | System.out.println("El número "+num+ " es primo"); | ||
+ | else | ||
+ | System.out.println("El número "+num +" no es primo. Al menos divisible por "+(factor+1)); | ||
+ | }//End main | ||
+ | }//End clase principal | ||
+ | </source> | ||
==Ecuación de 2º grado== | ==Ecuación de 2º grado== | ||
Línea 131: | Línea 367: | ||
==Factores== | ==Factores== | ||
Descomponer un número en sus factores p.e 56 =2*2*2*7 | Descomponer un número en sus factores p.e 56 =2*2*2*7 | ||
− | + | <source lang=java> | |
− | } | + | import java.util.Scanner; |
+ | public class Factores { | ||
+ | public static void main(String []a){ | ||
+ | int num,factor; | ||
+ | boolean primo = true; | ||
+ | System.out.println("Inserta un número "); | ||
+ | Scanner leer = new Scanner(System.in); | ||
+ | num=leer.nextInt(); | ||
+ | factor = 2; | ||
+ | //Voy dividiendo el número cada vez por un número menor | ||
+ | //hasta que vea que es divisible | ||
+ | //o hasta que llege a 2 | ||
+ | System.out.print(num +"="); | ||
+ | do{ | ||
+ | while (num%factor==0){ | ||
+ | num=num/factor; | ||
+ | System.out.print(factor+" * "); | ||
+ | primo = false; | ||
+ | } | ||
+ | factor++; | ||
+ | }while (factor<=num); | ||
+ | |||
+ | if (primo) | ||
+ | System.out.println(num+ " * 1");//Si es primo la descomposición 7 = 7*1 | ||
+ | else | ||
+ | System.out.print("1");//Para que quede bonito y no quede un signo de * al final :) | ||
+ | }//End main | ||
+ | }//End clase principal | ||
+ | </source> | ||
==Nomina== | ==Nomina== | ||
Línea 156: | Línea 420: | ||
==Arrays nombres== | ==Arrays nombres== | ||
Inserto hasta diez nombres y los voy colocando de forma ordenada. Al final se visualizan los nombres ordenados | Inserto hasta diez nombres y los voy colocando de forma ordenada. Al final se visualizan los nombres ordenados | ||
− | + | ||
− | + | <source lang=java> | |
+ | import java.util.Scanner; | ||
+ | public class ArrayOrdenado { | ||
+ | |||
+ | // Defino la función buscarPosción que me dice la posicion | ||
+ | //que le corresponde a un nombre n en un array de nombres l donde tengo longitud nombres | ||
+ | public static int buscarPosicion(String n, String[] l, int longitud){ | ||
+ | boolean encontrado=false; | ||
+ | int pos =0; | ||
+ | while((encontrado==false) && (pos <longitud)) | ||
+ | if (l[pos].compareTo(n)>0) | ||
+ | encontrado=true; | ||
+ | else | ||
+ | pos++; | ||
+ | return pos; | ||
+ | }//Fin de buscarPosición | ||
+ | |||
+ | public static void main (String []lista){ | ||
+ | String[] listaNombres = new String[10]; | ||
+ | Scanner leer = new Scanner(System.in); | ||
+ | String nombre; | ||
+ | |||
+ | //Voy a pedir 10 nombres y cada nombre lo coloco ordenadamente en el vector | ||
+ | //Tener cuidado que diferencia mayúsculas de minúsculas | ||
+ | for (int i=0; i<10;i++){ | ||
+ | System.out.println("Inserta un nombre"); | ||
+ | nombre=leer.next(); | ||
+ | int pos = buscarPosicion(nombre, listaNombres,i); | ||
+ | //Visualiza es simplemente para ir viendo las cosas según la va haciendo, se puede quitar | ||
+ | visualiza (listaNombres,nombre,i); | ||
+ | //Una vez que he encontrado la posición del nombre en el vector, lo coloco | ||
+ | //Y muevo todos los nombres una posición ayudado por un auxiliar | ||
+ | for (int a = pos; a<=i; a++){ | ||
+ | String aux = listaNombres[a]; | ||
+ | listaNombres[a]=nombre; | ||
+ | nombre = aux; | ||
+ | } | ||
+ | }//End for | ||
+ | |||
+ | //Ahora visualizo el vector ordenado | ||
+ | System.out.println("Vector ordenado"); | ||
+ | for (int i=0; i<10;i++){ | ||
+ | System.out.println(listaNombres[i]); | ||
+ | } | ||
+ | }//End main | ||
+ | public static void visualiza(String[]l,String n, int i){ | ||
+ | System.out.println("Buscando "+n+" en el vector "); | ||
+ | for (int a = 0; a<i;a++) | ||
+ | System.out.print(l[a]+"-"); | ||
+ | }//End visualiza | ||
+ | }//End de la clase | ||
+ | </source> | ||
==Adivina numero== | ==Adivina numero== | ||
Línea 172: | Línea 487: | ||
Random rnd = new Random(); | Random rnd = new Random(); | ||
for (int i=0;i<10;i++){ | for (int i=0;i<10;i++){ | ||
− | a = (int)(rnd.nextDouble() * 100); | + | a = 1+(int)(rnd.nextDouble() * 100); |
System.out.println("Valor de a "+a); | System.out.println("Valor de a "+a); | ||
} | } | ||
} | } | ||
} | } | ||
+ | </source> | ||
+ | |||
+ | Un posible código del programa | ||
+ | <source lang=java> | ||
+ | import java.util.Random; | ||
+ | import java.util.Scanner; | ||
+ | public class Adivina { | ||
+ | public static void main(String arg[]) { | ||
+ | //Defino variables | ||
+ | int numeroAdivinar; | ||
+ | int intentos=0; | ||
+ | int numeroUsuario; | ||
+ | Scanner leer = new Scanner(System.in); | ||
+ | |||
+ | //Inicializo la semilla; | ||
+ | Random rnd = new Random(); | ||
+ | |||
+ | System.out.println("Vamos a ver si adivinas un número entre 1 y 1000"); | ||
+ | System.out.println("Tienes 10 intentos"); | ||
+ | |||
+ | //Genero el número aleatorio emtre 1 y 10 | ||
+ | numeroAdivinar = 1+(int)(rnd.nextDouble() * 100); | ||
+ | //Iteraciones hasta que encuentre el número o agote intentos | ||
+ | do{ | ||
+ | System.out.println("Te quedan "+(10-intentos)+" intentos de los 10 iniciales para adivinar el número "); | ||
+ | numeroUsuario=leer.nextInt(); | ||
+ | if (numeroUsuario<numeroAdivinar) | ||
+ | System.out.println("El número es mayor"); | ||
+ | if (numeroUsuario>numeroAdivinar) | ||
+ | System.out.println("El número es menor"); | ||
+ | intentos++; | ||
+ | }while ((numeroUsuario!=numeroAdivinar) &&(intentos<10)); | ||
+ | |||
+ | //Informo del resultado | ||
+ | if (numeroUsuario==numeroAdivinar) | ||
+ | System.out.println("Has adivinado el número en "+ intentos+" intentos"); | ||
+ | else | ||
+ | System.out.println("No lo Has adivinado. el número era "+ numeroAdivinar); | ||
+ | |||
+ | }//end main | ||
+ | }//End clase | ||
</source> | </source> | ||
Línea 183: | Línea 539: | ||
” ¡@#%$_|?¿” | ” ¡@#%$_|?¿” | ||
La clave generada que la visualice por patalla usando showMessageBox, después aparecerá una patalla para cambiarla, me pedirá que la introduzca 2 veces y luego me permitirá introducir la nueva, al final me informará de clave cambiada correctamente. | La clave generada que la visualice por patalla usando showMessageBox, después aparecerá una patalla para cambiarla, me pedirá que la introduzca 2 veces y luego me permitirá introducir la nueva, al final me informará de clave cambiada correctamente. | ||
− | + | ||
− | } | + | <source lang=java> |
+ | import java.util.Random; | ||
+ | |||
+ | public class Password { | ||
+ | //Atributos de la clase = Variables globales para todos los | ||
+ | //métodos | ||
+ | static Random generador = new Random(); | ||
+ | |||
+ | /* | ||
+ | * Rellena el vector de password con 'num' números | ||
+ | * a partir de la posicion posIni | ||
+ | * @param p Array de caracteres que contiene la password | ||
+ | * @param num numero de caracteres letraselegidos al hazar | ||
+ | * de un vector de caracteres especiales | ||
+ | * @param posIni posición a partir de la cual relleno el vector | ||
+ | */ | ||
+ | public static void rellenaNumeros(char []p,int num, int posIni){ | ||
+ | for (int i=posIni;i<(num+posIni); i++){ | ||
+ | int n = generador.nextInt(10); | ||
+ | p[i]=Character.forDigit(n,10); | ||
+ | } | ||
+ | }//End rellenaNumeros | ||
+ | |||
+ | /* | ||
+ | * Rellena el vector de password con 'num' letras | ||
+ | * a partir de la posicion posIni | ||
+ | * @param p Array de caracteres que contiene la password | ||
+ | * @param num numero de caracteres letraselegidos al hazar | ||
+ | * de un vector de caracteres especiales | ||
+ | * @param posIni posición a partir de la cual relleno el vector | ||
+ | */ | ||
+ | public static void rellenaLetras(char []p,int num, int posIni){ | ||
+ | for(int i=posIni;i<(num+posIni);i++){ | ||
+ | int n = generador.nextInt(52); | ||
+ | if (n<26) //letras mayúsculas A..Z | ||
+ | p[i]=(char)((int)'A'+n); | ||
+ | else | ||
+ | p[i]=(char)((int)'a'+(n-26)); | ||
+ | } | ||
+ | }//End rellenaLetras | ||
+ | |||
+ | /* | ||
+ | * Rellena el vector de password con 'num' caracteres especiales | ||
+ | * a partir de la posicion posIni | ||
+ | * @param p Array de caracteres que contiene la password | ||
+ | * @param num numero de caractres especiales elegidos al hazar | ||
+ | * de un vector de caracteres especiales | ||
+ | * @param posIni posición a partir de la cual relleno el vector | ||
+ | */ | ||
+ | public static void rellenaEspeciales(char []p,int num, int posIni){ | ||
+ | char[]esp= {'!','$','@','?','¿','%','*','Ç','-'}; | ||
+ | //Tenemos 9 caracteres. generamos un valor 0.8 y tomo ese caracter | ||
+ | for(int i=posIni;i<(num+posIni);i++){ | ||
+ | int n = generador.nextInt(9); | ||
+ | p[i]= esp[n]; | ||
+ | } | ||
+ | }//End rellenaEspeciales | ||
+ | |||
+ | //Definimos un vector de caracteres | ||
+ | public static void main (String []l){ | ||
+ | int numLetras; | ||
+ | int numNumeros; | ||
+ | int numEspeciales; | ||
+ | char []pass = new char[8]; | ||
+ | |||
+ | //Generamos número de caracteres de cada tipo | ||
+ | numNumeros=4+generador.nextInt(3);//(valor entre 4 y 6) | ||
+ | if (numNumeros == 6) | ||
+ | numLetras = 2; | ||
+ | else | ||
+ | numLetras =2+generador.nextInt(2);//(valor entre 2 y 3) | ||
+ | numEspeciales =8-(numLetras+numNumeros); | ||
+ | |||
+ | rellenaNumeros(pass,numNumeros,0); | ||
+ | rellenaLetras(pass,numLetras,numNumeros); | ||
+ | rellenaEspeciales(pass,numEspeciales,numNumeros+numLetras); | ||
+ | |||
+ | //Visualizo el resultado | ||
+ | System.out.print("Password: "); | ||
+ | for (int i=0; i<8;i++){ | ||
+ | System.out.print(pass[i]); | ||
+ | } | ||
+ | }//Fin del main | ||
+ | }//Fin de la clase | ||
+ | |||
+ | |||
+ | </source> | ||
==Clases== | ==Clases== | ||
Línea 194: | Línea 636: | ||
calculo.division() 4/5=0,80 | calculo.division() 4/5=0,80 | ||
calculo.multiplica 4*5=20 | calculo.multiplica 4*5=20 | ||
− | + | <source lang=java> | |
− | + | import java.util.Scanner; | |
+ | public class UsoOrdenar { | ||
+ | public static void main(String []a){ | ||
+ | Calculadora c = new Calculadora (); | ||
+ | boolean seguir = true; | ||
+ | while (seguir == true){ | ||
+ | System.out.println("Dame dos numeros"); | ||
+ | c.setNum1(leer.nextInt()); | ||
+ | c.setNum2(leer.nextInt()); | ||
− | + | System.out.println(c.getNum1()+"+"+c.getNum2+"="+c.sumar()); | |
+ | System.out.println(c.getNum1()+"-"+c.getNum2+"="+c.restar()); | ||
+ | System.out.println(c.getNum1()+"*"+c.getNum2+"="+c.multiplicar()); | ||
+ | System.out.println(c.getNum1()+"/"+c.getNum2+"="+c.dividir()); | ||
+ | System.out.println("Seguir"); | ||
+ | seguir = leer.nextBoolean(); | ||
+ | |||
+ | |||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </source> | ||
==Cuenta corriente== | ==Cuenta corriente== | ||
Realiza una clase llamada | Realiza una clase llamada |
Última revisión de 00:01 9 feb 2013
|
Estrucutras secuenciales , condicionales, bucles
Ordernar1
Un programa que me pida dos números y me los visualice ordenados
import java.util.Scanner; class Ordenar1{ public static void main(String []lista){ Scanner leer = new Scanner(System.in); int n1,n2; System.out.println("Inserta dos números a ordenar"); n1 = leer.nextInt(); n2 = leer.nextInt(); if (n1> n2) System.out.println(n1 +" "+n2); else System.out.println(n2 +" "+n1); }//End main }//End Odenar1
Ordenar2.java
Qué pida tres números y visualice ordenados
import java.util.Scanner; public class Ordena3{ public static void main(String []lista){ Scanner leer = new Scanner(System.in); int n1,n2,n3; //En lugar de sacar tres mensajes sólo uno //y escribilos los tres números separados por espacion System.out.println("Inserta los números a ordenar separados por espacios, al final intro"); n1 = leer.nextInt(); n2 = leer.nextInt(); n3 = leer.nextInt(); //Vamos a dejar en n1 el más grande, en n2 el mediano y en n3 el pequeño //ahora comparamos n2 y n1 y luego n3 y n1, y así en n1 tenemos seguro el mayor if (n2> n1){ int a=n1; n1=n2; n2=a; } if (n3>n1){ int a=n1; n1=n3; n3=a; } //Ahora que tenemos en n1 el mayor dejamos en n2 el mediano if (n3>n2){ int a=n2; n2=n3; n3=a; } System.out.println(n1 +" "+n2+" "+n3); }//End main }//End la clase
Ordena 3 números
Otra forma de hacerlo (hay muhcas más) En este caso en cuanto tenemos los números ordenados lo visualizamos no he puesto llaves dentro de los if-else, ya que solo hay una instrucción en cada uno de ellos
import java.util.Scanner; public class Ordena4 { public static void main(String []lista){ Scanner leer = new Scanner(System.in); int n1,n2,n3; //En lugar de sacar tres mensajes sólo uno y escribilos los tres números separados por espacion System.out.println("Inserta los números a ordenar separados por espacios, al final introoo"); n1 = leer.nextInt(); n2 = leer.nextInt(); n3 = leer.nextInt(); //Vamos a dejar en n1 el más grande, en n2 el mediano y en n3 el pequeño //Ahora vamos visualizando según vayamos encontrando los casos //Tenemos 6 casos posibles de ordenación (factorial del número de elementos a ordenar) System.out.println("n1= "+n1 +" n2= "+n2+" n3= "+n3); if (n1> n2){ if(n2>n3) System.out.println(n3 +" "+n2+" "+n1); else if (n1>n3) System.out.println(n2 +" "+n3+" "+n1); else System.out.println(n2 +" "+n1+" "+n3); else if(n1>n3) System.out.println(n3 +" "+n1+" "+n2); else if (n2>n3) System.out.println(n1 +" "+n3+" "+n2); else System.out.println(n1 +" "+n2+" "+n3); }//End main }//End la clase
OrdenarNombre
Que me pida dos nombres y los visualice ordenados
import java.util.Scanner; public class Nombres { public static void main(String[] args) { String n1,n2; Scanner l1=new Scanner(System.in); System.out.println("Inserta un nombre"); n1=l1.nextLine(); System.out.println("Inserta otro nombre"); n2=l1.nextLine(); if (n1.compareTo(n2)<0) System.out.println(n1+" - "+n2); else System.out.println(n2+" - "+n1); } }
Tabla de multiplicar
- Te pide un número y visualizas la tabla de multiplicar
- Iteramos hasta que inserten 0 como tabla a visualizar
- Observar que se puede concatenar como un string el resultado de una operacion aritmética
System.out.println(tabla+"*"+i+"="+(tabla*i)); tabla*i es una operacion, y se concatena el resultado
import java.util.Scanner; public class Multiplicar { public static void main(String []l){ int tabla; Scanner leer = new Scanner(System.in); System.out.println("Inserta un número para obtener la tabla (0 terminar)"); tabla=leer.nextInt(); while (tabla!=0){ for (int i=1;i<=10;i++) System.out.println(tabla+"*"+i+"="+(tabla*i)); System.out.println("Inserta un número para obtener la tabla (0 terminar)"); tabla=leer.nextInt(); }//end while }//End main }//End clase
Grados
Un programa que me pida grados centígrados y los viualiza en Farhenheit y en Kelving. la equivalencia es la siguiente
- centígrados 0 100
- Fahrenheit 32 212
- Kelvin 273 373
import java.util.Scanner; public class Grados { public static void main(String[] args) { Scanner leer = new Scanner(System.in); float centigrados; System.out.println("Dame grados Centígrados"); centigrados= leer.nextFloat(); //Informo en Fahrenheit de los grados centrígrados //C-F (180/100 y +32) F-C ( -32 y 100/180) System.out.println(centigrados+" C = "+(centigrados*1.8+32)+" Fahrenheit y "+(centigrados+273)+" Kelvin" ); } }
cuenta pares e impares
- Introducimos 10 números y me dicen cuantos hay pares y cuantos impares
- Solo utilizamos contamos los pares.
- El número de impares lo obtenemos como 10-numero de pares
import java.util.Scanner; public class CuentaPares { public static void main(String []l){ Scanner leer = new Scanner(System.in); int numero; int cuentaPares=0; for (int i=0; i<10;i++){ System.out.println("Inserta un número "); numero = leer.nextInt(); if (numero%2==0) cuentaPares++; }//End for System.out.println("Has insertado "+cuentaPares+" numeros pares y "+(10-cuentaPares)+" numeros impares"); }//End main }//End clase
dígitos
Dado un número entero, que me diga cuantos dígitos tiene (cuantas veces es divisible por 10…
import java.util.Scanner; public class Digitos { public static void main(String[] args) { Scanner leer = new Scanner(System.in); int n, aux; int digitos=1; n=leer.nextInt(); aux=n; while ((aux/10)!=0){ aux=aux/10; digitos++; } System.out.println("El número "+aux+" tiene "+digitos+" dígitos"); } }
medias
Que me pida números hasta que introduzca el 0 y me calcule la media, el mayor y el menor de la lista de números insertados import java.util.Scanner;
public class Medias { public static void main(String []a){ Scanner leer = new Scanner(System.in); int n,suma,min,max,cuenta; //inicializo variables cuenta=0; suma=0; System.out.println("Inserta un número"); n=leer.nextInt(); //El primer número es el menor y el mayor min = n; max =n; //Empiezo el bucle while (n!=0){ if (min>n){ int aux = min; min = n; n=aux; } if (max<n){ int aux = max; max = n; n=aux; } suma=suma+n; cuenta++; System.out.println("Inserta un número"); n=leer.nextInt(); }//End while System.out.println("Estadísticas de "+cuenta+" numeros.\n Media: "+((float)suma/cuenta)+"\tMaximo "+max+"\tMínimo "+min); }//End main }//End clase
Valida fecha
Que le introduzca una fecha (tres enteros: dia, mes y año) y me indique si la fecha es o no correcta. En caso de que no sea correcta que me diga por qué motivo no lo es No se ha optimizado muhco el código
- Se recomiendo retocar este código para dejarlo mas algorítmico
- Por comodidad se hace un System.exit(0); para abortar el programa
- mejor salir de forma natural al final
import java.util.Scanner; public class ValidaFechas { public static boolean bisiesto (int year){ if ((year %4==0) && ((year %100!=0 )|| (year %400 ==0))) return true; else return false; } public static void main(String []l){ Scanner leer = new Scanner(System.in); int dia, mes, year; System.out.println("Inserta fecha dd mm aaaa"); dia = leer.nextInt(); mes = leer.nextInt(); year = leer.nextInt(); if ((year <1800 )|| (year > 2100)){ System.out.println("Error en año "+year+ "dato no correcto. Válidos (1900-2100)"); System.exit(0); } switch (mes){ case 1: case 3: case 5: case 7: case 8: case 10: case 12://Meses de 31 días if ((dia<1)||(dia > 32)){ System.out.println("Error en día "+dia+" dato no correcto. Válidos 1-31 para este mes "+mes); System.exit(0); } else System.out.println("Fecha ok "+dia+"/"+mes+"/"+year); break; case 4: case 6: case 9: case 11://Meses de 30 días if ((dia<1)||(dia > 31)){ System.out.println("Error en día "+dia+" dato no correcto. Válidos 1-30 para este mes "+mes); System.exit(0); } else System.out.println("Fecha ok "+dia+"/"+mes+"/"+year); break; case 2: int d; if (bisiesto(year)) d = 29; else d=28; if ((dia<1)||(dia >d )){ System.out.println("Error en día "+dia+" dato no correcto"); System.exit(0); } else System.out.println("Fecha ok en año bisiesto "+dia+"/"+mes+"/"+year); break; default: System.out.println("Error en mes "+mes+" no correcto válidos 1-12"); }//End swtich } }
primo
Que introduzca un número y me diga si es o no primo
import java.util.Scanner; public class Primo { public static void main(String []a){ int num,factor; boolean primo = true; System.out.println("Inserta un número "); Scanner leer = new Scanner(System.in); num=leer.nextInt(); factor = num-1; //Voy dividiendo el número cada vez por un número menor //hasta que vea que es divisible //o hasta que llege a 2 do{ if (num%factor==0) primo= false; factor--; }while ((primo==true)&(factor>1)); if (primo) System.out.println("El número "+num+ " es primo"); else System.out.println("El número "+num +" no es primo. Al menos divisible por "+(factor+1)); }//End main }//End clase principal
Ecuación de 2º grado
- dada una ecuación de segundo grado del tipo ax2 + bx + c = 0
- donde a, b y c son coeficientes numéricos que se introducirán al programa,
- encontrar valores que satisfagan el valor de x. La ecuación que me da los valores es (-b±√(b^2-4*a*c))/(2*a)
- Observamos que si la parte del radicando es negativa no se puede hacer la raíz.
- si a es 0 en realidad estamos ante una ecuación de primer grado bx+c=0 donde x =(-c)⁄b
- En el caso del radicando negativo puedes decir que no hay solución o dar solución acudiendo a los números complejos √(-n)=√n*√(-1)=√n*i
class Ecuacon2Grado{ }
Factores
Descomponer un número en sus factores p.e 56 =2*2*2*7
import java.util.Scanner; public class Factores { public static void main(String []a){ int num,factor; boolean primo = true; System.out.println("Inserta un número "); Scanner leer = new Scanner(System.in); num=leer.nextInt(); factor = 2; //Voy dividiendo el número cada vez por un número menor //hasta que vea que es divisible //o hasta que llege a 2 System.out.print(num +"="); do{ while (num%factor==0){ num=num/factor; System.out.print(factor+" * "); primo = false; } factor++; }while (factor<=num); if (primo) System.out.println(num+ " * 1");//Si es primo la descomposición 7 = 7*1 else System.out.print("1");//Para que quede bonito y no quede un signo de * al final :) }//End main }//End clase principal
Nomina
- Un programa que realice nóminas siguiendo las siguientes especificaciones, ya realizado en clase:
- Por el teclado se introducen: Horas, precio hora y Nombre y número de hijos
- Cuando el nº de horas semanales trabajadas es <= 40 se consideran horas normales.
- Entre 40 y 50 horas son extraordinarias.
- Más de 50 horas se consideran especiales
- Las horas extras se pagan a 1.5 las normales.
- Las horas especiales se pagan a 1.80 veces las normales
- Los impuestos se pagan de acuerdo con:
- Si el sueldo es <= 600 euros está libre de impuestos para la mayoría de los casos.
- Los 100 euros siguientes cotizan el 15%.
- El resto 25%
- Sólo si te sientes cómodo y cuando la parte anterior funciones, puede probar a añadir a tu software este nuevo requisito
- Los porcentajes con número de hijos se modifican de la siguiente manera
- Por cada hijo 15% menos (al porcentaje, no al total). El máximo que se puede descontar es el total de los impuestos a tratar
class Nomina{
}
Arrays nombres
Inserto hasta diez nombres y los voy colocando de forma ordenada. Al final se visualizan los nombres ordenados
import java.util.Scanner; public class ArrayOrdenado { // Defino la función buscarPosción que me dice la posicion //que le corresponde a un nombre n en un array de nombres l donde tengo longitud nombres public static int buscarPosicion(String n, String[] l, int longitud){ boolean encontrado=false; int pos =0; while((encontrado==false) && (pos <longitud)) if (l[pos].compareTo(n)>0) encontrado=true; else pos++; return pos; }//Fin de buscarPosición public static void main (String []lista){ String[] listaNombres = new String[10]; Scanner leer = new Scanner(System.in); String nombre; //Voy a pedir 10 nombres y cada nombre lo coloco ordenadamente en el vector //Tener cuidado que diferencia mayúsculas de minúsculas for (int i=0; i<10;i++){ System.out.println("Inserta un nombre"); nombre=leer.next(); int pos = buscarPosicion(nombre, listaNombres,i); //Visualiza es simplemente para ir viendo las cosas según la va haciendo, se puede quitar visualiza (listaNombres,nombre,i); //Una vez que he encontrado la posición del nombre en el vector, lo coloco //Y muevo todos los nombres una posición ayudado por un auxiliar for (int a = pos; a<=i; a++){ String aux = listaNombres[a]; listaNombres[a]=nombre; nombre = aux; } }//End for //Ahora visualizo el vector ordenado System.out.println("Vector ordenado"); for (int i=0; i<10;i++){ System.out.println(listaNombres[i]); } }//End main public static void visualiza(String[]l,String n, int i){ System.out.println("Buscando "+n+" en el vector "); for (int a = 0; a<i;a++) System.out.print(l[a]+"-"); }//End visualiza }//End de la clase
Adivina numero
- el sistema generará un número de 1 a 100 o a 1000
- te deja un número de intentos para adivinarlo
- cada vez que digas un número te dirá si es mayor o menor y número de intentos que llevas.
- Al final o lo has adivinado o has agotado el número de intentos
Para ejemplo vemos el siguiente programa que genera numéros 1 1 a 100
import java.util.Random; public class Programa{ public static void main(String arg[]) { int a; Random rnd = new Random(); for (int i=0;i<10;i++){ a = 1+(int)(rnd.nextDouble() * 100); System.out.println("Valor de a "+a); } } }
Un posible código del programa
import java.util.Random; import java.util.Scanner; public class Adivina { public static void main(String arg[]) { //Defino variables int numeroAdivinar; int intentos=0; int numeroUsuario; Scanner leer = new Scanner(System.in); //Inicializo la semilla; Random rnd = new Random(); System.out.println("Vamos a ver si adivinas un número entre 1 y 1000"); System.out.println("Tienes 10 intentos"); //Genero el número aleatorio emtre 1 y 10 numeroAdivinar = 1+(int)(rnd.nextDouble() * 100); //Iteraciones hasta que encuentre el número o agote intentos do{ System.out.println("Te quedan "+(10-intentos)+" intentos de los 10 iniciales para adivinar el número "); numeroUsuario=leer.nextInt(); if (numeroUsuario<numeroAdivinar) System.out.println("El número es mayor"); if (numeroUsuario>numeroAdivinar) System.out.println("El número es menor"); intentos++; }while ((numeroUsuario!=numeroAdivinar) &&(intentos<10)); //Informo del resultado if (numeroUsuario==numeroAdivinar) System.out.println("Has adivinado el número en "+ intentos+" intentos"); else System.out.println("No lo Has adivinado. el número era "+ numeroAdivinar); }//end main }//End clase
Generado de password
Programa de generador aleatorio de password (debe generar password de 8 caracteres y tienen que contener entre 4 y 6 números entre 2 y 3 letras y 0 o 2 carecteres especiales ” ¡@#%$_|?¿” La clave generada que la visualice por patalla usando showMessageBox, después aparecerá una patalla para cambiarla, me pedirá que la introduzca 2 veces y luego me permitirá introducir la nueva, al final me informará de clave cambiada correctamente.
import java.util.Random; public class Password { //Atributos de la clase = Variables globales para todos los //métodos static Random generador = new Random(); /* * Rellena el vector de password con 'num' números * a partir de la posicion posIni * @param p Array de caracteres que contiene la password * @param num numero de caracteres letraselegidos al hazar * de un vector de caracteres especiales * @param posIni posición a partir de la cual relleno el vector */ public static void rellenaNumeros(char []p,int num, int posIni){ for (int i=posIni;i<(num+posIni); i++){ int n = generador.nextInt(10); p[i]=Character.forDigit(n,10); } }//End rellenaNumeros /* * Rellena el vector de password con 'num' letras * a partir de la posicion posIni * @param p Array de caracteres que contiene la password * @param num numero de caracteres letraselegidos al hazar * de un vector de caracteres especiales * @param posIni posición a partir de la cual relleno el vector */ public static void rellenaLetras(char []p,int num, int posIni){ for(int i=posIni;i<(num+posIni);i++){ int n = generador.nextInt(52); if (n<26) //letras mayúsculas A..Z p[i]=(char)((int)'A'+n); else p[i]=(char)((int)'a'+(n-26)); } }//End rellenaLetras /* * Rellena el vector de password con 'num' caracteres especiales * a partir de la posicion posIni * @param p Array de caracteres que contiene la password * @param num numero de caractres especiales elegidos al hazar * de un vector de caracteres especiales * @param posIni posición a partir de la cual relleno el vector */ public static void rellenaEspeciales(char []p,int num, int posIni){ char[]esp= {'!','$','@','?','¿','%','*','Ç','-'}; //Tenemos 9 caracteres. generamos un valor 0.8 y tomo ese caracter for(int i=posIni;i<(num+posIni);i++){ int n = generador.nextInt(9); p[i]= esp[n]; } }//End rellenaEspeciales //Definimos un vector de caracteres public static void main (String []l){ int numLetras; int numNumeros; int numEspeciales; char []pass = new char[8]; //Generamos número de caracteres de cada tipo numNumeros=4+generador.nextInt(3);//(valor entre 4 y 6) if (numNumeros == 6) numLetras = 2; else numLetras =2+generador.nextInt(2);//(valor entre 2 y 3) numEspeciales =8-(numLetras+numNumeros); rellenaNumeros(pass,numNumeros,0); rellenaLetras(pass,numLetras,numNumeros); rellenaEspeciales(pass,numEspeciales,numNumeros+numLetras); //Visualizo el resultado System.out.print("Password: "); for (int i=0; i<8;i++){ System.out.print(pass[i]); } }//Fin del main }//Fin de la clase
Clases
una clase llamada calculadora con dos números y que haga suma restas divisiones y multiplicaciones. Las operaciones igual de las vistas con el racional operan con los números del objeto.
Calculadora calculo = new Calculadora (4,5); calculo.sumar() 4+5=9; calculo.resta() 4-5=-1 calculo.division() 4/5=0,80 calculo.multiplica 4*5=20
import java.util.Scanner; public class UsoOrdenar { public static void main(String []a){ Calculadora c = new Calculadora (); boolean seguir = true; while (seguir == true){ System.out.println("Dame dos numeros"); c.setNum1(leer.nextInt()); c.setNum2(leer.nextInt()); System.out.println(c.getNum1()+"+"+c.getNum2+"="+c.sumar()); System.out.println(c.getNum1()+"-"+c.getNum2+"="+c.restar()); System.out.println(c.getNum1()+"*"+c.getNum2+"="+c.multiplicar()); System.out.println(c.getNum1()+"/"+c.getNum2+"="+c.dividir()); System.out.println("Seguir"); seguir = leer.nextBoolean(); } } }
Cuenta corriente
Realiza una clase llamada
public class CuentaBancaria
tendrá tres atributos (saldo, totalCuentas (static), riesgo (static, cantidad de dinero que se permite en estas cuentas)
private double saldo; public static int totalCuentas=0; private double riesgo ; //Cantidad de dinero que puede haber en número negativos
Ene el constructor
inicializamos las variables saldo =riesgo=0, numCuentas =1 opcionalmente se puede pasar saldo o saldo y riesgo
Tendremos implementados los siguientes métodos
public double saldo() public void ingreso(floata cantidad) public void extracion(floata cantidad) /Validamos el sueldo /riesgo public static void incCuentas () public void transferencia( CuentaBancaria origen, float cantidda ) En caso de que haya saldo pasaremos dinero de una cuenta a otra
Realizar un programa principal que use esta clase
creamos 4 cuentas hacemos ingresos y reintegros realizamos al menos 2 transferenicas una permitida y otra no realizamos un ingreso para que nos la permita hacer. comprobar el valor de número de cuentas.
Siwng
Un programa que usando en el BorderLayout y que ponga los siguientes objetos norte 2 Label en forma de flowlayout Centro poner 5 botones con un BorderLayout Este 1 caja de texto Oeste 1 caja de texto Sur 4 botones FlowLayout La ventana que aparezca maximizada Que no se puede redimensionar Poner un título Que no se pueda cerrar
class { }
Swing y eventos
hacer el programa de cambio de grados de forma gráfica class eventos
El juego del ahorcado