[JAVA] Control: Nº2 Sección 3

Les dejo las dos formas de controles (A y B) que hicimos el jueves pasado.

Como yo soy parte de la Sección 3, no les podría decir a las demás personas de otras secciones que visitan el blog si la prueba fue la misma. De todas formas les dejo las dos formas que hicimos como sección para que las descarguen:

[ Control Nº Sección 3 (forma A y B) ]

Forma A

Clase plano


class Control2{

private int numero;

Control2(){

numero=(int)(Math.random()*(99+1-1)+1); // Entre 2 y 1 digitos

}

int potencia(int exponente){

int i=0, resultado=1;

while(i < exponente){ // Mientras 'i' sea menor que 'numero'

resultado=resultado*numero; // Almacenamos 'resultado'*'numero'
i++; // Aumentamos el contador

}

return resultado; // Devolvemos 'resultado'

}

int factorial(){

/*
* Lo que se hace en este metdodo es recorrer el numero pero
* desde el mismo hasta 0. Osea, si fuese 5: 5->4->3->2->1
* De esa forma vamos multiplicando y sacamos el factorial.
*
* Una traza con el numero 3:
* | i | numero | factorial |
* -------------------------
* | 3 | 3 | 1 | Valores iniciales
* | 3 | 3 | 3 |
* | 2 | 3 | 6 |
* | 1 | 3 | 6 | Factorial: 6
* -------------------------
*/

int i=numero, factorial=1;

while(i > 0){ // Mientras 'i' exista

factorial=factorial*i;
i--; // Restamos -1 a 'i'

}

return factorial;

}

boolean perfecto(){

int i=1, suma_divisores=0;

while(i < numero){ // Recorremos el numero, no incluyendolo a si mismo

if(numero%i == 0){ // Si 'i' es divisor

suma_divisores=suma_divisores+i; // Lo sumamos a la suma de divisores

}

i++;

}

if(suma_divisores == numero){ // Si la suma de divisores es igual al numero

return true; // Es perfecto

} else {

return false; // No es perfecto

}

}

}


App

class AppControl2{

public static void main(String[]arg){

int op=1, op2=1, numero;

while(op != 0){

Control2 uno = new Control2();

while(op2 != 0){

System.out.println("");
System.out.println("[1] Numero generado");
System.out.println("[2] Potencia");
System.out.println("[3] Factorial");
System.out.println("[4] Perfecto");
System.out.println("");
System.out.println("[0] Salir");
op2=Leer.datoInt();
System.out.println("");

switch(op2){

case 1:
System.out.println("Ingrese exponente: ");
numero=Leer.datoInt();
System.out.println("");
System.out.println("Potencia: "+uno.potencia(numero));
break;

case 3:
System.out.println("Factorial: "+uno.factorial());
break;

case 4:
if(uno.perfecto()){

System.out.println("El numero SI es PERFECTO");

} else {

System.out.println("El numero NO es PERFECTO");

}
break;

case 0: // Si coloca SALIR no se hace nada, pero si se corta este while
break;

default: System.out.println("Opcion invalida. Intenta nuevamente.");

}

}

/*
* Al salir del menu, se pregunta si se desea genera otro numero
* con las opciones SI(1) y NO(2). Esa opcion es verificada en un
* switch que solo permite esas dos opcions. En el caso de que fuese
* SI 'op2' toma el valor de 1 para que entre nuevamente al segundo
* while. En el caso de que fuese NO, 'op' toma el valor de 0, y
* de este modo corta el while principal saliendo del programa.
*/

System.out.println("");
System.out.println("¿Desea generar otro numero? [1] SI | [2] NO");
op=Leer.datoInt();

switch(op){

case 1:
op2=1;
break;

case 2:
op=0;
break;

default: System.out.println("Opcion invalida. Intenta nuevamente.");

}

}

System.out.println("Adios :)!");

}

}


Forma B

Clase plano

