Vamos começar mais um artigo da série ALGORITMOS e hoje falaremos sobre mais um comando de controle de programa, o DO-WHILE.
Relembrando
Estruturas Condicionais:
- IF/ELSE (SE/ENTÃO)
- SWITCH/CASE (CHAVE/CASO)
Estruturas de Repetição:
- WHILE (ENQUANTO)
- REPEAT/UNTIL (REPITA ATÉ QUE) ou DO/WHILE (FAÇA ENQUANTO)
- FOR (PARA)
DO-WHILE
O comando Do-While é parecido com o comando While, mas existe uma pequena diferença entre eles. Vamos observar o fluxograma apresentado na Figura 1:

Note que a condição de parada está depois dos comandos. Isso significa que o DO-WHILE sempre será executado pelo menos uma vez. Os comandos do bloco DO-WHILE só serão executados se a avaliação da condição resultar VERDADEIRA. Essa é a diferença entre esses dois comandos. A sintaxe é a seguinte:
repita comandos ate (condição)
Os comandos do do-while serão repetidos quantas vezes forem necessárias até que a condição definida seja alcançada. Vamos ver um exemplo:
algoritmo "Somando os números de 1 a 10"
var
i, soma: inteiro
inicio
soma <- 0
i <- 0
repita
soma <- soma + i
i <- i + 1
escreval("i: ", i)
escreval("Soma: ", soma)
ate(i = 10)
fimalgoritmo
Esse exemplo mostra como somar os números de 1 a 10, sem a necessidade de alguém digitar os números, o próprio programa faz a soma sozinho. São necessárias duas variáveis: i e soma. A variável i funciona como um contador, a cada vez que se entra no do-while, ele soma mais um, e é assim que conseguimos chegar ao valor 10. A variável soma armazena o valor da soma, que é o resultado de soma + i, e também é somado de forma iterativa, ou seja, a cada vez que o do-while é executado.
A condição de parada desse LOOP é i=10, então, enquanto o valor de i não chegar à 10, o LOOP continuará executando. Quando i for igual a 10, a execução dos comandos do bloco do-while são encerradas, e o controle volta para o programa principal. Esse código faz exatamente a mesma coisa que o código do artigo anterior, mas desta vez estamos usando DO-WHILE e não WHILE ou FOR.
As linhas de 7 a 12 são as que correspondem ao comando do-while que, no VISUALG, no PASCAL e no PSEUDOCÓDIGO é chamado de REPEAT-UNTIL ou REPITA ATÉ QUE. A Tabela 1 apresenta o teste de mesa do código:
Tabela 1: Teste de Mesa
| iteração | soma ← soma + i | i ← i + 1 | escreva i | escreva soma | até (i=10) |
| 1 |
soma ← 0 + 0 soma ← 0 |
i ← 0 + 1 i ← 1 | 1 | 0 |
1 = 10 F |
| 2 |
soma ← 0 + 1 soma ← 1 |
i ← 1 + 1 i ← 2 | 2 | 1 |
2 = 10 F |
| 3 |
soma ← 1 + 2 soma ← 3 |
i ← 2 + 1 i ← 3 | 3 | 3 |
3 = 10 F |
| 4 |
soma ← 3 + 3 soma ← 6 |
i ← 3 + 1 i ← 4 | 4 | 6 |
4 = 10 F |
| 5 |
soma ← 6 + 4 soma ← 10 |
i ← 4 + 1 i ← 5 | 5 | 10 |
5 = 10 F |
| 6 |
soma ← 10 + 5 soma ← 15 |
i ← 5 + 1 i ← 6 | 6 | 15 |
6 = 10 F |
| 7 |
soma ← 15 +6 soma ← 21 |
i ← 6 + 1 i ← 7 | 7 | 21 |
7 = 10 F |
| 8 |
soma ← 21 + 7 soma ← 28 |
i ← 7 + 1 i ← 8 | 8 | 28 |
8 = 10 F |
| 9 |
soma ← 28 + 8 soma ← 36 |
i ← 8 + 1 i ← 9 | 9 | 36 |
9 = 10 F |
| 10 |
soma ← 36 + 9 soma ← 45 |
i ← 9 + 1 i ← 1 | 10 | 45 |
10 = 10 V |
| 11 | – | – | – | – |
– |
No teste de mesa verificamos que, enquanto a resposta da condição for FALSA, os comandos contidos no DO-WHILE continuarão a executar. A partir do momento em que i=10 for VERDADEIRO, a execução do bloco é encerrada. Vamos ver agora como fica esse mesmo código em outras linguagens:
JAVA
package soma;
public class Soma {
public static void main(String[] args) {
int i, soma;
i = 0;
soma = 0;
do {
soma = soma + i;
i = i + 1;
System.out.println("i: " + i);
System.out.println("soma: " + soma);
} while (i < 10);
}
}
PASCAL
program numeros;
uses wincrt, crt;
var
i, soma : integer;
begin
i:=0;
soma:=0;
repeat
soma := soma + i;
i := i + 1;
writeln('i: ', i);
writeln('soma: ', soma);
until(i=10) ;
readkey;
end.
C
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, soma;
soma = 0;
i = 0;
do{
soma = soma + i;
i = i + 1;
printf(" \n i: %d", i);
printf(" \n soma: %d", soma);
}while(i<10);
printf(" \n ");
return 0;
}
C++
#include <iostream>
using namespace std;
int main()
{
int i, soma;
soma = 0;
i = 0;
do{
soma = soma + i;
i = i + 1;
cout << "\n i: " << i;
cout << "\n soma: " << soma;
}while(i<10);
cout << "\n";
return 0;
}
Observem que nas linguagens C, C++ e Java a condição de parada é i<10 e no Pascal e no VisuAlg é i=10. Se você tentar usar i=10 nessas linguagens, o código entrará em loop infinito, devido à estrutura da própria linguagem de programação, por isso, é sempre bom aprender as estruturas e sintaxe de cada linguagem. O raciocínio está certo, mas a forma com que a linguagem trabalha pode não aceitar a forma que você quer fazer, portanto, consulte sempre o manual da Linguagem específica.
Conclusão
Assim terminamos a parte de comando de controle de programa! A partir dos próximos artigos vamos estudar um pouco sobre Estruturas de Dados simples: arrays e registros.
Exercícios
1. Faça um programa para calcular a área de um triângulo e que não permita a entrada de dados inválidos, ou seja, medidas menores ou iguais à zero.
2. Faça um programa que apresente o menu de opções a seguir, permita ao usuário escolher a opção desejada, receba os dados necessários para executar a operação e mostre o resultado. Verifique a possibilidade de opção inválida e não se preocupe com restrições do tipo salário inválido. Menu de opções: 1 – Imposto, 2 – Novo Salário, 3 – Classificação, 4 – Finalizar o programa, 5 – Finalizar o programa. Digite a opção desejada. Na opção 1: receber o salário de um funcionário, calcular e mostrar o valor do imposto usando as regras da tabela 3. Na opção 2: receber o salário de um funcionário, calcular e mostrar o valor do novo salário usando as regras da tabela 4. Na opção 3: receber o salário de um funcionário e mostrar sua classificação usando a tabela 5.
Tabela 3
|
SALÁRIOS |
% DO IMPOSTO |
|
Menor que R$500,00 |
5 |
|
De R$500,00 a R$850,00 |
10 |
|
Acima de R$850,00 |
15 |
Tabela 4
|
SALÁRIOS |
AUMENTO |
|
Maiores que R$1.500,00 |
R$250,00 |
|
De R$750,00 (inclusive) a R$1.500,00 (inclusive) |
R$50,00 |
|
De R$450,00 (inclusive) a R$750,00 |
R$75,00 |
|
Menores que R$450,00 |
R$100,00 |
Tabela 5
|
SALÁRIOS |
CLASSIFICAÇÃO |
|
Até R$700,00 |
Mal remunerado |
|
Maiores que R$700,00 |
Bem remunerado |
3. Faça um programa que receba várias idades, calcule e mostre a média das idades digitadas. Finalize digitando idade igual a zero.
4. Foi feita uma pesquisa sobre a audiência de canal de TV em várias casas de uma cidade, em determinado dia. Para cada casa consultada foi fornecido o número do canal (4, 5, 7, 12) e o número de pessoas que estavam assistindo àquele canal. Se a televisão estivesse desligada, nada era anotado, ou seja, essa casa não entrava na pesquisa. Faça um programa que: a) Leia um número indeterminado de dados (número do canal e número de pessoas que estavam assistindo); b) Calcule e mostre a porcentagem de audiência de cada canal. Para encerrar a entrada de dados, digite o número do canal zero.










Copiei os fontes, vou brincar com eles em cada compilador necessário para tal e depois parto para os exercícios.
opa!!! AÍ SIM!!!