Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Sudokus

Iniciado por mastertemplar, 10 de Febrero de 2008, 08:36:02 PM

« anterior - próximo »

mastertemplar

Hola tengo este programa que hasta el momento solo genera automaticamente dos lineas de numeros de acuerdo a las reglas de un sudoku.
¿Alguien me podria decir alguna forma de mejorar el codigo para que ocupase menos espacio y fuese mas eficiente?
Esta hecho con darkbasic.
Gracias por adelantado

Inicio:
A = rnd(9)
if A = 0
goto Inicio
else
print A;
endif

Inicio2:
B = rnd(9)
if B = 0
goto Inicio2
else
if B = A
goto Inicio2
else
print B;
endif
endif

Inicio3:
C = rnd(9)
if C = 0
goto Inicio3
else
if C = A or  C = B
goto Inicio3
else
print C;
endif
endif

Inicio4:
D = rnd(9)
if D = 0
goto Inicio4
else
if D = A or D = B or D = C
goto Inicio4
else
print D;
endif
endif

Inicio5:
E = rnd(9)
if E = 0
goto Inicio5
else
if E = A or E = B or E = C or E = D
goto Inicio5
else
print E;
endif
endif

Inicio6:
F = rnd(9)
if F = 0
goto Inicio6
else
if F = A or F = B or F = C or F = D or F = E
goto Inicio6
else
print F;
endif
endif

Inicio7:
G = rnd(9)
if G = 0
goto Inicio7
else
if G = A or G = B or G = C or G = D or G = E or G = F
goto Inicio7
else
print G;
endif
endif

Inicio8:
H = rnd(9)
if H = 0
goto Inicio8
else
if H = A or H = B or H = C or H = D or H = E or H = F or H = G
goto Inicio8
else
print H;
endif
endif

Inicio9:
I = rnd(9)
if I = 0
goto Inicio9
else
if I = A or I = B or I = C or I = D or I = E or I = F or I = G or I = H
goto Inicio9
else
print I
endif
endif

Inicio10:
A1 = rnd(9)
if A1 = 0
goto Inicio10
else
if A1 = A or A1 = B or A1 = C
goto Inicio10
else
print A1;
endif
endif

Inicio11:
B1 = rnd(9)
if B1 = 0
goto Inicio11
else
if B1 = A1 or B1 = B or B1 = C or B1 = A
goto Inicio11
else
print B1;
endif
endif

Inicio12:
C1 = rnd(9)
if C1 = 0
goto Inicio12
else
if C1 = A1 or C1 = B1 or C1 = A or C1 = B or C1 = C
goto Inicio12
else
print C1;
endif
endif

Inicio13:
D1 = rnd(9)
if D1 = 0
goto Inicio13
else
if D1 = A1 or D1 = B1 or D1 = C1 or D1 = D or D1 = E
goto Inicio13
else
if D1 = F
goto Inicio13
else
print D1;
endif
endif
endif


Inicio14:
E1 = rnd(9)
if E1 = 0
goto Inicio14
else
if E1 = A1 or E1 = B1 or E1 = C1 or E1 = D1 or E1 = D
goto Inicio14
else
if E1 = E or E1 = F
goto Inicio14
else
print E1;
endif
endif
endif

Inicio15:
F1 = rnd(9)
if F1 = 0
goto Inicio15
else
if F1 = A1 or F1 = B1 or F1 = C1 or F1 = D1 or F1 = E1
goto Inicio15
else
if E1 = D or E1 = E or E1 = F
goto Inicio15
else
print F1;
endif
endif
endif

Inicio16:
G1 = rnd(9)
if G1 = 0
goto Inicio16
else
if G1 = A1 or G1 = B1 or G1 = C1 or G1 = D1 or G1 = E1
goto Inicio16
else
if G1 = F1 or G1 = G or G1 = H or G1 = I
goto Inicio16
else
print G1;
endif
endif
endif

Inicio17:
H1 = rnd(9)
if H1 = 0
goto Inicio17
else
if H1 = A1 or H1 = B1 or H1 = C1 or H1 = D1 or H1 = E1 or H1 = F1 or H1 = G1
goto Inicio17
else
if H1 = G or H1 = H or H1 = I
goto Inicio17
else
print H1;
endif
endif
endif

Inicio18:
I1 = rnd(9)
if I1 = 0
goto Inicio18
else
if I1 = A1 or I1 = B1 or I1 = C1 or I1 = D1 or I1 = E1 or I1 = F1 or I1 = G1
goto Inicio18
else
if I1 = H1 or I1 = G or I1 = H or I1 = I
goto Inicio18
else
print I1;
endif
endif
endif

[EX3]

Cita de: "mastertemplar"¿Alguien me podria decir alguna forma de mejorar el codigo para que ocupase menos espacio y fuese mas eficiente?
Lo primero y mas importante, erradicar el uso de la instruccion Goto. Para acciones redundantes usa bucles (Do While, For Next, etc...), tendras mas control y haras mas claro el camino que tomara el codigo al ejecutarse, lo que ayuda a depurarlo (ahora mismo me resulta imposible seguir tu codigo con tanto salto entre lineas). Lo segundo es pensar en metodos (bloques SUB) y funciones (bloques FUNCTION), de esta forma el codigo comun o codigo que vas a llamar varias veces en distintas partes del programa lo puedes agrupar de forma comoda y haces mas legible el codigo asi como localizar el codigo que te interese, serian como si fuesen pequeños programas o fragmentos de codigo cerrado, inclusive separarlo en modulos de codigo.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.