Algoritmos Aula 9: Portugol Studio - Laços de Repetição do tipo enquanto() com contadores

Fluxograma com laço com número de repetições indefinido
Fluxograma com laço com número de repetições indefinido


Laços enquanto() com contadores

    Na aula passada, basicamente fizemos algo parecido com o fluxograma da imagem acima, isto é, promovemos um laço que, dependendo da resposta do usuário, ao final do processamento podia ser repetido ou encerrado. Está lembrado?

    Também te propus um desafio para incluir o nome do aluno antes das notas e depois dar como saída  "Fulano foi Aprovado" ou "Fulano foi Reprovado". Bom agora está na hora de dar uma solução para o desafio. 

    Veja o programa abaixo com as alterações necessárias, só que desta vez eu vou indentar o código para ficar mais legível o fluxo de dados. Sugiro entrar no Portugol WebStudio, clicar em Novo Arquivo e copiar e colar o código abaixo na tela. Renomeie o título para Média com Laço. Já comentamos em outras aulas como se faz isso. Rode algumas vezes para testar o código.

  1. programa {
  2.         funcao inicio () {
  3.                 caracter resposta
  4.                 inteiro frequencia
  5.                 cadeia nome
  6.                 real nota1,nota2,MediaFinal
  7.                 enquanto(verdadeiro){
  8.                         escreva("\nDigite a nome:  ")
  9.                         leia(nome)
  10.                         escreva("Digite a nota1:  ")
  11.                         leia(nota1)
  12.                         escreva("Digite a nota2:  ")
  13.                         leia(nota2)
  14.                         escreva("Digite a Frequência:  ")
  15.                         leia(frequencia)
  16.                         MediaFinal=(nota1+nota2)/2
  17.                         escreva("A média final: "+MediaFinal)
  18.                         se (MediaFinal>=5 e frequencia>=75){
  19.                          escreva("\n"+nome+" foi Aprovado")
  20.                         }
  21.                         senao{
  22.                          escreva("\n"+nome+" foi Reprovado")
  23.         }
  24.                         escreva("\nDigite s para sair ou apenas ENTER para continuar: ")
  25.                         leia(resposta)
  26.                         se(resposta=='s' ou resposta=='S'){
  27.                                 pare
  28.                         }
  29.                 }
  30. }

    Se você rodou algumas vezes, viu que ele agora pede o nome do aluno, pede as notas, pede a frequência, calcula a média e depois diz se o aluno foi aprovado ou reprovado. Quantos alunos você inseriu? E se o eu pedisse pra você contar quantos alunos foram inseridos e mostrar no final essa quantidade? Pra isso você precisaria de contadores.

Incluindo contadores

    Como eu já disse nas aulas de fluxograma, contador é uma variável que começa com 0 ou 1 que a cada laço é incrementada em uma unidade, por exemplo usando uma fórmula do tipo contador=contador+1. Examine o fluxograma abaixo:

Laço com contador
Laço com contador


    Pelo fluxograma eu estou iniciando o contador ANTES da entrada de dados com zero. Sendo assim, antes de começar todas as instruções, eu preciso aumentar o valor do contador para 1 para poder iniciar a contagem.

   Depois eu entro com os dados, faço os processamentos para cálculo, mostro o resultado da aprovação ou reprovação e pergunto ao usuário se quer interromper. Em caso negativo eu volto para o laço, aumento novamente o valor do contador e repito as operações novamente.

    Em um dado momento, quando o usuário quiser interromper o laço, eu mostro o valor final do contador que é resultado de todos incrementos (acréscimos) que a variável teve, depois de todos os laços. Compreendeu? Então vamos ao código e repare nas alterações em rosa:

  1. programa {
  2.         funcao inicio () {
  3.                 caracter resposta
  4.                 inteiro frequencia, contador
  5.                 contador=0
  6.                 cadeia nome
  7.                 real nota1,nota2,MediaFinal
  8.                 enquanto(verdadeiro){
  9.                         contador=contador+1
  10.                         escreva("\nDigite a nome:  ")
  11.                         leia(nome)
  12.                         escreva("Digite a nota1:  ")
  13.                         leia(nota1)
  14.                         escreva("Digite a nota2:  ")
  15.                         leia(nota2)
  16.                         escreva("Digite a Frequência:  ")
  17.                         leia(frequencia)
  18.                         MediaFinal=(nota1+nota2)/2
  19.                         escreva("A média final: "+MediaFinal)
  20.                         se (MediaFinal>=5 e frequencia>=75){
  21.                          escreva("\n"+nome+" foi Aprovado")
  22.                         }
  23.                         senao{
  24.                          escreva("\n"+nome+" foi Reprovado")
  25.         }
  26.                         escreva("\nDigite s para sair ou apenas ENTER para continuar: ")
  27.                         leia(resposta)
  28.                         se(resposta=='s' ou resposta=='S'){
  29.                                pare
  30.                         }
  31.                 }
  32.                 escreva("\nNúmero total de alunos: "+contador)
  33. }
Desafio

    Seguindo o fluxograma que começou com um contador em zero, eu tive que aumentar o contador logo no início do laço. Pergunto: Se o contador começasse com 1, onde ficaria o incremento do contador?

    Na próxima aula veremos outro tipo de laço em Portugol.


Próxima Aula                                                                                                                        Aula Anterior

Referências

MANZANO, J. A. N. G. Portugol Studio: Programação de Computadores em Português. São Paulo: Propes Vivens, 2017. 86p

NOSCHANG, LUIZ et all. Portugol Studio: Uma IDE para Iniciantes em Programação. In: XXXIV Congresso da Sociedade Brasileira de Computação - CSBC, 34º, 2014, Brasília, Anais Eletrônicos do Congresso da Sociedade Brasileira de Computação, Brasília, 2014. p. 1287 - 1296. Disponível em: <https://sol.sbc.org.br/index.php/wei/article/view/10954/10824>. Acesso em: 4 ago. 2024.

PORTUGOL WEBSTUDIO. Ajuda. Disponível em: <https://portugol.dev/> Acesso em 05 ago. 2024.

PORTUGOL WEBSTUDIO. Dúvidas e Perguntas. Disponível em: <https://portugol.dev/> Acesso em 05 ago. 2024.