Estruturas de Repetição 1:
Comando ENQUANTO
Bruno Cartaxo
http://sites.google.com/site/brunocartaxo
bruno.cartaxo@olinda.ifpe.edu.br
Tópicos a serem discutidos na disciplina
•
Introdução a computadores e algoritmos
•
Tipos de dados, operadores, variáveis, E/S
•
Verificação manual de algoritmos e modularização
•
Estruturas de decisão: comandos SE e CASO
•
Estruturas de repetição: comandos ENQUANTO e PARA
•
Vetores
•
Introdução à Java
Estruturas de repetição
•
Diferente do ser humano,
o computador não se cansa de realizar operações
repetitivas
.
•
Diante disto, podemos incluir nos algoritmos as
estruturas de repetição.
•
O que é uma
repetição
?
• É uma instrução que permite a execução de um trecho de algoritmo várias vezes seguidas. • Também chamada a laço ou loop;
•
Tipos
de estrutura de repetição:
• Repetição com teste no início (enquanto); • Repetição com teste no final (repita);
Comando ENQUANTO
• Indica que os comandos seguintes serão executados, desde que uma expressão lógica seja verdadeira.
• Esta estrutura é chamada de repetição com teste no início
• A decisão entre repetir e parar o laço é feita no início do comando.
• Se o teste for falso desde o início, o laço não será executado.
• Ao encontrar o fim dos comandos, o computador volta para a 1ª linha do laço e avalia novamente a expressão lógica:
• Se verdadeira, o computador fará uma nova execução do trecho;
• Se falsa, o computador pára a execução e continua no próximo comando após o trecho repetido.
enquanto
<expressão_lógica>
faça
Exemplo de comando ENQUANTO
•
Fazer um algoritmo para ler diversos números informados pelo
Exemplo de comando ENQUANTO
Variáveis
num
: inteiro;
Início
enquanto
num >= 0
faça
escrever
“Digite um número (negativo caso queira sair): “;
ler
num
;
se
num % 2 = 0
então
escrever
“O número é par”
senão
escrever
“O número é ímpar”;
Exemplo de comando ENQUANTO
Mas, qual o valor de num na 1ª execução?
Variáveis
num
: inteiro;
Início
enquanto
num >= 0
faça
escrever
“Digite um número (negativo caso queira sair): “;
ler
num
;
se
num % 2 = 0
então
escrever
“O número é par”
senão
escrever
“O número é ímpar”;
Exemplo de comando ENQUANTO
•
Como podemos contornar este problema?
•
Retirando a leitura da variável de dentro do laço
:
• Será gerado um laço infinito, pois num será lida apenas uma vez, e se for >= 0, o laço nunca terminará.
Exemplo de comando ENQUANTO
Variáveis
num : inteiro;
Início
escrever “Digite um número (negativo caso queira sair): “; ler num;
enquanto num >= 0 faça
se num % 2 = 0 então
escrever “O número é par” senão
escrever “O número é ímpar”;
escrever “Digite um número (negativo caso queira sair): “; ler num;
Variáveis contadoras
•
Uma variável é chamada de contadora quando
armazena um número referente a
uma quantidade de elementos ou iterações
.
•
Este tipo de variável é
muito comum em estruturas de repetição
, dada as suas
Imprimir todos os números inteiros de 1 a 100.
Imprimir todos os números inteiros de 1 a 100.
Exemplo de variáveis contadoras
Variáveis
valor
: inteiro;
Início
escrever
“Valores inteiros de 1 a 100”;
valor <- 1;
enquanto
valor <= 100
faça
escrever
valor;
Variáveis acumuladoras
•
Uma variável é chamada de acumuladora quando
tem por
característica armazenar o resultado acumulado de uma série de
valores
.
•
Quando armazenamos a soma de uma quantidade pequena de
números, a atribuição é direta.
Numa repetição devemos armazenar
a soma de diversos números sucessivos
, e para isto utilizamos uma
Calcular a soma de diversos números reais informados pelo usuário. A
entrada de dados termina com o número -999.
Exemplo de variáveis acumuladoras
Variáveis
num: real; soma : real;
Início
soma <- 0;
escrever “Digite um númro número (ou -999 para sair): “; ler num;
enquanto num != -999 faça soma <- soma + num;
escrever “Digite um númro número (ou -999 para sair): “; ler num;
escrever “A soma é: ”, soma;
Fim
A variável é iniciada
Laços infinitos
•
Ao trabalhar com repetições,
é preciso tomar cuidado para não criar
um laço infinito
, ou seja, um laço que não termina.
•
Neste tipo de situação
a máquina permaneceria executando o laço
Imprimir os quadrados dos números inteiros de 1 a 10.
Exemplode laço infinitos
Variáveis
valor:
real
;
Início
valor <- 1;
enquanto
valor <= 10
faça
escrever
QUAD(valor);
valor <- valor - 1;
Fim
Repetições aninhadas
•
Da mesma forma que é permitido o encadeamento de estruturas de
decisão
, também é possível encadear estruturas de repetição.
•
Um encadeamento de repetições
ocorre quando há necessidade de
efetuar um laço dentro de outro
.
•
Neste tipo de situação, o algoritmo possui
repetições controladas por
Repetições aninhadas
Exemplo de repetições aninhadas
Variáveis
num: inteiro;
mult: inteiro;
cont : inteiro;
Início
num <- 3;
enquanto num <= 6 faça
escrever “Tabuada de ”, num;
cont <- 1;
enquanto cont <= 10 faça
mult <- num * cont;
escrever num, “x”, cont, “=“, mult;
cont <- cont + 1;
Exemplo 1
Faça um algoritmo que leia diversos números positivos e imprima a
metade deles. Um número negativo sinaliza o fim da leitura de
Exemplo 1
–
Estruturando solução
•
Entradas
• Números positivos
•
Saídas
• A metade dos números
•
Detalhes
• Usar o comando ENQUANTO repetir a leitura de números até que seja digitado um valor negativo.
Exemplo 1 - Algoritmo
Variáveis
numero : real; metade : real;
Início
escrever “Digite um número (negativo caso deseje sair): ”; ler numero ;
enquanto numero >= 0 faça metade <- numero / 2;
escrever “Metade de ”, numero, “é: ”, metade;
escrever “Digite um número (negativo caso deseje sair): ”; ler numero ;
Exemplo 1
–
Execuções do algoritmo
Digite um número (negativo caso deseje sair): 10 Metade de 10 é: 5
Digite um número (negativo caso deseje sair): 2,5 Metade de 2,5 é: 1,25
Digite um número (negativo caso deseje sair): 5000 Metade de 5000 é: 2500
Digite um número (negativo caso deseje sair): -1
Exemplo 2
Exemplo 2
–
Estruturando solução
•
Entradas
• 10 números inteiros
•
Saídas
• Quantidade de números ímpares
•
Detalhes
• Serão necessárias 10 leituras. Podemos criar uma variável contadora para controlar este laço. • Precisaremos de uma outra variável para contar a quantidade de números ímpares.
• Não podemos deixar para contar após a repetição, pois cada número fornecido apaga o anterior. Logo precisamos ir contando após cada entrada, incrementando uma nova variável contadora.
Exemplo 2 - Algoritmo
Variáveis
contador : inteiro;
numero : inteiro;
contador_impar : inteiro;
Início
contador <- 1;
contador_impar <- 0;
enquanto contador <= 10 faça
escrever “Digite um número inteiro: ”; ler numero ;
contador <- contador + 1;
se (numero % 2) != 0 então
contador_impar <- contador_impar + 1;
escrever “O total de ímpares é: “, contador_impar ;
Exemplo 2
–
Execuções do algoritmo
Exemplo 3
Exemplo 3
–
Estruturando solução
•
Entradas
• Números reais
•
Saídas
• Maior número dentre os informados
•
Detalhes
Exemplo 3 - Algoritmo
Variáveis
numero: real;
maior_numero : real; Início
escrever “Digite um número (ou -1 para sair): “; ler numero;
maior_numero <- numero;
enquanto numero != -1 faça
se numero > maior_numero então
maior_numero <- numero ;
escrever “Digite um número (ou -1 para sair): “; ler numero;
se maior_numero != -1 então
escrever“O maior número é: ”, maior_numero; senão
Exemplo 3
–
Execuções do algoritmo
Digite um número (ou -1 para sair): 10 Digite um número (ou -1 para sair): 3 Digite um número (ou -1 para sair): 3267 Digite um número (ou -1 para sair): 65 Digite um número (ou -1 para sair): -1 O maior número é: 3267
Exemplo 4
Faça um algoritmo que gere e escreva os 5 primeiros números
Exemplo 4
–
Estruturando solução
•
Entradas
• Nenhuma
•
Saídas
• Lista de números perfeitos
•
Detalhes
• Vamos precisar de uma variável contadora de números perfeitos
• Vamos precisar de duas estruturas de repetição aninhadas
• Uma estrutura de repetição para gerar números a serem testados, que só deve parar quando encontrar os primeiros 5 números perfeitos
• Vamos precisar de uma variável acumuladora para a soma dos divisores
Exemplo 4 - Algoritmo
Variáveis
numero: inteiro;
contador_perfeitos: inteiro;
divisor: inteiro;
soma_divisores: inteiro;
Início
contador_perfeitos <- 0; numero <- 1;
enquanto contador_perfeitos < 5faça
divisor <- 1;
soma_divisores <- 0;
enquanto divisor < numerofaça
senumero % divisor == 0 então
soma_divisores <- soma_divisores + divisor;
divisor <- divisor + 1;
senumero == soma_divisores então
contador_perfeitos <- contador_perfeitos + 1;
escrevernumero, “, ”;
numero++;
Exemplo 4
–
Execuções do algoritmo
Exemplo 5
Uma fábrica de automóveis produz uma determinada quantidade de
automóveis por dia. Faça um algoritmo para ler do usuário a
quantidade produzida diariamente ao longo de um ano e depois
informe:
•
A quantidade produzida no ano todo
•
A menor produção diária
Exemplo 5
–
Estruturando solução
•
Entradas
• Veículos produzidos diariamente
•
Saídas
• A quantidade produzida no ano todo • A menor produção diária
•
Detalhes
• Precisamos de uma variável acumuladora para o total produzido e outra para a menor produção
Exemplo 5 - Algoritmo
Variáveis
producao: inteiro;
total_produzido: inteiro;
menor_producao: inteiro; Início
escrever “Digite a produção do dia: ”; ler producao;
total_produzido <- 0;
menor_producao <- producao;
enquanto producao != -1 faça
total_produzido <- total_produzido + producao;
seproducao < menor_producao então
menor_producao <- producao ;
escrever “Digite a produção do dia: ”; ler producao;
Exemplo 5
–
Execuções do algoritmo
Digite a produção do dia: 1 Digite a produção do dia: 2 Digite a produção do dia: 3 Digite a produção do dia: 4 Digite a produção do dia: 5 Digite a produção do dia: -1 Produção total: 15