Tema 5. E veña bum bum !



Estruturas de control, estructuras repetitivas.

A outra estrutura que utilizaremos serán os bucles ou estruturas repetitivas, estas estruturas permitirán realizar unha ou varias veces un número de ordes ou sentenzas. Estes bucles usan ser de dous tipos, aqueles dos que se sabe o número de "voltas" ou iteraccións que se realizan deles, ou ben os que se repiten ata que se cumpre unha condición.

De tódolos xeitos e sobre todo en robótica utilízanse moito outros que son os infinitos, que como o seu propio nome indica, non rematan nunca, realizando iteraccións das súas sentenzas de xeito contínuo.

Imos pois a estudalos...

Bucle infinito

Como deciamos, estes bucles repiten as sentenzas infinitas veces. A continuación tes o bloque que podes usar no Mblock. Como podes apreciar non ten "enganche" na parte inferior, xa que lóxicamente nunca se executarán sentenzas despóis do bucle.

Bloque infinito
Resulta un bo bucle para engadir programas como todos os que fixemos no tema 4, de tal xeito que xa non teñamos esa restricción de "ao iniciar o programa" senón que sexa "nalgún momento do programa".

Lembras o exemplo de "Arrincando coas luces postas", pois dun xeito sinxelo, podemos facer que o robot tan só avance detectando luz, e que quede inmóbil se está sen luz. Nese caso non fará falla indicarlle durante canto tempo avanza, xa que tan só avanzará cando detecte luz.
O fluxograma sería o seguinte:

Fluxograma exemplo luces

A solución no Mblock podería ser a seguinte:

Solución á ampliación "Arrincando coas luces postas"
Podes baixar o código desta solución na seguinte ligazón.

Vai sendo horas de practicar un pouco con este bucle infinito... podemos facer xa un robot que evite chocar con obstáculos?

Reto 5.1

Bucle "predefinido"

Nesta categoría quero diferenciar a aqueles bucles dos cales a priori coñecemos o número de veces que ten que realizar unha acción. 

Bucle de repetir X veces unhas sentenzas


E que tal un reto?

Reto 5.2
Para o reto anterior non se proporcionan moitas instrucións xa que pode resultar sinxelo, pero podemos sacarlle aínda máis proveito aos bucles se os unimos a modificación de variables nos mesmos.

Por exemplo, e baseándonos no reto 3.2 poderíamos pensar  nun programa que ilumine todos os leds a cores aleatorias.

Este algoritmo pódese realizar con múltiples sentencias sinxelas, ou ben cunha repetitiva (neste caso son 12 leds, pero podemos pensar que ao mellor puideran ser milleiros, co que as sentenzas sinxelas serían moitísimas máis).
O fluxograma podería ser o que segue:

Fluxograma do exemplo de "luces aleatorias"

A solución que podes descargar aquí sería a seguinte.

Posible solución do exemplo de "Luces aleatorias"

Se executamos varias veces este programa veremos que  o robot se comporta dun xeito extraño, xa que sempre se iluminan os mesmos da mesma cor.

Para evitar problemas de comportamento do robot tanto nesta estrutura como en seguintes, realizaremos toda a programación nun bucle "por siempre", xa que o Mblock entende que o comportamento do robot debería ir nun bucle contínuo, e o que non esté nese bucle contínuo tan só se executaría inicialmente, dando comportamentos a veces extraños.

Reto 5.3

 Bucle "repetir... hasta", un "mientras"...

O Mblock proporciónanos un novo tipo de bucle que estará controlado por unhas condicións, e decir, executarase o contido do bucle de xeito cíclico ata que se cumpra unha condición. Resulta fundamental neste tipo de bucles o modificar dentro do bucle algún valor que controla a condición de permanencia no bucle, xa que se esta non se modifica, o bucle sería infinito se se entra nel.

Bucle de repetir X veces unhas sentenzas ata que se cumpra unha condición

En realidade calquera dos dous bucles anteriores se pode transformar nun bucle mientras (no editor pon repetir hasta, aínda que eu deixo o de "mientras" xa que en realidade o bucle pódese repetir 0 ou máis veces, cando un bucle "repetir hasta que" polo normal se repite 1 ou máis veces.
Este bucle úsase cando a permanencia no bucle non se sabe a priori. Por exemplo, vexamos un exemplo para que o robot avance ata que detecte que vai chocar (distancia inferior a 20 cm).

O fluxograma do exemplo que estamos a plantexar sería o seguinte (queda un pouco extraño debido a que temos que meter un bucle infinito para que o Mblock o entenda correctamente, noutro tipo de programación non faría falta:
Fluxograma dun programa infinito que evitaría obstáculos

O programa podería quedar como segue:
Programa que evita que o robot colisione cos obstáculos
Poderás apreciar que a configuración física do robot non e a máis óptima, xa que en ocasións non "ve obstáculos" que se lle aproximan polas diagonáis.

Estruturas de agarda.

Vou a incluír aqui dúa estruturas non utilizadas en linguaxes estruturadas e que ben se poderían substituír cun bucle "repetir hasta" se contaramos con elementos que nos permitiran medir tempo. Unha desas estruturas estivemos a utilizala xa dende o primeiro tema, e e a de "esperar X segundos", no que o programa queda executando a sentenza anterior durante os segundos especificados, antes de pasar a seguinte sentenza.

Outra similar será a de "esperar hasta que", no que se mantén ao programa na sentenza anterior ata que se produza unha condición.

A única diferenza coa estrutura dun "repetir hasta" e que neste caso tan só se repite unha orde, e no caso do "repetir hasta" repeteranse unha ou máis sentenzas.

Estruturas de agarda, "esperar" e "esperar hasta que"

Imos a practicar esta última estrutura cun reto...


Reto 5.4

Reto 5.6







No hay comentarios:

Publicar un comentario