Ejercicio Resuelto Java: Enseñar a Sumar, Restar, Multiplicar y Dividir (Educación Asistida)

Las computadoras estan tomando un papel cada vez mas importante en la educacion. Escriba un programa que ayude a un estudiante de escuela primaria, para que aprenda a multiplicar. Use el metodo Math.random para producir dos enteros positivos de un digito. El progama debe mostrar entonces una pregunta en la barra de estado, como:
¿cuanto es 6 por 7?
El estudiante debe escribir entonces la respuesta en un objeto JTextField. Luego, el programa debe verificar la respuesta del estudiante, Si es correcta, dibuje la cadena "Muy bien" en el applet y haga otra pregunta de multiplicacion. Si le respuesta es incorrecta, dibuje la cadena "No. Por favor intenta de nuevo." En el applet y deje que el estudiante intente la misma pregunta varias veces, hasta que acierte la respuesta. Debera utilizar un metodo separado para generar cada pregunta nueva. Este metodo debe llamarse a la vez cuando el applet empieze a ejecutarse, y cada vez que el usuario acierte la pregunta.

Modificación 1:

Modifique el programa de manera que los diversos comentarios se impriman para cada respuesta correcta e incorrecta, de la siguiente manera:

Contestaciones para una respuesta correcta:

  1. Muy bien!
  2. Excelente!
  3. Buen Trabajo!
  4. Sigue así!

Contestaciones para una respuesta incorrecta:

  1. No. Por favor intenta de nuevo.
  2. Incorrecto. Intenta una vez mas.
  3. No te rindas!
  4. No. Sigue intentado.

Use la generación de números Aleatorios para elegir un numero entre 1 y 4 que se utilice para seleccionar una contestación apropiada a cada respuesta. Use una instruccion switch para emitir contestaciones.

Modificación 2):

Los sistemas de instruccion asistida por computadora mas sofisticados supervisan el rendimiento del estudiante durante cierto tiempo. La decision de empezar un nuevo tema se basa a menudo en el exito del estudiante con los temas anteriores. Modifique el ejercicio para contar el numero de respuestas correctas e incorrectas del estudiante. Una vez que el estudiante escriba 10 respuestas, su programa debe calcular el porcentaje de respuestas correctas. Si este es menor del 75%, imprima "Por favor pida ayuda adicional a su instructor" y reinicie el programa, para que otro estudiante pueda probarlo.

Modificación 3):

Realice las siguientes mejoras:

  1. Modifique el programa para que permita al usuario introducir el nivel de capacidad escolar. Pudiendo escoger entre ejercicios de 1 dígitos o de 2 dígitos.
  2. Modifique el programa para permitir al usuario que elija el tipo de problemas aritméticos que desea estudiar pudiendo escoger entre ejercicios de: suma, resta, multiplicación, división.




