Pasar programa de Ciclo if a for (cuadro magico)

Iniciado por ellandax, 19 Noviembre 2013, 04:27 AM

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

ellandax

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




Código (vbnet) [Seleccionar]

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

Eleкtro

#1
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

Código (vbnet) [Seleccionar]
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.