• Nenhum resultado encontrado

Estruturas de repetição

No documento Livro Logica Programacao b (páginas 89-100)

Estrutura de repetiçãoEstrutura de repetição

7.1 Estruturas de repetição

7.1 Estruturas de repetição

Todos os pseudocódigos que estudamos e implementamos até agora, Todos os pseudocódigos que estudamos e implementamos até agora, durante nossas aulas, eram lineares, seqüenciais, podendo ter desvios na sua durante nossas aulas, eram lineares, seqüenciais, podendo ter desvios na sua execução, mas sempre avançando em direção ao fim do algoritmo, nunca execução, mas sempre avançando em direção ao fim do algoritmo, nunca retornando para executar novamente algum comando anterior. Ou seja, retornando para executar novamente algum comando anterior. Ou seja, todos eles solucionavam o problema proposto apenas uma vez, tendo que todos eles solucionavam o problema proposto apenas uma vez, tendo que ser reiniciados para nova utilização. Isso, como você já deve ter notado, não ser reiniciados para nova utilização. Isso, como você já deve ter notado, não é algo muito prático.

é algo muito prático.

PPense, por exemplo, no algoritmo para calcular a ense, por exemplo, no algoritmo para calcular a média das notas de ummédia das notas de um aluno. Poi

aluno. Pois é... Para um ús é... Para um único aluno funciona muito bem. nico aluno funciona muito bem. Contudo, se tivés-Contudo, se tivés- semos que usar esse algoritmo para calcular a média de uma turma com 50 semos que usar esse algoritmo para calcular a média de uma turma com 50 alunos, certamente não seria uma tarefa muito prática.

alunos, certamente não seria uma tarefa muito prática. Uma saída, não muitoUma saída, não muito inteligente, seria repetir o trecho do programa quantas vezes fosse necessár inteligente, seria repetir o trecho do programa quantas vezes fosse necessário,io, ou seja, no caso das médias, o pseudocódigo teria o trecho que solicita as ou seja, no caso das médias, o pseudocódigo teria o trecho que solicita as notas, calcula e exibe a média, repetido 50 vezes.

notas, calcula e exibe a média, repetido 50 vezes. É aqui que entram em cena as estrutura

É aqui que entram em cena as estruturas de repetição. Comecemos entãos de repetição. Comecemos então a compreender suas estruturas e lógica de funcionamento.

a compreender suas estruturas e lógica de funcionamento.

7.1.1 Repetição com teste no início (enquanto ... faz)

7.1.1 Repetição com teste no início (enquanto ... faz)

O laço de repetição com teste no início é uma estrutura que executa a O laço de repetição com teste no início é uma estrutura que executa a repetição de um determinado trecho do código desde que

repetição de um determinado trecho do código desde que permitido por umapermitido por uma verificação

verificação anterioranterior..

Essa estrutura com teste no início é denominada de

Essa estrutura com teste no início é denominada de enquantoenquanto e permite e permite

a repetição de um trecho de código enquanto uma determinada condição for a repetição de um trecho de código enquanto uma determinada condição for verdadeira. Sua sintaxe é representada na figura seguinte.

Quadro 1 Sintaxe e fluxograma do loop com teste no início. Quadro 1 Sintaxe e fluxograma do loop com teste no início.

SSIINNTTAAXXE E EEM M PPSSEEUUDDOOCCÓÓDDIIGGOO FFLLUUXXOOGGRRAAMMAA

Vejamos agora um pequeno exemplo do uso dessa estrutura. O algo- Vejamos agora um pequeno exemplo do uso dessa estrutura. O algo- ritmo seguinte realiza a exibição em tela dos números de 1 a 10 em ordem ritmo seguinte realiza a exibição em tela dos números de 1 a 10 em ordem crescente, utilizando o laço de repetição

crescente, utilizando o laço de repetição enquantoenquanto..

É criada uma variável

É criada uma variável ii do tipo inteiro, a qual a cada execução do laço é do tipo inteiro, a qual a cada execução do laço é

incrementada em 1. Ou seja, a cada

incrementada em 1. Ou seja, a cada execução, a variável recebe o seu valor atuaexecução, a variável recebe o seu valor atuall mais um (i

mais um (i ←← i +1). Essa variável costuma ser denominada de i +1). Essa variável costuma ser denominada de contador contador , haja, haja vista que sua função é justamente contar a quantidade de iterações realizadas vista que sua função é justamente contar a quantidade de iterações realizadas ou a quantidade de vezes que uma determinada situação ocorre. A condição ou a quantidade de vezes que uma determinada situação ocorre. A condição imposta na primeira linha do

imposta na primeira linha do enquantoenquanto garante a finitude do laço, pois no garante a finitude do laço, pois no

momento em que a variável

momento em que a variável ii  não satisfaça mais a condição, não será mais  não satisfaça mais a condição, não será mais

permitida a execução das instruções contidas no loop, saindo da estrutura de permitida a execução das instruções contidas no loop, saindo da estrutura de repetição e continuando a execução dos comandos s

