El programa ayuda a practicar operaciones aritméticas. |
6.35 En los ejercicios 6.30
al 6.32 se desarrolló un programa de instrucción asistida por computadora para enseñar a un estudiante de escuela primaria cómo multiplicar. Realice las siguientes mejoras:
a) Modifique el programa para que permita al usuario introducir un nivel de capacidad escolar. Un nivel de 1 significa que el programa debe usar sólo números de un dígito en los problemas, un nivel 2 significa que el programa debe utilizar dos dígitos máximo, etcétera.
b) Modifique el programa para permitir al usuario que elija el tipo de problemas aritméticos que desea estudiar. Una opción de 1 significa problemas de suma solamente, 2 significa un problema de resta, 3 significa problemas de multiplicación, 4 significa problemas de división y 5 significa una mezcla aleatoria de problemas de todos estos tipos.
_____________________________________________________________________________________
Solución:
El siguiente código debe guardarse con el nombre UsaDeitel_6_35.java
public class UsaDeitel_6_35 { // Abre clase publica UsaDeitel_6_35 public static void main(String args[]) { // Abre main Deitel_6_35 miObjeto = new Deitel_6_35(); miObjeto.Especificar(); } // Cierra main } // Cierra clase publica UsaDeitel_6_35
Éste programa debe guardarse con el nombre Deitel_6_35.java
import java.util.Random; import java.util.Scanner; enum Estado {SI, NO}; // Las variables de enumeracion llevan el control de si // el estudiante quiere o no realiza mas ejercicios public class Deitel_6_35 { // Abre clase Deitel_6_35 Scanner entrada = new Scanner(System.in); private int x = 6; // la variable x recibira el numero de cifras // las posibilidades van de 1 a 5. Se inicializa en 6 para // entrar al while que aparece para recibirla private int y = 6; // La variable y recibira el tipo de operacion /*Los posibles valores van del 1 al 5, y se inicializa en 6 para entrar en el while en el que se recibe el valor de esta variable */ private Random Aleatorios = new Random(); private int numero1; //Estos dos numeros son las variables que se sumaran private int numero2; // restaran, etc. private int intentos = 0; private int aciertos = 0; /////////////////////////////////////////// // METODO ESPECIFICAR /////////////////////////////////////////// /*En este metodo se pregunta al alumno si quiere jugar o seguir jugando, el numero de cifras que tendran las cantidades con las que trabajara ( 1, 1 cifra; 2, 2 cifras; 3, 3cifras; etc, hasta 5) y el tipo de operacion aritmetica que se realizara (1, suma; 2, resta; 3, multiplicacion; 4, division; 5, mezcla aleatoria de todas las anteriores) El metodo Especificar no recibe parametros, desde aqui se invoca Generar_Ejercicios */ public void Especificar() { // Abre metodo Especificar int i; // variable auxiliar Estado continuar = Estado.SI; // La variable tipo Estado se declara como continuar, // en el entendido de que si el alumno corre el programa // es porque quiere practicar por lo menos una vez System.out.println("\nBienvenido! Este programa te ayudara a realizar ejercicios"); System.out.print(" de aritmetica de acuerdo a tu nivel escolar.\n"); while (Estado.SI == continuar) // Este while se ejecuta mientras el alumno quiera seguir practicando { // Abre while x = 6; y = 6; while( 5 < x || 1 > x ) { System.out.print("\nPor favor introduce el numero de cifras para los numeros(1 a 5): "); x = entrada.nextInt(); } while( 5 < y || 1 > y ) { System.out.print("\nPor favor introduce un numero (1 a 5) "); System.out.print(" para elegir la operacion: 1 suma, 2 resta, 3 multiplicacion"); System.out.print(" 4 suma y 5 una combinacion aleatoria de las anteriores.\n"); y = entrada.nextInt(); } /*Despues de haber establecido los valores de x & y se invoca el metodo generar_Ejercicios */ Generar_Ejercicios(); System.out.println("\nQuiere seguir jugando? (1 para Si, otro numero para No)"); i = entrada.nextInt(); if ( 1 == i) continuar = Estado.SI; else continuar = Estado.NO; } // Cierra while System.out.printf("\nEn esta sesión hizo %d intentos,", intentos); System.out.printf(" de los cuales %d fueron correctos\n", aciertos); System.out.printf("\nSu porcentaje de efectividad es: %f\n", (double) aciertos/intentos); System.out.printf("\nRegrese pronto!\n"); } // Cierra metodo Especificar ////////////////////////////////////////////////// // METODO GENERAR_EJERCICIOS ////////////////////////////////////////////////// /* Este metodo utiliza los dos parametros recibidos en el metodo Especificacion para generar el adecuado ejercicio. Para esto invoca a los metodos Suma, Resta, Multiplicacion y Division */ public void Generar_Ejercicios() { // Abre metodo Generar_Ejercicios int dado; switch (y) { // Abre switch case 1: Suma(); break; case 2: Resta(); break; case 3: Multiplicacion(); break; case 4: Division(); break; case 5: dado = 1 + Aleatorios.nextInt(4); switch (dado) { // Abre switch anidado case 1: Suma(); break; case 2: Resta(); break; case 3: Multiplicacion(); break; case 4: Division(); break; default: System.out.println("\nRevise este metodo!"); break; } // Cierra switch anidado break; default: System.out.println("\nRevise este metodo!"); break; } // Cierra switch } // Cierra metodo Generar_Ejercicios //////////////////////////////////////////////////// // SUMA //////////////////////////////////////////////////// public void Suma() { // Abre metodo Suma int auxiliars = 0; int suma = -1; numero1 = (int)Math.pow(10,x - 1) + Aleatorios.nextInt((int)Math.pow(10, x) - (int)Math.pow(10, x -1)); numero2 = (int)Math.pow(10,x - 1) + Aleatorios.nextInt((int)Math.pow(10, x) - (int)Math.pow(10, x -1)); do { // Abre do if (0 != auxiliars) Anima(); intentos++; System.out.printf("\nCuanto es %d + %d?\n", numero1, numero2); suma = entrada.nextInt(); auxiliars++; } while (( numero1 + numero2 != suma ) && (10 > auxiliars)); if ( numero1 + numero2 == suma) { Felicita(); aciertos++; } else System.out.println("\nDeberias pedir ayuda a tu profesor con este tipo de problemas."); } // Cierra metodo Suma //////////////////////////////////////////////////// // RESTA //////////////////////////////////////////////////// public void Resta() { // Abre metodo Resta int auxiliarr = 0; int resta; numero1 = (int)Math.pow(10,x - 1) + Aleatorios.nextInt((int)Math.pow(10, x) - (int)Math.pow(10, x -1)); numero2 = (int)Math.pow(10,x - 1) + Aleatorios.nextInt((int)Math.pow(10, x) - (int)Math.pow(10, x -1)); do { // Abre while if (0 != auxiliarr) Anima(); intentos++; System.out.printf("\nCuanto es %d - %d?\n", numero1, numero2); resta = entrada.nextInt(); auxiliarr++; }while (( numero1 - numero2 != resta) && (10 > auxiliarr)); if ( numero1 - numero2 == resta) { Felicita(); aciertos++; } else System.out.println("\nDeberias pedir ayuda a tu profesor con este tipo de problemas."); } // Cierra metodo Resta //////////////////////////////////////////////////// // MULTIPLICACION ///////////////////////////////////////////////////// public void Multiplicacion() { // Abre metodo Multiplicacion int auxiliarm = 0; int multiplicacion; numero1 = (int)Math.pow(10,x - 1) + Aleatorios.nextInt((int)Math.pow(10, x) - (int)Math.pow(10, x -1)); numero2 = (int)Math.pow(10,x - 1) + Aleatorios.nextInt((int)Math.pow(10, x) - (int)Math.pow(10, x -1)); do { // Abre while if ( 0 != auxiliarm) Anima(); intentos++; System.out.printf("\nCuanto es %d * %d?\n", numero1, numero2); multiplicacion = entrada.nextInt(); auxiliarm++; }while( ( numero1 * numero2 != multiplicacion) && (10 > auxiliarm) ); if (numero1 * numero2 == multiplicacion) { Felicita(); aciertos++; } else System.out.println("\nDeberias pedir ayuda a tu profesor con este tipo de problemas."); } // Cierra metodo multiplicacion ///////////////////////////////////////////////////// // DIVISION ///////////////////////////////////////////////////// public void Division() { // Abre metodo Division int division; int auxiliard = 0; numero1 = (int)Math.pow(10,x - 1) + Aleatorios.nextInt((int)Math.pow(10, x) - (int)Math.pow(10, x -1)); numero2 = (int)Math.pow(10,x - 1) + Aleatorios.nextInt((int)Math.pow(10, x) - (int)Math.pow(10, x -1)); do { // Abre while if ( 0 != auxiliard) Anima(); intentos++; System.out.printf("\nCuanto es %d / %d? (introduzca solo la parte entera) \n", numero1, numero2); division = entrada.nextInt(); auxiliard++; }while (( numero1 / numero2 != division) && (10 > auxiliard)); if (numero1/numero2 == division) { Felicita(); aciertos++; } else System.out.println("\nDeberias pedir ayuda a tu profesor con este tipo de problemas."); } // Cierra metodo Division /*Este metodo felicita al usuario cuando da una respuesta correcta*/ /////////////////////////////////////////////// // Metodo Felicita /////////////////////////////////////////////// void Felicita() { // Abre metodo Felicita int auxiliar; auxiliar = 1 + Aleatorios.nextInt(4); switch (auxiliar) { // Abre switch case 1: System.out.println("\nMuy bien!"); break; case 2: System.out.println("\nExcelente!"); break; case 3: System.out.println("\nBuen trabajo!"); break; case 4: System.out.println("\nSigue asi!"); break; default: System.out.println("\nRevise el Metodo Felicita!"); break; } // Cierra switch } // Cierra metodo Felicita /*El siguiente metodo sirve para "animar" al estudiante cada vez que cometa un error*/ /////////////////////////////////////////////////// // Metod Anima /////////////////////////////////////////////////// public void Anima() { // Abre Anima int auxiliar; auxiliar = 1 + Aleatorios.nextInt(4); switch (auxiliar) { // Abre switch case 1: System.out.println("\nNo. Por favor intenta de nuevo!"); break; case 2: System.out.println("\nIncorrecto. Intenta una vez mas!"); break; case 3: System.out.println("\nNo te rindas!"); break; case 4: System.out.println("\nNo. Sigue intentando!"); break; default: System.out.println("\nRevise el Metodo Anima!"); break; } } // Cierra Anima } // Cierra clase Deitel_6_35
Aquí la solución en c!!, saludos. Disculpa que sea largo, pero soy nuevo en ello
ResponderEliminarhttps://plus.google.com/115672506428322456941/posts/9GRpPy3nVkq
Eliminar