You are on page 1of 13

Yulin Fernando Snchez y William Diaz S 29/07/2013

Un problema de complejidad media es aquel que sin ser difcil, su solucin no es inmediata, no es obvia y no es demasiado simple o sencilla. Problema /enunciado Sin usar Arrays, vectores (se supone que el tema no se ha visto) Elaborar un programa que muestre 6 nmeros enteros del 1 al 45 para jugar al baloto. Sin repetir numeros. Los numeros deben ser aleatorios, es decir que si se juega varias veces el baloto (se corre el programa varias veces) los numeros son diferentes cada vez. Solucin
PASO 1 ANALISIS

Los numeros son aleatorios entre 1 y 45. Al final los numeros son 6. Se inicia generando el primero obviamente y este no est repetido porque solo hay uno. Se debe generar otro, pero ya hay uno y por tanto no se puede repetir, quiere decir que se debe generar tantas veces cuantas sea necesario mientras que sea igual al primero que se gener. Se genera un tercero pero no puede ser igual a los dos anteriores. Se genera un cuarto pero no puede ser igual a los tres anteriores, y as sucesivamente hasta que se genera el sexto nmero (ultimo) y este no puede ser igual a los 5 anteriores.

MODELO DEL PROBLEMA


Programa Baloto

E Nada Aqu no entra nada

Entero Nro1, Nro2, Nro3, Nro4, Nro5, Nro6 . IDEA Inicio Genera el primer nmero Genera el segundo nmero Genera el tercer nmero Genera el cuarto nmero Genera el quinto nmero Genera el sexto nmero

PASO 2 : Diseo: modelo de la solucin. Elaboracin del algoritmo mediante la tcnica (mtodo) de los refinamientos sucesivos.

REFINAMIENTO # 2 Programa Baloto. Inicio Entero nro1, nro2, nro3, nro4, nro5, nro6=0 nro1 = genere nro ( ) // No se le pasa nada. nro2 = genere nro (nro1) // Se le pasa nro1, para que no lo repita. nro3 = genere nro (nro1, nro2) // Se le pasa nro1, nro2 para que no los repita. nro4 = genere nro (nro1, nro2, nro3) // se le pasa nro1, nro2, nro3. nro5 = genere nro (nro1, nro2, nro3, nro4) //se le pasa nro1, nro2, nro3, nro4. nro6 = genere nro (nro1, nro2, nro3, nro4, nro5) //se le pasa nro1, nro2, nro3, nro4, nro5 para que no los repita. Imprima ( nro1+,+nro2+,+nro3+,+nro4+,+nro5+,+nro6) Fin.

En el refinamiento #2 no se hacen los mtodos generenro( ) REFINAMIENTO # 3 Programa Baloto. se hacen todos (uno por uno). Entero genere nro( ) Inicio Entero r=0; convertido a entero con (int) r = (int) (Math.random() * 45) + 1; Retorne r Fin. El segundo necesita el nro1 para no repetirlo Entero genereNro(entero nro1) Inicio Entero r=nro1 Mientras que (r=nro1) haga r= genreNro( ) fin mientras que Retorne r Fin.

El tercero necesita nro1 y nro2 para no repetirlos. Entero genereNro(entero nro1, entero nro2) Inicio Entero r = nro1 Mientras que (r=nro1 r=nro2) haga r = genereNro( ) Fin mientras que Retorne r Fin. El cuarto tambin debe recibir los numeros anteriores nro1, nro2, nro3 para no repetirlos. Entero genereNumero(entero nro1, entero nro2, entero nro3) Inicio Entero r = nro1 Mientras que(r = nro1 r = nro2 r = nro3) haga r = genereNro Fin mientras que

Retorne r Fin. Y as sucesivamente con el quinto y el sexto. El sexto quedara as: Entero genereNro(entero nro1, entero nro2, entero nro3, entero nro4, entero nro5) haga Entero r = nro1 Mientras que (r = nro1 r = nro2 r = nro3 r = nro4 r = nro5) haga

r = genereNro( )

Fin mientras que Retorne r Fin. Y el programa main (principal) quedara as: Programa principal Inicio Entero nro1, nro2, nro3, nro4, nro5, nro6=0 nro1 = genereNro( ) nro2 = genereNro(nro1) nro3 = genereNro(nro1, nro2) nro4 = genereNro(nro1, nro2, nro3) nro5 = genereNro(nro1, nro2, nro3, nro4) nro6 = genereNro(nro1, nro2, nro3, nro4, nro5 )

