Um dos motivos de termos nos dias de hoje, máquinas que fazem o trabalho que antes era desempenhado pelo homem, está no fato de ser trabalhos repetitivos, tais como soldar, apertar parafuso, dobrar, transportar materiais em pontos definidos, calcular fórmulas prontas, e assim por diante. Costumo dizer aos meus alunos que "Quando em determinado projeto você notar que já tinha feito isto antes, pare e veja se não é possível automatizar." Isso porque podemos estar fazendo ou dando uma instrução para um robô o qual ele já tinha feito, ou no caso do LEGAL, já tenha aprendido.
Um dos comandos muito utilizados em programação, são os laços de repetição. Estes laços são conhecidos como FOR, WHILE e DO WHILE, na linguagem LEGAL e +LEGAL ele é representado pelo REPITA.
Fazendo uma analogia ao mundo real, imagine que você tenha duas caixas, uma com vários parafusos e outra completamente vazia. Você pede para o seu amigo tirar 10 parafusos e colocar na caixa vazia. Parece fácil, mas tem um problema, o seu amigo não consegue pegar os 10 parafusos ao mesmo tempo, ele tem que pegar um a um. Se tivessemos que escrever num pedaço de papel uma rotina que lhe ajudasse ficaria assim:
Pegar um parafuso na caixa A
Lembrar quantos parafusos já pegou (1)
Colocar o parafuso na caixa B
Pegar um parafuso na caixa A
Lembrar quantos parafusos já pegou (2)
Colocar o parafuso na caixa B
Pegar um parafuso na caixa A
Lembrar quantos parafusos já pegou (3)
Colocar o parafuso na caixa B
......
e assim até pegar 10 parafusos.
Note que nossa torina teria várias linhas, porém em programação, podemos nos utilizar de um recurso útil, que é o laço de repetição. Veja no próximo exemplo como seria esta rotina:
REPITA enquanto a caixa B tiver menos que 10 parafusos
Pegar um parafuso na caixa A
Colocar o parafuso na caixa B
Lembrar quantos parafusos já pegou (parafusos da caixa B)
VOLTE para o REPITA
Note que a nossa rotina ficou reduzida a apenas 5 linhas. Explicando, temos o seguinte:
Na primeira linha, no comando REPITA o nosso amigo irá analizar quantos parafusos tem a caixa B, se tiver menos que 10, ele irá fazer o que se pede nas linhas abaixo, que é pegar um parafuso da caixa A, colocar na caixa B e ver quanto tem agora.
Depois ele se depara com a linha VOLTE para o REPITA, ou seja, para o começo do comando REPITA. Nesta linha ele volta a analisar quantos parafusos tem na caixa B, se tiver menos que 10, ele repete tudo de novo, porém se na caixa B tiver 10 parafusos ele não fará mais nada, parando o programa.
Traduzindo isso para o LEGAL teremos o seguinte:
Por Favor (Inicio do programa)
Repita 10 vezes (Irá executar 10 vezes)
[
Ligue L1 (Liga o LED 1)
Espere 1s (Deixa tudo como está por 1 segundo)
Desligue L1 (Desliga o LED 1)
Espere 1s (Deixa tudo como está por 1 segundo)
]
Obrigado (Encerra o programa)
Note que neste programa, temos dois colchetes, eles indicam onde inicia e onde termina o comando repita. O último colchete ("]") representa o VOLTE PARA O REPITA em nosso primeiro exemplo. Podemos colocar diversos comandos entre os colchetes, porém eles serão executados apenas 10 vezes. Qualquer coisa que estiver fora dos colchetes, serão executados apenas 1 vez.
Repetições infinitas.
Existem casos onde devemos fazer infinitas repetições, como por exemplo, piscar um LED constantemente, como um sinalizador, ou como por exemplo, verificar um sensor de umidade. Para isso podemos pedir para o programa repitir sempre os comando entre os colchetes, como no exemplo abaixo:
Por Favor (Inicio do programa)
Repita sempre (Irá executar sempre)
[
Ligue L1 (Liga o LED 1)
Espere 1s (Deixa tudo como está por 1 segundo)
Desligue L1 (Desliga o LED 1)
Espere 1s (Deixa tudo como está por 1 segundo)
]
Obrigado (Encerra o programa)
É possível também colocar um laço de repetição, dentro de outro laço de repetição. Dentro deste outro laçõ, poderemos colocar outro e mais outro. Porém é importante salientar que isto torna a execução do programa mais lento.
Abaixo temos um exemplo de um laço de repetição dentro de outro laço:
Por Favor
Repita 10 vezes
[
Ligue L1 (Liga o LED 1)
Espere 1s (Deixa tudo como está por 1 segundo)
Repita 10 vezes
[
Ligue L2 (Liga o LED 2)
Espere 1s (Deixa tudo como está por 1 segundo)
Desligue L2 (Desliga o LED 2)
Espere 1s (Deixa tudo como está por 1 segundo)
]
Desligue L1 (Desliga o LED 1)
Espere 1s (Deixa tudo como está por 1 segundo)
]
Obrigado (Encerra o programa)
Quando esta rotina for executada teremos o acendimento do LED 1, depois teremos 10 piscadas do LED 2, e após o LED 1 se apagará. Novamente teremos o LED 1 acesso pela segunda vez, mais 10 piscadas do LED 2 e depois o desligamento do LED 1. Isso se repetirá por 10 vezes. Assim, teremos no final do programa, piscado 10 vezes o LED 1 e 100 vezes o LED 2. Isso porque a cada piscada do LED 1 (primeiro REPITA) teremos 10 psicadas do LED 2, pois o laço que pisca 10 vezes o LED 2 está dentro do REPITA do LED 1 que também pisca 10 vezes. Logo 10 X 10 = 100.
DESAFIO PARA A SALA DE AULA
Um desafio que costumo passar em sala de aula é fazer com que o LED 1 pisque 1 vezes depois o LED 2 duas vezes e o LED 3 quatro vezes. Provavelmente o aluno tentará colocar o laço repita do LED 3 dentro do laço do LED 2, o que não terá o mesmo efeito. Com este teste espero que o aluno tenha o interesse de colocar dois laços REPITA dentro do primeiro laço REPITA do LED 1.