class Control2{

private int numero;

Control2(){

numero=(int)(Math.random()*(99999+1-100)+100); // Entre 5 y 3 digitos

}

/*
* En esta ocacion no hay muco que explicar. Todos los metodos
* vistos aqui para resolver una problematica (en este caso sacar
* divisores) han sido resueltos en ejercicios anteriores. Asi que
* me limitare a explicar lo justo y necesario.
*/

boolean numeroDeficiente(){

int i=1, suma_divisores=0;

while(i < numero){ // Recorremos el numero, no incluyendolo a si mismo

if(numero%i == 0){ // Si 'i' es divisor

suma_divisores=suma_divisores+i; // Lo sumamos a la suma de divisores

}

i++;

}

if(suma_divisores < numero){ // Si la suma de divisores es menor que el numero

return true; // Es deficiente

} else {

return false; // No es deficiente

}

}

int sumaDivisibles(int divisor){

/*
* En este caso hay que usar una copia del numero porque lo tenemos
* que ir dividiendo por 10 para ir avanzando de digito y de este
* modo no modificar el numero original del objeto.
*
*/

int copia=numero, digito=0, suma_divisibles=0;

while(copia > 0){ // Mientras 'copia' exista (mayor que 0)

digito=copia%10; // Obtenemos el ultimo digito de 'copia'

/*
* Si el 'digito' extraido de 'copia' es divisible por 'divisor'
* que en este caso un valor que es enviado por el usuario, sumamos
* el digito con los demas.
*/

if(digito%divisor == 0){

suma_divisibles=suma_divisibles+digito; // Sumamos 'digitos' con la suma anterior

}

copia=copia/10; // Desechamos el digito usado y avanzamos de cifra

}

return suma_divisibles;

}

boolean perfecto(){

int i=1, suma_divisores=0;

while(i < numero){ // Recorremos el numero, no incluyendolo a si mismo

if(numero%i == 0){ // Si 'i' es divisor

suma_divisores=suma_divisores+i; // Lo sumamos a la suma de divisores

}

i++;

}

if(suma_divisores == numero){ // Si la suma de divisores es igual al numero

return true; // Es perfecto

} else {

return false; // No es perfecto

}

}

}


App

class AppControl2{

public static void main(String[]arg){

int op=1, op2=1, numero;

while(op != 0){

Control2 uno = new Control2();

while(op2 != 0){

System.out.println("");
System.out.println("[1] Numero generado");
System.out.println("[2] Deficiente");
System.out.println("[3] Divisibles");
System.out.println("[4] Perfecto");
System.out.println("");
System.out.println("[0] Salir");
op2=Leer.datoInt();
System.out.println("");

switch(op2){

case 1:
System.out.println("El numero es: "+uno.getNumero());
break;

case 2:
if(uno.numeroDeficiente()){

System.out.println("El numero SI es DEFICIENTE");

} else {

System.out.println("El numero NO es DEFICIENTE");

}
break;

case 3:
System.out.println("Ingrese numero: ");
numero=Leer.datoInt();
System.out.println("");
System.out.println("Suma digitos divisibles por "+numero+": "+uno.sumaDivisibles(numero));
break;

case 4:
if(uno.perfecto()){

System.out.println("El numero SI es PERFECTO");

} else {

System.out.println("El numero NO es PERFECTO");

}
break;

case 0: // Si coloca SALIR no se hace nada, pero si se corta este while
break;

default: System.out.println("Opcion invalida. Intenta nuevamente.");

}

}

/*
* Al salir del menu, se pregunta si se desea genera otro numero
* con las opciones SI(1) y NO(2). Esa opcion es verificada en un
* switch que solo permite esas dos opcions. En el caso de que fuese
* SI 'op2' toma el valor de 1 para que entre nuevamente al segundo
* while. En el caso de que fuese NO, 'op' toma el valor de 0, y
* de este modo corta el while principal saliendo del programa.
*/

System.out.println("");
System.out.println("¿Desea generar otro numero? [1] SI | [2] NO");
op=Leer.datoInt();

switch(op){

case 1:
op2=1;
break;

case 2:
op=0;
break;

default: System.out.println("Opcion invalida. Intenta nuevamente.");

}

}

System.out.println("Adios :)!");

}

}

Etiquetas Etiquetas: , , |

0 comentarios: