23Jan2008
Archivado en: Delphi, Programación, Visual Basic
Autor: Angel López
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:
-
Public Class Form1
-
Dim cuadro(1000, 1000) As Integer 'nuestro cuadro tendra capacidad para 1000 filas y 1000 columnas
-
-
Private Sub txtcolumna_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtcolumna.TextChanged
-
If (txtcolumna.Text = "") Then
-
cmd_calcular.Enabled = False
-
Else
-
cmd_calcular.Enabled = True
-
End If
-
End Sub
-
-
Private Sub cmd_calcular_Click(ByVal sender As System.Object, ByVal ee As System.EventArgs) Handles cmd_calcular.Click
-
If (txtcolumna.Text Mod 2 = 0) Then 'si las columnas introducidas son impares, marcamos error
-
MessageBox.Show("Solo puedes introducir un numero de columnas IMPAR")
-
Else 'calculamos cuadro magico
-
Dim col As Integer = Convert.ToInt16(txtcolumna.Text) 'nos aseguramos que sean columnas enteras
-
Dim fil As Integer = col 'como será cuadro, seran las mismas filas que las columnas
-
Dim b As Integer = col \ 2 + 1 'hacemos divicion entera entre 2 a las columnas y le sumamos 1
-
Dim a As Integer = 1 '"a" y "b" serán nuestras variables auxiliares para movernos en el cuadro
-
Dim d, e, f As Integer
-
-
cuadro(a, b) = 1 'siempre el primer paso es igualar a 1 la posicion de la columna de enmedio en la fila 0
-
-
'llenamos el cuadro de numeros
-
For d = 2 To fil * col '"d" será nuestro contador para recorrer todo el cuadro e ir llenandolo de numeros
-
If (b = col) Then 'si ya se llego a la ultima columna, entonces reiniciamos, sino entonces incrementamos la columna
-
b = 1
-
Else
-
b += 1
-
End If
-
-
If (a = 1) Then 'si ya se llego a la primer fila, entonces nos regresamos a la ultima fila, sino entonces decrementamos la fila
-
a = fil
-
Else
-
a -= 1
-
End If
-
-
If (cuadro(a, b)> 0) Then 'se verifica que el espacio no este ocupado
-
e += 1
-
a = e
-
b = f
-
End If
-
-
cuadro(a, b) = d
-
e = a
-
f = b
-
Next
-
-
txtcuadro.Text = ""
-
'imprimimos el cuadro
-
For a = 1 To fil
-
For b = 1 To col
-
txtcuadro.Text &= cuadro(a, b) & ", "
-
Next
-
txtcuadro.Text &= vbNewLine
-
Next
-
-
End If
-
End Sub
-
End Class
y Aquà esta su versión en Pascal:
Pascal
DELPHI:
-
uses {cuadro magico}
-
crt; {Angel L¢pez}
-
var
-
x:array [1..50,1..50] of integer;
-
fila,colum,a,b,d,e,f:integer;
-
begin
-
clrscr;
-
writeln('Introduce el total de columnas y filas [numeros impares]');
-
readln(colum); {se coloca el primer numero en la posicion intermedia}
-
writeln;
-
writeln;
-
writeln;
-
fila:=colum;
-
b:=(colum div 2)+1;
-
a:=1;
-
x[a,b]:=1;
-
-
for d:=2 to (fila*colum) do {se llena el cuadro magico con numeros}
-
begin
-
if (b=colum) then
-
b:=1
-
else
-
b:=b+1;
-
-
if (a=1) then
-
a:=fila
-
else
-
a:=a-1;
-
-
if (x[a,b]>0) then {se checa que el espacio no este ocupado}
-
begin
-
e:=e+1;
-
a:=e;
-
b:=f;
-
end;
-
-
x[a,b]:=d;
-
e:=a;
-
f:=b;
-
end;
-
-
for a:=1 to fila do {aqui se imprime el cuadro magico}
-
begin
-
for b:=1 to colum do
-
write(x[a,b]:4);
-
writeln;
-
writeln;
-
end;
-
-
readln;
-
end.
Y aquà te dejo el enlace para que los descargues:
Archivo
BETO
September 28th, 2008 at 11:17 am
me gustaria saber como hacer el cuadro magico de 3×3 pero eligiendo las cordenadas en donde empesar..ok
yerly
November 5th, 2008 at 3:44 pm
por fa un poco mas explicativo o.k