Ayuda. Juego del periódico (Cuadro Numérico)

Iniciado por juanlulete, 3 Agosto 2012, 14:09 PM

0 Miembros y 1 Visitante están viendo este tema.

juanlulete

Hola, estoy haciendo un programa para que me resuelva el cuadro numérico del periódico.
El programa consiste en 27 textbox y un botón.
Los textbox están ordenados de arriba hacia abajo y de izquierda a derecha.



Esta es solo la formula para la primera fila pero cuando pongo los signos (en el textbox 2 y 4) y el resultado (en el textbox 6) al iniciarla no funciona y me dice: "La conversión de la cadena "" en el tipo 'Double' no es válida."
Me lo dice en la parte de negrita.

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim text1 As Integer
        Dim text3 As Integer
        Dim text5 As Integer

        Dim a As Integer
        Dim b As Integer
        Dim text2 As String = TextBox2.Text
        Dim text4 As String = TextBox4.Text
     
        For text1 = 1 To 9
            For text3 = 1 To 9
                For text5 = 1 To 9
                    If text2 = "*" Then a = text1 * text3
                    If text2 = "+" Then a = text1 + text3
                    If text2 = "-" Then a = text1 - text3
                    If text2 = "/" Then a = text1 / text3

                    If text4 = "*" Then b = a * text5
                    If text4 = "+" Then b = a + text5
                    If text4 = "-" Then b = a - text5
                    If text4 = "/" Then b = a / text5

                    If b = Val(TextBox6.Text) Then [b]TextBox1.Text = text1 And TextBox3.Text = text3 And TextBox5.Text = text5[/b]
                Next
            Next
        Next
    End Sub
End Class


¿Me podrían ayudar para que me funcione el cuadro entero y decirme como tendría que poner la fórmula?

Gracias.

Keyen Night

#1
Explícame como es el juego porque no se cuál es :-X y seguro te puedo ayudar ;)
La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...

juanlulete

Claro, el juego consiste en rellenar las casillas que están en blanco con números del 0 al 9 (incluidos los dos)
Las "x" son los sitios donde faltan los números.
n es un número que ya te dan.

x - x + x    =8
-   +    +
x+ n  / x    =2
/    -    *   
x +x+  x   =9

=   =   =
2    4    8

Keyen Night

#3
Entiendo, Pero tengo algunas preguntas, las operaciones son siempre las mismas?, osea siempre será:


x-x+x
- + +
x+n/x
 / - *  
x+x+x

Y otra, los resultados de las orillas también te los dan?
La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...

juanlulete

Las operaciones no son las mismas y los resultados de las orillas sí te los dan.

Keyen Night

#5
Ahora ya habiendo preguntado todo. Da ese error por que los valores no están, tu estas pidiendo los valores de los cuadros vacíos y eso es precisamente lo que estas buscando. Te doy un ejemplo:

Con el cuadro de 3x3 que tu me diste:

x - x + x    =8
-   +    +
x+ n  / x    =2
/    -    *  
x +x+  x   =9

=   =   =
2    4    8

Aquí hay 6 ecuaciones o formulas, como les quieras decir:

x-x+x=8
x+n/x=2
x+x+x=9
x-x/x=2
x+n-x=4
x+x*x=9


Entonces como estás haciendo debes dividir, sumar, restar o multiplicar los números del 1 al 9 con la formula que posees hasta hallar todas las posibles soluciones.

Coloquemosle nombre a las "x" que son los TextBox para confundirnos menos:

Por ejemplo:
x-x+x=8

Código (vb.net) [Seleccionar]
       Dim resultado As Integer = 8

       For x1 As Integer = 1 To 9
           For x2 As Integer = 1 To 9
               For x3 As Integer = 1 To 9
                   If x1 - x2 + x3 = resultado Then
                       MessageBox.Show(String.Format("{0}-{1}+{2}={3}", x1, x2, x3, resultado))
                   End If
               Next
           Next
       Next


Este código hallo 52 soluciones posibles.