Ejercicio249.c: Ver Codigo
  1 package ejercicio249;
  2 
  3 import java.awt.Container;
  4 import javax.swing.JApplet;
  5 import javax.swing.JButton;
  6 import javax.swing.JComboBox;
  7 import javax.swing.JLabel;
  8 import javax.swing.JTextField;
  9 
 10 /**
 11  *
 12  * @author kndidox
 13  */
 14 
 15 
 16 public class Ejercicio249 extends JApplet
 17 {
 18     JLabel resEtiqueta, pregEtiqueta, obsEtiqueta;
 19     JTextField resCampo, pregCampo, obsCampo;
 20     JButton aceptarBoton, salirBoton;
 21     JComboBox dificultadCombo, operacionCombo;
 22 
 23     public void init ()
 24     {
 25         //Obtener el panel de contenido y establecer su esquema
 26         Container contenedor = getContentPane();
 27         contenedor.setLayout(null);
 28 
 29         //Crear etiquetas campos, y adjuntarlos a la GUI
 30         pregEtiqueta = new JLabel( "Cuanto es : ");
 31         pregEtiqueta.setBounds(20,20, 100, 20);
 32         contenedor.add( pregEtiqueta );
 33         pregCampo = new JTextField( 5 );
 34         pregCampo.setBounds(125,20, 100, 20);
 35         contenedor.add( pregCampo );
 36         pregCampo.setEditable( false );
 37         resEtiqueta = new JLabel( "Resultado : ");
 38         resEtiqueta.setBounds(20,45, 100, 20);
 39         contenedor.add( resEtiqueta );
 40         resCampo = new JTextField( 5 );
 41         resCampo.setBounds(125,45, 100, 20);
 42         contenedor.add( resCampo );
 43         obsEtiqueta = new JLabel( "Observacion :");
 44         obsEtiqueta.setBounds(20,70, 100, 20);
 45         contenedor.add( obsEtiqueta );
 46         obsCampo = new JTextField( 5 );
 47         obsCampo.setBounds(125,70, 215, 20);
 48         contenedor.add( obsCampo );
 49         obsCampo.setEditable( false );
 50         aceptarBoton = new JButton("Aceptar");
 51         aceptarBoton.setBounds(125,95, 90, 20);
 52         contenedor.add( aceptarBoton );
 53         String [] dificultad ={"1 digito","2 digitos"};
 54         dificultadCombo = new JComboBox( dificultad );
 55         dificultadCombo.setBounds(230,20, 100, 20);
 56         contenedor.add( dificultadCombo );
 57         String [] operacion ={"Suma","Resta","Multiplicacion","Division", 
 58             "Aleatorio"};
 59 
 60         operacionCombo = new JComboBox( operacion );
 61         operacionCombo.setBounds(230,45, 100, 20);
 62         contenedor.add( operacionCombo );
 63         //registrar este applet como ActionListener de lanzarBoton
 64         Controlador ctrEvento = new Controlador(this);
 65         aceptarBoton.addActionListener( ctrEvento );
 66         resCampo.addActionListener(ctrEvento);
 67 
 68     }//fin del metodo init()
 69 
 70     public double getResultado()
 71     {
 72         int Dnumero;
 73         String Snumero;
 74         Snumero = resCampo.getText();
 75         Dnumero = Integer.parseInt(Snumero);
 76         return Dnumero;
 77     }
 78 
 79     public String getDificultad()
 80     {
 81         String dif;
 82         dif = (String) dificultadCombo.getSelectedItem();
 83         return dif;
 84     }
 85 
 86     public String getOperacion()
 87     {
 88         String op;
 89         op = (String) operacionCombo.getSelectedItem();
 90         return op;
 91     }
 92 
 93     public void setPregunta(int n1, int n2)
 94     {
 95         String preg = "";
 96         if(getOperacion().equals("Suma"))
 97         {
 98             preg = preg + n1 + " + " + n2;
 99         }
100         if(getOperacion().equals("Resta"))
101         {
102             preg = preg + n1 + " - " + n2;
103         }
104         //
105         if(getOperacion().equals("Multiplicacion"))
106         {
107             preg = preg + n1 + " x " + n2;
108         }
109         if(getOperacion().equals("Division"))
110         {
111             preg = preg + n1 + " / " + n2;
112         }
113         
114         pregCampo.setText(preg);
115     }
116     
117     public void setPregunta(int n1, int n2, int num)
118     {
119         String preg = "";
120 
121         switch ( num )
122         {
123             case 1:
124                 preg = preg + n1 + " + " + n2;
125                 break;
126             case 2:
127                 preg = preg + n1 + " - " + n2;
128                 break;
129             case 3:
130                 preg = preg + n1 + " x " + n2;
131                 break;
132             default:
133                  preg = preg + n1 + " / " + n2;
134         }
135         pregCampo.setText(preg);
136     }
137     public void setObservacion(String cad)
138     {
139         obsCampo.setText(cad);
140     }
141 
142 } //Fin de la clase Ejercicio249
143 




