Algoritmos Aula 07: Portugol Studio - Controle de Fluxo de dados Condicionais e Laços de Repetição

Opção para abrir arquivos - Portugol Studio
Opção para abrir arquivos destacada em vermelho

Como o Portugol controla o fluxo dos dados

    Na aula passada vimos como salvar um arquivo no Portugol Webstudio. Agora eu quero recuperá-lo e continuar com modificações. Para isso vou clicar na opção Abrir Arquivo da tela inicial do Portugol WebStudio, clicar na opção ABRIR ARQUIVO (foto acima) e recuperar o arquivo media.por da aula passada disponível na pasta Downloads.

Estruturas de Controle de Fluxo

    Em programação Estruturas de Controle de Fluxo são elementos que permite alteram o fluxo de dados de um programa com base em uma condição, sugerindo caminhos alternativos ao fluxo ou fazendo com que o fluxo retorne a algum ponto. Começaremos a ver como o Portugol lida com isso.

Condicionais

    Nesse arquivo vimos um algoritmo simples para o cálculo da média final com base em duas notas de provas. No entanto já tínhamos visto nas aulas de fluxogramas que era possível introduzir no algoritmo um controle de fluxo condicional que é um ponto do programa para tomar uma decisão com base em uma condição (figura abaixo).

Fluxograma com exemplo de condição
Fluxograma com exemplo de condição

    Nesse fluxograma, após o cálculo da média, aplicávamos a condição de que se a Média Final for maior ou igual a 5, a saída na tela será a palavra "Aprovado", senão será a palavra "Reprovado"

    Repare que na frase que destaquei no parágrafo anterior temos três partes distintas na cor rosa: uma condição, depois o resultado caso a condição seja satisfeita e por último o resultado caso a condição não seja satisfeita.

    Esse mesmo raciocínio pode ser aplicado em linguagens de programação e também no Portugol  através de um comando chamado se e o senao. Esses comandos possuem a seguinte estrutura básica:

    se (condição){
        instruções caso a condição seja verdadeira ou satisfeita

    }
    senao{

        instruções caso a condição seja falsa ou NÃO satisfeita
    }

    A condição será uma expressão lógica escrita entre parenteses () que no nosso caso foi definida nas aulas anteriores como sendo a variável MediaFinal>=5

    Já as instruções podem conter uma ou mais linhas, mas no nosso caso, a saída na tela obtida apenas com a função escreva("\nAprovado") ou escreva("\nReprovado"), atende aos nossos requisitos. Assim podemos usar o seguinte programa:

  1. programa {
  2.         funcao inicio () {
  3.                 real nota1,nota2,MediaFinal
  4.                 escreva("Digite a nota1:  ")
  5.                 leia(nota1)
  6.                 escreva("Digite a nota2:  ")
  7.                 leia(nota2)
  8.                 MediaFinal=(nota1+nota2)/2
  9.                 escreva("A média final: "+MediaFinal)
  10.                 se (MediaFinal>=5){
  11.                 escreva("\nAprovado")
  12.                 }
  13.                 senao{
  14.                 escreva("\nReprovado")
  15. }
  16. }

    Em relação ao programa original da aula passada temos as seguintes alterações: 

  • Incluímos uma nova variável do tipo real chamada MediaFinal para encurtar o código evitando repetições desnecessárias e deixá-lo mais legível
  • Incluímos a condição com os comandos se... senao... conforme já explicamos sobre a sua estrutura e
  • utilizamos uma indentação entre as linhas 10 e 15, afastando as instruções da margem com a finalidade de deixar o código mais legível representando o possível fluxo dos dados.
    Modifique o seu programa media.por incluindo as alterações mostradas e execute testes.

Laços de repetição

    Ao abordarmos fluxograma comentamos que laços de repetição são situações onde um conjunto de instruções é novamente executado enquanto uma dada condição for satisfeita. Comentei também que existem situações onde o número de repetições ou laços podem ser previamente determinado, como também existem situações onde o número de repetições é indeterminado ou indefinido.

  Em Sistemas Embarcados é comum a situação onde um conjunto de instruções é repetido indefinidamente de forma quase eterna, enquanto o equipamento estiver ligado ou apresentar algum erro ou defeito. Chamamos isso de laço ou loop infinito.

  Em Portugol essa situação de laço infinito pode ser facilmente demonstrada com a instrução enquanto, que possui a seguinte estrutura:

    enquanto(condição a ser satisfeita){
        instruções a serem feitas em uma ou mais linhas
    }

    Repare que este comando testa uma condição e se essa condição for satisfeita ou verdadeira, ele executa os comandos que estiverem entre as chaves {}. No caso dos laços infinitos, o programador inseri uma condição que sempre será satisfeita ou verdadeira. Por exemplo, se eu usar a instrução:

    enquanto(verdadeiro){
        instruções a serem feitas em uma ou mais linhas
    }

    Tudo que estiver entre as chaves {} serão executadas!

Exemplo de laço infinito

    Digamos que eu queira fazer o nosso programa de cálculo de média ser executado indefinidamente com o uso do enquanto(verdadeiro){}. Para isso faça as seguintes alterações destacadas em rosa e depois execute o programa:

  1. programa {
  2.         funcao inicio () {
  3.                 real nota1,nota2,MediaFinal
  4.                 enquanto(verdadeiro){
  5.                 escreva("\nDigite a nota1:  ")
  6.                 leia(nota1)
  7.                 escreva("Digite a nota2:  ")
  8.                 leia(nota2)
  9.                 MediaFinal=(nota1+nota2)/2
  10.                 escreva("A média final: "+MediaFinal)
  11.                 se (MediaFinal>=5){
  12.                  escreva("\nAprovado")
  13.                 }
  14.                 senao{
  15.                  escreva("\nReprovado")
  16. }
  17.                 }
  18. }
    Repare que eu inclui uma nova linha 4 com a instrução enquanto(verdadeiro){, mas não fechei as chaves. Só fui fechar a chave da instrução incluindo uma nova linha 17. Isso fez com que tudo que estivesse entre as linhas 4 e 16 fossem repetidos indefinidamente. 

    Na linha 5 foi incluído o caractere \n na concatenação, para fazer com que "Digite a nota1:" não fique grudado com "Aprovado" ou "Reprovado". Um bom exercício seria executar o programa sem esse \n para ver.

    Para interromper a execução do laço infinito, clique no botão PARAR EXECUÇÃO (figura abaixo).

Botão parar execucação
Botão Parar em destaque vermelho

    Cabe comentar que o programa ficaria mais legível se promovêssemos uma indentação, isto é, um afastamento da margem nas linhas de 5 a 16, para deixar bem claro que essas instruções estão dentro do laço, porém em Portugol a indentação é opcional. 

    Salve o seu programa conforme já ensinamos que nas próximas aulas tornaremos esse laço mais aprimorado. Click abaixo em "< Postagem mais recente" para continuar o seu curso.