Tomando decisões e repetindo instruções.


1. Expressões lógicas e fluxo de controle

Algoritmos são compostos por uma sequência de instruções bem definidas com início e fim. Em situações simples, a sequência ocorre de forma linear — por exemplo, ao realizar uma operação aritmética sobre dois números.

No entanto, surgem problemas quando o algoritmo precisa validar condições específicas, como verificar se o valor informado é um número, se é negativo ou se o campo foi deixado em branco. Essas situações exigem o uso de controle de fluxo.

Outro exemplo é quando se deseja exibir os mil primeiros números ímpares positivos. Não é eficiente inserir mil instruções no código. A solução é usar um trecho que seja capaz de se repetir várias vezes, isto é, utilizar estruturas de repetição.

Ambas as situações exigem o uso de estruturas que modificam o fluxo natural do algoritmo — seja para ramificar decisões ou para repetir partes do código.

Exemplo de fluxo linear:

Algoritmo sequencial

O algoritmo da figura 1 mostra um fluxo sequencial simples: entrada de três notas, cálculo da média e exibição do resultado. No entanto, ele não informa se o aluno está aprovado ou reprovado. Para isso, precisamos alterar o fluxo do algoritmo com uma condição.

Essa necessidade de desvio ou repetição do fluxo é um dos pilares da programação, permitindo que o código se adapte a diferentes situações.


1.1 Operadores de comparação e operadores lógicos

Os operadores de comparação são usados para comparar valores e expressões, retornando como resultado true (verdadeiro) ou false (falso). Os principais operadores são:

Já os operadores lógicos permitem combinar duas ou mais expressões. Os principais operadores lógicos são o E e o OU. Veja a tabela verdade a seguir:

Tabela Lógica (Quadro 1)

Expressão 1 Expressão 2 Operador E Operador OU
true true true true
true false false true
false true false true
false false false false

O operador E só retorna verdadeiro se todas as expressões forem verdadeiras. Já o operador OU retorna verdadeiro se pelo menos uma das expressões for verdadeira.


2. Programação por blocos: se (if) e se/senão (if/else)

No Scratch, podemos usar estruturas condicionais para alterar o fluxo de execução. O bloco se (if) executa comandos apenas quando uma condição é verdadeira. Isso é útil, por exemplo, em jogos de adivinhação:

Utilizando o bloco se (if)

No exemplo da figura 2, a variável numeroSorteado recebe o valor 21. O usuário digita um número, e se ele for igual a 21, uma mensagem de parabéns será exibida. Se for diferente, nada acontece.

Para tornar o código mais completo, usamos o bloco se/senão (if/else), que permite uma ação alternativa caso a condição não seja satisfeita.

Utilizando o bloco se/senão (if/else)

Nesse caso, se o usuário acertar o número, o personagem dirá "Parabéns". Se errar, será exibida a mensagem "Que pena, você errou". Assim, o jogador sempre recebe um retorno visual.

Dica prática: para tornar o jogo mais dinâmico, substitua o número fixo 21 por um valor aleatório usando o bloco um valor ao acaso entre, encontrado na categoria operadores.



3. Programação por blocos: repetição

Com o jogo funcionando, percebemos que ele ainda não é justo, pois o jogador tem apenas uma tentativa. Para resolver isso, usamos o bloco repete, que executa o mesmo conjunto de instruções múltiplas vezes.

Utilizando o bloco de repetição

Na figura 4, o código da adivinhação foi colocado dentro do bloco de repetição, configurado para executar 5 vezes. Assim, o jogador tem 5 chances para acertar o número.

Detalhes importantes:

Passo a passo da lógica do jogo:

Agora, sim, o código está mais justo, afinal, ele permite que o jogador realize mais de uma tentativa.

Veja o seguinte vídeo e acompanhe no seu computador para melhor entendimento: link



4. Considerações finais

Neste capítulo, aprendemos como modificar o fluxo de execução de um algoritmo, seja através de condições (estruturas se e se/senão), seja através de repetições (blocos repete).

A lógica de fluxo é fundamental para criar programas interativos, eficientes e dinâmicos. Ao dominar esses conceitos, é possível desenvolver soluções mais inteligentes e justas, como o jogo da adivinhação com múltiplas tentativas.