repetição e continuando a execução dos comandos seguintes do pseudocódigo.eguintes do pseudocódigo.

Figura 1

Vamos agora implementar o algoritmo para calcular a média da nota de duas provas para uma turma de 50 alunos. Se você compreendeu o funciona- mento do exemplo anterior, já deve ter uma boa idéia de como elaborar esse algoritmo.

Figura 2 Exemplo de loop com teste no início.

// Exemplo 16 – Cálculo da média – 50 alunos

inicio

real nota1 , nota2 inteiro i <- 1

enquanto i <= 50 faz

escrever “Aluno ” , i , “\n”

escrever “Digite a primeira nota: ” ler nota1

escrever “Digite a segunda nota: ” ler nota2

escrever “Média = ” , ( nota1 + nota2 ) / 2 , “\n\n”

i <- i + 1

 fmenquanto  fm 

Muito bem. Mas creio que, após analisar o código anterior, você já deva ter se perguntado:

Mas... e se eu não quiser as médias dos 50 alu- nos? Se quiser parar antes dos cinqüenta ou se

quiser calcular para um número maior?

Realmente o algoritmo proposto está bem rígido nesse aspecto. Ele só serve para calcular a média de 50 alunos. Nem mais, nem menos (a não ser que você force o encerramento do programa). Mas basta uma pequena altera-

Figura 3 Exemplo de loop com teste no início.

Com a alteração realizada no pseudocódigo, o nosso contador iperdeu a

função de definir o momento de encerramento do laço e passou a servir uni- camente para indicar o número do aluno para o qual foi realizado o cálculo da média. Ele permanece com a função de contador, mas não influencia mais a execução ou não do loop.

Dessa forma, o controle de execução do laço passou para o usuário, o qual gerencia essa estrutura por meio da variável continua . Enquanto o usu-

ário permanecer inserindo o valor “s” para essa variável, o laço continua em

execução. Quando for digitado um caractere diferente, o loop será encerrado.

 Assim a variável continua  é o que denominamos de critério de parada do

nosso laço.

Você também pode especificar previamente, durante a execução do algo- ritmo, a quantidade de vezes que o laço será repetido. Vejamos um exemplo disso em um algoritmo implementado para retornar a média de n números

digitados pelo usuário. O algoritmo deve solicitar ao usuário quantos núme- ros serão digitados para o cálculo. Após isso, deve entrar no laço, solicitar a entrada dos n valores e, após a leitura de todos, calcular a média. Aqui entra

mais um conceito: acumulador . Assim como o contador serve para contar a

quantidade de vezes que um laço, ou um determinado evento dentro dele, é executado, o acumulador  visa a realizar o armazenamento cumulativo de

valores dentro de uma variável (como, por exemplo, um somatório).

 Assim, dentro do laço, além do contador que controlará o número de execuções do loop, teremos um acumulador, o qual irá somando todos os

valores digitados para, após o encerramento do laço, ser dividido pela quan- tidade de valores digitados obtendo, dessa forma, a média.

O seu algoritmo deve ficar parecido com o exemplo a seguir.

Figura 4 Exemplo de loop com teste no início.

// Exemplo 18 – Cálculo da média com acumulador

inicio

real valor , acum <- 0 inteiro cont <- 1 , n

escrever “Quantos números deseja digitar? ” ler n

  enquanto cont <= n faz

escrever “Digite o valor ” , cont , “: ” ler valor

acum <- acum + valor cont <- cont + 1

 fmenquanto

cont <- cont – 1

escrever “\nA soma dos ” , cont , “ números é: ”, acum escrever “\nA média dos números é: ” , acum / cont  fm 

Para fixarmos melhor a estrutura de repetição com teste no início, vamos desenvolver um último algoritmo que sirva para listar todos os números pares de 0 a 100, informando também a quantidade, o somatório e a média deles.

Figura 5 Exemplo de loop com teste no início.

Com esse exemplo, concluímos mais uma aula da nossa disciplina de lógica para programação. Revise bem os conceitos e exemplos dados de forma a dirimir qualquer dúvida. Sobretudo não custa lembrar que você deve trei- nar muito o desenvolvimento de algoritmos, pois só é possível aprender a desenvolvê-los colocando a mão na massa, construindo e testando algorit-

mos. Não se iluda em querer aprender apenas compreendendo o funciona- mento de algoritmos prontos. Crie problemas e solucione-os com algoritmos desenvolvidos por você. Use a criatividade!

Síntese da aula 

Nesta aula, vimos a estrutura de repetição com teste no início enquanto... faz , a qual nos permite repetir blocos de instruções nenhuma, uma ou diver-

sas vezes. Ou seja, o bloco de comando permanecerá sendo executado repe- tidamente, enquanto a condição lógica da estrutura estiver retornando um valor verdadeiro. Esse tipo de estrutura é extremamente útil, pois, geral-