Controlador.java: Ver Codigo
  1 package ejercicio249;
  2 
  3 import java.awt.event.ActionEvent;
  4 import java.awt.event.ActionListener;
  5 import javax.swing.JOptionPane;
  6 
  7 /**
  8  *
  9  * @author kndidox
 10  */
 11 public class Controlador implements ActionListener
 12 {
 13     public boolean nuevaPregunta = true, primerIntento = true;
 14     public Ejercicio249 auxiliar;
 15     double resultado = 0;
 16     int contador = 0, contAciertos = 0;
 17 
 18     public Controlador(Ejercicio249 g){
 19         auxiliar=g;
 20     }
 21 
 22     public void actionPerformed(ActionEvent actionEvent)
 23     {
 24         int num1, num2;
 25         
 26         if(nuevaPregunta)
 27         {
 28             num1 = obtenerNumero();
 29             num2 = obtenerNumero();
 30             resultado = calculaResultado(num1, num2);
 31             if (!auxiliar.getOperacion().equals("Aleatorio"))
 32                 auxiliar.setPregunta(num1, num2);
 33             nuevaPregunta = false;
 34             if(contador == 10)
 35             {
 36                 float porcentaje = 0;
 37                 porcentaje = (contAciertos * 100)/ contador;
 38                 if(porcentaje <= 75 || contAciertos == 0){
 39                     JOptionPane.showMessageDialog(null, "Por favor pida ayuda "
 40                             + "adicional a su instructor");
 41                 }
 42                  else
 43                  {
 44                     JOptionPane.showMessageDialog(null, "Lo haces muy bien, "
 45                             + "sigue practicando!!!");
 46                  }
 47                 contador = 1;
 48                 contAciertos = 0;
 49             }
 50             else{
 51                 contador++;
 52             }
 53             System.out.println(contador);
 54         }//fin if(nuevaPregunta)
 55         else
 56         {
 57             if(primerIntento)
 58             {
 59                 if(auxiliar.getResultado() == resultado)
 60                 {
 61                     contAciertos++;
 62                     this.comCorrecto();
 63                     System.out.println("Acierto!" + contAciertos);
 64                     nuevaPregunta = true;
 65                 }
 66                 else
 67                 {
 68                     primerIntento = false;
 69                     this.comErroneo();
 70                 }
 71 
 72             }//fin if(primerIntento)
 73             else
 74             {
 75                 if(auxiliar.getResultado() == resultado)
 76                 {
 77                     this.comCorrecto();
 78                     primerIntento = true;
 79                     nuevaPregunta = true;
 80                 }
 81                 else
 82                 {
 83                     this.comErroneo();
 84                 }
 85             }
 86 
 87         }
 88 
 89     }//fin metodo actionPerformed
 90 
 91     public int obtenerNumero()
 92     {
 93         int num = 0;
 94         if(auxiliar.getDificultad().equals("1 digito"))
 95             num = 1 + (int) ( Math.random() * 9);
 96         else if(auxiliar.getDificultad().equals("2 digitos"))
 97             num = 1 + (int) ( Math.random() * 99);
 98         return num;
 99     }
100 
101     public double calculaResultado(int n1, int n2)
102     {
103         double res = 0;
104 
105         if (auxiliar.getOperacion().equals("Aleatorio"))
106         {
107             int num = 1 + (int) ( Math.random() * 4);
108             switch ( num )
109             {
110                 case 1:
111                     res = n1 + n2;
112                     break;
113                 case 2:
114                     res = n1 - n2;
115                     break;
116                 case 3:
117                     res = n1 * n2;
118                     break;
119                 default:
120                     res = n1 / n2;
121             }//fin switch
122             auxiliar.setPregunta(n1, n2, num);
123         }
124         else if(auxiliar.getOperacion().equals("Suma"))
125         {
126             res = n1 + n2;
127         }
128         else if(auxiliar.getOperacion().equals("Resta"))
129         {
130             res = n1 - n2;
131         }
132         else if(auxiliar.getOperacion().equals("Multiplicacion"))
133         {
134             res = n1 * n2;
135         }
136         else if(auxiliar.getOperacion().equals("Division"))
137         {
138             res = n1/n2;
139         }
140         return res;
141     }
142 
143     public void comCorrecto()
144     {
145         int num;
146         num = 1 + (int) ( Math.random() * 4);
147         switch ( num )
148         {
149             case 1:
150                 auxiliar.setObservacion("Muy bien!");
151                 break;
152             case 2:
153                 auxiliar.setObservacion("Excelente!");
154                 break;
155             case 3:
156                 auxiliar.setObservacion("Buen Trabajo!");
157                 break;
158             default:
159                 auxiliar.setObservacion("Sigue Asi!");
160         }
161 
162     }
163 
164     public void comErroneo()
165     {
166         int num = 0;
167         num = 1 + (int) ( Math.random() * 4);
168 
169         switch ( num )
170         {
171             case 1:
172                 auxiliar.setObservacion("No. Por favor intenta de nuevo!");
173                 break;
174             case 2:
175                 auxiliar.setObservacion("Incorrecto. Intenta una vez mas!");
176                 break;
177             case 3:
178                 auxiliar.setObservacion("No te rindas!");
179                 break;
180             default:
181                 auxiliar.setObservacion("No. sigue intentando!");
182         }
183 
184     }
185 
186 }//fin clase Controlador
187 
188 


