Você está na página 1de 21

CAP Í TULO 6 ­ ESTRUTURAS DE REPETI Ç Ã O

Objetivos da aula (previs ã o 8h/aula)

1. ) Identificar a necessidade de utilizar uma estrutura de repetiç ã o para a resolu ç ã o de um determinado problema.

(

2. ) Diferenciar as diferentes estruturas de repetiç ã o existentes a aplicabilidade de cada estrutura para os diversos tipos de problemas

(

3. ) Saber utilizar a estrutura de repetiç ã o PARA FA Ç A cujo controle é realizado por um contador auto­incrementá vel

(

4. ) Saber utilizar as estruturas de repetiç ã o ENQUANTO FA Ç A e REPITA ATÉ cujo controle é realizado pelo usu á rio.

(

5. ) Identificar a necessidade de utilizar e saber resolver problemas que necessitem de estruturas de repetiç ã o dentro de outras estruturas de repeti ç ã o.

(

(1)Totalmente Alcan ç ado (2)Parcialmente Alcan ç ado (3)N ã o Alcan ç ado

6 Estruturas de Repeti ç ã o

Uma das principais caracter í sticas que consolidaram o sucesso na utilizaç ã o dos computadores para a resolu ç ã o de problemas foi a sua capacidade de repetir o processamento de um conjunto de operaç õ es para grandes quantidades de dados. Exemplos de conjuntos de tarefas que repetimos diversas vezes dentro de uma situaç ã o espec ífica podem ser observados largamente no nosso dia a dia.

Por exemplo, consideremos que uma determinada loja de calç ados efetue uma venda no crediá rio para um cliente que ainda n ã o está registrado em seu sistema. Para realizar essa

venda, é necessá rio cadastrar o cliente, solicitando informaç õ es b á sicas como: nome, endereç o, CPF, RG, lojas do com é rcio onde já possui cr é dito, etc. Essas etapas para realizar

o cadastro seguir ã o sempre a mesma ordem para cada novo cliente que aparecer na loja.

Caso precis á ssemos desenvolver um sistema para efetuar os cadastros de clientes de uma loja, n ã o haveria ló gica que program á ssemos novamente essas etapas para cada cliente novo, bastaria que desenvolv ê ssemos uma ú nica vez a seq üê ncia de etapas e que a cada novo cliente usá ssemos a seq üê ncia previamente definida.

Outro exemplo que podemos observar é o c á lculo das mé dias dos alunos de uma turma qualquer. Para calcular a mé dia de um ú nico aluno é necess á rio que somemos suas duas

notas e dividamos o resultado dessa soma por dois. Um algoritmo simples para o cá lculo da

m édia de um aluno seria:

algoritmo "calculo_media" var n1, n2, media: real inicio escreval("digite nota 1 e nota 2") leia(n1, n2) media <­ (n1 + n2)/2 escreval("a media do aluno é ", media) fimalgoritmo

Bom, se desej á ssemos calcular as m é dias de dois alunos poder íamos simplesmente copiar as mesmas linhas de có digo e colá ­las no mesmo programa para o c á lculo da mé dia do segundo aluno:

algoritmo "calculo_media" var n1, n2, media: real inicio escreval("digite nota 1 e nota 2") leia(n1, n2) media <­ (n1 + n2)/2 escreval("a media do aluno é ", media)

escreval("digite nota 1 e nota 2") leia(n1, n2) media <­ (n1 + n2)/2 escreval("a media do aluno é ", media) fimalgoritmo

Entretanto, se considerarmos que uma turma possui 50 alunos ficaria um pouco complicado repetir essas mesmas linhas 50 vezes.

Para a resolu ç ã o desse tipo de problema utilizamos as ESTRUTURAS DE REPETI ÇÃO.

As 3 ESTRUTURAS DE REPETI ÇÃO que iremos estudar s ã o:

1) PARA FACA – FIMPARA 2) ENQUANTO FACA ­ FIMENQUANTO 3) REPITA ­ ATE

6.1 Estrutura de Repeti ç ã o PARA FACA ­ FIMPARA

A estrutura de repetiç ã o PARA FACA ­ FIMPARA é utilizada sempre que temos condiç õ es

de estabelecer a QUANTIDADE de vezes que uma determinada seq ü ê ncia de opera ç õ es deve ser executada. Por exemplo, na situaç ã o de cá lculo de m é dias dos alunos, sabemos que o n ú mero de alunos da turma é de 50 (mesmo n ã o conhecendo esse valor de antemã o, temos condiç õ es de solicitá ­lo ao usu á rio). Dessa maneira podemos definir com exatid ã o o n ú mero de vezes que precisaremos calcular a m é dia dos alunos.