mente, para solucionarmos problemas por meio computadorizado, é necessá- ria a repetição de determinados processos, o que não era tecnicamente viável com as estruturas seqüenciais e de desvio condicional (estruturas de seleção simples, composta e encadeada).

Atividades

1. Dado o algoritmo a seguir, que faz uso do laço de repetição enquanto,

qual será o valor exibido na tela após sua execução?

inicio inteiro x , resultado x <– 5 resultado <– 0 enquanto ( x > 0 ) faz resultado <– x * 2 resultado <– resultado – 2 x <– x – 1   fmenquanto escrever resultado fm

a) 2 c) 0

b) –2 d) –1

2. As estruturas de repetições (também conhecidas por laço ou loop) permitem executar uma instrução ou um bloco de instruções repetidas vezes de forma automatizada. Contudo devemos controlar quando iniciar e interromper o processamento das instruções. Leia as afirmativas e assinale a alternativa correta sobre estruturas de repetição.

I. A condição de parada de um laço é definida com uso de expressões lógicas ou relacionais.

II. Um laço não termina sua execução quando não é possível atingir sua condição de parada.

III. Em todos os tipos de estruturas de repetições é necessário ter conhecimento exato de quantas vezes serão repetidas as instruções. a) Somente I é falsa.

b) Somente II é falsa. c) Somente III é falsa.

d) Todas as afirmativas são verdadeiras.

3. Implemente um algoritmo que use a estrutura enquanto...faz para soli-

citar a entrada de uma quantidade indeterminada de valores inteiros maiores que zero. Quando o usuário informar que não deseja inserir mais nenhum número, o algoritmo deve exibir a soma de todos os valores digitados, a quantidade de valores pares, a quantidade de valores ímpares e a média geral de todos os valores inseridos. Só após isso ele deve ser encerrado.

Obs.: a condição de parada é valor=0, ou seja, quando o usuário digitar 0 para a variável valor , o laço deve encerrar.

4. O que são acumuladores e contadores? Discorra sobre eles em um texto de cinco a dez linhas.

Comentário das Atividades

 As atividades propostas visaram ao alcance dos objetivos desta aula, quais sejam: compreender a utilidade dos laços de repetição na solução de proble- mas e aplicar as estruturas de repetição com teste no início adequadamente, na construção de algoritmos. Observe os resultados que você deve ter obtido. Na  atividade um, deve ser assinalada a alternativa (c), pois a durante a

execução do algoritmo dado, a variável resultado sempre recebe o dobro de x e,

depois, recebe o seu valor atual menos dois. Assim, como o x é decrementado em 1 a cada execução do laço, no momento em que x = 1, resultado = 2 * x – 2. Logo resultado = 0.

Para a  atividade dois, a alternativa (c) é a resposta correta, porque a pri-

meira afirmação é verdadeira, visto que as expressões lógicas ou relacionais são usadas para determinar o fim de um loop (laço de repetição). A segunda afir- mação também é verdadeira, visto que, enquanto a condição de parada não for alcançada, o loop (laço de repetição) executará o bloco de instruções indefi- nidamente. Por fim, a terceira afirmação está incorreta, já que nem sempre se tem o conhecimento exato de quando o laço de repetição irá parar, pois muitas situações podem ocorrer dentro de um bloco de instrução mudando os rumos da expressão lógica ou relacional a fim de que continue a executar o bloco de instruções indefinidamente.

O algoritmo solicitado na atividade três, pode ficar parecido com o seguinte:

inicio

inteiro valor , cont <- 0 , acum <- 0 , par <- 0 , imp <- 0 escrever “\nDigite um valor: ”

ler valor

enquanto valor =/= 0 faz se valor % 2 = 0 entao

par <- par + 1   senao

imp <- imp + 1

acum <- acum + valor cont <- cont + 1

escrever “\nDigite um valor: ” ler valor

fmenquanto

escrever “\nQuantidade de pares: ” , par escrever “\nQuantidade de ímpares: ” , imp

escrever “\nTotal dos valores digitados: ” , acum escrever “\nMédia geral: ” , acum \ cont

fm

Realize uma análise desse código comparando-o com o que você desen- volveu e, para uma melhor compreensão, implemente-o no Portugol para verificar sua funcionalidade.

Finalmente, na atividade quatro, um contador nada mais é do que uma

variável utilizada para contar a quantidade de execuções de um laço, ou a quantidade de vezes que uma determinada situação acontece. Pode ser uti- lizada de muitas formas, mas sempre procurando contar as ocorrências de algum evento dentro do laço. O acumulador, por outro lado, é uma variável que armazena valores de forma cumulativa. O acumulador  pode, por exem-

plo, realizar o somatório de valores a cada execução do laço.

Na próxima aula 

Verificaremos duas variações de laço de repetição. Dessa vez com o teste sendo realizado no final, e não no início, como é o caso do enquanto...faz .

Vamos adiantar uma espiada nesse conteúdo para chegar no dia da aula já com uma boa base de conhecimento? Então, mãos à obra!

8

No documento Livro Logica Programacao b (páginas 89-100)