Título: Pasar programa de Ciclo if a for (cuadro magico)
Publicado por: ellandax en 19 Noviembre 2013, 04:27 am
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
Título: Re: Pasar programa de Ciclo if a for (cuadro magico)
Publicado por: Eleкtro en 19 Noviembre 2013, 21:00 pm
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.
|