ENTRADA.muestreMensaje ( los numeros para jugar al Baloto son: +nro1+,+nro2+,+nro3+,+nro4+,+nro5+,+nro6); Fin. PASo 3 CONSTRUCCION (CODIFICACION/PROGRAMACION) package pk01; import java.util.Scanner;public class Baloto { public static int genereNro( ) { int r = 0; r = (int) (Math.random ( ) *45) + 1; return r; } public static int genereNro( int nro1 ) { int r = nro1; while (r==nro1) { r = genereNro( ); } return r; } public static int genereNro( int nro1, int nro2 ) { int r = nro1; while (( r==nro1) || ( r==nro2 )) {

r = genereNro ( ); } return r; } public static int genereNro( int nro1, int nro2, int nro3 ) { int r = nro1; while ( ( r==nro1) || ( r==nro2 ) || ( r==nro3 ) ) { r = genereNro ( ); } return r; } public static int genereNro( int nro1, int nro2, int nro3, int nro4 ) { int r = nro1; while ( ( r==nro1) || ( r==nro2 ) || ( r==nro3 ) || ( r==nro4 ) ) { r = genereNro ( ); } return r; } public static int genereNro( int nro1, int nro2, int nro3, int nro4, int nro5 ) { int r = nro1; while ( ( r==nro1) || ( r==nro2 ) || ( r==nro3 ) || ( r==nro4 ) || ( r==nro5 ) ) {

r = genereNro ( ); } return r; }

Y el programa main seria: public static void main( String [ ] args ) { int nro1, nro2, nro3, nro4, nro5, nro6=0; nro1 = genereNro( ); nro2 = genereNro(nro1); nro3 = genereNro(nro1, nro2); nro4 = genereNro(nro1, nro2, nro3); nro5 = genereNro(nro1, nro2, nro3, nro4); nro6 = genereNro(nro1, nro2, nro3, nro4, nro5 ); // Aqu imprime. ENTRADA.muestreMensaje ( los numeros para jugar al Baloto son: +nro1+,+nro2+,+nro3+,+nro4+,+nro5+,+nro6); } }

Notas: 1. Math.random ( ) genera un numero decimal entre 0 y 1 (con muchas cifras decimales) al multiplicarlo por 45 el nmero queda entre 0 y 45 con muchas cifras decimales, al castearlo (int) se le quitan las cifras decimales y al sumarle 1 queda entre 1 y 45.

2. En programacin varias funciones pueden llamarse igual siempre que se le pasen parmetros diferentes en tipo (chart, String, double, int) en nmero.

Esto nos ejecutara el programa al correrlo. En la plataforma NetBeans Se requerie la Class ENTARADA y sus mtodos para leer Datos que se anexa Figura 1.

ANEXO 1 Clase ENTRADA para lectura de datos de tipo entero,doubl,char,, cadena.


import javax.swing.JOptionPane; public class ENTRADA { public static String leaCadena(String mensaje){ java.util.Scanner teclado = new java.util.Scanner(Sysnte.in); String str=""; System.out.print(mensaje); str=teclado.nextLine(); return str; } public static char leaCaracter(String mensaje){ char x=' '; String str; str=leaCadena(mensaje); x= str.charAt(0); return x; } public static double leaReal(String mensaje){ double x=0.0; String str; str=leaCadena(mensaje); x=Double.parseDouble(str); return x; } public static int leaEntero(String mensaje){ int x=0; String str; str=leaCadena(mensaje); x=Integer.parseInt(str); return x; } public static int leaEnteroV(String mensaje){ String f=null; int nro; f = JOptionPane.showInputDialog(mensaje ); nro=Integer.parseInt(f); return nro; } public static long leaLongV(String mensaje){ String f=null; long nro;

f = JOptionPane.showInputDialog(mensaje ); nro=Long.parseLong(f); return nro; } public static char LeaCaracterV(String mensaje){ char x; String str; str=""; str=JOptionPane.showInputDialog(mensaje,"A"); x= str.charAt(0); return x; } public static String leaCadenaV(String mensaje){ String f=null; f = JOptionPane.showInputDialog(mensaje); return f; } public static double leaRealV(String mensaje){ String f=null; double number1; f = JOptionPane.showInputDialog(mensaje ); number1=Double.parseDouble(f); return number1; } public static void muestreMensaje(String mensaje){ JOptionPane.showMessageDialog(null,mensaje); } public static void muestreMensaje(String titulo,String mensaje){ JOptionPane.showMessageDialog(null,mensaje, titulo,JOptionPane.PLAIN_MESSAGE); } public static char pidaYESNO(String pregunta,String titulo){ char r; int n= JOptionPane.showConfirmDialog(null,pregunta,titulo, JOptionPane.YES_NO_OPTION); if (n==JOptionPane.YES_OPTION) r='S'; else r='N'; return r; } public static int menuConOpciones(String titulo,String menu,String[] opciones){

int respuesta = 0; respuesta = JOptionPane.showOptionDialog(null, menu, titulo, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, //don't use a custom Icon opciones, //the titles of buttons opciones[0]); //default button title return respuesta+1; } public static int menuDosOpciones(String titulo,String op1,String op2){ int r =-1; String opciones[]=new String[2]; opciones[0]=op1; opciones[1]=op2; String menu ="\n\n Presione el boton de la Opcion elegida"+ "\n " +op1+ "\n " +op2+ "\n"; r=menuConOpciones(titulo,menu,opciones); return r; } public static void main(String[] args) { int respuesta1; char r=pidaYESNO("Si funciona?","Titulos ventana"); int respuesta2; String opciones[] ={"1","2","3","4","5"}; String pregunta ="1: pregunta 1 \n 2: pregunt 2 \n 3: pregunta 3 \n 4: pregunt 4 \n" + " 5: pregunta 5 "; respuesta1 = menuConOpciones("Titulo",pregunta,opciones); System.out.println("la opcion elegida fue : "+respuesta1); respuesta2 = menuDosOpciones("PRUEBA DOS OPCIONES","BLANCO","NEGRO"); System.out.println("la opcion elegida fue : "+respuesta2); //SIEMPRE LA RESPUESTA ES UN NUMERO //EN LE ULTIMO CASO ES 1=BLANCO 2=NEGRO } }

You might also like