A estrutura de repetiç ã o PARA FACA ­ FIMPARA é utilizada da seguinte maneira:

PARA <variavel inteira> <valor inicial> ATE <valor final> FACA Comando 1 Comando 2 Comando N FIMPARA

Onde a <vari á vel inteira> ser á um contador que marcar á em qual iteraç ã o a estrutura de repetiç ã o se encontra. O <valor inicial> é o valor em que o contador ir á começ ar a contagem, e a o <valor final> é o valor onde o contador ir á parar a execu ç ã o. A cada iteraç ã o o contador (<variá vel inteira>) ser á incrementado (aumentado) em 1, e quando esse contador atingir o mesmo valor que o <valor final> a estrutura de repetiç ã o chega ao final.

Por exemplo, caso desejemos escrever 20 vezes uma frase na tela, utilizar íamos a estrutura de repetiç ã o PARA FACA – FIMPARA, iniciando um contador em 1 e indicando que a repetiç ã o deve acontecer até que esse contador chegue ao n ú mero 20. Veja o exemplo a

seguir:

algoritmo "imprime_palavra" var palavra: caractere cont: inteiro inicio palavra <­ "escreva­me 20 vezes" para cont <­ 1 ate 20 faca escreval(palavra) fimpara fimalgoritmo

A execu ç ã o do algoritmo anterior traria como resultado uma tela semelhante a que está sendo mostrada a seguir:

uma tela semelhante a que est á sendo mostrada a seguir: Como comentado anteriormente, a vari

Como comentado anteriormente, a variá vel que representa o contador é incrementada em cada iteraç ã o (no exemplo anterior a vari á vel cont representa o contador). Dessa forma, na

1 a iteraç ã o ela possui o valor 1, na 2 a iteraç ã o o valor 2, e assim sucessivamente até que ela chegue ao valor 20. Observe o exemplo a seguir:

algoritmo "imprime_palavra" var palavra: caractere cont: inteiro inicio palavra <­ "a vez" para cont <­ 1 ate 20 faca escreval(cont, palavra) fimpara fimalgoritmo

O có digo mostrado anteriormente apresentaria a seguinte tela como resultado de sua execu ç ã o:

a seguinte tela como resultado de sua execu ç ã o: Conhecendo os detalhes de utiliza

Conhecendo os detalhes de utilizaç ã o dessa estrutura podemos tentar solucionar o problema do c á lculo da mé dia dos 50 alunos de uma turma. O primeiro passo é definir como seria o processamento para um ú nico aluno, considerando que necessitamos solicitar as duas notas e calcular a mé dia dessas notas, ter íamos o seguinte processamento:

escreval("digite nota 1 e nota 2 do aluno 1") leia(n1, n2) media <­ (n1 + n2)/2 escreval("a media do aluno é ", media)

Para que esse trecho de có digo seja executado 50 vezes, é necess á rio que utilizemos alguma estrutura de repeti ç ã o. Nesse caso utilizaremos a estrutura PARA FACA – FIMPARA. Necessitamos de uma variá vel que assuma o papel de contador, e devemos fazer com que essa vari á vel comece com o valor 1 e termine com o valor 50. Vejamos o algoritmo a seguir:

algoritmo "imprime_palavra" var n1, n2,media: real cont: inteiro inicio para cont <­ 1 ate 50 faca escreval("digite nota 1 e nota 2 do aluno ", cont) leia(n1, n2) media <­ (n1 + n2)/2 escreval("a media do aluno é ", media) fimpara fimalgoritmo

Os valores do inicio e do final da iteraç ã o podem tamb é m ser definidos em tempo de execu ç ã o por meio de vari á veis. Por exemplo, considere que a princí pio n ã o sabemos quantos sã o os alunos de uma turma. Dessa maneira, podemos solicitar ao usu á rio o

n ú mero de alunos (nalunos), e utilizar essa variá vel como o valor de limite para a iteraç ã o. Comparando com o algoritmo anterior, ao inv é s de utilizarmos o valor 50 utilizaremos uma variá vel que contenha o n ú mero de alunos da turma (nalunos). Veja o trecho de có digo a seguir:

