Está en la página 1de 13

Comprobador de Laberintos.

Se presenta a continuacin un programa que se encarga de comprobar una serie de requisitos, entre los cuales est el de hallar un camino libre, habiendo realizado las siguientes comprobaciones: Hay una casilla de comienzo del personaje, y slo una.(1 Hay una casilla de meta, y slo una.(! "odo el per#metro del laberinto son paredes (para que el personaje no pueda escapar por los bordes .($ %a posicin de comienzo del personaje no est en un borde del laberinto.(& '(iste un camino libre que permite llegar desde la posicin del personaje a la meta. ('ste )ltimo paso, )nicamente se realizara si el laberinto cumple todos y cada uno de los anteriores requisitos .(*

'l laberinto a comprobar estar elaborado en una archi+o .t(t, que adems contar en su primera l#nea con dos n)meros, los cuales aportan las dimensiones de dicho laberinto, el cual estar constituido por almohadillas (,, cdigo -S.// $*, el lector debe 0amiliarizarse con este )ltimo dato, ya que es el utilizado en el cdigo , dichos caracteres con0orman las paredes y bordes del laberinto. 1or otra parte, est el asterisco (2, cdigo -S.// &! que representa la casilla de inicio, y el arroba (3, cdigo -S.// 4&, el lector debe 0amiliarizarse con este )ltimo dato, ya que es el utilizado en el cdigo que representa la casilla de meta. - continuacin se muestra un ejemplo del contenido de dicho 0ichero y la distribucin de las dimensiones y el laberinto incluidos en el:

- e0ectos prcticos, se ha optado por utilizar la directi+a del preprocesador de . que sir+e para de0inir constantes, #define, de esta 0orma se 0acilita el uso del asterisco dentro del programa, as# como tambi5n true y 0alse: #define MARCA '*' #define TRUE 1 #define FALSE 0 .abe decir que para mejorar la est5tica con el 0in de 0acilitar en gran medida la +isibilidad de las distintas partes del laberinto, se ha hecho uso de la 0uncin: SetConsoleTextAttribute(GetStd !ndle(ST"#$UT%UT# A&"LE'(n') 667onde n es el cdigo del color utilizado.

'l programa consta principalmente de dos 0unciones (adems del main claramente di0erenciadas (la 0uncin comprobar e(puesta a continuacin es llamada dentro de la 0uncin abrirlab : *+oid !brirl!b(') *+oid ,o-.rob!r(F/LE *(,0!r 12(int *( int *') 8uncin void abrirlab() : 'sta 0uncin es el pilar del programa, ya que en ella se realiza la mayor parte de las comprobaciones as# como tambi5n del desarrollo lle+ado a cabo para encontrar un camino libre. %a primera di0icultad que encontramos es el manejo del contenido del 0ichero, por lo que se procede a rellenar un com)nmente llamado, array de caracteres bidimensional, con los $ caracteres que con0orman el laberinto. 1ara ello se requiere las dimensiones de dicho array que se encuentran en la primera l#nea del 0ichero, dos n)meros separados por un espacio, el primero de ellos indica la dimensin +ertical del array, y el segundo de ellos indica la dimensin horizontal. 7ichos n)meros son le#dos por la 0uncin fscanf, que adems asigna a las +ariables dimy y dim( sus correspondientes +alores: fs,!nf(file%tr(34d 4d3(5di-x(5di-6') 1osteriormente se procede a rellenar el array bidimensional al que llamaremos lab[dimy][dimx], para ello hacemos uso de un elemento au(iliar , una cadena de caracteres frase[dimx], la cual , una +ez asignada, es pasada a la correspondiente 0ila del array, mediante el siguiente bucle descrito a continuacin: 70ile(f8et, (file%tr'9: ';n'' < =661osicionamos el puntero en el principio de la segunda l#nea del 0ichero.t(t

i:1) do < for(>:1)>?:di-x)>@@' < fs,!nf(file%tr(34,3(5fr!se1>2') if(fr!se1>2::AB CC fr!se1>2::DA' < SetConsoleTextAttribute(GetStd !ndle(ST"#$UT%UT# A&"LE'(E') .rintf(34,3(fr!se1>2') = else < SetConsoleTextAttribute(GetStd !ndle(ST"#$UT%UT# A&"LE'(D') .rintf(34,3(fr!se1>2') = laberinto. = .rintf(3;n3') i@@) 70ile(f8et, (file%tr'9: ';n'' < =661osicionamos el puntero en el principio de la siguiente l#nea del 0ichero.t(t =70ile(i?:(di-6*1'') for(>:1)>?:di-x)>@@' < fs,!nf(file%tr(34,3(5fr!se1>2') .rintf(34,3(fr!se1>2') la )ltima 0ila del laberinto. = l!b1i21>2:fr!se1>2) 661aso de la )ltima cadena de caracteres a l!b1i21>2:fr!se1>2)F61aso de la cadena del 0ichero a la 0ila del

- continuacin, se cierra el 0ichero dado que a partir de este momento trabajaremos con el array bidimensional rellenado (lab9dimy:9dim(: . 1or lo que se procede a realizar la comprobacin del requisito ($ . 1ara ello recorremos las paredes de lab, que coinciden con la primera y )ltima 0ila as# como la primera y )ltima columna, mediante los siguientes bucles descritos a continuacin, en el caso de que alguna pared contenga un carcter distinto de almohadilla, ser entonces cuando el contador incremente. -nlogamente, ocurre en la comprobacin del requisito (& , en el caso de que alguna pared contenga al menos un asterisco, ser entonces cuando el contador incremente. 1or tanto, para que cada unas de las condiciones se cumpla ( $ y & , sus correspondientes contadores tienen que +aler cero, de lo contrario supondr que alguna de las paredes no se encuentra correctamente cerrada, y6o que la posicin de inicio se encuentra en un borde del laberinto. for(>:1)>?:di-x)>@@' < i:1) if(l!b1i21>29:GH' < .!red1@@) 66.omprueba 1ared superior horizontal = if(l!b1i21>2::AB'< inicial .os1@@)66.omprueba 1ared superior horizontal;posicion = i:di-6) if(l!b1i21>29:GH' .!redB@@) 66.omprueba 1ared in0erior horizontal if(l!b1i21>2::AB'< inicial .osB@@) 66.omprueba 1ared in0erior horizontal;posicin = = for(i:1)i?:di-6)i@@' < >:1) if(l!b1i21>29:GH' < .!redG@@) 66.omprueba 1ared izquierda +ertical =

if(l!b1i21>2::AB'< inicial l .osG@@) 66.omprueba 1ared izquierda +ertica;posicion = >:di-x) if(l!b1i21>29:GH' .!redA@@) 66.omprueba 1ared derecha +ertical if(l!b1i21>2::AB'< inicial .osA@@) 66.omprueba 1ared derecha +ertical;posicin

= =

7icho razonamiento est plasmado en las siguientes l#neas de cdigo:

if(.!red1::0 55 .!redB::0 55 .!redG::0 55 .!redA::0' < .rintf(3;n;nEl re,into S/ est! ,err!doI;n3') oJ1:1) = if(.os1::0 55 .osB::0 55 .osG::0 55 .osA::0' < .rintf(3;nL! .osi,ion de ini,io &$ est! en un bordeI;n3') oJB:1) = %a asignacin de o<1 y o<! el +alor de 1, tiene como 0inalidad, proporcionar un resultado binario, 1 si se cumple la condicin correspondiente, y = en el caso contrario. 1osteriormente, se capturan los +alores de las posiciones de inicio y meta dentro del laberinto mediante este bucle: for(i:1)i?:di-6)i@@' < for(>:1)>?:di-x)>@@' <

if(l!b1i21>2::AB' 66-signacin a (1 e y1 los +alores de la posicin de la casilla de inicio. < x1:i) 61:>) = if(l!b1i21>2::DA' 66-signacin a (! e y! los +alores de la posicin de la casilla de meta. < xB:i) 6B:>) = = = 'l siguiente paso a realizar es llamar a la 0uncin comprobar, la cual se e(plicar con ms posteriormente. 7icha 0uncin nos de+uel+e dos +alores o<$ y o<&, que pueden tener el +alor de 1 , a0irmando que la condicin correspondiente se cumple, y = en caso contrario. 's entonces cuando se realizar la siguiente comprobacin: if(((oJ1::1 55 oJB::1'55 oJG::1'55 oJA::1' %a cual se asegura de que todas y cada una de las & condiciones +eri0icadas anteriormente se cumplan(es decir, que todas las +ariables >o< n? tengan el +alor 1 1or tanto, si y solo si se cumple dicha sentencia, se proceder a resol+er el laberinto, es decir, encontrar un camino libre que nos lle+e desde la posicin de inicio hasta la meta. 'n caso de no cumplirse dicha sentencia, entonces la condicin (* no se cumplir#a al no cumplirse las anteriores, y por ende, no se procede a resol+er el laberinto. Suponiendo que se cumplan las & condiciones anteriores, se procede a solucionar el laberinto haciendo uso de la recursi+idad. %a solucin se basa en una tarea que se realizar recursi+amente para intentar solucionar el laberinto a partir de una posicin particular(desde la posicin de inicio . 7esde cualquier lugar dentro del laberinto se intentar resol+erlo primero intentando hacia la derecha, luego hacia abajo, luego hacia la izquierda y 0inalmente arriba. 1ara hacer estos intentos se emplear un bucle do-while. 'l caso base de la recursi+idad (condicin de termino es que las coordenadas correspondan con la salida del laberinto. 'n caso contrario, se procede a marcar la casilla y a intentar en las distintas direcciones (en sentido horario empezando por la derecha , asegurndose primero que en esa direccin haya una

casilla +alida (no almohadilla, no +isitada, es decir no marcada . 'n caso en que ninguna direccin nos lle+a a la salida, se >in0ecta? la casilla actual(la casilla ser marcada con un punto, de esta 0orma no se +ol+er a pasar por este camino pues se +a a retroceder, es aqu# cuando empieza el denominado bac< trac<ing o +uelta atrs. %as marcas sir+en tambi5n para se@alar la ruta que con0orma la solucin, una +ez alcanzada. 'l procedimiento parte de la posicin de entrada. 1ara ello nos posicionamos asignando a j e i los +alores de y1 y x1 correspondientes a la casilla de inicio: i:x1) >:61)

7escripcin del algoritmo: 1. /nicialmente listo +ale 8-%SA (= listo:FALSE) !. Si la posicin es el 0in del laberinto, listo es "BC' (1 if(i::xB 55 >::6B' listo:TRUE)

$. Se marca la casilla if(i9:xB 55 >9:6B' l!b1i21>2:MARCA)

&. Si no se ha solucionado (listo +ale 8-%SA y la posicin de la derecha es +lida if(listo::FALSE 55(l!b1i21>@12::GBCCl!b1i21>@12::DA'' &.1. Dos desplazamos hacia la casilla de la derecha (>:>@1)'ISe comprueba si la posicin es el 0in del laberinto (de ser as# listo es "BC' , de lo contrario se marca la casilla (l!b1i21>2:MARCA) . *. Si no se ha solucionado (listo +ale 8-%SA y la posicin de la abajo es +lida if(listo::FALSE 55(l!b1i@121>2::GBCCl!b1i@121>2::DA'' *.1. Dos desplazamos hacia la casilla de abajo (i:i@1) . Se comprueba si la posicin es el 0in del laberinto (de ser as# listo es "BC' , de lo contrario se marca la casilla (l!b1i21>2:MARCA) . 4. Si no se ha solucionado (listo +ale 8-%SA y la posicin de la izquierda es +lida if(listo::FALSE 55(l!b1i21>*12::GBCCl!b1i21>*12::DA''

4.1. Dos desplazamos hacia la casilla de la izquierda (>:>*1) . Se comprueba si la posicin es el 0in del laberinto (de ser as# listo es "BC' , de lo contrario se marca la casilla. (l!b1i21>2:MARCA) . E. Si no se ha solucionado (listo +ale 8-%SA y la posicin de arriba es +lida if(listo::FALSE 55(l!b1i*121>2::GBCCl!b1i*121>2::DA'' E.1. Dos desplazamos hacia la casilla de arriba (i:i*1) . Se comprueba si la posicin es el 0in del laberinto (de ser as# listo es "BC' , de lo contrario se marca la casilla (l!b1i21>2:MARCA) . Bepeticin de estos pasos a menos que la sentencia siguiente se cumpla: F. Si no se ha solucionado (listo +ale 8-%SA y ninguna posicin es +lida,(se ha quedado encerrado if((((listo::FALSE 55(l!b1i21>@129:GB 55 l!b1i21>@129:DA''55(l!b1i@121>29:GB 55 l!b1i@12 1>29:DA''55(l!b1i21>*129:GB 55 l!b1i21>*129:DA''55(l!b1i*121>29:GB 55 l!b1i*121>29:DA'' , entonces se procede a realizar la +uelta atrs. F.1. Si el )ltimo mo+imiento realizado (antes de iniciar al bac< trac<ing a sido hacia la derecha (if J::1 , se >in0ecta? la casilla actual (se coloca un punto en dicha posicin . 'ntonces se comprueba si la posicin anterior(es decir la posicin de la casilla de la izquierda ha sido +isitada,(G-B.- y se comprueba tambi5n si el resto de casillas contiguas son distintas de la meta y6o de un espacio. 7e cumplirse dicho requisito, nos desplazamos hacia la izquierda, e >in0ectamos? dicha posicin. 1osteriormente se procede a intentar en las distintas direcciones abajo y arriba, siguiendo el procedimiento anterior, siempre y cuando no haya alguna casilla +alida contigua a nuestra posicin actual: l!b1i21>2:AD)FF/nfe,t!-os l! ,!sill!(se ,olo,! un .unto en di,0! ,!sill!' if(((l!b1i21>*12::MARCA 55(l!b1i21>@129:GB 55 l!b1i21>@129 :DA''55(l!b1i@121>29:GB 55 l!b1i@121>29:DA''55(l!b1i*121>29:GB 55 l!b1i*121>29 :DA''FFCo-.rueb! si 6! 0! +isit!do l! ,!sill!(MARCA' < >:>*1)FFMo+ iKLuierd! l!b1i21>2:AD)FF/nfe,t!-os l! ,!sill! = if(((l!b1i@121>2::MARCA 55(l!b1i21>@129:GB 55 l!b1i21>@129 :DA''55(l!b1i*121>29:GB 55 l!b1i*121>29:DA''55(l!b1i21>*129:GB 55 l!b1i21>*129 :DA''FFCo-.rueb! si 6! 0! +isit!do l! ,!sill!(MARCA' < i:i@1)FF&os des.l!K!-os 0!,i! !b!>o

l!b1i21>2:AD)FF/nfe,t!-os l! ,!sill! = if(((l!b1i*121>2::MARCA 55(l!b1i21>@129:GB 55 l!b1i21>@129 :DA''55(l!b1i@121>29:GB 55 l!b1i@121>29:DA''55(l!b1i21>*129:GB 55 l!b1i21>*129 :DA''FFCo-.rueb! si 6! 0! +isit!do l! ,!sill!(MARCA' < i:i*1)FF&os des.l!K!-os 0!,i! !rrib! l!b1i21>2:AD)FF/nfe,t!-os l! ,!sill! = if(l!b1i21>@12::GB CC l!b1i@121>2::GB CC l!b1i21>*12::GB CC l!b1i*12 1>2::GB'FFSi est! ,onti8uo ! !l8un es.!,io MARCA l! ,!sill!(de est! for-! se une el ,!-ino ,orre,t!-ente'I < l!b1i21>2:MARCA) = if(((l!b1i21>@129:GB 55 l!b1i@121>29:GB'55 l!b1i21>*129:GB'55 l!b1i*121>29 :GB'FFSi se 0! +uelto ! Lued!r en,err!do entre ,!sill!s infe,t!d!s 6Fo !l-o0!dill!s o !steris,os enton,es re!liK!r el -o+ 0!,i! dere,0!I < if(l!b1i21>@12::MARCA' < >:>@1)FF&os des.l!K!-os 0!,i! l! dere,0! l!b1i21>2:AD)FF/nfe,t!-os l! ,!sill! = = F.!. Si el )ltimo mo+imiento realizado (antes de iniciar al bac< trac<ing a sido hacia abajo (if J::B , se >in0ecta? la casilla actual (se coloca un punto en dicha posicin . 'ntonces se comprueba si la posicin anterior(es decir la posicin de la casilla de arriba ha sido +isitada,(G-B.- y se comprueba tambi5n si el resto de casillas contiguas son distintas de la meta y6o de un espacio. 7e cumplirse dicho requisito, nos desplazamos hacia arriba, e >in0ectamos? dicha posicin. 1osteriormente se procede a intentar en las distintas direcciones izquierda, derecha y abajo, siguiendo el procedimiento anterior, siempre y cuando no haya alguna casilla +alida contigua a nuestra posicin actual:

l!b1i21>2:AD)FF/nfe,t!-os l! ,!sill!

if(((l!b1i*121>2::MARCA 55(l!b1i21>@129:GB 55 l!b1i21>@129 :DA''55(l!b1i@121>29:GB 55 l!b1i@121>29:DA''55(l!b1i21>*129:GB 55 l!b1i21>*129 :DA''FFCo-.rueb! si 6! 0! +isit!do l! ,!sill!(MARCA' < i:i*1) l!b1i21>2:AD)FF/nfe,t!-os l! ,!sill! = if(((l!b1i21>*12::MARCA 55(l!b1i21>@129:GB 55 l!b1i21>@129 :DA''55(l!b1i@121>29:GB 55 l!b1i@121>29:DA''55(l!b1i*121>29:GB 55 l!b1i*121>29 :DA''FFCo-.rueb! si 6! 0! +isit!do l! ,!sill!(MARCA' < >:>*1)FFMo+ iKLuierd! l!b1i21>2:AD)FF/nfe,t!-os l! ,!sill! = if(((l!b1i21>@12::MARCA 55(l!b1i@121>29:GB 55 l!b1i@121>29 :DA''55(l!b1i*121>29:GB 55 l!b1i*121>29:DA''55 (l!b1i21>*129:GB 55 l!b1i21>*129 :DA''FFCo-.rueb! si 6! 0! +isit!do l! ,!sill!(MARCA' < >:>@1) FF&os des.l!K!-os 0!,i! l! dere,0! l!b1i21>2:AD)FF/nfe,t!-os l! ,!sill! = if(l!b1i21>@12::GB CC l!b1i@121>2::GB CC l!b1i21>*12::GB CC l!b1i*121>2::GB' < l!b1i21>2:MARCA) = if(((l!b1i21>@129:GB 55 l!b1i@121>29:GB'55 l!b1i21>*129:GB'55 l!b1i*121>29 :GB'FFSi se 0! +uelto ! Lued!r en,err!do entre ,!sill!s infe,t!d!s 6Fo !l-o0!dill!s o !steris,os enton,es re!liK!r el -o+ 0!,i! !b!>oI < if(l!b1i@121>2::MARCA' < i:i@1)FF&os des.l!K!-os 0!,i! !b!>o l!b1i21>2:AD)FF/nfe,t!-os l! ,!sill! = =

F.$. Si el )ltimo mo+imiento realizado (antes de iniciar al bac< trac<ing a sido hacia la izquierda (if J::G , se >in0ecta? la casilla actual (se coloca un punto en dicha posicin . 'ntonces se comprueba si la posicin anterior(es decir la posicin de la casilla de la derecha ha sido +isitada,(G-B.- y se comprueba tambi5n si el resto de casillas contiguas son distintas de la meta y6o de un espacio. 7e cumplirse dicho requisito, nos desplazamos hacia la derecha, e >in0ectamos? dicha posicin. 1osteriormente se procede a intentar en las distintas direcciones derecha, abajo y arriba, siguiendo el procedimiento anterior, siempre y cuando no haya alguna casilla +alida contigua a nuestra posicin actual:

l!b1i21>2:AD)FF/nfe,t!-os l! ,!sill! if(((l!b1i21>@12::MARCA 55(l!b1i@121>29:GB 55 l!b1i@121>29 :DA''55(l!b1i*121>29:GB 55 l!b1i*121>29:DA''55 (l!b1i21>*129:GB 55 l!b1i21>*129 :DA''FFCo-.rueb! si 6! 0! +isit!do l! ,!sill!(MARCA' < >:>@1) FF&os des.l!K!-os 0!,i! l! dere,0! l!b1i21>2:AD)FF/nfe,t!-os l! ,!sill! = if(((l!b1i@121>2::MARCA 55(l!b1i21>@129:GB 55 l!b1i21>@129 :DA''55(l!b1i*121>29:GB 55 l!b1i*121>29:DA''55(l!b1i21>*129:GB 55 l!b1i21>*129 :DA''FFCo-.rueb! si 6! 0! +isit!do l! ,!sill!(MARCA' < i:i@1)FF&os des.l!K!-os 0!,i! !b!>o l!b1i21>2:AD) = if(((l!b1i*121>2::MARCA 55(l!b1i21>@129:GB 55 l!b1i21>@129 :DA''55(l!b1i@121>29:GB 55 l!b1i@121>29:DA''55(l!b1i21>*129:GB 55 l!b1i21>*129 :DA''FFCo-.rueb! si 6! 0! +isit!do l! ,!sill!(MARCA' < i:i*1)FF&os des.l!K!-os 0!,i! !rrib! l!b1i21>2:AD)FF/nfe,t!-os l! ,!sill! = if(l!b1i21>@12::GB CC l!b1i@121>2::GB CC l!b1i21>*12::GB CC l!b1i*12 1>2::GB'FFSi est! ,onti8uo ! !l8un es.!,io MARCA l! ,!sill!(de est! for-! se une el ,!-ino ,orre,t!-ente'I < l!b1i21>2:MARCA)

= if(((l!b1i21>@129:GB 55 l!b1i@121>29:GB'55 l!b1i21>*129:GB'55 l!b1i*121>29 :GB'FFSi se 0! +uelto ! Lued!r en,err!do entre ,!sill!s infe,t!d!s 6Fo !l-o0!dill!s o !steris,os enton,es re!liK!r el -o+ 0!,i! iKLuierd!I < ,!sill!(MARCA' if(l!b1i21>*12::MARCA'FFCo-.rueb! si 6! 0! +isit!do l! < >:>*1) l!b1i21>2:AD)FF/nfe,t!-os l! ,!sill! = =

F.&. Si el )ltimo mo+imiento realizado (antes de iniciar al bac< trac<ing a sido hacia arriba (if J::A , se >in0ecta? la casilla actual (se coloca un punto en dicha posicin . 'ntonces se comprueba si la posicin anterior(es decir la posicin de la casilla de abajo ha sido +isitada,(G-B.- y se comprueba tambi5n si el resto de casillas contiguas son distintas de la meta y6o de un espacio. 7e cumplirse dicho requisito, nos desplazamos hacia abajo, e >in0ectamos? dicha posicin. 1osteriormente se procede a intentar en las distintas direcciones abajo, derecha e izquierda, siguiendo el procedimiento anterior, siempre y cuando no haya alguna casilla +alida contigua a nuestra posicin actual:

l!b1i21>2:AD)FF/nfe,t!-os l! ,!sill! if(((l!b1i@121>2::MARCA 55(l!b1i21>@129:GB 55 l!b1i21>@129 :DA''55(l!b1i*121>29:GB 55 l!b1i*121>29:DA''55(l!b1i21>*129:GB 55 l!b1i21>*129 :DA''FFCo-.rueb! si 6! 0! +isit!do l! ,!sill!(MARCA' < i:i@1)FF&os des.l!K!-os 0!,i! !b!>o l!b1i21>2:AD)FF/nfe,t!-os l! ,!sill! = if(((l!b1i21>@12::MARCA 55(l!b1i@121>29:GB 55 l!b1i@121>29 :DA''55(l!b1i*121>29:GB 55 l!b1i*121>29:DA''55 (l!b1i21>*129:GB 55 l!b1i21>*129 :DA''FFCo-.rueb! si 6! 0! +isit!do l! ,!sill!(MARCA' < >:>@1) FF&os des.l!K!-os 0!,i! l! dere,0! l!b1i21>2:AD)FF/nfe,t!-os l! ,!sill!

= if(((l!b1i21>*12::MARCA 55(l!b1i21>@129:GB 55 l!b1i21>@129 :DA''55(l!b1i@121>29:GB 55 l!b1i@121>29:DA''55(l!b1i*121>29:GB 55 l!b1i*121>29 :DA''FFCo-.rueb! si 6! 0! +isit!do l! ,!sill!(MARCA' < >:>*1)FFMo+ iKLuierd! l!b1i21>2:AD)FF/nfe,t!-os l! ,!sill! = if(l!b1i21>@12::GB CC l!b1i@121>2::GB CC l!b1i21>*12::GB CC l!b1i*12 1>2::GB'FFSi est! ,onti8uo ! !l8un es.!,io MARCA l! ,!sill!(de est! for-! se une el ,!-ino ,orre,t!-ente'I < l!b1i21>2:MARCA) = if(((l!b1i21>@129:GB 55 l!b1i@121>29:GB'55 l!b1i21>*129:GB'55 l!b1i*121>29 :GB'FFSi se 0! +uelto ! Lued!r en,err!do entre ,!sill!s infe,t!d!s 6Fo !l-o0!dill!s o !steris,os enton,es re!liK!r el -o+ 0!,i! !rrib!I < if(l!b1i*121>2::MARCA' < i:i*1)FF&os des.l!K!-os 0!,i! !rrib! l!b1i21>2:AD)FF/nfe,t!-os l! ,!sill! = =

También podría gustarte