Estruturas de repetição com teste no final e com variável de controle

Objetivos:
Apresentar as estruturas de repetição com teste no final e com variável de controle, ambas também utilizadas para criar laços que executam blocos de comandos inúmeras vezes, enquanto determinadas condições são satisfeitas.
Recursos e materiais:
Última atualização:
22/06/2020
Aulas do capítulo:

Ao estudarmos as estruturas de repetição com teste no início, aprendemos como executar repetidamente uma sequência de comandos enquanto uma condição lógica for verdadeira. Seguindo nossos estudos sobre lógica de programação, conheceremos agora duas outras alternativas que também podemos utilizar para criarmos laços de repetição. Estamos falando das estruturas de repetição com teste no final e com variável de controle.

Estruturas de repetição com teste no final

As estruturas de repetição com teste no final são utilizadas para executarmos blocos de comandos por uma quantidade indefinida de vezes, enquanto uma condição lógica for verdadeira. Para que possamos implementá-las, utilizamos a sintaxe mostrada a seguir.

repita
      ação 1;
      …
      ação n;
enquanto (condição);

Conforme podemos observar, essas estruturas têm início com o comando “repita”. Em seguida, adicionamos o bloco de comandos a ser repetido, representado pelas ações de 1 a n. O término da estrutura de repetição acontece com a linha “enquanto (condição)”, sendo a condição indicada entre parênteses construída pelas expressões que estudamos em nossa aula sobre operadores aritméticos, relacionais e lógicos.

A diferença entre esses laços de repetição e aqueles que conhecemos na aula de estruturas de repetição com teste no início está no momento em que a condição lógica é verificada. Nos laços com teste no início, a inspeção da expressão lógica ocorre antes da execução do bloco de comandos. Já nas estruturas de repetição com teste no final, a condição lógica é verificada ao final de cada iteração, garantindo que as ações de 1 a n sejam executadas ao menos uma vez.

Um exemplo das estruturas de repetição com teste no final

Para entendermos melhor como funcionam as estruturas de repetição com teste no final, vejamos o exemplo de um algoritmo para ler e calcular a soma de N números reais, até que o usuário informe o número zero para encerrar os cálculos.

Pseudocódigo para calcular a soma de N números reais
1
inicio;
//Início do algoritmo
2
    inteiro: num;
//Declara variável num
3
    real: soma;
//Declara variável soma
4
    soma \leftarrow 0;
//Inicia o valor da soma
5
    repita
//Inicia o laço de repetição
6
        escreva (“Informe o número p/ somar: “);
//Exibe mensagem
7
        leia (num);
//Lê informação recebida
8
        soma \leftarrow soma + num;
//Atualiza o valor da soma
9
    enquanto (num <> 0);
//Teste da condição lógica
10
    escreva (“A soma vale “, soma);
//Exibe valor final
11
fim.
//Fim do algoritmo

A simulação desse pseudocódigo é ilustrada na Tabela 1 para uma situação em que o usuário insere os números 21, 13 e, finalmente, 0. Como a verificação da condição lógica ocorre somente ao final de cada iteração, o algoritmo atualiza o valor da soma mesmo após informarmos o número utilizado para interromper o processo. O resultado que obtemos não se altera somente porque esse valor era 0.

Simulação do algoritmo para fazer a soma de N números reais
Linha num soma num <> 0? Tela
1 Início do algoritmo
2
3
4 0
6 0 Informe o número a ser somado:
7 21 0 Informe o número a ser somado: 21 <ENTER>
8 21 0+21 Informe o número a ser somado: 21
9 21 0+21 Verdadeiro Informe o número a ser somado: 21
6 21 0+21 Informe o número a ser somado: 21
Informe o número a ser somado:
7 13 0+21 Informe o número a ser somado: 21
Informe o número a ser somado: 13 <ENTER>
8 13 0+21+13 Informe o número a ser somado: 21
Informe o número a ser somado: 13
9 13 0+21+13 Verdadeiro Informe o número a ser somado: 21
Informe o número a ser somado: 13
6 13 0+21+13 Informe o número a ser somado: 21
Informe o número a ser somado: 13
Informe o número a ser somado:
7 0 0+21+13 Informe o número a ser somado: 21
Informe o número a ser somado: 13
Informe o número a ser somado: 0 <ENTER>
8 0 0+21+13+0 Informe o número a ser somado: 21
Informe o número a ser somado: 13
Informe o número a ser somado: 0
9 0 0+21+13+0 Falso Informe o número a ser somado: 21
Informe o número a ser somado: 13
Informe o número a ser somado: 0
10 0 0+21+13+0 Informe o número a ser somado: 21
Informe o número a ser somado: 13
Informe o número a ser somado: 0
A soma vale: 34
12 Fim do algoritmo

