IFSUL - Técnico em Informática para Internet - Lógica e Algoritmos - Prof.Alfredo Estruturas de Repetição Algumas vezes, sentimos necessidade de escrevermos repetidamente o mesmo comando. Em alguns casos, a quantidade de vezes que temos de escrever é indeterminada ou depende de uma condição. Existem algumas formas de definir as estruturas de repetições. Algumas lembram até esta ou aquela linguagem. Em nosso curso iremos no ater a três estruturas, as quais podemos representar tranqüilamente em qualquer ambiente de Programação. As estruturas são: Repita, Enquanto e Para. Cada uma delas possui uma característica que lhe é peculiar. É normal ouvir a pergunta: “quando iremos utilizar esta ou aquela estrutura”? a resposta é simples pois depende da habilidade de cada um. Existem momentos que podemos resolver a mesma questão com todas as três formas, mas existem momentos que não é possível. Por isso o segredo encontra-se no exercitar. Comando REPITA Aqui você entra na estrutura e pode testar para ver se uma determinada condição foi satisfeita antes ou após a execução de comandos. Quando a condição de encerramento for verdadeira, será encerrado o processamento do comando Repita e será dado prosseguimento exatamente no primeiro comando imediatamente após o FimRepita. Repita < comandos > Ate < condição > Comando ENQUANTO O comando ENQUANTO prende um trecho do Algoritmo a um laço (looping), ou seja, podemos determinar que um certo conjunto de comandos seja executado repetidamente enquanto uma condição seja verdadeira. Enquanto <condição> Faca < comandos > FimEnquanto E X E M P L O S Com a estrutura REPITA Algoritmo "DemonstraRepeticao" VAR i: INTEIRO inicio i<- 1 repita escreva (i) i<- i + 1 ate i > 10 fimalgoritmo Com a estrutura ENQUANTO Algoritmo "DemonstraRepeticao" Var i: INTEIRO inicio i<- 1 enquanto i<=10 faca escreva (i) i<- i + 1 fimenquanto fimalgoritmo Com a estrutura PARA Algoritmo "DemonstraRepeticao" Var i: INTEIRO inicio i<- 1 para i de 1 ate 10 faca escreva (i) fimpara fimalgoritmo Maior Valor Existirão momentos em que você sentirá necessidade de identificar o maior elemento dentro de um conjunto de dados processados. Só existe uma forma de sabermos qual o maior valor: comparando as grandezas do conjunto. Para descobrirmos qual será o maior elemento, inicializaremos uma variável, que armazenará o maior valor do conjunto, com um valor bem pequeno para a situação, e, cada dado existente no conjunto iremos comparar com esta dita variável. Caso o valor encontrado seja superior, este será colocado como conteúdo da variável maior, já que este novo dado representa a maior grandeza neste momento do processamento. Encontrando o maior valor dentro de um conjunto: Obs.: para entender melhor esse exemplo, é bom estar familiarizado com a estrutura de repetição comentada mais adiante. Algoritmo “semnome” Var MAIOR_ID: inteiro Idade: inteiro Cont: inteiro Inicio MAIOR_ID <- 0 Para cont de 1 ate 10 Faca LEIA(Idade) Se Idade > MAIOR_ID entao MAIOR_ID <- Idade FIMSE Fimpara Escreva ("A maior idade é " , MAIOR_ID) Fimalgoritmo Menor Valor De igual forma iremos trabalhar para encontrar o elemento que possui o menor valor. Para tanto, iremos inicializar uma variável, que armazenará o menor valor do conjunto, com um valor bem alto adequado para a situação, e, cada dado existente no conjunto iremos comparar com esta dita variável. Caso o valor encontrado seja inferior, este será colocado como conteúdo da variável menor, já que este novo dado representa a menor grandeza neste momento do processamento. Encontrando o menor valor dentro de um conjunto: Algoritmo “semnome” Var MENOR_ID: inteiro Idade: inteiro Cont: inteiro Inicio MENOR_ID <- 999 Para cont de 1 ate 10 Faca LEIA(Idade) Se Idade < MENOR_ID entao MENOR_ID <- Idade FIMSE Fimpara Escreva ("A menor idade é ", MENOR_ID) Fimalgoritmo Exercícios de Aprendizagem 1) Elabore um algoritmo capaz de exibir todos os números inteiros, desde o 1 até o 10. Algoritmo "inteiros" VAR NUMERO: NUMERICO INICIO NUMERO <- 1 ENQUANTO NUMERO <= 10 FACA ESCREVA (NUMERO) NUMERO <- NUMERO + 1 FIMENQUANTO FimAlgoritmo Comentário: Note que, utilizamos uma variável numérica chamada NUMERO que recebeu, inicialmente, o valor 1, e daí em diante foi ciclicamente incrementada de 1 (NUMERO<-NUMERO+1) até que a condição imposta pelo ENQUANTO tornasse falsa. Elabore um algoritmo capaz de receber um número e, em seguida, listar todos os números de 1 até ele. Algoritmo "LIMITES" VAR NUMERO: NUMERICO LIMITE: NUMERICO INICIO LEIA (LIMITE) NUMERO<-1 ENQUANTO NUMERO <= LIMITE FACA ESCREVA (NUMERO) NUMERO <- NUMERO + 1 FIMENQUANTO FimAlgoritmo Comentário: Este Algoritmo é similar ao anterior. A única sde isticação implementada foi a flexibilização do limite. Isto tornou o algoritmo mais genérico, servindo para listar a seqüência de qualquer número, e não apenas a do 10. Para alcançar esta sde isticação, foi necessário o uso da variável LIMITE que de fato limitou o laço do REPITA ao seu conteúdo, conteúdo este que fora recebido logo no início da execução do Algoritmo, com o comando LEIA LIMITE. 1) Sofisticando ainda mais o Algoritmo da 3ª questão, vamos fazer com que, além de listar todos os números de 1 até um determinado número digitado via teclado, ele mostre a soma de todos esses números no final da listagem. Algoritmo "LIMITES" 2) após a execução de comandos. Quando a condição de encerramento for verdadeira, será encerrado o processamento do comando Repita e será dado prosseguimento exatamente no primeiro comando imediatamente após o FimRepita. Repita < comandos > Ate < condição > Comando ENQUANTO O comando ENQUANTO prende um trecho do Algoritmo a um laço (looping), ou seja, podemos determinar que um certo conjunto de comandos seja executado repetidamente enquanto uma condição seja verdadeira. Enquanto <condição> Faca < comandos > FimEnquanto Comando PARA O comando PARA prende um trecho do Algoritmo a um laço (looping), sendo que sua gerência é em cima de uma contagem. Enquanto ela não for satisfeita, ou seja, o valor final não for ultrapassado, será executado os comandos subordinados a esta estrutura. Para <variável de controle> de <valor inicial> ate <Valor_final> [passo <incremento>] Faca < comandos > FimPara Na estrutura para..faca, a variável de controle é inicializada com <valor inicial> e no início de cada iteração, seu valor é comparado com <valor final>. Se o valor da variável for menor ou igual a <valor final>, a lista de comandos é executada e após ser executado o último comando da lista, a variável de controle é incrementada. Isto repete-se até que o valor da variável de controle seja maior que <valor final>, quando então é executado o comando imediatamente após a palavra fimpara. A instrução passo é necessária se o incremento for diferente de 1. Vamos utilizar um exemplo para esclarecer cada uma dessas instruções dentro de suas respectivas estruturas de repetições. Digamos que temos de fazer o computador escrever do numero 1 ate 10. Usaremos os comandos aprendidos até agora. Com a estrutura REPITA Algoritmo "DemonstraRepeticao" VAR i: INTEIRO inicio i<- 1 repita escreva (i) i<- i + 1 ate i > 10 fimalgoritmo Com a estrutura ENQUANTO Algoritmo "DemonstraRepeticao" Var i: INTEIRO inicio i<- 1 enquanto i<=10 faca escreva (i) i<- i + 1 fimenquanto fimalgoritmo Com a estrutura PARA Algoritmo "DemonstraRepeticao" Var i: INTEIRO inicio i<- 1 para i de 1 ate 10 faca escreva (i) fimpara fimalgoritmo