com teste no fnal
8.2 Estrutura de repetição com teste no final (repete ate)
Outra estrutura bastante semelhante a anterior, também com a condi- cional definida no final da estrutura, é a repete...ate. A sua diferença básica
em relação ao faz...enquanto é que ela encerra a execução do laço apenas
quando a condição for verdadeira . Vejamos então sua sintaxe.
Quadro 2 Sintaxe de estrutura de repetição repete...ate e representação em fluxograma. SINTAXE EM
PSEUDOCÓDIGO FLUXOGRAMA
Compare o fluxograma dessa estrutura com o do faz ... enquanto para
identificar a diferença de funcionalidade.
Veja um pequeno exemplo, no qual o pseudocódigo apresenta na tela os números de 1 a 10, utilizando essa estrutura.
Você pôde notar, nesse exemplo, que o laço só encerra sua execução quando a sua condição retorna um valor verdadeiro; nesse caso, quando a
variável ié igual a dez.
Vamos exercitar um pouco? Tente resolver o seguinte problema e só depois de ter a sua versão do algoritmo funcionando confira com o pseudocódigo aqui apresentado para poder comparar detalhes e diferenças das implementações.
2 Problema : desenvolva um jogo no qual o computador escolhe um
número inteiro positivo entre 0 (zero) e 100 (cem) de forma alea- tória (já utilizamos antes essa função). Após determinar o número (sem exibi-lo ao usuário), o computador solicitará que você per- maneça “chutando” valores até acertar o número oculto. A cada tentativa do usuário, o computador deve informar se o número oculto é maior ou menor do que o informado pelo jogador. O jogo terminará no momento em que o número for localizado, quando então o computador deverá encerrar o laço, informando o número oculto e a quantidade de tentativas necessárias para encontrá-lo.
Fácil, não é verdade? E se não desejássemos que o jogo encerrasse ao ser encontrado o número? Pois bem. Se quisermos permitir que o jogador decida se quer parar de jogar ou tentar uma nova rodada do jogo, é necessário reali- zar uns pequenos ajustes no pseudocódigo. Pense um pouco antes de conferir o algoritmo pronto para ver se você consegue adequar o código anterior para permitir essa funcionalidade.
Pronto! Analise esse código e compare com o anterior para verificar quais foram as alterações implementadas.
Com isso, estamos encerrando o conteúdo desta aula e nos aproximando do final da nossa disciplina. Não deixe de executar as atividades do caderno e de acessar o material complementar disponibilizado pelos professores.
Síntese da aula
As estruturas de repetição com teste no final apresentam uma variante à estrutura de repetição com teste no início, tendo como principal diferença o fato de que a estrutura com teste no início pode ser executada nenhuma, uma ou diversas vezes. Já as estruturas com teste no final têm seu bloco de instru- ções executadas ao menos uma vez, independentemente do valor do seu teste lógico (condição). Assim esse tipo de estrutura é executado uma ou diversas vezes, mas nunca nenhuma vez.
Atividades
1. As estruturas de repetição possuem características particulares em sua construção e forma de execução. Considerando que há estruturas que permitem a repetição nenhuma, uma ou várias vezes, analise o
algoritmo a seguir sabendo que, sem modificar o tipo da estrutura de repetição, desejo efetuar uma pequena alteração para que o laço repita
nenhuma vez. Assinale a alternativa mais adequada.
inicio
inteiro numero, contador repete
escrever “Introduza um numero:” ler numero
contador <- contador + 1 ate contador > 5
fm
b) Apenas é necessário modificar o teste condicional para contador < 5
em vez de contador > 5.
c) É possível realizar a modificação adequadamente movendo a linha
contador <- contador + 1 para o início do bloco, logo abaixo de repete.
d) Não é possível fazer a modificação deseja, já que a estrutura em questão sempre executa o bloco pelo menos uma vez.
2. A função básica de um caixa de supermercado é apenas somar os preços dos produtos desejados para compra pelo cliente. Diante disso, um algo- ritmo básico para a soma dos produtos que o cliente comprará pode ser dado pelo algoritmo a seguir:
inicio
inteiro opcao, quantidade real total <– 0.0
repete
escrever “Produto 1 - R$ 10,00\n” escrever “Produto 2 - R$ 25,00\n” escrever “Produto 3 - R$ 50,00\n”
escrever “Escolha um número de produto ou 0 para sair”:
ler opcao
escolhe opcao caso 0:
escrever “Total da compra:”, total caso 1:
ler quantidade
total <– total + quantidade * 10.0 caso 2:
ler quantidade
total <– total + quantidade * 25.0 caso 3:
ler quantidade
total <– total + quantidade * 50.0
fmescolhe
ate (opcao = 0)
Diante do algoritmo, se forem entrados os valores 2, 5, 3, 1, 0, respec- tivamente, teremos a saída final mostrada pelo Portugol da seguinte forma:
a) total da compra: 275.0;
b) o algoritmo não executará devido à inexistência da cláusula defeito
na sintaxe do algoritmo escolhe...caso;
c) total da compra: 175.0;
d) o algoritmo entrará em uma repetição infinita.
3. Quando algoritmos são criados, algumas vezes há necessidade de controlar a ordem em que as instruções deverão ser executadas pelo computador de modo a solucionar um problema. Para permitir que o fluxo de execução seja controlado, devemos utilizar as estruturas de controle. Sobre fluxo de execução, leia as afirmativas a seguir e assinale a alternativa correta.
I. Na estrutura seqüencial, os comandos de um algoritmo são executados em uma seqüência pré-estabelecida, ou seja, cada comando é executado somente após o término do comando anterior.
II. Na estrutura de decisão (desvio condicional), são comuns situ- ações em que uma instrução, ou conjunto de instruções, devam ser executados sempre para situações verdadeiras e falsas.
III. Em todas as estruturas de repetição, uma sequência de comandos deverá ser executada obrigatoriamente uma ou várias vezes, de acordo com uma condição.
a) Somente as afirmativas I e II são verdadeiras. b) Somente a afirmativa II é falsa.
c) Somente a afirmativa III é verdadeira. d) Somente as afirmativas II e III são falsas.
4. Um algoritmo para selecionar o maior número entre N digitados, até o usuário digitar zero, poderia ser definido como:
inicio
inteiro maior <- 1 inteiro numeros repete
escrever “Digite um numero (zero para sair): “ ler numeros
se numeros > maior entao maior <- numeros
fmse
ate maior = 0
escrever “O maior numero digitado foi: “ , maior
fm
Dado o algoritmo anterior, o que está errado em relação ao que foi proposto?
a) O Número maior não será calculado de forma correta, pois o mesmo sempre estará com o valor zero.
b) A variável número não armazena o valor digitado pelo usuário.
c) O laço de repetição encerra após a leitura do número 1, não do zero. d) O laço de repetição ficará repetindo, pois nunca será atendida a
condição de parada.
Comentário das Atividades
Ao resolver a atividade um você alcançou o objetivo da aula de dife-
renciar a aplicabilidade das estruturas de repetição com teste no início das estruturas de repetição com a aplicabilidade de teste no final.
Para a atividade um, a resposta correta é a alternativa (d). Segundo a
proposta da atividade, de modificar o algoritmo para que não seja executado o bloco interno ao laço sem que seja modificada a estrutura de repetição, podemos refletir que modificar a variável contador para 6 não impede de
executar pelo menos uma vez o bloco de instruções do laço. Modificar o teste condicional para contador < 5 também não impede a execução do bloco de
instruções do laço, já que o teste da estrutura repete...até é sempre realizado
dentro do bloco interno de instruções também não evita a execução do bloco. Portanto a alternativa (d) é a correta, já que a modificação desejada não é possível sem que se modifique a estrutura de repetição.
Asatividades dois,três equatro ajudaram você a atingir o segundo obje-
tivo: entender a funcionalidade das estruturas de repetição com teste no final. Naatividade dois, a alternativa correta é a (c). Para resolver essa atividade,
é necessário analisar o algoritmo. No próprio enunciado são apresentados os valores que deverão ser entrados, na ordem em que foram apresentados: 2, 5, 3, 1, 0. O algoritmo iniciará execução e logo solicitará que o primeiro valor seja entrado na linha 9, que representa a opção selecionada. Como o primeiro dado entrado é 2, a estrutura de seleção múltipla desviará a execução do algoritmo para a linha 16 (caso 2). Na seqüência (linha 17), é pedido ao usuário que entre com o segundo valor (5, de acordo com o enunciado), que será atribuído à variável quantidade. Na linha 18, a variável total receberá o resultado do proces- samento de total + quantidade * 25. Total nesse momento é 0.0 (zero), como
atribuído na linha 3 e quantidade igual a 5. Reescrevendo, total vai receber o resultado do processamento de 0 + 5 * 25 que é igual a 125. Em seguida, por
causa do laço de repetição repete...até, parte do algoritmo será repetida. É soli-
citado ao usuário a entrada do terceiro dado (3, de acordo com o enunciado). A estrutura de seleção múltipla desviará a execução do algoritmo para a linha 19 (caso 3). Na seqüência (linha 20), é pedido ao usuário que entre com o quarto valor (1), de acordo com o enunciado, que será atribuído à variável quantidade. Na linha 21 a variável total vai receber o resultado do processamento de total + quantidade * 50. Sabendo que total é igual a 125 e quantidade igual a 1, pode-
mos reescrever para 125 + 1 * 50, que é igual a 175. Em seguida, por causa do
laço de repetição repete...até, parte do algoritmo será repetida. É solicitado ao
usuário a entrada do último dado (0). A estrutura de seleção múltipla desviará a execução do algoritmo para a linha 11 (caso 0). É impresso em tela Total da compra: 175.0 (lembrando que total é uma variável real) e sairá finalizando o
algoritmo.
Para a atividade três, a resposta é a alternativa (d). Isso porque a afir-
mativa ( I ) é verdadeira, pois como o próprio nome diz, estrutura seqüencial obedece a uma seqüência linear de execução. Já na afirmativa (II), sabemos que um teste condicional é baseado em lógica convencional e, portanto, deve resultar em um valor verdadeiro ou falso. Lembre-se dos tipos de desvios con-
dicionais: seleção simples, composta e encadeada. Repare que nessa afirma- tiva não é especificada qual o tipo de desvio condicional, ou seja, a afirmação generaliza para todos os tipos. Contudo, na seleção simples, uma instrução ou um conjunto de instruções é executado somente se o teste condicional espe-
cificado retornar o valor verdadeiro. Adicionalmente, na seleção composta, as instruções contidas nos desvios condicionais devem ser executadas sempre para situações verdadeiras ou falsas. Isso torna a afirmativa (II) incorreta. A afirmativa (III) também é falsa, pois uma seqüência de comandos pode ser executada nenhuma , uma ou várias vezes.
Para a atividade quatro, a alternativa a ser assinalada é a (d), uma vez
que a variável maior já inicia com um valor diferente de zero e, em nenhum
momento na execução do algoritmo ela poderá assumir o valor zero, pois o desvio condicional dentro do bloco do laço de repetição não permite essa atribuição. A variável que deveria servir para encerrar o laço seria a números,
pois é ela que recebe o valor digitado pelo usuário, enquanto a maior sempre
irá armazenar o maior valor digitado.
Na próxima aula
Encerraremos a disciplina abordando mais uma estrutura de repetição: estrutura de repetição com variável de controle. Realize uma leitura prévia desse conteúdo para uma melhor compreensão.