Estruturas de Repetição João Medeiros FATERN 2010.2 sábado, 21 de agosto de 2010 Quais seriam os passos do algoritmo? 1. colocar café solúvel na xícara 2. colocar água quente 3. Colocar açucar na xícara 4. mexer 5. mexer 6. mexer 7. mexer 8. mexer 9. tomar o café 2 sábado, 21 de agosto de 2010 Quais seriam os passos do algoritmo? 1. colocar café solúvel na xícara 1. colocar café solúvel na xícara 2. colocar água quente 2. colocar água quente 3. Colocar açucar na xícara 4. mexer 3. Colocar açucar na xícara 5. mexer 4. Repita 5 vezes 6. mexer 7. mexer mexer 8. mexer 5. tomar o café 9. tomar o café 2 sábado, 21 de agosto de 2010 Estruturas de Repetição • Nos algoritmos e programas existem situações que o processamento de um valor uma única vez não é suficiente para resolver o problema. por exemplo, a folha de pagamento de uma empresa não roda para apenas um funcionário, mas para todos os funcionários da empresa os mesmos cálculos). sábado, 21 de agosto de 2010 Estruturas de Repetição • Conhecidas como laços ou loops • Dois tipos • Condicional – elas repetem um ou mais comandos até satisfazer a condição de repetição. São usadas quando não se sabe previamente quantas vezes deve-se executar as instruções do bloco de repetição. Esse tipo de estrutura de repetição condicional podem executar o teste da condição no início (ENQUANTO/FAÇA) ou no final (REPITA/ATÉ). • Condicional – elas repetem um ou mais comandos até satisfazer a condição de repetição. São usadas quando não se sabe previamente quantas vezes deve-se executar as instruções do bloco de repetição. Esse tipo de estrutura de repetição condicional podem executar o teste da condição no início (ENQUANTO/FAÇA) ou no final (REPITA/ATÉ). sábado, 21 de agosto de 2010 Estrutura de repetição ENQUANTO/FAÇA Introdução à Programação • Laço que verifica antes de cada execução, se é “permitido” executar o trecho do algoritmo. • Ele se mantém repetindo o bloco de instruções enquanto uma dada condição permanecer verdadeira. • Essa estrutura é utilizada quando não sabemos o número de 9DPRVGDUXPH[HPSORGHXWLOL]DomRGRHQTXDQWRIDoD6XSRQKD repetições e quando possuímosum algoritmo para ler vários números positivos ou negativos. Esse uma expressão que deve ser DOJRULWPRGHYHOHUXPDTXDQWLGDGHQmRGH¿QLGDGHQ~PHURSDUDQGR apenas quando for digitado o valor zero. Para cada número lido o avaliada para que os comandos algoritmo deve avaliar e escrever na tela se o número é positivo ou da estrutura sejam executados negativo. algoritmo([HPSOR(QTXDQWR)DoD sábado, 21 de agosto de 2010 var[LQWHLUR Estrutura de repetição ENQUANTO/FAÇA • Exemplo: Suponha um algoritmo para ler vários números positivos ou negativos. Esse algoritmo deve ler uma quantidade não definida de número, parando apenas quando for digitado o valor zero. Para cada número lido o algoritmo deve avaliar e escrever na tela se o número é positivo ou negativo. sábado, 21 de agosto de 2010 9DPRVGDUXPH[HPSORGHXWLOL]DomRGRHQTXDQWRIDoD6XSRQ um algoritmo para ler vários números positivos ou negativos. E DOJRULWPRGHYHOHUXPDTXDQWLGDGHQmRGH¿QLGDGHQ~PHURSDUDQ Estrutura de repetição ENQUANTO/FAÇA apenas quando for digitado o valor zero. Para cada número lid algoritmo deve avaliar e escrever na tela se o número é positivo negativo. • Exemplo: Suponha um algoritmo para ler vários números positivos ou negativos. Esse algoritmo deve ler uma quantidade não definida de número, parando apenas quando for digitado o valor zero. Para cada número lido o algoritmo deve avaliar e escrever na tela se o número é positivo ou negativo. sábado, 21 de agosto de 2010 algoritmo([HPSOR(QTXDQWR)DoD var[LQWHLUR inicio escreva³'LJLWHXPYDORU´ leia[ enquanto[!faça se[!então senão ¿PVH escreva³'LJLWHXPYDORU´ leia[ ¿PHQTXDQWR escreva³2Q~PHURpSRVLWLYR´ escreva³2Q~PHURpQHJDWLYR´ ¿PDOJRULWPR 1RDOJRULWPRDFLPDDOLQKDGH¿QHRDOJRULWPRHRQRPHGHOH linha 2 é feita a declaração da variável x que é do tipo inteiro. As linh HGHOLPLWDPRLQtFLRH¿PGRDOJRULWPR1DVOLQKDVHpIH Estrutura de Repetição REPITA/ATE • Funcionamento parecido ao da estrutura enquanto. • Porém os comandos contidos no interior do laço serão executados pelo menos uma vez, já que a condição de continuidade no laço só é testada no final do bloco de comandos. sábado, 21 de agosto de 2010 2 UHSLWDDWp p XWLOL]DGR TXDQGR QmR VDEHPRV R Q~PHUR GH UHSHWLo}HVHTXDQGRRVFRPDQGRVGHYHPVHUH[HFXWDGRVSHORPHQRV uma vez, antes da expressão ser avaliada. Ou seja, não se sabe de antemão quantas vezes o bloco de repetição será executado. Todavia Estrutura de Repetição REPITA/ATE é garantido que ele será executado pelo menos uma vez. O bloco de comandos é repetido toda vez que a condição for F. A execução do EORFRp¿QDOL]DGDTXDQGRDFRQGLomRIRU92IRUPDWRGHVVHFRPDQGR HVWiHVSHFL¿FDGRDVHJXLU • Funcionamento parecido ao da estrutura enquanto. • Porém os comandos contidos no interior do laço serão executados pelo menos uma vez, já que a condição de continuidade no laço só é testada no final do bloco de comandos. sábado, 21 de agosto de 2010 43 Estrutura de Repetição REPITA/ATE Introdução à Programação Vamos supor o mesmo problema do exemplo HQTXDQWRIDoD'HFKHFDUVHRQ~PHURpSRVLWLYRRXQH ¿FDULDDTXHOHSUREOHPDXVDQGRDHVWUXWXUDUHSLWDDWp" algoritmo([HPSOR5HSLWD$WH var[LQWHLUR inicio UHSLWD • Mesmo algoritmo para o exemplo anterior escreva³'LJLWHXPYDORU´ leia[ se[!então senão ¿PVH até[ escreva³2Q~PHURpSRVLWLYR´ escreva³2Q~PHURpQHJDWLYR´ ¿PDOJRULWPR sábado, 21 de agosto de 2010 9HMD TXH DJRUD R WHVWH GD FRQGLomR TXH GH¿QH VH FRQWLQXDUi H[HFXWDQGR p IHLWR QR ¿QDO GR EORFR GH FRP 12). Dessa forma, as linhas de 5 a 11 serão executad Estrutura de Repetição PARA/FAÇA Introdução à Programação • Útil quando se conhece previamente o número de vezes que se deseja executar um determinado conjunto de comandos. • Repete a execução dos comandos enquanto a variável contadora não atingir o valor final. • A variável contadora é previamente inicializada (recebe um valor inicial) e é incrementada em uma unidade, automaticamente, a cada final de execução do bloco de comandos 3DUD H[HPSOL¿FDU VXSRQKD TXH JRVWDUtDPRV GH FRQVWUXLU XP dentro do laço algoritmo para ler 20 números e avaliar se esses números são sábado, 21 de agosto de 2010 positivos ou negativos, escrevendo na tela a mensagem apropriada. Considere que zero entrará na parte dos números positivos, para efeito GHVLPSOL¿FDURDOJRULWPR9HMDQHVWHDOJRULWPRMipGLWRTXHVHTXHU ler e avaliar 20 números. Então você já sabe o trecho do algoritmo TXHSUHFLVDVHUH[HFXWDGRYH]HV(QWmRHVWHWUHFKR¿FDUiGHQWUR Estrutura de Repetição PARA/FAÇA • suponha que gostaríamos de construir um algoritmo para ler 20 números e avaliar se esses números são positivos ou negativos, escrevendo na tela a mensagem apropriada. sábado, 21 de agosto de 2010 3DUD H[HPSOL¿FDU VXSRQKD TXH JRVWDUtDPRV GH FRQ algoritmo para ler 20 números e avaliar se esses núm positivos ou negativos, escrevendo na tela a mensagem a Estrutura de Repetição PARA/FAÇA Considere que zero entrará na parte dos números positivos, p GHVLPSOL¿FDURDOJRULWPR9HMDQHVWHDOJRULWPRMipGLWRTX ler e avaliar 20 números. Então você já sabe o trecho do TXHSUHFLVDVHUH[HFXWDGRYH]HV(QWmRHVWHWUHFKR¿F do laço para. algoritmoH[HPSOR3DUD)DFD • suponha que gostaríamos de construir um algoritmoAtenção para ler 20 números e avaliar se O problema pediu ler e avaliar esses números sãopara positivos 20 números. Logo o laço para vai de ou negativos, escrevendo na 1 até 20 tela a mensagem apropriada. varQXPFRQWDGRULQWHLUR inicio para contador de 1 atéfaça escreva³'LJLWHXPYDORU´ leiaQXP seQXP! então senão ¿PVH ¿PSDUD escreva³2Q~PHURpSRVLWLYR´ escreva³2Q~PHURpQHJDWLYR´ ¿PDOJRULWPR A variável contadora, neste algoritmo chamada de FRPHoDFRPRYDORULQLFLDOHYDLDWpRYDORU¿QDOHVS sábado, 21 de agosto de 2010 Comparação entre as estruturas de repetição ntrodução à Programação Enquanto/Faça Repita/Até Para/Faça Tipo da Estrutura Condicional Condicional Contada Ocorrência do Teste No início No Final No início Quantidade de 5HSHWLo}HV Zero ou mais vezes (pode não ser executada nenhuma vez) 8PDRXPDLVYDL ser executada, no mínimo, uma vez) Vai ser executada do valor inicial ao YDORU¿QDORXVHMD terá um número GHH[HFXo}HVSUp GH¿QLGR Condição para Repetir Repete enquanto verdadeiro Repete enquanto falso, ou seja, até que a condição se torne verdadeira. Repete enquanto a Variável Contadora for maior ou igual ao valor inicial e menor ou igual ao valor Final sábado, 21 de agosto de 2010 Tabela 7 - Comparação entre as estruturas de repetição Estruturas de Repetição Aninhadas ou Encadeadas • Semelhante às estruturas de decisão composta, as estruturas de repetição também podem ser encadeadas/aninhadas. • É usada quando há a necessidade de se usar laços dentro de laços sábado, 21 de agosto de 2010 Estruturas de Repetição Aninhadas ou Encadeadas Introdução à Prog GHXPDGH]9DPRVYHUFRPR¿FDULDHVVHDOJRULWPRHYDPRVGHSRLV explicar mais detalhes. • Suponha que você precise fazer um algoritmo para gerar a tabuada da multiplicação de 1 a 10. 1x1 = 1 1x2 = 2 1x3 = 3 1x4 = 4 1x5 = 5 1x6 = 6 1x7 = 7 1x8 = 8 1x9 = 9 1x10 = 10 2x1 = 2 2x2 = 4 2x3 = 6 2x4 = 8 2x5 = 10 2x6 = 12 2x7 = 14 2x8 = 16 2x9 = 18 2x10 = 20 3x1 = 3 3x2 = 6 3x3 = 9 3x4 = 12 3x5 = 15 3x6 = 18 3x7 = 21 3x8 = 24 3x9 = 27 3x10 = 30 4x1 = 4 4x2 = 8 4x3 = 12 4x4 = 16 4x5 = 20 4x6 = 24 4x7 = 28 4x8 = 32 4x9 = 36 4x10 = 40 5x1 = 5 5x2 = 10 5x3 = 15 5x4 = 20 5x5 = 25 5x6 = 30 5x7 = 35 5x8 = 40 5x9 = 45 5x10 = 50 6x1 = 6 6x2 = 12 6x3 = 18 6x4 = 24 6x5 = 30 6x6 = 36 6x7 = 42 6x8 = 48 6x9 = 54 6x10 = 60 7x1 = 7 7x2 = 14 7x3 = 21 7x4 = 28 7x5 = 35 7x6 = 42 7x7 = 49 7x8 = 56 7x9 = 63 7x10 = 70 8x1 = 8 8x2 = 16 8x3 = 24 8x4 = 32 8x5 = 40 8x6 = 48 8x7 = 56 8x8 = 64 8x9 = 72 8x10 = 80 9x1 = 9 9x2 = 18 9x3 = 27 9x4 = 36 9x5 = 45 9x6 = 54 9x7 = 63 9x8 = 72 9x9 = 81 9x10 = 90 10x1 = 10 10x2 = 20 10x3 = 30 10x4 = 40 10x5 = 50 10x6 = 60 10x7 = 70 10x8 = 80 10x9 = 90 10x10 = 100 A tabuada nossa de cada dia Figura 27- A nossa tabuada de cada dia algoritmoWDEXDGD varFROXQDFROXQDUHVXOWDGRLQWHLUR inicio sábado, 21 de agosto de 2010 paraFROXQDde 1 atéfaça paraFROXQDde 1 atéIDoD UHVXOWDGRFROXQDFROXQD Con da col 6x7 = 42 6x8 = 48 6x9 = 54 6x10 = 60 7x7 = 49 7x8 = 56 7x9 = 63 7x10 = 70 8x7 = 56 8x8 = 64 8x9 = 72 8x10 = 80 9x7 = 63 9x8 = 72 9x9 = 81 9x10 = 90 10x7 = 70 10x8 = 80 10x9 = 90 10x10 = 100 Estruturas de Repetição Aninhadas ou Encadeadas Figura 27- A nossa tabuada de cada dia algoritmoWDEXDGD varFROXQDFROXQDUHVXOWDGRLQWHLUR inicio • Algoritmo da tabuada paraFROXQDde 1 atéfaça paraFROXQDde 1 atéIDoD UHVXOWDGRFROXQDFROXQD ¿PSDUD ¿PSDUD escrevalFROXQD³[´FROXQD³ ³UHVXOWDGR ¿PDOJRULWPR Neste algoritmo, quando o primeiro laço começa (linha 4), o valor GDFROXQD¿FD¿[RDWpTXHVHYROWHSDUDH[HFXWDUHVVHODoRGHQRYR Porém, isso só vai ocorrer, quando laço mais interno (da linha 5 a linha 8) terminar. Esse laço mais interno é o encarregado de gerar os sábado, 21 de agosto de 2010 Dicas para Escrever Bons Algoritmos • Procure não escrever mais do que um comando por linha. • Depois de ler o enunciado do problema, tente identificar sempre as três fases: ENTRADA, PROCESSAMENTO e SAÍDA. Isso lhe ajuda a esquematizar o algoritmo. • Para lembrar, posteriormente, de trechos de programas mais complicados que você pode esquecer como implementou, escreva comentários claros e objetivos no momento em que estiver escrevendo o algoritmo. Isto também facilita o entendimento do algoritmo. • Use comentários no início do algoritmo. Estes podem ter, entre outras informações, a descrição do que o algoritmo faz, o nome do autor do algoritmo, a data de implementação, etc • Escolha nomes de variáveis que sejam significativos. Ex: precoProduto, lucro, nome, idade. • Procure alinhar os comandos de acordo com o nível a que pertençam. Isto é, destaque a estrutura na qual estão contidos. Este alinhamento é chamado de identação. sábado, 21 de agosto de 2010 Dicas para Escrever Bons Algoritmos Introdução à Programação algoritmo([HPSOR(QTXDQWR)DoD algoritmo([HPSOR(QTXDQWR)DoD var[LQWHLUR var[LQWHLUR inicio inicio escreva³'LJLWHXPYDORU´ escreva³'LJLWHXPYDORU´ leia[ leia[ enquanto[!IDoD enquanto[!faça se[!então se[!então escreva³2Q~PHURpSRVLWLYR´ escreva³2Q~PHURpSRVLWLYR´ senão senão escreva³2Q~PHURpQHJDWLYR´ escreva³2Q~PHURpQHJDWLYR´ ¿PVH ¿PVH escreva³'LJLWHXPYDORU´ escreva³'LJLWHXPYDORU´ leia[ leia[ ¿PHQTXDQWR ¿PHQTXDQWR ¿PDOJRULWPR ¿PDOJRULWPR Exemplo de identação sábado, 21 de agosto de 2010 Aprenda Praticando Problema 1: a resolver em sala • Construa um algoritmo para ler o nome, número de horas trabalhadas e número de dependentes de cada um dos 20 funcionários de uma empresa. Após a leitura, para cada funcionário, calcule e imprima na tela: o nome do funcionário, seu salário bruto, o total de descontos que ele sofrerá e seu salário líquido. Considere que: • A empresa paga R$10 por hora trabalhada e tem um adicional de R$40 por dependente que o funcionário tenha. • O salário bruto é o valor total dos ganhos do funcionário • Sobre o salário bruto são descontados 8 % de INSS e 5% de IR (imposto de renda). • O salário líquido é o valor do salário bruto, menos os descontos. sábado, 21 de agosto de 2010 Problema 2: a resolver em sala Faça um algoritmo para ler uma quantidade indefinida de bois (código do boi e peso do boi), parando quando for digitado o código zero. Depois, calcule e imprima o código e o peso do boi mais gordo da fazenda. Considere, para simplificar, que não há dois pesos iguais. Neste problema temos: ENTRADA: o código e o peso do boi. sábado, 21 de agosto de 2010 Exercícios 1. Leia o nome e a idade de várias pessoas até que uma idade igual a ZERO seja digitada. E, ao final, informe o nome da pessoa mais velha e o nome da pessoa mais nova, entre todos os nomes lidos. Para simplificar, considere que não existem idades iguais. 2. Escreva um algoritmo para calcular e imprimir a soma dos números inteiros e pares de 1 a 50. 3. Escreva um programa que apresente a série de Fibonacci até o décimo quinto termo. A série de Fibonacci é formada pela seqüência: 1, 1, 2, 3, 5, 8, 13, 21,34, ... etc. Consegue ver a lógica de criação da mesma? Pense um pouquinho, não é tão difícil assim! 4. Uma empresa de compras através da Internet decidiu realizar uma pesquisa entre os seus clientes para determinar o perfil dos mesmos. Considerando uma amostra de 200 clientes, faça um algoritmo que leia o nome, a idade de seus clientes e se eles têm acesso à Internet e forneça como resultado: • A média de idade dos clientes; • A quantidade de mulheres; • Quantas pessoas têm acesso a Internet. • O nome e a idade do homem mais velho que tem acesso a Internet • O nome e a idade da mulher mais nova. sábado, 21 de agosto de 2010