Logo

¡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.
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.