Descargas:

Ejercicios Relacionados:

4 comentarios:

  1. El siguiente código es en C:

    #include
    #include
    #include
    /*funciones que saca los numeros aleatorios*/
    int random1();
    int random2();
    /*ennumeracion del juego, que indicara si avanza o no a la siguiente pregunta*/
    enum estado{MAL, BIEN};

    int main()
    {
    /* variable preguntas, indica el número de la pregunta*/
    int preguntas;
    /*variable repuestareal, es la respuesta correcta*/
    int respuestareal;
    /*variable respuesta. es la que introduce el usuario*/
    int respuesta;
    /*llamado de funciones*/
    int x=random1();
    int y=random2();
    /*ennumeracion es llamda exame*/
    enum estado examen;
    srand(time(NULL));

    for(preguntas=1;preguntas<=10;preguntas++){
    x = random1();
    y = random2();
    respuestareal=x*y;

    printf("%d.- Cuanto es %d * %d \n", preguntas, x, y);
    scanf("%d", &respuesta);

    if(respuesta==respuestareal){
    printf("Muy bien!!\n\n");
    examen=BIEN;
    }
    else{
    printf("Esta mal, repite\n\n");
    examen=MAL;
    while(examen==MAL){
    printf("%d.- Cuanto es %d * %d \n", preguntas, x, y);
    scanf("%d", &respuesta);

    if(respuesta==respuestareal){
    printf("Muy bien!!\n\n");
    examen=BIEN;
    }
    else{
    printf("Esta mal, repite\n\n");
    examen=MAL;
    }
    }
    }
    }
    return 0;
    }


    int random1()
    {
    int dom1;
    dom1=1+(rand()%10);
    return dom1;
    }

    int random2 ()
    {
    int dom2;
    dom2=1+(rand()%10);
    return dom2;
    }


    ResponderEliminar
  2. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  3. Los include, no aparecen, no sé por qué. Pero son
    stdio.h
    stdlib.h
    time.h

    ResponderEliminar
  4. Aquí el ejercicio en c, con la suma, resta, etc. Los mensajes. Saludos, disculpa si está muy largo, pero soy nuevo en ello
    https://plus.google.com/115672506428322456941/posts/9GRpPy3nVkq

    ResponderEliminar