Baixe o app para aproveitar ainda mais
Prévia do material em texto
Estruturas de Repetição 1: Comando ENQUANTO Romero Medeiros romero.medeiros@olinda.ifpe.edu.br Introdução à Programação 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); • Repetição com variável de controle (para). 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 <comandos>; Exemplo de comando ENQUANTO • Fazer um algoritmo para ler diversos números informados pelo usuário, e após cada leitura exibir se o número é par ou ímpar. Considere que ao fornecer um valor negativo o usuário deseja encerrar e entrada de dados. Exemplo de comando ENQUANTO Variáveis num : inteiro; Início enquanto num >= 0 faça escrever “Digite um número (negativo para sair): “; ler num; se num % 2 == 0 então escrever “O número é par” senão escrever “O número é ímpar”; Fim 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”; Fim Mas, qual o valor de num na 1ª execução? 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á. • Colocar uma leitura antes do laço, e uma segunda leitura como últimos comandos dentro do laço. 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; Fim Exemplo de comando ENQUANTO num = get_integer("Digite um número (negativo para sair): ",""); while (num >= 0) { if num mod 2 = 0 show_message("O número é par"); else show_message("O número é impar"); num = get_integer("Digite um número (negativo para sair): ",""); } 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 diversas aplicações em problemas que envolvem contagens de valores. Imprimir todos os números inteiros de 1 a 100. Exemplo de variáveis contadoras Imprimir todos os números inteiros de 1 a 100. Exemplo de variáveis contadoras Variáveis valor : inteiro; Início valor <- 1; enquanto valor <= 100 faça escrever valor; valor <- valor + 1; Fim Imprimir todos os números inteiros de 1 a 100 (GML). Exemplo de variáveis contadoras valor = 1; while (valor <= 100) { show_message(string(valor)); valor = valor + 1; } 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 variável acumuladora. 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 Exemplo de variáveis acumuladoras Variáveis num: inteiro; soma : inteiro; Início soma <- 0; escrever “Digite um número número (ou -999 para sair): “; ler num; enquanto num != -999 faça soma <- soma + num; escrever “Digite um número número (ou -999 para sair): “; ler num; escrever “A soma é: ”, soma; Fim Exemplo de variáveis acumuladoras Variáveis num: inteiro; soma : inteiro; Início soma <- 0; escrever “Digite um número número (ou -999 para sair): “; ler num; enquanto num != -999 faça soma <- soma + num; escrever “Digite um número número (ou -999 para sair): “; ler num; escrever “A soma é: ”, 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. Exemplo de variáveis acumuladoras soma = 0; num = get_integer("Digite um número (ou -999 para sair): ",""); while (num != -999) { soma = soma + num; num = get_integer("Digite um número (ou -999 para sair): ",""); } show_message("A soma é: " + string(soma)); 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. Imprimir os quadrados dos números inteiros de 1 a 10. Exemplo de laço infinitos Exemplo de laço infinitos Variáveis valor: real; Início valor <- 1; enquanto valor <= 10 faça escrever QUAD(valor); valor <- valor - 1; Fim Exemplode laço infinitos Variáveis valor: real; Início valor <- 1; enquanto valor <= 10 faça escrever QUAD(valor); valor <- valor - 1; Fim Este decremento provoca um loop infinito. 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 um teste interno e outro externo. Repetições aninhadas Imprimir as tabuadas de multiplicação dos números 3, 4, 5 e 6. 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; num <- num + 1; Fim Exemplo de repetições aninhadas num = 3; while (num <= 6) { show_message("Tabuada de: " + string(num)); cont = 1; while (cont <= 10) { mult = cont * num; show_message(string(num) + " X " + string(cont) + " = " + string(mult)); cont = cont + 1; } num = num + 1; } EXEMPLOS Exemplo 1 Faça um algoritmo que leia diversos números positivos e imprima a metade do valor de cada um deles. Um número negativo sinaliza o fim da leitura de números. Exemplo 1 – Estruturando solução • Entradas • Números positivos • Saídas • A metade do valor dos números • Detalhes • Usar o comando ENQUANTO repetir a leitura de números até que seja digitado um valor negativo. • Fazer a primeira leitura fora do comando ENQUANTO para tratar o caso do usuário digitar o primeiro 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 ; Fim Exemplo 1 - Algoritmo numero = get_integer("Digite um número (negativo caso deseje sair): ",""); while (numero >= 0) { metade = (numero/ 2); show_message("Metade do valor de " + string(numero) + " é " + string(metade)); numero = get_integer("Digite um número (negativo caso deseje sair): ",""); } 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 Digite um número (negativo caso deseje sair): -1 Exemplo 2 Ler 10 números inteiros fornecidos pelo usuário, e exibir quantos números ímpares foram informados. 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. • Esta nova variável contadora só é incrementada se o número informado for ímpar. 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 ; Fim Exemplo 2 - Algoritmo contador = 1; contador_impar = 0; while (contador <= 10) { numero = get_integer("Digite um número inteiro: ",""); contador = contador + 1 if (numero mod 2) != 0 contador_impar = contador_impar + 1; } show_message("O total de impares é " + string(contador_impar)); Exemplo 2 – Execuções do algoritmo Digite um número inteiro: 10 Digite um número inteiro: 70 Digite um número inteiro: 13 Digite um número inteiro: 93 Digite um número inteiro: 125 Digite um número inteiro: 3 Digite um número inteiro: 16 Digite um número inteiro: 54 Digite um número inteiro: 86 Digite um número inteiro: 29 O total de ímpares é: 5 Exemplo 3 Ler diversos números e exibir qual é o maior de todos. O código -1 sinaliza o fim da leitura. Exemplo 3 – Estruturando solução • Entradas • Números • Saídas • Maior número dentre os informados • Detalhes • Para guardar o maior número criaremos uma variável. A cada entrada é preciso saber se o número lido deve ser guardado como o maior de todos. 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 escrever “Nenhum número válido foi informado.”; Fim Exemplo 3 - Algoritmo numero = get_integer("Digite um número (ou -1 para sair): ",""); maior_numero = numero; while (numero != -1) { if numero > maior_numero maior_numero = numero; numero = get_integer("Digite um número (ou -1 para sair): ",""); } if maior_numero != -1 show_message("O maior número é " + string(maior_numero)); else show_message("Nenhum número válido foi informado "); 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 Digite um número (ou -1 para sair): -1 Nenhum número válido foi informado. Exemplo 4 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 • Considere que -1 indica o fim da digitação. Exemplo 4 – 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 • Precisamos fazer uma leitura fora do comando ENQUANTO para caso a primeira entrada seja -1 Exemplo 4 - 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; se producao < menor_producao então menor_producao <- producao ; escrever “Digite a produção do dia: ”; ler producao; escrever “Total produzido: ”, total_produzido; escrever “Menor produção: ”, menor_producao; Fim Exemplo 4 - Algoritmo producao = get_integer("Digite a produção do dia: ",""); total_produzido = 0; menor_producao = producao; while (producao != -1) { total_produzido = total_produzido + producao; if producao < menor_producao menor_producao = producao; producao = get_integer("Digite a produção do dia: ",""); } show_message("total produzido: " + string(total_produzido)); show_message("menor produção: " + string(menor_producao)); Exemplo 4 – 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 Menor produção: 1 Referências da aula • Adaptado da aula Introdução à Programação do Prof. Ricardo Araújo do curso de Ciência da Computação da FBV. • Gilvan Vilarim. Algoritmos: Programação para Iniciantes. Editora Ciência Moderna, 2004. Slide 1 Estruturas de repetição Comando ENQUANTO Exemplo de comando ENQUANTO Exemplo de comando ENQUANTO Exemplo de comando ENQUANTO Exemplo de comando ENQUANTO Exemplo de comando ENQUANTO Slide 9 Variáveis contadoras Exemplo de variáveis contadoras Exemplo de variáveis contadoras Slide 13 Variáveis acumuladoras Exemplo de variáveis acumuladoras Exemplo de variáveis acumuladoras Exemplo de variáveis acumuladoras Slide 18 Laços infinitos Exemplo de laço infinitos Exemplo de laço infinitos Exemplode laço infinitos Repetições aninhadas Repetições aninhadas Exemplo de repetições aninhadas Slide 26 Slide 27 Exemplo 1 Exemplo 1 – Estruturando solução Slide 30 Slide 31 Exemplo 1 – Execuções do algoritmo Exemplo 2 Exemplo 2 – Estruturando solução Exemplo 2 - Algoritmo Slide 36 Exemplo 2 – Execuções do algoritmo Exemplo 3 Exemplo 3 – Estruturando solução Exemplo 3 - Algoritmo Slide 41 Exemplo 3 – Execuções do algoritmo Exemplo 5 Exemplo 5 – Estruturando solução Exemplo 5 - Algoritmo Slide 46 Exemplo 5 – Execuções do algoritmo Referências da aula
Compartilhar