Usuario:ManuelRomero/practica 3

De WikiEducator
Saltar a: navegación, buscar






Icon reflection.gif

Reflexión

  1. Realízalos de forma tranquila y cómoda, son sencillos
  2. aprovéchalos para afianzar conceptos.
  3. Consulta cualquier duda y puedes proponer alguna modificación e intentar realizarla.



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