Podemos comparar o pseudocódigo acima com o algoritmo que desenvolvemos em nossa aula de estruturas de repetição com teste no início para realizar o mesmo cálculo. Caso ainda não tenha estudado esse material, recomendamos a você leitor fazer uma pausa e acessá-lo, para que possa compreender com mais facilidade a diferença entre as duas estruturas de repetição.

Justamente pelo fato do bloco de comandos ser executado antes da condição lógica, com a estrutura de repetição com teste no final não foi necessário inserirmos comandos para exibir mensagens ao usuário e ler o primeiro valor informado por ele antes de iniciarmos o laço de repetição. Por outro lado, caso o número que o usuário precisasse informar para interromper o processo de soma tivesse valor diferente de zero, o resultado que obteríamos seria alterado.

Repetição com variável de controle

A última forma através da qual podemos implementar laços de repetição em nossos algoritmos é através das estruturas de repetição com variável de controle. Diferentemente dos outros dois casos em que o bloco de comandos podia ser repetido indefinidamente enquanto uma condição fosse satisfeita, nessa estrutura de repetição é necessário conhecermos a quantidade exata do número de ciclos a ser executado.

Conforme podemos observar na sintaxe abaixo, o comando para dar início às repetições com variável de controle é “para v de vi até vf passo p faça”, onde v é a variável de controle, vi o valor inicial de v, vf o valor final de v, e p o valor do incremento de v à cada iteração. Ao final do laço, temos também o comando “fimpara” utilizado para indicar o término do bloco de comandos.

para v de vi até vf passo p faça
      ação 1;
      …
      ação n;
fimpara;

Na primeira execução dessa estrutura de repetição, a variável v é iniciada com valor igual à vi. Ao final de cada iteração, v é incrementada no valor de p. O número de iterações é definido pela quantidade de vezes que v precisará ser incrementada até alcançar o valor de vf.

Um exemplo das estruturas de repetição com variável de controle

Podemos entender melhor os laços de repetição com variável de controle através do exemplo abaixo, que apresenta um algoritmo para contar de 0 a 10, de 2 em 2, imprimindo esses valores para o usuário.

Pseudocódigo para contar de 0 a 10, de 2 em 2
1
inicio;
//Início do algoritmo
2
    inteiro: i;
//Declara variável i
3
    para i de 0 até 10 passo 2 faça
//Inicia o laço de repetição
4
        escreva (i, “, “);
//Exibe contagem para o usuário
5
    fimpara;
//Fim do laço de repetição
6
fim.
//Fim do algoritmo

A simulação desse algoritmo é apresentada na Tabela 2. Através dela, observamos que a variável i recebe inicialmente o valor 0 (valor de vi) e, à cada iteração, aumenta seu valor em 2 (valor de p). No momento em que i se torna igual a 12 e supera o valor de vf (10), a repetição é interrompida.

Simulação do algoritmo para contar de 0 a 10, de 2 em 2
Linha i i <= 10? Tela
1 Início do algoritmo
2
3 0 Verdadeiro
4 0 0,
3 2 Verdadeiro 0,
4 2 0, 2,
3 2+2 Verdadeiro 0, 2,
4 4 0, 2, 4,
3 4+2 Verdadeiro 0, 2, 4,
4 6 0, 2, 4, 6,
3 6 + 2 Verdadeiro 0, 2, 4, 6,
4 8 0, 2, 4, 6, 8,
3 8 + 2 Verdadeiro 0, 2, 4, 6, 8,
4 10 0, 2, 4, 6, 8, 10,
3 12 Falso 0, 2, 4, 6, 8, 10,
6 Fim do algoritmo

Um segundo exemplo de repetição com variável de controle

Um exemplo um pouco mais complexo de laços de repetição com variável de controle é apresentado a seguir. Dessa vez, o algoritmo foi desenvolvido para ler um valor N informado pelo usuário e calcular o valor de H através da Equação (1).

