Bueno como primero este es un codigo que elabore en clase de un cuadro magico de 1 a 9. 3x3
Como puedo pasarlo a ciclo for ?
gracias :D
Public Class Form1
Dim a(2, 2) As Integer
Dim sum1, sum2, sum3, sum4, sum5, sum6, sum7, sum8 As Integer
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
a(0, 0) = TextBox1.Text
a(0, 1) = TextBox2.Text
a(0, 2) = TextBox3.Text
a(1, 0) = TextBox4.Text
a(1, 1) = TextBox5.Text
a(1, 2) = TextBox6.Text
a(2, 0) = TextBox7.Text
a(2, 1) = TextBox8.Text
a(2, 2) = TextBox9.Text
sum1 = a(0, 0) + a(0, 1) + a(0, 2)
sum2 = a(1, 0) + a(1, 1) + a(1, 2)
sum3 = a(2, 0) + a(2, 1) + a(2, 2)
sum4 = a(0, 0) + a(1, 0) + a(2, 0)
sum5 = a(0, 1) + a(1, 1) + a(2, 1)
sum6 = a(0, 2) + a(1, 2) + a(2, 2)
sum7 = a(0, 0) + a(1, 1) + a(2, 2)
sum8 = a(0, 2) + a(1, 1) + a(2, 0)
If sum1 = 15 And sum2 = 15 And sum3 = 15 And sum4 = 15 And sum5 = 15 And sum6 = 15 And sum7 = 15 And sum8 = 15 Then
If a(0, 0) <> a(0, 1) Or a(0, 0) <> a(0, 2) Or a(0, 0) <> a(1, 0) Or a(0, 0) <> a(1, 1) Or a(0, 0) <> a(1, 2) Or a(0, 0) <> a(2, 0) Or a(0, 0) <> a(2, 1) Or a(0, 0) <> a(2, 2) Then
If a(0, 1) <> a(0, 0) Or a(0, 1) <> a(0, 2) Or a(0, 1) <> a(1, 0) Or a(0, 1) <> a(1, 1) Or a(0, 1) <> a(1, 2) Or a(0, 1) <> a(2, 0) Or a(0, 1) <> a(2, 1) Or a(0, 1) <> a(2, 2) Then
If a(0, 2) <> a(0, 0) Or a(0, 1) <> a(0, 2) Or a(0, 2) <> a(1, 0) Or a(0, 2) <> a(1, 1) Or a(0, 2) <> a(1, 2) Or a(0, 2) <> a(2, 0) Or a(0, 2) <> a(2, 1) Or a(0, 2) <> a(2, 2) Then
If a(1, 0) <> a(0, 0) Or a(0, 1) <> a(1, 0) Or a(0, 2) <> a(1, 0) Or a(1, 0) <> a(1, 1) Or a(1, 0) <> a(1, 2) Or a(1, 0) <> a(2, 0) Or a(1, 0) <> a(2, 1) Or a(1, 0) <> a(2, 2) Then
If a(1, 1) <> a(0, 0) Or a(0, 1) <> a(1, 1) Or a(0, 2) <> a(1, 1) Or a(1, 0) <> a(1, 1) Or a(1, 1) <> a(1, 2) Or a(1, 1) <> a(2, 0) Or a(1, 1) <> a(2, 1) Or a(1, 1) <> a(2, 2) Then
If a(1, 2) <> a(0, 0) Or a(0, 1) <> a(1, 2) Or a(0, 2) <> a(1, 2) Or a(1, 0) <> a(1, 2) Or a(1, 1) <> a(1, 2) Or a(1, 2) <> a(2, 0) Or a(1, 2) <> a(2, 1) Or a(1, 2) <> a(2, 2) Then
If a(2, 0) <> a(0, 0) Or a(0, 1) <> a(2, 0) Or a(0, 2) <> a(2, 0) Or a(1, 0) <> a(2, 0) Or a(1, 1) <> a(2, 0) Or a(1, 2) <> a(2, 0) Or a(2, 0) <> a(2, 1) Or a(2, 0) <> a(2, 2) Then
If a(2, 1) <> a(0, 0) Or a(0, 1) <> a(2, 1) Or a(0, 2) <> a(2, 1) Or a(1, 0) <> a(2, 1) Or a(1, 1) <> a(2, 1) Or a(1, 2) <> a(2, 1) Or a(2, 0) <> a(2, 1) Or a(2, 1) <> a(2, 2) Then
If a(2, 2) <> a(0, 0) Or a(0, 1) <> a(2, 2) Or a(0, 2) <> a(2, 2) Or a(1, 0) <> a(2, 2) Or a(1, 1) <> a(2, 2) Or a(1, 2) <> a(2, 2) Or a(2, 0) <> a(2, 2) Or a(2, 1) <> a(2, 2) Then
MsgBox("es un cuadro mágico")
End If
Else
MsgBox("no es un cuadro mágico hay numeros repetidos")
End If
Else
MsgBox("no es un cuadro mágico hay numeros repetidos")
End If
Else
MsgBox("no es un cuadro mágico hay numeros repetidos")
End If
Else
MsgBox("no es un cuadro mágico hay numeros repetidos")
End If
Else
MsgBox("no es un cuadro mágico hay numeros repetidos")
End If
Else
MsgBox("no es un cuadro mágico hay numeros repetidos")
End If
Else
MsgBox("no es un cuadro mágico hay numeros repetidos")
End If
Else
MsgBox("no es un cuadro mágico hay numeros repetidos")
End If
Else
If a(0, 0) <> a(0, 1) Or a(0, 0) <> a(0, 2) Or a(0, 0) <> a(1, 0) Or a(0, 0) <> a(1, 1) Or a(0, 0) <> a(1, 2) Or a(0, 0) <> a(2, 0) Or a(0, 0) <> a(2, 1) Or a(0, 0) <> a(2, 2) Then
If a(0, 1) <> a(0, 0) Or a(0, 1) <> a(0, 2) Or a(0, 1) <> a(1, 0) Or a(0, 1) <> a(1, 1) Or a(0, 1) <> a(1, 2) Or a(0, 1) <> a(2, 0) Or a(0, 1) <> a(2, 1) Or a(0, 1) <> a(2, 2) Then
If a(0, 2) <> a(0, 0) Or a(0, 1) <> a(0, 2) Or a(0, 2) <> a(1, 0) Or a(0, 2) <> a(1, 1) Or a(0, 2) <> a(1, 2) Or a(0, 2) <> a(2, 0) Or a(0, 2) <> a(2, 1) Or a(0, 2) <> a(2, 2) Then
If a(1, 0) <> a(0, 0) Or a(0, 1) <> a(1, 0) Or a(0, 2) <> a(1, 0) Or a(1, 0) <> a(1, 1) Or a(1, 0) <> a(1, 2) Or a(1, 0) <> a(2, 0) Or a(1, 0) <> a(2, 1) Or a(1, 0) <> a(2, 2) Then
If a(1, 1) <> a(0, 0) Or a(0, 1) <> a(1, 1) Or a(0, 2) <> a(1, 1) Or a(1, 0) <> a(1, 1) Or a(1, 1) <> a(1, 2) Or a(1, 1) <> a(2, 0) Or a(1, 1) <> a(2, 1) Or a(1, 1) <> a(2, 2) Then
If a(1, 2) <> a(0, 0) Or a(0, 1) <> a(1, 2) Or a(0, 2) <> a(1, 2) Or a(1, 0) <> a(1, 2) Or a(1, 1) <> a(1, 2) Or a(1, 2) <> a(2, 0) Or a(1, 2) <> a(2, 1) Or a(1, 2) <> a(2, 2) Then
If a(2, 0) <> a(0, 0) Or a(0, 1) <> a(2, 0) Or a(0, 2) <> a(2, 0) Or a(1, 0) <> a(2, 0) Or a(1, 1) <> a(2, 0) Or a(1, 2) <> a(2, 0) Or a(2, 0) <> a(2, 1) Or a(2, 0) <> a(2, 2) Then
If a(2, 1) <> a(0, 0) Or a(0, 1) <> a(2, 1) Or a(0, 2) <> a(2, 1) Or a(1, 0) <> a(2, 1) Or a(1, 1) <> a(2, 1) Or a(1, 2) <> a(2, 1) Or a(2, 0) <> a(2, 1) Or a(2, 1) <> a(2, 2) Then
If a(2, 2) <> a(0, 0) Or a(0, 1) <> a(2, 2) Or a(0, 2) <> a(2, 2) Or a(1, 0) <> a(2, 2) Or a(1, 1) <> a(2, 2) Or a(1, 2) <> a(2, 2) Or a(2, 0) <> a(2, 2) Or a(2, 1) <> a(2, 2) Then
MsgBox("no es un cuadro mágico ")
Else
MsgBox("no es un cuadro mágico hay numeros repetidos")
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End Sub
End Class
Dios mio!
Vaya animalada de código, si yo fuese el profesor sincéramente no dejaria que el alumno volviese a entrar en clase.
Consejos:
· Evitar cualquier uso de IF anidado de esa manera tan ...exagerada.
· No escribir lineas tan largas que sobrepasen la capacidad de la IDE obligando a usar la scrollbar horizontal, eso no es nada productivo ni eficiente (por no hablar d leos ifs), usa la indentación y la tecla "Intro" o el caracter "_" para truncar una linea larga, que para algo está todo eso.
· Aprovéchate cuanto puedas de las comodidades que ofrecen las extensiones LINQ en lugar de iterar los elementos con un FOR (aunque es mejor un FOR, pero si se trata de simplificar la escritura de código entonces usa LINQ).
· No compliques las cosas más de lo necesario usando arrays dimensionales, no lo necesitas, de hecho cualquier tipo de container está de más para esta tarea, pero si quieres almacenar los numeros en algún sitio para tener algún tipo de conrol sobre ellos, usa un array de toda la vida, no compliques más las cosas.
Ejemplo:
EDITO: mejor elaborado
Public Class Form1
ReadOnly Property Numbers As Integer()
Get
Return {
CInt(TextBox1.Text), CInt(TextBox2.Text), CInt(TextBox3.Text),
CInt(TextBox4.Text), CInt(TextBox5.Text), CInt(TextBox6.Text),
CInt(TextBox7.Text), CInt(TextBox8.Text), CInt(TextBox9.Text)
}
End Get
End Property
ReadOnly Property Total As Integer
Get
Return Numbers().Sum(Function(number) number)
End Get
End Property
ReadOnly Property HasDuplicates As Boolean
Get
Return (From i As Integer In Numbers
Group By i Into Count()
Where Count <> 1).Any
End Get
End Property
Private Shadows Sub Load() Handles MyBase.Load
TextBox1.Text = CStr(6) : TextBox2.Text = CStr(1) : TextBox3.Text = CStr(8)
TextBox4.Text = CStr(7) : TextBox5.Text = CStr(5) : TextBox6.Text = CStr(3)
TextBox7.Text = CStr(2) : TextBox8.Text = CStr(9) : TextBox9.Text = CStr(4)
End Sub
Private Sub Button_Click() Handles Button1.Click
Select Case Total
Case (15 * 3)
If HasDuplicates Then
MsgBox("No es un cuadro mágico, hay numeros repetidos.")
Else
MsgBox("Es un cuadro mágico.")
End If
Case Else
MsgBox("No es un cuadro mágico, los números de cada columna no suman 15 en su totalidad.")
End Select
End Sub
End Class
Saludos.