algoritmo "imprime_palavra" var n1, n2,media: real nalunos, cont: inteiro inicio escreval("digite o numero de alunos da turma") leia(nalunos) para cont <­ 1 ate nalunos faca escreval("digite nota 1 e nota 2 do aluno ", cont) leia(n1, n2) media <­ (n1 + n2)/2 escreval("a media do aluno é ", media) fimpara fimalgoritmo

Veja o exemplo de tela para o resultado de execu ç ã o do algoritmo anterior:

é ", media) fimpara fimalgoritmo Veja o exemplo de tela para o resultado de execu ç

Os exemplos vistos anteriormente utilizam uma ordem crescente para incrementar o contador, ou seja, a iteraç ã o varia de um n ú mero menor até alcan ç ar um n ú mero maior. Tamb é m é poss ível que fa ç amos de traz para frente, ou em ordem decrescente. Por exemplo, suponha que desejamos escrever os n ú meros de 20 at é 1. Para esse tipo de problema podemos utilizar a estrutura de repetiç ã o PARA FACA especificando que o PASSO para o algoritmo é decrescente, ou melhor, ­1. Veja o exemplo a seguir:

algoritmo "imprime_palavra" var cont: inteiro inicio para cont <­ 20 ate 1 passo ­1 faca escreval(cont) fimpara fimalgoritmo

O resultado do algoritmo anterior seria apresentado da seguinte forma:

passo ­1 faca escreval(cont) fimpara fimalgoritmo O resultado do algoritmo anterior seria apresentado da seguinte forma:

6.2 Exerc ícios ESTRUTURA DE REPETIÇ Ã O PARA FACA ­ FIMPARA

6.2.1

Exercí cios utilizando somente a estrutura de repetiç ã o PARA FACA ­ FIMPARA

1)

Elabore um algoritmo que imprima todos os n ú meros de 1 até 100.

2)

Elabore um algoritmo que imprima todos os n ú meros de 100 até 1.

3)

Elabore um algoritmo que imprima todos os n ú meros de 250 a 500.

4)

Elabore um algoritmo que leia um n ú mero de entrada que indicar á a quantidade de

n ú meros a serem lidos. Em seguida, leia n n ú meros (conforme o valor informado anteriormente) e imprima o triplo de cada um.

6.2.2 Exerc ícios utilizando a estrutura de condiç ã o SE ENTAO FIMSE dentro da estrutura de repetiç ã o PARA FACA ­ FIMPARA

1)

Elabore um algoritmo que leia nome, idade e sexo de 20 pessoas. Imprimir o nome, se a pessoa for do sexo masculino, e tiver mais de 21 anos.

2)

Elabore um algoritmo que imprima todos os n ú meros pares de 1 até 100.

6.2.3 Exerc ícios de repeti ç ã o que calculam somat ó rios e/ou produtos

1)

Elabore um algoritmo que imprima todos os n ú meros de 100 a 200, e ao final a soma deles.

2)

Elabore um algoritmo que leia um n ú mero e imprima todos os n ú meros de 1 até o

n

ú mero lido, e tamb é m o seu produto. Exemplo:

 
 

N ú mero: 3

Saída: 1 2 3

Produto: 6

3)

Construir um algoritmo que calcule o fatorial de um n ú mero.

4)

Construir um algoritmo que leia dois n ú meros (BASE e EXPOENTE) e retorne como resultado a POTENCIA do cá lculo da BASE elevado ao EXPOENTE.

Ex: para a BASE = 2 e EXPOENTE = 4,

POTENCIA = 2 4 = 16

6)

Elabore um algoritmo que leia 30 n ú meros, e imprima quantos n ú meros maiores que 30 foram digitados.

6.2.4 Exercícios de repetiç ã o que calculam somat ó rios e/ou produtos e que utilizam a estrutura de condiç ã o SE ENTAO FIMSE dentro da estrutura de repetiç ã o PARA FACA ­ FIMPARA

1)

Elabore um algoritmo que leia um n ú mero e imprima a soma dos n ú meros mú ltiplos de 5 no intervalo entre 1 e o n ú mero informado. Suponha que o n ú mero lido ser á maior que zero.

2)

Elabore um algoritmo que leia 20 n ú meros, e ao final, imprima a mé dia desses n ú meros.

3)

Elabore um algoritmo que leia 200 n ú meros, e imprima quantos s ã o pares e quantos s ã o ímpares.

6.2.5

Exercícios de repetiç ã o

para localizar determinados valores dentro de um

conjunto

1)

