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.
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.
Explícame como es el juego porque no se cuál es :-X y seguro te puedo ayudar ;)
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
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?
Las operaciones no son las mismas y los resultados de las orillas sí te los dan.
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
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:
'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.
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
Muchas gracias Keyen Night eres un máquina y lo has explicado muy bien.