Buscar

Prog-1 - 05 - Estruturas_de_Repeticao2

Prévia do material em texto

1
Estruturas de Repetição
Programação
2
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?
� Também chamada a laço ou loop;
� É uma instrução que permite a execução de um trecho de 
algoritmo várias vezes seguidas.
� Nesta aula veremos:
� Repetição com teste no início;
� Repetição com teste no final;
� Repetição com variável de controle.
3
Comandos REPITA e ENQUANTO
� Tanto o comando REPITA quanto o comando 
ENQUANTO permitem repetir um ou mais comandos no 
corpo de um algoritmo.
� A sintaxe dos comandos é:
repita
<comando1>;
<comando2>;
.
.
.
<comandoN>;
até <expr>;
enquanto <expr> faça
<comando>;
4
Comando REPITA
� O comando REPITA indica que todos os comandos entre a palavra 
repita e a palavra até encontram-se dentro de um laço e devem ser 
executados.
� Após a palavra até deve haver uma expressão lógica que:
� Se falsa, indica que o laço deve ser executado novamente;
� Se verdadeira, indica que o laço acabou e o algoritmo deve continuar 
sendo executado.
� Esta estrutura é chamada de repetição com teste no final
� A decisão entre repetir e parar o laço é feita ao final do comando.
� É garantido que o laço será executado pelo menos uma vez.
5
Comando REPITA em C/C++ e Java
� O mais próximo do REPITA é a instrução 
do...while
� Teste realizado após a execução do corpo do loop.
� O corpo do loop sempre executa pelo menos uma vez.
� Diferente do repita, o código continuará sendo executado 
enquanto a instrução for VERDADEIRA. 
do {
instrução
} while ( condição );
6
Exemplo (C/C++) comando do...while
int contador = 1; //declara e inicializa o contador
do {
// Imprime e incrementa o contador
cout << “Contador = ” << contador <<endl;
contador = contador + 1;
} while (contador <= 10); // testa a condição de parada
2
7
Exemplo (JAVA) comando do...while
int contador = 1; //declara e inicializa o contador
do {
// Imprime e incrementa o contador
System.out.println( “Contador = ” +contador);
contador = contador + 1;
} while (contador <= 10); // testa a condição de parada
8
Comando ENQUANTO
� O comando ENQUANTO indica que o comando seguinte será 
executado, desde que o resultado da expressão lógica seja 
verdadeiro.
� Apesar do ENQUANTO permitir apenas a repetição de um único 
comando, nada impede que seja utilizado um bloco de comandos.
� Ao encontrar o fim do comando (ou do bloco), 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 interrompe a execução e continua no próximo 
comando após o trecho repetido.
� 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.
9
Comando Enquanto em C/C++ e Java
� Implementado com a instrução while
� instrução que efetua o teste antes da execução 
do corpo do loop.
� O corpo do loop pode nunca ser executado.
while ( condição ) {
instrução
} 
10
Exemplo comando While em C/C++
int contador; // declara a variável de controle
contador = 1; // inicializa a variável de controle
while (contador <= 10) { // condição de parada do loop
cout << “Contador = ” << contador <<endl;
// incrementa a variável de controle por 1
contador = contador +1;
}
11
Exemplo comando While em JAVA
int contador; // declara a variável de controle
contador = 1; // inicializa a variável de controle
while (contador <= 10) { // condição de parada do loop
System.out.println( “Contador = ” + contador);
// incrementa a variável de controle por 1
contador = contador +1;
}
12
Comandos REPITA e ENQUANTO
� Exercício:
� Fazer um programa para ler diversos pares de notas 
informados pelo usuário. Cada par de nota deve ser 
calculado a média dessas duas notas. Após cada 
leitura exibir a média das duas notas lidas. Considere 
que depois da exibição da média seja perguntado ao 
usuário se ele deseja finalizar o programa ou calcular 
mais, com a seguinte mensagem: “Digite 0 (zero) 
para finalizar o programa:”.
3
13
Comandos REPITA e ENQUANTO
� Solução
� Quantos dados serão fornecidos?
� Quantas variáveis serão necessárias?
� Temos que identificar o trecho que será repetido e 
adicioná-lo dentro de um comando de repetição, 
declarando apenas as variáveis necessárias para 
uma repetição.
14
Comandos REPITA e ENQUANTO
� Solução usando repita(cont.)
� O algoritmo fica assim:
Variáveis
n1, n2, m : real;
res : inteiro;
Início
repita
escreva “Digite a nota 1: ”;
leia (n1);
escreva “Digite a nota 2: ”;
leia (n2);
m <- (n1+n2)/2;
escreva “Média = ”, m;
escreva “Digite 0 (zero) para finalizar o programa: ”;
leia (res);
até res = 0;
Fim
15
Solução em C/C++ usando do-while
int main()
{
float n1, n2, m;
int res;
do {
cout << "Digite a nota 1: ";
cin >> n1;
cout << "Digite a nota 2: ";
cin >> n2;
m = (n1+n2)/2;
cout << "Média = " << m << endl;
cout << "Digite 0 (zero) para finalizar o programa: ";
cin >> res;
} while (res != 0);
return 0;
} 16
Comandos REPITA e ENQUANTO
� Exercício:
�Refazer o programa anterior, só que desta 
vez usando while.
17
Solução em C/C++ usando while
int main()
{
float n1, n2, m;
int res = -1;
while (res != 0) {
cout << "Digite a nota 1: ";
cin >> n1;
cout << "Digite a nota 2: ";
cin >> n2;
m = (n1+n2)/2;
cout << "Média = " << m << endl;
cout << "Digite 0 (zero) para finalizar o programa: ";
cin >> res;
}
return 0;
} 18
Variáveis contadoras
� Uma variável é chamada de contadora quando 
armazena dentro de si um número referente a uma certa 
quantidade de elementos ou iterações.
� Este tipo de variável é muito comum em estruturas de 
repetição, dada as suas diversas aplicações em 
problemas que envolvem contagens de valores.
� Exemplo:
� Imprimir todos os números inteiros de 1 a 100.
4
19
Variáveis contadoras
� Solução
� O algoritmo não tem dados de entrada, e fica assim:
Variáveis
valor : inteiro;
Início
escrever “Valores inteiros de 1 a 100”;
valor = 1;
repita
escrever valor;
valor = valor + 1;
até valor > 100;
Fim
É possível resolver
utilizando o ENQUANTO?
20
Programa em C/C++
int main()
{
int valor = 1;
cout << "Valores inteiros entre 1 e 100: \n";
do {
cout << "valor = " << valor << endl;
valor = valor + 1;
} while (valor <=100);
return 0;
}
21
Variáveis contadoras
� Solução
� Utilizando o ENQUANTO o algoritmo fica assim:
Variáveis
valor : inteiro;
Início
escrever “Valores inteiros de 1 a 100”;
valor = 1;
enquanto valor <= 100 faça
[[
escrever valor;
valor = valor + 1;
]];
Fim
22
Variáveis contadoras
� Exercício:
�Escrever um programa que leia 10 números 
inteiros fornecidos pelo usuário, e exiba 
quantos números ímpares foram informados.
23
Variáveis contadoras
� Solução
� 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.
� Esta nova variável contadora só é incrementada se o número 
informado for ímpar.
24
Variáveis contadoras
� Solução
Variáveis
cont, num, qtd_impar : inteiro;
Início
cont = 1;
qtd_impar = 0
enquanto cont <= 10 faça
[[
escrever “Digite um número: ”;
ler num;
se num % 2 <> 0 então
qtd_impar = qtd_impar + 1;
cont = cont + 1;
]];
escrever “O total de ímpares foi “ , qtd_impar;
Fim
A variável é iniciada
como 0 pois o usuário
poderá informar 10
números pares
5
25
Programa em C/C++
int main()
{
int contador=1, numero=0, qtd_impar = 0;
while (contador <=10) {
cout << "Entre o " << contador << "º número: ";
cin >> numero;
if (numero % 2 != 0)
qtd_impar = qtd_impar + 1;
contador = contador +1;
}
cout << "O totalde números ímpares digitado foi: " << qtd_impar << endl;
return 0;
}
26
Programa em Java
public static void main(String[] args) {
int contador=1, numero=0, qtd_impar = 0; 
while (contador <=10) {
System.out.println( "Entre o " + contador + "º número:");
numero = leia(numero);
if (numero % 2 != 0)
qtd_impar = qtd_impar + 1;
contador = contador +1;
}
System.out.println("O total de números ímpares digitado foi: " + 
qtd_impar);
}
27
Variáveis acumuladoras
� Uma variável é chamada de acumuladora quando tem 
por característica armazenar dentro de si 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 variável 
acumuladora.
� Exemplo
� Calcular a soma de diversos números reais informados pelo 
usuário. A entrada de dados termina com o número -999.
28
Variáveis acumuladoras
� Solução
� O algoritmo fica assim:
Variáveis
num, soma : real;
Início
soma = 0;
escrever “Para sair, entre com -999”;
escrever “Entre com o número: “;
ler num;
enquanto num <> -999 faça
[[
soma = soma + num;
escrever “Entre com o número: “;
ler num;
]];
escrever “A soma foi ”, soma;
Fim
A variável é iniciada
como 0 pois, caso o usuário
forneça -999 na primeira
execução, o valor total da
soma é 0.
29
Variáveis acumuladoras
� Exercício
�Fazer um programa que leia diversos 
números reais e exiba qual foi o maior de 
todos. O código -1 sinaliza o fim da leitura.
30
Variáveis acumuladoras
� Solução Variáveis num, maior : real;
Início
escrever “Para sair, entre com -1”;
escrever “Entre com o número: “;
ler num;
maior <- num;
enquanto num <> -1 faça
[[
se num > maior então
maior <- num;
escrever “Entre com o número: “;
ler num;
]];
se maior <> -1 então
escrever “O maior número digitado foi ”, maior
senão
escrever “Nenhum número válido foi informado.”;
Fim
6
31
Programa em C/C++
int main()
{
double numero = 0, numero_maior =0;
cout << "Para sair, digite -1.\n";
cout << "Digite um número:";
cin >> numero;
numero_maior = numero;
while (numero != -1) {
if (numero > numero_maior)
numero_maior = numero;
cout << "Digite um número:";
cin >> numero;
}
if (numero_maior != -1)
cout << "O maior número foi: " << numero_maior;
else
cout << "Nenhum número válido foi informado";
return 0;
} 32
Programa em Java
public static void main(String[] args) {
double numero = 0, numero_maior =0;
System.out.println("Para sair, digite -1.");
System.out.println("Digite um número:");
numero = leia(numero);
numero_maior = numero;
while (numero != -1) {
if (numero > numero_maior)
numero_maior = numero;
System.out.println("Digite um número:");
numero = leia(numero);
}
if (numero_maior != -1)
System.out.println("O maior número foi: " + numero_maior);
else
System.out.println("Nenhum número válido foi informado");
}
33
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 indefinidamente, até que ocorra uma 
intervenção externa.
� Exemplo:
� Imprimir os quadrados dos números inteiros de 1 a 10.
34
Laços infinitos
� Solução:
Variáveis
valor, quadrado : real;
Início
escrever “Quadrados dos números inteiros de 1 a 10”;
escrever “Entre com o número: “;
valor = 1;
repita
quadrado = sqr(valor);
escrever quadrado;
valor = valor - 1;
até valor > 10;
escrever “Fim da impressão.”;
Fim
Este decremento provoca
um loop infinito.
35
Repetições encadeadas
� Da mesma forma que é permitido o encadeamento de 
testes, também é possível encadear comandos 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 um teste interno e outro externo.
� Exemplo
� Imprimir as tabuadas de multiplicação dos números 3, 4, 5 e 6.
36
Repetições encadeadas
� Solução
Variáveis
num, mult, 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;
]];
num = num + 1;
]];
Fim
7
37
Repetições encadeadas
� Exercício
�Escreva o algoritmo anterior em C/C++ e 
observe o seu funcionamento. Em seguida, 
modifique o mesmo para mostrar a tabuada 
dos números 1 a 5.
38
Comando PARA
� É muito comum a existência de repetições que fazem 
uso de variáveis contadoras, especialmente para 
contagens de 1 em 1.
� Para facilitar a construção deste tipo de laço, pode-se 
utilizar um outro comando de repetição complementar 
chamada PARA. Sua sintaxe é:
para <var> de <valor_inicial> até <valor_final> faça
<comando>;
39
Comando PARA
� Exemplo:
� Escrever os números inteiros de 1 a 100.
� Solução com o comando PARA:
Variáveis
valor : inteiro;
Início
escrever “Valores inteiros de 1 a 100”;
para valor de 1 até 100 faça
escrever valor;
Fim
40
Comando Para em C/C++ e Java
� Instrução de repetição for foi criada para 
repetição por contador
� Especifica os detalhes da repetição controlador por 
contador em uma única linha
for ( int contador = 1; contador <= 10; contador++ ) {
cout << contador << endl;
}
Inicialização da variável Condição de parada Incremento após iteração
41
Instrução de repetição for
� Formato geral
for (inicialização; condiçãoDeParada; incremento) {
instrução
}
� Inicialização
� Nomeia a variável de controle e inicializa seu valor.
� Condição de parada
� Condição que determina se o loop deve parar.
� Incremento
� Modifica o valor do contador para que a condição de parada 
torne-se falsa ao final.
42
Instrução de repetição for
� Expressões da condição são opcionais
� Se condição de parada for omitida, o compilador 
entende que a condição é sempre verdadeira.
� Loop infinito.
� Caso incremento seja calculado no corpo do loop, esta 
expressão pode ser omitida;
� Caso contador seja inicializado antes de chegar a 
instrução, esta expressão pode ser omitida.
8
43
Instrução de repetição for
� Calcule e exiba a soma de todos os números 
pares contidos entre zero e um número 
fornecido via teclado (caso o número fornecido 
seja par, o mesmo deverá fazer parte da soma). 
44
Solução em C/C++
int main()
{
double numero = 0, soma_pares =0;
cout << "Digite um número > 0:";
cin >> numero;
if (numero >0) {
for (int i=1;i<=numero; i++) {
if (i % 2 == 0)
soma_pares = soma_pares + i;
}
cout << "A soma dos pares é: " << soma_pares << endl;
}
else
cout << "Número inválido informado.";
return 0;
}
45
Solução em JAVA
public static void main(String[] args) {
double numero = 0, soma_pares =0;
System.out.println("Digite um número > 0:");
numero = leia(numero);
if (numero >0) {
for (int i=1;i<=numero; i++) {
if (i % 2 == 0)
soma_pares = soma_pares + i;
}
System.out.println("A soma dos pares é: "+soma_pares);
}
else
System.out.println("Número inválido informado.");
}
46
Comando PARA
� Exercícios:
�Faça um programa para exibir os números 
1, 4, 9, 16, 25, 36, ... , 10000.
�Faça um programa que leia 10 valores 
inteiros e positivos e depois informe:
� Qual o maior valor;
� Qual o menor valor;
� A média dos números lidos.
47
Solução exercício 1 em C/C++
int main()
{
for (int i=1; i<100; i++)
{
cout << (i*i) <<", ";
}
cout << (100*100) << endl;
return 0;
}
48
Solução exercício 1 em C/C++ (outra)
int main()
{
int numero = 1, contador =3;
cout << numero;
while (numero < 10000)
{
cout << ", " << (numero + contador);
numero = numero + contador;
contador = contador + 2;
}
return 0;
}
9
49
Solução exercício 1 em JAVA
public static void main(String[] args) {
int numero = 1, contador =3;
System.out.println(numero);
while (numero < 10000) {
System.out.println((numero + contador));
numero = numero + contador;
contador = contador + 2;
}
}
50
Solução exercício 2 em C/C++
int main()
{
double numero,numero_maior, numero_menor, soma = 0, contador = 0;
cout << "Para sair, digite -1.";
cout << "Digite um número: ";
cin >> numero;
numero_maior = numero;
numero_menor = numero;
51
Solução exercício 2 em C/C++ (cont)
while (numero != -1) {
contador = contador + 1;
soma = soma + numero;
if (numero > numero_maior)
numero_maior = numero;
else if (numero < numero_menor)
numero_menor = numero;
cout << "Digite um número:";
cin >> numero;
}
if (numero_maior != -1) {
cout << "O maior número digitado foi: " << numero_maior <<endl;
cout << "O menor número digitado foi: " << numero_menor <<endl;
cout << "A média dos números digitados é: " << (soma/contador) << endl;
}
else
cout << "Nenhum número válido foi informado!\n";
return 0;
} 52
Solução exercício 2 em JAVA
public static void main(String[] args) {
double numero = 0, numero_maior =0, numero_menor=0,soma =0, 
contador =0;
System.out.println("Para sair, digite -1.");
System.out.println("Digite um número:");
numero = leia(numero);
numero_maior = numero;
numero_menor = numero;
while (numero != -1) {
contador = contador + 1;
soma = soma + numero;
if (numero > numero_maior)
numero_maior = numero;
53
Solução exercício 2 em JAVA (cont)
else if (numero < numero_menor)
numero_menor = numero;
System.out.println("Digite um número:");
numero = leia(numero);
}
if (numero_maior != -1) {
System.out.println("O maior número digitado foi: " + 
numero_maior);
System.out.println("O menor número digitado foi: " + 
numero_menor);
System.out.println("A média dos números digitados é: " + 
soma/contador);
}
else
System.out.println("Nenhum número válido foi informado");}
Dúvidas ?

Continue navegando