Elabore um algoritmo que leia um n ú mero de entrada que indicar á a quantidade de n ú meros a serem lidos. Em seguida, leia n n ú meros (conforme o valor informado anteriormente) e, ao final imprima o maior n ú mero digitado.

2)

Elabore um algoritmo que leia um n ú mero de entrada que indicar á a quantidade de n ú meros a serem lidos. Em seguida, leia n n ú meros (conforme o valor informado anteriormente) e, ao final imprima o menor n ú mero digitado.

3) Elabore um algoritmo que leia um n ú mero de entrada que indicar á a quantidade de n ú meros a serem lidos. Em seguida, leia n n ú meros (conforme o valor informado anteriormente) e, ao final imprima o maior, menor, e a mé dia dos n ú meros digitados.

6.2.6

aninhada.

Exerc ício

utilizando

a

estrutura

de

repetiç ã o

PARA

1)

Elabore um algoritmo que imprima a tabuada de 1 a 10.

FACA

FIMPARA

6.2.7 Implemente os algoritmos anteriores no VISUALG e no TURBO PASCAL.

6.3 Demais Estruturas de Repeti ç ã o

Quando n ã o temos condi ç õ es de precisar quantas vezes um determinado conjunto de comandos precisa ser executado devemos utilizar as Estruturas de Repeti ç ã o ENQUANTO FACA ­ FIMENQUANTO ou REPITA ­ ATE.

6.3.1 Estrutura de Repeti ç ã o ENQUANTO FACA ­ FIMENQUANTO

Vamos observar de maneira mais clara uma situaç ã o onde n ã o conseguimos determinar a

quantidade de vezes que executaremos um conjunto de comandos. Por exemplo, suponha que estamos oferecendo ao usu á rio 3 op ç õ es de menu sendo que uma dessas 3 op ç õ es seria a op ç ã o de SAIR do programa. Caso desejemos que o usu á rio possa executar v á rias vezes

as op ç õ es dispostas no menu, n ã o temos como adivinhar quando o usu á rio ir á optar por

SAIR do algoritmo, sendo assim, n ã o podemos limitar a repetiç ã o a um n ú mero de vezes.

Considere um problema mais especí fico onde necessitamos fazer a leitura de v á rios nomes

de pessoas e a cada nome que é lido devemos escrever na tela a frase "O nome digitado foi

NOME". A princí pio isso deve ser feito in ú meras vezes e quando o usu á rio digitar um NOME igual a FIM o algoritmo deve parar. Da mesma maneira que no exemplo anterior

n ã o podemos definir quando o usu á rio ir á digitar FIM, e n ã o temos como precisar a quantidade de vezes que o algoritmo dever á repetir esse conjunto de aç õ es.

Nessas situa ç õ es, a repetiç ã o de um conjunto de comandos é determinada pela avaliaç ã o de uma expressã o ló gica, ou seja, caso o valor da express ã o ló gica seja verdadeiro o conjunto de comandos continua a ser executado, caso o valor da express ã o ló gica seja falso a estrutura de repeti ç ã o é abortada.

A estrutura de repetiç ã o ENQUANTO FACA ­ FIMENQUANTO é utilizada da seguinte

maneira:

ENQUANTO <EXPRESS Ã O L Ó GICA> FACA comando 1 comando 2

.

.

.

comando n

FIMENQUANTO

Antes de entrar na estrutura de repetiç ã o, a express ã o ló gica é avaliada, caso o resultado da mesma seja VERDADEIRO os comandos que estã o dentro da estrutura ser ã o executados e ao final volta­se a avaliar a express ã o ló gica novamente. Caso o resultado da express ã o l ó gica seja falso, o algoritmo sai da estrutura de repetiç ã o.

Avalie a execu ç ã o do seguinte algoritmo:

linha1

algoritmo "exemplo" var nome: caractere inicio nome <­ "comeco" enquanto nome <> "fim" faca escreval("digite o nome") leia(nome) escreval("o nome digitado foi ", nome) fimenquanto fimalgoritmo

linha2

linha3

linha4

linha5

linha6

linha7

linha8

linha9

linha10

linha11

Ao chegar na linha5 o algoritmo ir á inicializar a vari á vel NOME com o valor “comeco”. Na linha6 temos o in ício da estrutura de repeti ç ã o sendo que a expressã o ló gica que está sendo avaliada é NOME <> "fim", ou seja, est á sendo avaliado se o conteú do da vari á vel NOME é diferente da palavra "fim". Caso o conte ú do de NOME seja diferente de "fim", o resultado da express ã o l ó gica ser á VERDADEIRO e os comandos que est ã o dentro da estrutura de repetiç ã o ser ã o executados. No nosso exemplo, o valor da variá vel NOME é igual a “começ o”, entã o ao avaliar se NOME <> "fim", teremos que "comeco" <> "fim" é igual a VERDADEIRO, e entã o os comandos das linhas 7, 8 e 9 ser ã o executados.

