Tema 4. A potencia sen control...

Estruturas de programación

Ata o de agora estivemos a traballar con sentenzas sinxelas, e decir, o robot está preprogramado nas súas accións. Íste realiza as accións de xeito contínuo unha tras da outra, xerando fluxogramas lineais nos que non se ten en conta ningún apecto que poida influir na orde de execución das mesmas. A continuación comezaremos a estudar os distintos tipos de estruturas que nos permitirán tomar decisións e así redirixir o fluxograma cara unhas sentenzas ou outras.

Fluxograma do reto 1.3

Este tipo de estruturas de control que estudaremos e practicaremos no presente tema están dentro do bloque de control e saltándonos polo tanto a de "esperar" estudada no tema anterior.


Conxunto de ordes do bloque de control

Estructuras condicionais.

Unha das estruturas básicas de control será a condicional, este condicional pode ser de tres tipos: sinxelo, dobre e múltiple, no mBlock tan só se nos permiten os dous primeiros polo tanto ímonos a centrar neses dous.

Condicinal sinxelo

O condicional sinxelo caracterízase porque se executa unha ou varias sentezas de código se tras evaluarse unha expresión, esta valoración resulta positiva ou verdadeira, e ningunha se resulta falsa.

Un exemplo de pseudocódigo e que se o sensor de ultrasonidos non detecta ningún obxecto a menos de 20 centrímetros, que avance.

Agora imos a ver o fluxograma (non os usamos deica o de agora xa que como vimos os fluxogramas ata o de agora eran lineais).
Fluxograma condicional simple
No diagrama vese claramente que o fluxo do programa dependerá do valor da operación distancia<=20.
Engadimos ao final do fluxograma e para ser un pouco máis correctos, a elipse de fin de programa aínda que non o poidamos representar no mBlock xa que como vimos no tema 2, a opción de "detener" non está operativa para Arduino.. 

O que si está operativo e o bloque de condicional simple que sería o seguinte:

Bloque do condicional simple

Unha vez que temos o condicional, tan só precisamos algo que nos devolva un valor lóxico (verdadeiro ou falso) e introducilo dentro do bloque si.. entonces. As sentenzas que se executarían serían as que están dentro do propio bloque.

Arestora un exemplo, "Arrincando coas luces postas":
Imaxinemos que queremos que o robot avance a 255 durante 5 segundos se e que ao arrincar o programa detecta que está nunha zona con moita luz (unha luminosidade media no interior soe ser 60-80), polo tanto entenderemos que moita luz será con máis de 80. Poñemos esa restricción de ao arrincar xa que de momento temos non coñecemos outras ordes que nos permitan opcións mais avanzadas.

Como solución provisional podemos tomar a opción aun avance a 0 de velocidade no tocante de parar xa que non dispomos desa sentencia. O fluxograma, será moi semellante ao anterior e sería o seguinte:

Fluxograma que resolvería o exemplo



Solución do exemplo de "Arrincando coas luces postas"


Reto 4.1

Condicinal dobre

O condicional dobre simplemente amplía a funcionalidade do sinxelo de tal xeito que se non se cumple a condición, se realizan unha serie de accións alternativas. 

Se retomamos o exemplo de "Arrincando coas luces postas", e o ampliamos de tal xeito que ademáis, cando non detecte luz, o robot debe retroceder durante 3 segundos a 50 e logo pararse. O seu diagrama sería o seguinte (deixámolo máis complexo duplicando unha sentenza que podería estar despois do condicional, pero evitando xerar confusión):

Posible solución do exemplo ampliado de "Arrincando coas luces postas"

O bloque que imos a utilizar será o seguinte, que como se pode ver deixa un oco para inserir as accións no caso de que non se cumpra a condición.

Bloque do condicional dobre
A solución para o exemplo co que vimos traballando, sería:

Solución do exemplo de ampliación de "Arrincando coas luces postas"

Si... claro... vai tocar ampliar o reto anterior...
Reto 4.2
Lémbrasete dos operadores lóxicos? pois igual lles tes que dar un repaso antes do seguinte reto...
Reto 4.3
Para non alongar mais esta entrada, deixaremos outra das estruturas de control, os bucles para o seguinte tema..




No hay comentarios:

Publicar un comentario