Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: juanlulete en 3 Agosto 2012, 14:09 pm



Título: Ayuda. Juego del periódico (Cuadro Numérico)
Publicado por: juanlulete en 3 Agosto 2012, 14:09 pm
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.

(https://lh5.googleusercontent.com/-rnNVBOsESSs/UBu8172aVdI/AAAAAAAAB7k/gJ--9sP7IfI/s128/caudro%20num.PNG)

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.

Código:
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.


Título: Re: Ayuda. Juego del periódico (Cuadro Numérico)
Publicado por: Keyen Night en 3 Agosto 2012, 16:15 pm
Explícame como es el juego porque no se cuál es :-X y seguro te puedo ayudar ;)


Título: Re: Ayuda. Juego del periódico (Cuadro Numérico)
Publicado por: juanlulete en 3 Agosto 2012, 17:02 pm
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


Título: Re: Ayuda. Juego del periódico (Cuadro Numérico)
Publicado por: Keyen Night en 3 Agosto 2012, 21:10 pm
Entiendo, Pero tengo algunas preguntas, las operaciones son siempre las mismas?, osea siempre será:

Código:
x-x+x
- + +
x+n/x
  / - *  
x+x+x

Y otra, los resultados de las orillas también te los dan?


Título: Re: Ayuda. Juego del periódico (Cuadro Numérico)
Publicado por: juanlulete en 3 Agosto 2012, 23:05 pm
Las operaciones no son las mismas y los resultados de las orillas sí te los dan.


Título: Re: Ayuda. Juego del periódico (Cuadro Numérico)
Publicado por: Keyen Night en 4 Agosto 2012, 00:59 am
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:

Código:
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:
Código:
x-x+x=8

Código
  1.        Dim resultado As Integer = 8
  2.  
  3.        For x1 As Integer = 1 To 9
  4.            For x2 As Integer = 1 To 9
  5.                For x3 As Integer = 1 To 9
  6.                    If x1 - x2 + x3 = resultado Then
  7.                        MessageBox.Show(String.Format("{0}-{1}+{2}={3}", x1, x2, x3, resultado))
  8.                    End If
  9.                Next
  10.            Next
  11.        Next

Este código hallo 52 soluciones posibles.

Código:
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:

Código:
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
  1.  'Aqui almacenaremos las x1, x2 y x3 que dan solución'
  2.        Dim _x1 As New List(Of Integer)
  3.        Dim _x2 As New List(Of Integer)
  4.        Dim _x3 As New List(Of Integer)
  5.  
  6.        Dim resultado_fila_1 As Integer = 8
  7.        Dim resultado_columna_1 As Integer = 2
  8.  
  9.        For x1 As Integer = 1 To 9
  10.            For x2 As Integer = 1 To 9
  11.                For x3 As Integer = 1 To 9
  12.                    If x1 - x2 + x3 = resultado_fila_1 Then
  13.                        If Not _x1.Contains(x1) Then
  14.                            _x1.Add(x1)
  15.                        End If
  16.                        If Not _x2.Contains(x2) Then
  17.                            _x2.Add(x2)
  18.                        End If
  19.                        If Not _x3.Contains(x3) Then
  20.                            _x3.Add(x3)
  21.                        End If
  22.                    End If
  23.                Next
  24.            Next
  25.        Next
  26.  
  27.        For x4 As Integer = 1 To 9
  28.            For x7 As Integer = 1 To 9
  29.                For Each x1 As Integer In _x1
  30.                    If x1 - x4 / x7 = resultado_fila_1 Then
  31.                        MessageBox.Show(String.Format("{0}-{1}/{2}={3}", x1, x4, x7, resultado_columna_1))
  32.                    Else
  33.                        _x1.Remove(x1)
  34.                    End If
  35.                Next
  36.            Next
  37.        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.


Título: Re: Ayuda. Juego del periódico (Cuadro Numérico)
Publicado por: s00rk en 4 Agosto 2012, 01:48 am
Cambia esto:
Código:
If b = Val(TextBox6.Text) Then [b]TextBox1.Text = text1 And TextBox3.Text = text3 And TextBox5.Text = text5[/b]

a esto:
Código:
If b = Val(TextBox6.Text) Then 
    TextBox1.Text = text1
    TextBox3.Text = text3
    TextBox5.Text = text5
End If


Título: Re: Ayuda. Juego del periódico (Cuadro Numérico)
Publicado por: juanlulete en 4 Agosto 2012, 11:57 am
Muchas gracias Keyen Night eres un máquina y lo has explicado muy bien.