Enfim, ap ó s essa primeira avaliaç ã o, e considerando que o NOME era "comeco" (que é diferente de "fim"), o algoritmo ir á executar a linha7 e pedir para o usu á rio digitar um nome, e em seguida ir á ler esse nome (linha8) e escrever o mesmo na tela (linha9). Ao chegar no final da estrutura de repetiç ã o (linha10), o algoritmo ir á retornar ao in í cio dessa estrutura para avaliar novamente a expressã o ló gica NOME <> "fim" (linha6).

Faç a o teste de mesa do algoritmo anterior para as seguintes entradas do usu á rio:

intera çã o

NOME

 

"comeco"

1

"jo ã o"

2

"pedro"

3

"maria"

4

"fim"

O que ser á escrito na tela para o usu á rio? A seguir é mostrada a tela de resultado para a execu ç ã o do algoritmo apresentado

Apesar da estrutura de repeti ç ã o ENQUANTO FACA ­ FIMENQUANTO ser utilizada especialmente

Apesar da estrutura de repetiç ã o ENQUANTO FACA ­ FIMENQUANTO ser utilizada especialmente para quando n ã o podemos determinar o n ú mero de vezes que o conjunto de comandos ser á repetido, nada impede que utilizemos uma express ã o l ó gica que avalie o valor de um n ú mero, simulando dessa forma uma estrutura de repeti ç ã o PARA FACA ­ FIMPARA.

Suponha que desejemos realizar um conjunto de operaç õ es 10 vezes, como por exemplo, pedir a idade de 10 pessoas e calcular a soma dessas 10 idades.

Utilizando a estrutura de repeti ç ã o PARA FACA ­ FIM PARA ter íamos o seguinte algoritmo:

algoritmo "exemplo" var cont, idade, soma: inteiro inicio soma <­ 0 para cont <­ 1 ate 10 faca escreva("digite a idade") leia(idade) soma <­ soma + idade fimpara escreva("soma das idades = ", soma) fimalgoritmo

Caso desejá ssemos escrever esse mesmo algoritmo utilizando a estrutura de repetiç ã o ENQUANTO FACA – FIMENQUANTO, ter í amos que nos preocupar em avaliar uma express ã o ló gica que garanta que o contador chegue ao n ú mero m á ximo de 10 vezes, ou

seja, o contador deve ser sempre menor ou no m á ximo igual a 10. Alé m disso, é importante ressaltar que diferentemente da estrutura PARA FACA­FIMPARA, a estrutura de repetiç ã o ENQUANTO FACA ­ FIMENQUANTO deve se preocupar em incrementar o seu contador, ou seja, a cada iteraç ã o devemos fazer com que o contador aumente o seu valor em um.

Veja o algoritmo a seguir:

linha1

algoritmo "exemplo" var cont, idade, soma: inteiro inicio soma <­ 0 cont <­ 1 enquanto cont <= 10 faca escreval("digite a idade") leia(idade) soma <­ soma + idade cont <­ cont + 1 fimenquanto escreva("soma das idades = ", soma) fimalgoritmo

linha2

linha3

linha4

linha5

linha6

linha7

linha8

linha9

linha10

linha11

linha12

linha13

linha14

Note que na linha6 é necess á rio que inicializemos o contador cont com o valor 1. E na linha11, a variá vel cont deve ser incrementada, ou seja, aumentada em 1. Pensando na execu ç ã o do algoritmo anterior, veremos que a cada itera ç ã o, a vari á vel cont é testada na linha7 e enquanto a mesma tiver um valor menor ou igual a 10 (valores 1, 2,3, 4, 5, 6, 7, 8, 9,10) o algoritmo ir á executar as linhas 8, 9, 10 e 11. Assim que o contador (vari á vel cont) atingir o valor 11 a express ã o l ó gica cont <= 10 ser á considerada falsa e o algoritmo ir á pular para a linha13.

Mas afinal, qual seria a vantagem de utilizarmos a estrutura ENQUANTO FACA ­ FIMENQUANTO para esse tipo de situaç ã o, considerando que já possu í mos a estrutura de repetiç ã o PARA FACA ­ FIMPARA ?