H = 1 + \dfrac{1}{2} + \dfrac{1}{3} + \dfrac{1}{4} + ... + \dfrac{1}{N}
Pseudocódigo para calcular o valor de H pela Equação (1)
1
inicio;
//Início do algoritmo
2
    real: N, H;
//Declara variáveis reais N e H
3
    inteiro: den;
//Declara variável inteira den
4
    H \leftarrow 0;
//Atribui valor inicial para H
5
    escreva (“Informe o valor de N: “);
//Exibe mensagem para o usuário
6
    leia (N);
//Lê informação enviada
7
    para den de 1 até N passo 1 faça
//Inicia o laço de repetição
8
        H \leftarrow H + 1/den;
//Atualiza o valor de H
9
    fimpara;
//Fim do laço de repetição
10
    escreva (“O número H vale: “, H);
//Imprime o valor final de H
11
fim.
//Fim do algoritmo

Simule a execução desse algoritmo para alguns valores de N e compare as diferenças entre ele e o pseudocódigo implementado na aula de estruturas de repetição com teste no início para fazer o mesmo cálculo. O pseudocódigo pareceu mais simples com repetições com variável de controle?

Quando utilizar cada uma das estruturas de repetição?

Você talvez esteja se perguntando qual a melhor estrutura de repetição: com teste no início, com teste no final ou com variável de controle. Não podemos falar de uma estrutura que seja melhor ou pior que a outra e fica a critério do desenvolvedor escolher aquela com que se sente mais confortável para trabalhar e/ou que melhor se adequa à aplicação desejada. Na maioria das vezes, será possível utilizar qualquer uma dessas estruturas. Para ilustrarmos isso, três algoritmos são apresentados abaixo para calcular e imprimir a tabuada do número 5, cada um deles utilizando um laço de repetição diferente.

Utilizando estruturas de repetição com teste no início

Pseudocódigo para imprimir a tabuada do 5 utilizando repetição com teste no início
1
inicio;
//Início do algoritmo
2
    inteiro: cont;
//Declara a variável
3
    cont \leftarrow 0;
//Inicia o valor do contador
4
    enquanto (cont <=10)
//Inicia o laço de repetição
5
        escreva (“5 x”, cont, “= “, 5*cont);
//Exibe a contagem para o usuário
6
        cont \leftarrow cont + 1;
//Atualiza o valor do contador
7
    fimenquanto;
//Fim do laço de repetição
8
fim.
//Fim do algoritmo

Utilizando estruturas de repetição com teste no final

Pseudocódigo para imprimir a tabuada do 5 utilizando repetição com teste no final
1
inicio;
//Início do algoritmo
2
    inteiro: cont;
//Declara a variável
3
    cont \leftarrow 0;
//Inicia o valor do contador
4
    repita
//Inicia o laço de repetição
5
        escreva (“5x”, cont, “=”, 5*cont);
//Exibe a contagem para o usuário
6
        cont \leftarrow cont + 1;
//Atualiza o valor do contador
7
    enquanto (cont <= 10);
//Fim do laço e teste da condição
8
fim.
//Fim do algoritmo

Utilizando estruturas de repetição com variável do controle

Pseudocódigo para imprimir a tabuada do 5 utilizando repetição com variável de controle
1
inicio;
//Início do algoritmo
2
    inteiro: cont;
//Declara a variável
3
    para cont de 0 até 10 passo 1 faça
//Inicia o laço de repetição
4
        escreva (“5x”, cont, “=”, 5*cont);
//Exibe a contagem para o usuário
5
    enquanto (cont <= 10);
//Fim do laço e teste da condição
6
fim.
//Fim do algoritmo

Fica como desafio a você leitor, simular a execução de cada um desses algoritmos e garantir o entendimento completo das diferenças entre todas as estruturas de repetição. Na próxima aula, veremos alguns exercícios para que possamos praticá-las. De qualquer forma, caso tenha qualquer dúvida, deixe abaixo seu comentário para lhe ajudarmos.

Se você quer continuar estudando e crescendo no mundo da programação, encontrar oportunidades de praticar o conhecimento adquirido e fazer amizades com outras pessoas que também compartilham dessa paixão, acesse agora esse link e faça parte da nossa comunidade. Juntos, podemos chegar longe e fazer a diferença que queremos no mundo!

Referências bibliográficas

A. A. T. Maia, “Fundamentos da Computação – Algoritmos – Programação em Linguagem C”. Universidade Federal de Minas Gerais, 2013.

Deixe um comentário

%d blogueiros gostam disto: