Hola a todos!

Hoy andaba husmeando entre mis tareas del bachillerato y por ahí me encontré con este programa que resuelve el clásico Cuadro Mágico que para algunos es un problema en matemáticas ya que es muy usual que en algún momento de tus estudios te lo dejaran hacer en algún examen o de tarea. Pero afortunadamente para ti este programa te resuelve el cuadro, dada una cantidad de columnas impares.

Así quedaría este programa que en ciertas ocasiones puede resultar muy útil

En si el codigo es muy corto y esque hay un truco para resolverlo sin importar el numero de columnas y filas que tenga. Pero como sea aquí te dejo el código para que veas como se hace:

Visual Basic.NET

VB.NET:
  1. Public Class Form1
  2.     Dim cuadro(1000, 1000) As Integer 'nuestro cuadro tendra capacidad para 1000 filas y 1000 columnas
  3.  
  4.     Private Sub txtcolumna_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtcolumna.TextChanged
  5.         If (txtcolumna.Text = "") Then
  6.             cmd_calcular.Enabled = False
  7.         Else
  8.             cmd_calcular.Enabled = True
  9.         End If
  10.     End Sub
  11.  
  12.     Private Sub cmd_calcular_Click(ByVal sender As System.Object, ByVal ee As System.EventArgs) Handles cmd_calcular.Click
  13.         If (txtcolumna.Text Mod 2 = 0) Then 'si las columnas introducidas son impares, marcamos error
  14.             MessageBox.Show("Solo puedes introducir un numero de columnas IMPAR")
  15.         Else 'calculamos cuadro magico
  16.             Dim col As Integer = Convert.ToInt16(txtcolumna.Text) 'nos aseguramos que sean columnas enteras
  17.             Dim fil As Integer = col 'como será cuadro, seran las mismas filas que las columnas
  18.             Dim b As Integer = col \ 2 + 1 'hacemos divicion entera entre 2 a las columnas y le sumamos 1
  19.             Dim a As Integer = 1 '"a" y "b" serán nuestras variables auxiliares para movernos en el cuadro
  20.             Dim d, e, f As Integer
  21.  
  22.             cuadro(a, b) = 1 'siempre el primer paso es igualar a 1 la posicion de la columna de enmedio en la fila 0
  23.  
  24.             'llenamos el cuadro de numeros
  25.             For d = 2 To fil * col '"d" será nuestro contador para recorrer todo el cuadro e ir llenandolo de numeros
  26.                 If (b = col) Then 'si ya se llego a la ultima columna, entonces reiniciamos, sino entonces incrementamos la columna
  27.                     b = 1
  28.                 Else
  29.                     b += 1
  30.                 End If
  31.  
  32.                 If (a = 1) Then 'si ya se llego a la primer fila, entonces nos regresamos a la ultima fila, sino entonces decrementamos la fila
  33.                     a = fil
  34.                 Else
  35.                     a -= 1
  36.                 End If
  37.  
  38.                 If (cuadro(a, b)> 0) Then 'se verifica que el espacio no este ocupado
  39.                     e += 1
  40.                     a = e
  41.                     b = f
  42.                 End If
  43.  
  44.                 cuadro(a, b) = d
  45.                 e = a
  46.                 f = b
  47.             Next
  48.  
  49.             txtcuadro.Text = ""
  50.             'imprimimos el cuadro
  51.             For a = 1 To fil
  52.                 For b = 1 To col
  53.                     txtcuadro.Text &= cuadro(a, b) & ", "
  54.                 Next
  55.                 txtcuadro.Text &= vbNewLine
  56.             Next
  57.  
  58.         End If
  59.     End Sub
  60. End Class

y Aquí esta su versión en Pascal:

Pascal

DELPHI:
  1. uses             {cuadro magico}
  2.  crt;              {Angel L¢pez}
  3. var               
  4.  x:array [1..50,1..50] of integer;
  5.  fila,colum,a,b,d,e,f:integer;
  6. begin
  7.  clrscr;
  8.  writeln('Introduce el total de columnas y filas [numeros impares]');
  9.  readln(colum);       {se coloca el primer numero en la posicion intermedia}
  10.  writeln;
  11.  writeln;
  12.  writeln;
  13.  fila:=colum;
  14.  b:=(colum div 2)+1;
  15.  a:=1;
  16.  x[a,b]:=1;
  17.  
  18.  for d:=2 to (fila*colum) do    {se llena el cuadro magico con numeros}
  19.   begin
  20.    if (b=colum) then
  21.     b:=1
  22.    else
  23.     b:=b+1;
  24.  
  25.    if (a=1) then
  26.     a:=fila
  27.    else
  28.     a:=a-1;
  29.  
  30.    if (x[a,b]>0) then     {se checa que el espacio no este ocupado}
  31.     begin
  32.     e:=e+1;
  33.     a:=e;
  34.     b:=f;
  35.     end;
  36.  
  37.    x[a,b]:=d;
  38.    e:=a;
  39.    f:=b;
  40.   end;
  41.  
  42.  for a:=1 to fila do     {aqui se imprime el cuadro magico}
  43.  begin
  44.   for b:=1 to colum do
  45.    write(x[a,b]:4);
  46.   writeln;
  47.   writeln;
  48.  end;
  49.  
  50.  readln;
  51. end.

Y aquí te dejo el enlace para que los descargues:

Archivo

0f6198edbbfccf0b86c514002965c48b
Share via email