A vantagem está no fato da estrutura de repeti ç ã o ENQUANTO FACA ­ FIMENQUANTO nos permitir utilizar express õ es ló gicas compostas, ou seja, podemos trabalhar com contadores ao mesmo tempo em que avaliamos outras vari á veis do nosso algoritmo.

Suponhamos que necessitamos realizar um algoritmo semelhante ao do exemplo anterior, por é m agora alé m de limitarmos o n ú mero m á ximo de pessoas em 10, queremos tamb é m limitar a soma das idades dessas pessoas. Por exemplo, o algoritmo deve solicitar as idades das pessoas enquanto o n ú mero de pessoas n ã o chegar a 10, e tamb é m enquanto a soma de idade dessas pessoas n ã o ultrapassar 100 anos. Caso uma dessas condi ç õ es n ã o seja obedecida a estrutura de repetiç ã o dever á ser abortada. Vejamos como ficaria esse algoritmo:

algoritmo "exemplo" var cont, idade, soma: inteiro inicio soma <­ 0 cont <­ 1 enquanto (cont <= 10) e (soma < 100) faca escreval("digite a idade") leia(idade) soma <­ soma + idade cont <­ cont + 1 fimenquanto escreval("numero de pessoas" , cont ­ 1) escreva("soma das idades = ", soma) fimalgoritmo

6.3.2

FIMENQUANTO

Exercícios

ESTRUTURA

DE

REPETIÇ Ã O

ENQUANTO

FACA

­

1)

Elabore um algoritmo que imprima os n ú meros de 1 até 100.

2)

Faç a o teste de mesa para os conjuntos de instru ç õ es abaixo:

a)

b)

c)

Algoritmo "questao2a" Var

Algoritmo "questao2b" Var

Algoritmo "questao2c" Var

a, s: inteiro Inicio

a,

n, s: inteiro

a, n, s: inteiro Inicio

Inicio

a

<­ 1

a

<­ 1

a

2

s

<­ 0

n

<­ 0

n

<­ 3

enquanto (a < 5) faca

s

<­ 0

s

<­ 1

 

s <­ s + a

enquanto (s < 5) faca

enquanto (s < 5) faca

a <­ a + 2

 

s

<­ s + a

 

s

s

+ 1

escreval(a, s)

a

<­ a + 1

a

<­ a + s

fimenquanto

n

<­ n + 1

n

<­ n + a

Fimalgoritmo

escreval(s, a, n)

escreval(s, a, n)

fimenquanto

fimenquanto

Fimalgoritmo

Fimalgoritmo

 

3)

Responda quais os resultados dos seguintes algoritmos:

a)

b)

algoritmo "questao3a"

algoritmo "questao3b" var x, w: inteiro inicio

var aux, x, y, t, w: inteiro inicio

x

<­ 2

 

x

<­ 2

y

<­ 5

w

<­ 1

t

<­ 15

enquanto x = 2 faca

w

<­ 1

 

se nao (x > 2) entao

x

<­ (x * 4) mod 5

<­ (x * 2) ­ (w +1) senao

x

y

<­ y * w

 

se (x > 2) e (y=5) entao

x

<­ 3

 

aux <­

y

fimse

y

<­ t

escreva(x, w)

t

<­ aux

fimenquanto

senao

 
 

y

<­ t

fimalgoritmo

t

<­ y

fimse

 

escreva(x, y, t)

Fimalgoritmo

 

4)

Elabore um algoritmo que entre com n ú meros e imprima o triplo de cada um. O algoritmo acaba quando entrar o n ú mero –999 (incluindo o ú ltimo n ú mero).

5)

Elabore um algoritmo que entre com n ú meros enquanto forem positivos e imprimir quantos n ú meros que foram digitados (incluindo o ú ltimo n ú mero).

6)

Elabore um algoritmo que entre com n ú meros enquanto forem positivos e imprima ao final a soma dos n ú meros que foram digitados (incluindo o ú ltimo n ú mero).

7)

Elabore um algoritmo que entre com v á rios n ú meros positivos e imprima ao final a m édia dos n ú meros digitados (incluindo o ú ltimo n ú mero).

8)

Elabore

um

algoritmo

que

leia

nomes

enquanto

forem

diferentes

de

FIM,

imprimindo o nome logo ap ó s a leitura (incluindo o nome “fim”).

