Estruturas de Repetição: Repetição Condicional Estruturas de Programação • Qualquer programa de computador pode ser escrito combinando-se os três tipos básicos de estruturas de programação: Estruturas de Repetição • Permitem que o programa execute um bloco de comandos mais de uma vez • O número de repetições (ou iterações) deve ser conhecido e sempre finito • Caso contrário, programa travará Estruturas de Repetição • Permitem que o programa execute um bloco de comandos mais de uma vez • O número de repetições (ou iterações) deve ser conhecido e sempre finito • Caso contrário, programa travará enquanto, while e do-while para , for Motivação – Estruturas de Repetição Motivação – Estruturas de Repetição print(‘Eu serei um bom menino’) print(‘Eu serei um bom menino’) print(‘Eu serei um bom menino’) print(‘Eu serei um bom menino’) print(‘Eu serei um bom menino’) print(‘Eu serei um bom menino’) print(‘Eu serei um bom menino’) print(‘Eu serei um bom menino’) ..... Motivação – Estruturas de Repetição Implemente um programa que recebe as notas do semestre de 3 alunos e escreve a média parcial de cada um deles. 3 notas parciais 3 alunos Quantas variáveis? Motivação – Estruturas de Repetição Motivação – Estruturas de Repetição leia(media1) leia(media2) leia(media3) mediaTurma = (media1+media2+media3)/3 escreva(mediaTurma) 4 Variáveis Motivação – Estruturas de Repetição Implemente um programa que recebe as notas de 100 alunos e escreve a média parcial de cada um deles. •E para 1000 alunos? 10000 alunos? •E se eu não souber previamente quantos alunos são? Estrutura de Repetição - ENQUANTO A estrutura de repetição ENQUANTO é utilizada da seguinte maneira: ENQUANTO (<EXPRESSÃO LÓGICA >) comando 1 comando 2 ......... comando n FIMENQUANTO Antes de entrar na estrutura de repetição, a expressão lógica é avaliada: • Caso VERDADEIRO : Os comandos dentro da estrutura serão executados e ao final volta-se a avaliar a expressão lógica novamente • Caso FALSO: O algoritmo sai da estrutura de repetição Estrutura de Repetição - ENQUANTO Fluxograma ENQUANTO Avaliar condição (repetir) falso verdadeiro Executar comandos prosseguir Observe que há a possibilidade de nunca se executar os comandos, caso a primeira avaliação da condição já resulte em falso Estrutura de Repetição - ENQUANTO A estrutura de repetição ENQUANTO é utilizada da seguinte maneira: ENQUANTO (<EXPRESSÃO LÓGICA >) comando 1 comando 2 ......... comando n FIMENQUANTO Avaliar condição (repetir) falso verdadeiro Executar comandos Atenção: Algo dentro do laço deve ser capaz de modificar o resultado da expressão booleana, caso contrário o laço nunca terminará, e o programa entrará em loop infinito Contador de Laço • Uma das maneiras de controlar uma estrutura ENQUANTO é o contador de laço • Todo contador de laço é configurado em 3 passos: 1 atribuição (valor inicial) 2 condição (valor final) 3 passo (ou incremento) Contador de Laço - Fluxograma • Todo contador de laço é configurado em 3 passos: 1 Inicialização 2 Avaliar condição verdadeiro Executar comandos 3 incremento prosseguir falso 1 atribuição (valor inicial) 2 condição (valor final) 3 passo (ou incremento) Exemplo 01 - Fluxograma Escreva um algoritmo para contar de 1 até 5 Exemplo 01 - Fluxograma Escreva um algoritmo para contar de 1 até 5 1º Iteração contador 1 Saída 1 Exemplo 01 - Fluxograma Escreva um algoritmo para contar de 1 até 5 2º Iteração contador 1 2 Saída 1 2 Exemplo 01 - Fluxograma Escreva um algoritmo para contar de 1 até 5 3º Iteração contador 1 2 3 Saída 1 2 3 Exemplo 01 - Fluxograma Escreva um algoritmo para contar de 1 até 5 Término do Loop contador 1 2 3 4 5 Saída 1 2 3 4 5 6 Exemplo 01 – Pseudo-Código Escreva um algoritmo para contar de 1 até 5 contador = 1 1 atribuição (valor inicial) ENQUANTO ( contador<=5 ) 2 condição (valor final) IMPRIME(contador) contador = contador + 1 FIMENQUANTO 3 passo (ou incremento) A representação em Fluxograma e Pseudocódigo são equivalentes. Elas nos ajudam a nos focar na lógica do problema, sem se preocupar com sintaxe da linguagem Note que a estrutura de repetição é executada 5 VEZES. O contador começa com valor 1, e temina com valor 6 Contador de Laço atribuição ● Deve ser ajustado fora do laço condição (valor final) ● Ajustar condição do laço. Uma condição mal elaborada pode fazer com que o laço seja executado infinita vezes (loop infinito) passo (ou incremento) ● Determina a taxa de crescimento ou decrescimento do contador, desde o valor inicial até o valor final Exercicio – Pseudo-Código Faça um fluxograma ou um pseudo-código para exibir números entre: • 1 a 100 • 50 a 100 • 10 a 1 (Contagem regressiva) • 2,4,6, ..., 20 ( De 2 até 20, com incremento 2) Entregar no Classroom Perguntas? OBRIGADO! Loop Infinito Um loop ou laço infinito ocorre quando cometemos algum erro • Ao especificar a condição lógica que controla a repetição; • Esquecer de algum comando dentro da iteração Loop Infinito Condição mal formulada Esqueceu comando cont cont Saída Saída Loop Infinito Condição mal formulada Esqueceu comando cont = 4 ENQUANTO ( cont < 5) cont = cont – 1 IMPRIMA(x) FIMENQUANTO cont Saída 4 cont = 4 ENQUANTO ( cont < 5) IMPRIMA(cont) FIMENQUANTO 3 2 -1 -2 ... cont 4 3 2 -1 -2 ... Saída 4 4 4 4 4 ... Variável Acumuladora • Vamos ver alguns exemplos de problemas que são resolvidos utilizando laços • Existem alguns problemas “bases” que podem ser utilizados em diversos problemas Exemplo Leia 05 números e apresente a soma deles Exemplo – Variável Acumuladora Leia 5 números e apresente a soma deles Exemplo de entrada: 5 4 8 2 10 Saída: 29 Exemplo – Variável Acumuladora Leia 05 números e apresente a soma deles Como fazer? • Precisamos de um laço de repetição que REPITA 05 VEZES • Como fazê-lo ( há várias formas) Exemplo – Pseudo Código Leia 05 números e apresente a soma deles Exemplo – Pseudo Código Leia 05 números e apresente a soma deles soma = 0 ## este passo é muito importante cont = 1 ENQUANTO (cont <=5 ) LEIA(num) soma = soma + num ## variável acumuladora cont = cont+1 FIMENQUANTO IMPRIMA(soma) soma = 0 ## este passo é muito importante cont = 0 ENQUANTO (cont < 5 ) LEIA(num) soma = soma + num ## variável acumuladora cont = cont+1 FIMENQUANTO IMPRIMA(soma) cont varia de 1 até 6 (5 vezes) cont varia de 0 até 5 (5 vezes) Exemplo – Pseudo Código Leia 05 números e apresente a soma deles soma = 0 ## este passo é muito importante cont = 1 ENQUANTO (cont <=5 ) LEIA(num) soma = soma + num ## variável acumuladora cont = cont+1 FIMENQUANTO IMPRIMA(soma) soma = 0 ## este passo é muito importante cont = 0 ENQUANTO (cont < 5 ) LEIA(num) soma = soma + num ## variável acumuladora cont = cont+1 FIMENQUANTO IMPRIMA(soma) cont cont soma soma num num Exemplo – Pseudo Código Leia 05 números e apresente a soma deles soma = 0 ## este passo é muito importante cont = 1 ENQUANTO (cont <=5 ) LEIA(num) soma = soma + num ## variável acumuladora cont = cont+1 FIMENQUANTO IMPRIMA(soma) soma = 0 ## este passo é muito importante cont = 0 ENQUANTO (cont < 5 ) LEIA(num) soma = soma + num ## variável acumuladora cont = cont+1 FIMENQUANTO IMPRIMA(soma) cont 1 2 3 4 5 6 cont 0 1 2 3 4 5 soma 0 10 15 21 30 34 soma 0 10 15 21 30 34 num 10 5 6 9 4 num 10 5 6 9 4 Exemplo – Pseudo Código Leia 05 números e apresente a soma deles soma = 0 ## este passo é muito importante cont = 1 ENQUANTO (cont <5 ) LEIA(num) soma = soma + num ## variável acumuladora cont = cont+1 FIMENQUANTO IMPRIMA(soma) Muita atenção ao montar as condições. Neste caso, o loop repete 4 vezes (1 até 5) Exemplo – Pseudo Código Leia 05 números e apresente a soma deles soma = 0 ## este passo é muito importante cont = 0 ENQUANTO (cont <=5 ) LEIA(num) soma = soma + num ## variável acumuladora cont = cont+1 FIMENQUANTO IMPRIMA(soma) Muita atenção ao montar as condições. Neste caso, o loop repete 6 vezes (0 até 6) Exemplo – Pseudo Código e Python Leia 05 números e apresente a soma deles soma = 0 cont = 1 ENQUANTO (cont <=5 ) LEIA(num) soma = soma + num cont = cont+1 FIMENQUANTO IMPRIMA(soma) soma = 0 ## este passo é muito importante cont = 1 while (cont <=5 ): num = int(input(‘Digite um numero: ’)) soma = soma + num ## variável acumuladora cont = cont+1 print( ‘A soma dos números é: ’ ,soma) Problemas comuns ao construir laços de repetição 1 Escolha incorreta do valor inicial do contador 2 Escolha incorreta da condição do laço 3 Esquecer de incrementar o contador 4 Deixar de atualizar a variável acumuladora conforme pede o problema 5 Deixar de identificar corretamente quais e quantas são as variáveis contadoras e acumuladoras Exemplo 02 Faça um programa que leia 10 números e apresente: • Quantidade de pares • Quantidade de impares • Soma de pares • Soma dos impares Exemplo 02 Faça um programa que leia 10 números e apresente: • Quantidade de pares • Quantidade de impares • Média dos pares • Média dos ímpares Neste exemplo, devemos ter um loop que repete 10 vezes Exemplo 02 O pseudo código abaixo, lê 10 números. cont = 1 ENQUANTO (cont <= 10 ) LEIA(num) cont = cont+1 Versão 01 Note que a cada iteração, o valor do número se perde, pois a variável assume um novo valor. Para resolvermos isso, devemos ter uma variável que consiga armazenar diversos valores( vetores, listas, etc... ) Exemplo 02 Vamos incrementar o nosso algoritmo para encontrar a quantidade de pares e de ímpares. Antes disso, vamos ver um algoritmo já “visto” • O pseudo-código abaixo mostra como verificar se um número é par, ou impar LEIA(NUM) SE (num%2==0 ) IMPRIMA(‘é par’) SENAO IMPRIMA(‘é impar’) Ou seja, para cada número lido, vamos verificar se ele é par ou impar. • Caso seja par, vamos incrementar o valor de uma variável contadora de pares • Senão, vamos incrementar o valor de uma variável contadora de impares Exemplo – Pseudocódigo Versão 02 Exemplo – Pseudocódigo cont = 1 contPar = 0 ## contador dos pares contImpar = 0 ## contador dos impares ENQUANTO (cont <= 10 ) LEIA(num) SE ( num%2 == 0) contPar = contPar+1 ## caso seja par, incrementa SENAO contImpar = contImpar + 1 cont = cont+1 ## Observe que o contador do laço fica fora das condições IMPRIMA(‘Quantidade de pares: ’, contPar) IMPRIMA(‘Quantidade de impares: ‘,contImpar) Versão 02 Exemplo 02 Como calcular a media dos pares e impares? Exemplo 02 Como calcular a media dos pares e impares? 1. Calcular a soma dos pares e impares (variável acumuladora) 2. Dividir a soma final dos pares e impares pela quantidade deles . OBS: A divisão deve acontecer depois de somarmos todos os valores Ex: Entrada: 1 2 3 4 5 6 7 8 9 10 Soma dos pares: 2 + 4 + 6 +8 + 10 = 30 Soma dos impares: 1 + 3 + 5 + 7 + 9 = 25 Média dos pares: 30 / QtdPares = 30/ 5 = 6 Média dos impares: 25 / qtdImpares = 25/5 = 5 Exemplo 02 – Versão Final Exemplo 02 – Versão Final cont = 1 contPar = 0 ## contador dos pares contImpar = 0 ## contador dos impares somaPar = 0 ## acumulador par somaImpar = 0 ## acumulador impar ENQUANTO (cont <= 10 ) LEIA(num) SE ( num%2 == 0) contPar = contPar+1 somaPar = somaPar + num SENAO contImpar = contImpar + 1 somaImpar = somaImpar + num cont = cont+1 ## Observe que o contador do laço fica fora das condições IMPRIMA(‘Quantidade de pares: ’, contPar) IMPRIMA(‘Quantidade de impares: ‘,contImpar) IMPRIMA(‘Media dos pares: ‘, somaPar/contPar ) IMPRIMA(‘Media dos impares’, somaImpar/contImpar) Exercício Traduza o algoritmo anterior para a linguagem python Exercício Faça um algoritmo e um programa, que leia 20 notas e diga: • Quantidade de aprovados ( nota maior que 6) • Quantidade de recuperação ( nota entre 4 e 6) • Quantidade de reprovados ( nota menor que 4) • Média da turma Referências Slides prof Edson Burin – UNICAMP https://www.ic.unicamp.br/~edson/disciplinas/mc102/2019- 1s/ef/slides/MC102-Aula04.pdf Slides ICOMP/UFAM – Introdução a Ciencia dos Computadores Perguntas? OBRIGADO! Exemplo 02 Leia 2 valores inteiros X e Y. A seguir, calcule e mostre a soma dos números ímpares entre eles Exemplo 02 Leia 2 valores inteiros X e Y. A seguir, calcule e mostre a soma dos números ímpares entre eles Ex: 6 14 Números entre 6 e 14: - 7, 8, 9, 10, 11,12,13 Soma dos impares: 7+9+11+13 = 40 Ex: 6 -5 Números entre -5 e 6: -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 Soma dos impares: -3-1+0+1+3+5 = 5 Exemplo 02 Leia 2 valores inteiros X e Y. A seguir, calcule e mostre a soma dos números ímpares entre eles Ex: 6 14 Números entre 6 e 14: - 7, 8, 9, 10, 11,12,13 Soma dos impares: 7+9+11+13 = 40 Ex: 6 -5 Números entre -5 e 6: -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 Soma dos impares: -3-1+0+1+3+5 = 5 • Ou seja, devemos percorrer entre os números, e acumular somente os impares • A duas entradas, definem o valor inicial(inicialização) e final(condição) do problema • Também devemos verificar qual o menor valor e maior valor Exemplo 02 – Pseudocódigo LEIA(X) LEIA(Y) SE ( X > Y ) # caso o primeiro numero seja o menor cont = X+1 # x+1, pois queremos pegar os números ENTRE x e Y valor_final = Y # Y, aqui não precisa, pois iremos utilizar o sinal de menor. SENAO # caso o segundo numero seja o menor cont = Y+1 valor_final = X ENQUANTO (valor_inicial < valor_final ) SE (cont%2 == 1) # soma = soma + cont cont = cont +1