Prévia do material em texto
Algoritmos e Estruturas de Dados I Prof. André Grützmann Aulas 19Aulas 19--2020 Estruturas de RepetiEstruturas de Repetiççãoão (Para..)(Para..) (Enquanto..)(Enquanto..) (Fa(Façça..Enquanto)a..Enquanto) • Existem situações em que pode ser necessário repetir um trecho do algoritmo ou mesmo o algoritmo inteiro • A quantidade de repetições pode ser conhecida previamente (ex.: ler 50 notas) ou pode depender do usuário (ex.: quantos números deseja digitar para calcular a média?) • Em ambos os casos, usamos estruturas de repetição Estruturas de Repetição para .. – usada quando se sabe o número de vezes que um trecho deve ser executado para I Å valor_inicial ATÉ valor_final [PASSO n] INÍCIO COMANDO1 COMANDO2 ... COMANDO c FIM_PARA • Se só existir um comando a ser executado, a indicação de início e fim de bloco pode ser suprimida Estruturas de Repetição para I Å valor_inicial ATÉ valor_final PASSO n INÍCIO COMANDO1 COMANDO2 ... COMANDO c FIM_PARA • A execução irá contar de forma crescente ou decrescente do valor_inicial para o valor_final, definido pelo comando PASSO • A contagem deve levar a condição a se tornar falsa em algum momento Estruturas de Repetição para i Å 1 ATÉ 50 escreva(i); para i Å 1 ATÉ 50 Passo 2 escreva(i); Estruturas de Repetição Mostra nºs de 1 a 50 Mostra nºs de 1 a 49, em intervalos de 2. para i Å 1 ATÉ 50 INÍCIO iÅi+1; escreva(i); FIM_PARA Estruturas de Repetição Mostra números de 2 a 50, em intervalos de 2. Um intervalo é devido ao incremento do para e outro é devido ao iÅi+1 for (i=valor_inicial; condição; (in/de)cremento de i) comando; • i = valor_inicial // atribuição de valor inicial a i • condição // expressão relacional testada a cada repetição. Quando se tornar falsa, a repetição termina • (in/de)cremento de i // a cada repetição, o valor de i é alterado de acordo com a expressão definida aqui Estruturas de Repetição for (i=1; i<50; i++) printf(“%d\n”,i); for (i=2; i<=100; i=i+2) printf(“%d\n”,i); for (i=100; i>=1; i--) printf(“%d\n”,i); for (i=50; i>5; i=i-5) printf(“%d\n”,i); Estruturas de Repetição // Mostra os números de 1 a 49 (ordem crescente) // Mostra os números pares de 2 a 100 (ordem crescente) // Mostra os números de 100 a 1 // Mostra os múltiplos de 5 de 50 até 10 (ordem decrescente) Quando existe mais de um comando, é necessário marcar o início e fim de blocos com { } for (i=1; i<=50; i++) { printf(“Digite os cinquenta numeros”); scanf(“%d”,&num); soma=soma+num; } Estruturas de Repetição enquanto .. – usada quando não se sabe o número de vezes que um trecho deve ser executado – também pode ser usada quando se conhece o nº de repetições – caso o trecho a ser repetido contenha mais de um comando, é necessário marcar o início e fim de bloco { } – complementarmente, esta estrutura realiza o teste de uma condição Estruturas de Repetição enquanto .. – enquanto a condição for verdadeira, a repetição continuará acontecendo – o teste da condição é feito no início da estrutura, portanto, se a condição for falsa na primeira comparação, o trecho de repetição não será executado nenhuma vez Estruturas de Repetição enquanto .. enquanto (condição) comando; enquanto (condição) INÍCIO comando1; … comando n; FIM Estruturas de Repetição xÅ0; enquanto (x<30) INÍCIO escreva(x); xÅx+1; FIM xÅ0; enquanto (x<30) INÍCIO xÅx+1; escreva(x); FIM Estruturas de Repetição Exibe os números de 0 a 29 Exibe os números de 1 a 30 while .. while (condição) comando; while (condição) { comando1; comando2; comando3; } Estruturas de Repetição i=0; while (i <= 10) { printf(“%d\n”,i); i=i+2; } printf(“%d\n”,i+2); • A estrutura de repetição exibe 0,2,4,6,8,10 • O comando após a estrutura exibe 14 Estruturas de Repetição i=0; while (i >= 10) { printf(“%d\n”,i); i=i+2; } printf(“%d\n”,i+2); • A estrutura de repetição não exibe nada • O comando após a estrutura exibe 2 Estruturas de Repetição i=0; while (i != 10) { printf(“%d\n”,i); i=i+2; } printf(“%d\n”,i+2); • A estrutura de repetição exibe 0,2,4,6,8 • O comando após a estrutura exibe 12 Estruturas de Repetição faça .. enquanto (condição) – usada quando não se sabe o número de vezes que um trecho deve ser executado – também pode ser usada quando se conhece o nº de repetições – é necessário marcar o início e fim de bloco { } – complementarmente, esta estrutura realiza o teste de uma condição – independente da condição, os comandos serão executados pelo menos uma vez Estruturas de Repetição faça .. enquanto (condição) – também é chamada de repita .. até (condição) – a estrutura repita .. até possui uma diferença no teste da condição. – existe repetição até que a condição se torne verdadeira – ela é comumente usada no Pascal – sempre que for usar a estrutura repita .. até, lembre-se da diferença no teste da condição Estruturas de Repetição faça .. enquanto (condição) faça INÍCIO comando1; FIM enquanto (condição); Estruturas de Repetição faça .. enquanto (condição) iÅ0; faça INÍCIO escreva(i); iÅi+1; FIM enquanto (i<10); • Mostra os nºs de 0 a 10 Estruturas de Repetição faça .. enquanto (condição) iÅ10; faça INÍCIO escreva(i); iÅi+1; FIM enquanto (i<10); • Mostra apenas o nº 10 Estruturas de Repetição faça .. enquanto (condição) iÅ10; faça INÍCIO iÅi+1; escreva(i); FIM enquanto (i<10); • Mostra o nº 11 Estruturas de Repetição repita .. até (condição) repita INÍCIO comando1; FIM até (condição); Estruturas de Repetição repita .. até (condição) iÅ0; repita INÍCIO iÅi+1; escreva(i); FIM até (i=10); • Mostra os nºs de 1 a 10 (sai da repetição quando i se torna igual a 10) Estruturas de Repetição i=0; do { printf(“%d”,i); i++; } while (i<=10); • Exibe nºs de 0 a 10 i=0; do { i++; printf(“%d”,i); } while (i<=10); • Exibe nºs de 1 a 11 Estruturas de Repetição i=0; do { printf(“%d”,i); } while (i<=10); • Loop infinito mostrando sempre o nº 0 i=1; do { i=i+2; printf(“%d”,i); } while (i!=10); • Loop infinito mostrando nºs ímpares Estruturas de Repetição Um funcionário de uma empresa recebe aumento salarial anualmente. Sabe-se que: • Esse funcionário foi contratado em 2005, com salário inicial de R$1.000,00 • Em 2006, ele recebeu aumento de 1,5% sobre seu salário inicial • A partir de 2007 (inclusive), os aumentos salariais sempre corresponderam ao dobro do percentual do ano anterior • Faça um algoritmo que determine o salário atual deste funcionário, a partir da leitura do ano corrente. Exercício 1 ALGORITMO Reajuste; i,ano,sal,nsal,perc : NÚMERO; INÍCIO LEIA ano; salÅ1000; percÅ0.015; nsalÅsal+perc*sal; PARA i Å 2007 ATÉ ano FAÇA INÍCIO percÅperc*2; nsalÅnsal+nsal*perc; FIM_PARA ESCREVA(nsal); FIM Exercício 1 • Faça um algoritmo que leia um valor N inteiro e positivo, calcule e mostre o valor de E, conforme a fórmula: E = 1 + 1/1! + 1/2! + 1/3! + … + 1/N! Exercício 2 ALGORITMO Calculo; n,i,e,j,fat : NÚMERO; INÍCIO LEIA n; eÅ1; PARA i Å 1 ATÉ n FAÇA INÍCIO fatÅ1; PARA j Å 1 ATÉ I FAÇA INÍCIO fatÅfat*j; FIM_PARA eÅe+1/fat; FIM_PARA ESCREVA(e); FIM Exercício 2 • 2)Faça um programa que leia 21 valores inteiros, um de cada vez, e conte quantos deles estão em cada um dos intervalos [0, 25], (25, 50], (50, 75], (75, 100]. • Nestes intervalos, os colchetes representam intervalo fechado (inclui extremo) eparênteses intervalo aberto (exclui extremo). • Ao final, o programa deve mostrar a quantidade de valores em cada intervalo. Exercício 4 ALGORITMO ContaInterval; i,x,cont1,cont2,cont3,cont4 : NÚMERO; INÍCIO cont1Å0; cont2Å0; cont3Å0; cont4Å0; PARA i Å 1 ATÉ 21 FAÇA INÍCIO LEIA x; SE (x>=0) E (x<=25) ENTÃO cont1:=cont1 + 1; SE (x>25) E (x<=50) ENTÃO cont2:=cont2 + 1; SE (x>50) E (x<=75) ENTÃO cont3:=cont3 + 1; SE (x>75) E (x<=100) ENTÃO cont4:=cont4 + 1; FIM_PARA ESCREVA(“Intervalo1: ”,cont1); ESCREVA(“Intervalo2: ”,cont2); ESCREVA(“Intervalo3: ”,cont3); ESCREVA(“Intervalo4: ”,cont4); FIM Exercício 4