9) Elabore um algoritmo que solicite ao usu á rio quantidade de n ú meros que ele ir á digitar, leia esses v á rios n ú meros e imprima o maior, o menor e a mé dia aritmé tica dos n ú meros.

10) Construir um algoritmo que solicite ao usu á rio o n ú mero de pessoas de uma

determinada fam ília, a idade em anos de cada uma das pessoas, e que calcule a m édia de idade da família (correspondendo a soma de todas as idades divididas pelo

n ú mero de pessoas).

6.3.3 Exerc ícios comentados

Sabemos que um determinado elevador tem espa ç o para no má ximo 7 pessoas e pode suportar transportar até 500 kg. Como você desenvolveria um algoritmo para permitir a entrada de pessoas nos elevadores considerando essas condiç õ es e utilizando a estrutura de repetiç ã o ENQUANTO FACA ­ FIMENQUANTO?

algoritmo "exemplo" var cont, peso, pesototal: inteiro inicio pesototal <­ 0 cont <­ 1 enquanto (cont <= 10) e (pesototal <= 500) faca escreval("peso do proximo a subir no elevador") leia(peso) pesototal <­ pesototal + peso cont <­ cont + 1 fimenquanto escreval("numero de pessoas que subiram" , cont ­ 1) escreva("peso total do elevador = ", pesototal) fimalgoritmo

A solu ç ã o anterior apresenta um problema, você consegue identificar qual seria esse problema? O problema existente é que mesmo depois de realizar a verifica ç ã o do pesototal,

é poss ível que a soma do pesototal com o pr ó ximo peso exceda 500 quilos. Isso acontece

pois dentro da estrutura de repetiç ã o o pesototal é somado com o valor do peso que foi recentemente lido, e o resultado dessa soma somente é verificado para a realizaç ã o da pr ó xima iteraç ã o. Por exemplo, considere a execu ç ã o do algoritmo para os seguintes valores:

cont

Peso

Pesototal

Pesototal <= 500

1

100

100

VERDADEIRO

2

100

200

VERDADEIRO

3

120

320

VERDADEIRO

4

120

440

VERDADEIRO

5

120

560

VERDADEIRO

Ao chegar na 4 a iteraç ã o, quando o contador cont está com o valor 4, o peso lido ser á de 120

quilos e o pesototal ser á de 440. Ao sair dessa itera ç ã o, o algoritmo ir á avaliar se o pesototal

é menor ou igual a 500, e o resultado ser á verdadeiro. Entrando novamente na estrutura de

repetiç ã o e indo para a 5 a iteraç ã o, o peso lido ser á de 120 quilos e o pesototal ir á para 560 quilos, excedendo o limite do elevador. Veja um exemplo de tela para a execu ç ã o do algoritmo anterior:

Uma alternativa para resolver o problema do algoritmo anterior seria fazer a avalia ç ã

Uma alternativa para resolver o problema do algoritmo anterior seria fazer a avaliaç ã o antecipada da soma do pesototal e do peso da pr ó xima pessoa que iria entrar no elevador. Veja a solu ç ã o a seguir:

algoritmo "exemplo" var cont, peso, pesototal: inteiro inicio pesototal <­ 0 cont <­ 1 escreval("peso do proximo a subir no elevador") leia(peso) enquanto (cont <= 10) e (pesototal + peso <= 500) faca pesototal <­ pesototal + peso cont <­ cont + 1 escreval("peso do proximo a subir no elevador") leia(peso) fimenquanto escreval("numero de pessoas que subiram" , cont ­ 1) escreva("peso total do elevador = ", pesototal) fimalgoritmo

6.3.4

FIMENQUANTO

Exerc ícios

ESTRUTURA

DE

REPETIÇ Ã O

ENQUANTO

FACA

1) Elabore um algoritmo que leia a idade e sexo (0 – masculino, 1 – feminino) de v á rias pessoas (solicite ao usu á rio o n ú mero de pessoas). Calcule e imprima a idade mé dia, total de pessoas do sexo feminino com idade entre 30­45 anos inclusive, e o n ú mero total de pessoas do sexo masculino. O algoritmo termina quando se digita 0 para a idade.

2)

Elabore um algoritmo que leia a idade e o estado civil (c – casado, s – solteiro, v – vi ú vo, e d – desquitado ou separado) de v á rias pessoas. Considere que o algoritmo

termina quando se digita um n ú mero menor do que 0 para a idade. Ao final, calcule e imprima:

a. A quantidade de pessoas casadas;