1-1+8=8
1-2+9=8
2-1+7=8
2-2+8=8
2-3+9=8
3-1+6=8
3-2+7=8
3-3+8=8
3-4+9=8
4-1+5=8
4-2+6=8
4-3+7=8
4-4+8=8
4-5+9=8
5-1+4=8
5-2+5=8
5-3+6=8
5-4+7=8
5-5+8=8
5-6+9=8
6-1+3=8
6-2+4=8
6-3+5=8
6-4+6=8
6-5+7=8
6-6+8=8
6-7+9=8
7-1+2=8
7-2+3=8
7-3+4=8
7-4+5=8
7-5+6=8
7-6+7=8
7-7+8=8
7-8+9=8
8-1+1=8
8-2+2=8
8-3+3=8
8-4+4=8
8-5+5=8
8-6+6=8
8-7+7=8
8-8+8=8
8-9+9=8
9-2+1=8
9-3+2=8
9-4+3=8
9-5+4=8
9-6+5=8
9-7+6=8
9-8+7=8
9-9+8=8


Ahora esas son posibles soluciones para esa fila, te recomiendo almacenar esas soluciones en algún sitio, porque cuando vayas a hallar los valores en las columnas que interceptan esa fila la solución correcta solo será unas pocas si que acaso una sola de las N que existan.

Ahora solucionaremos la primera columna:

x1-x4/x7=2

Debemos probar con los números del 1-9 para las "x" que no conocemos y usar los valores que hemos almacenado para las "x" que conocemos hasta que nos de 2 que es el resultado que buscamos.

Ejemplo:

Código (vb.net) [Seleccionar]
 'Aqui almacenaremos las x1, x2 y x3 que dan solución'
       Dim _x1 As New List(Of Integer)
       Dim _x2 As New List(Of Integer)
       Dim _x3 As New List(Of Integer)

       Dim resultado_fila_1 As Integer = 8
       Dim resultado_columna_1 As Integer = 2

       For x1 As Integer = 1 To 9
           For x2 As Integer = 1 To 9
               For x3 As Integer = 1 To 9
                   If x1 - x2 + x3 = resultado_fila_1 Then
                       If Not _x1.Contains(x1) Then
                           _x1.Add(x1)
                       End If
                       If Not _x2.Contains(x2) Then
                           _x2.Add(x2)
                       End If
                       If Not _x3.Contains(x3) Then
                           _x3.Add(x3)
                       End If
                   End If
               Next
           Next
       Next

       For x4 As Integer = 1 To 9
           For x7 As Integer = 1 To 9
               For Each x1 As Integer In _x1
                   If x1 - x4 / x7 = resultado_fila_1 Then
                       MessageBox.Show(String.Format("{0}-{1}/{2}={3}", x1, x4, x7, resultado_columna_1))
                   Else
                       _x1.Remove(x1)
                   End If
               Next
           Next
       Next


Este código calcula que de las 52 soluciones solo hay 9 que satisfacen la columna 1 cuando intercepta la fila 1, este procedimiento hay que seguirlo aplicando hasta hallar la solución completa, es bastante trabajo pero al terminarlo es una obra de arte Los juegos de computadora son la máxima expresión de la lógica y la matemática aplicada :xD

Mira que si no se satisface la condición el valor es removido de _x1, vas realizando el procedimiento una y otra vez, y cuando finalices todas las filas y columnas te quedara una lista de valores x1, x2, x3, x4, x5 y x6 que guardan las combinaciones perfectas que llegan a la solución.
La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...

s00rk

Cambia esto:

If b = Val(TextBox6.Text) Then [b]TextBox1.Text = text1 And TextBox3.Text = text3 And TextBox5.Text = text5[/b]


a esto:

If b = Val(TextBox6.Text) Then
    TextBox1.Text = text1
    TextBox3.Text = text3
    TextBox5.Text = text5
End If

juanlulete

Muchas gracias Keyen Night eres un máquina y lo has explicado muy bien.