Diferencia entre revisiones de «Usuario:ManuelRomero/practica 3»

De WikiEducator
Saltar a: navegación, buscar
(dígitos)
Línea 203: Línea 203:
 
==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…
class Digitos{
+
<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==

Revisión de 01:41 18 abr 2012






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(nclass Calculadora{
 
 }class Calculadora{
 
 }class Calculadora{
 
 }class Calculadora{
 
 }1 +" "+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

class Medias{
}

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

class ValidaFecha{
}

primo

Que introduzca un número y me diga si es o no primo

class Primo{
}

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

class Factores{
}

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