b. A quantidade de pessoas solteiras;

c. A mé dia das idades das pessoas vi ú vas;

d. A porcentagem de pessoas desquitadas ou separadas, dentre todas as pessoas analisadas.

6.3.5 Estrutura de Repetiç ã o REPITA ­ ATE

A estrutura de repetiç ã o REPITA ­ ATE funciona de forma semelhante a estrutura de repetiç ã o ENQUANTO FACA – FIMENQUANTO, por é m diferem em um aspecto muito importante, na estrutura de repeti ç ã o ENQUANTO FACA – FIMENQUANTO a avalia ç ã o da express ã o l ó gica é realizada ANTES de executar os comandos, e na estrutura de repetiç ã o REPITA ­ ATE a express ã o ló gica é avaliada somente DEPOIS de executar os comandos.

Veja como se utiliza a estrutura de repeti ç ã o REPITA ATE:

REPITA

comando 1

comando 2

.

.

.

comando n ATE <EXPRESSAO L Ó GICA>

Dessa forma o algoritmo entra na estrutura, executa os comandos que estã o dentro da mesma e ao final verifica a validade da expressã o ló gica, caso a mesma tenha como resultado VERDADEIRO a repeti ç ã o é abortada, caso o resultado da express ã o l ó gica seja FALSO a repeti ç ã o continua até que a express ã o seja VERDADEIRA.

Baseando­se nessa diferen ç a entre as estruturas, podemos afirmar que um conjunto de comandos que est ã o dentro de uma estrutura de repetiç ã o REPITA ATE ser ã o sempre executados no mí nimo uma vez, enquanto que na estrutura de repetiç ã o ENQUANTO FAÇ A – FIMENQUANTO existe a possibilidade dos comandos que est ã o dentro da estrutura n ã o serem executados nenhuma vez.

Suponha que desejemos desenvolver um algoritmo que solicite o nome de pessoas in ú meras vezes e que escreva o nome que foi digitado. O algoritmo deve fazer isso at é o momento em que o usu á rio digitar um nome igual a FIM. Utilizando a estrutura de repetiç ã o REPITA ATE, a solu ç ã o poderia ser desenvolvida da seguinte maneira:

algoritmo "exercicio" var nome: caracter inicio repita escreval("digite o nome") leia(nome) escreval("o nome digitado foi ", nome) ate nome = "fim" fimalgoritmo

Uma tela de execu ç ã o para o algoritmo anterior é mostrada logo a seguir:

ã o para o algoritmo anterior é mostrada logo a seguir: 6.3.6 Exerc í cios ESTRUTURA

6.3.6 Exerc ícios ESTRUTURA DE REPETIÇ Ã O REPITA ­ATE

1) Faç a o teste de mesa para os algoritmos a seguir:

a)

b)

algoritmo "questao1a" var soma, idade: inteiro inicio soma <­ 0 repita escreva("digite a idade ") leia(idade) soma <­ soma + idade escreval(soma) ate (soma > 500) ou (idade > 100) fimalgoritmo

algoritmo "questao1b" var a, b, c: inteiro flag: logico inicio flag <­ falso

a <­ 20

b <­ 10

c <­ 5

repita

a

<­ b + c

c

<­ b

Considere que o usu á rio ir á digitar como entrada os seguintes valores de idades:

Utiliza çã o 1: 40,98,101,23,55 Utiliza çã o 2: 99,48,66,100,78,55,64,

b

<­ a

escreval(a," ", b, " ",c) se (a + b + c) > 200 entao flag <­ verdadeiro

fimse

89,34,68,9,12,29,57

ate flag

fimalgoritmo

6.4 Exerc ícios (S é ries)

1) Escrever um programa para calcular e imprimir o valor de S na express ã o abaixo:

S = 1

3

1 2 3

5

7

4

99

50

2) Elaborar um programa que utilize uma subrotina para calcular a serie de fibonacci de N

, etc. Esta

termos. A s é rie de Fibonacci é formada pela sequ ê ncia : 1, 2, 3, 5, 8, 13, 21, 34,

s é rie caracteriza­se pela soma de um termo posterior com o seu subsequente, e ela deve ser

impressa até que o ú ltimo elemento n ã o ultrapasse o valor de entrada N.

3) Construa um algoritmo que imprima a sé rie abaixo, onde o n ú mero de termos da mesma deve ser lido.

S é rie =

2, 7, 3, 4, 21, 12, 8, 63, 48, 16, 189, 192, 32, 567, 768, 64