Algoritmos e Programação de Computadores1 Prof. Eduardo 1 1. ESTRUTURAS DE REPETIÇÃO Uma estrutura de repetição é utilizada para fazer com que um pedaço (trecho) do programa seja executado n vezes, ou seja, quando um trecho do algoritmo ou até mesmo o algoritmo principal precisa ser repetido. O número de repetições pode ser fixo ou estar atrelado a uma condição. Assim, existem estruturas para tais situações. Existem 3 tipos de comandos de repetição: para / for (com teste numérico) enquanto / while (com teste lógico no ) repita até que / do...while (com teste lógico no fim) As estruturas de repetição definem os chamados loops (laços); loops numéricos e loops lógicos (com teste no e com teste no fim). 1.1. O comando para ou for Neste caso tem-se uma estrutura que define um loop numérico (ou automático). Essa estrutura de repetição é utilizada quando se sabe o número de vezes que um trecho do algoritmo deve ser repetido. Forma geral (algoritmo): para ivalor até valorfim faça inicio comando;... Fim para Forma geral (em C): No trecho de algoritmo, o comando1 e o comando serão executados utilizando-se a variável i como controle 1, e seu conteúdo irá variar do valor até o valorfim. Também pode ser informada a 1 Utilizamos uma variável que será incrementada a cada repetição, isto é, a cada repetição contamos +1 na variável, até um valor de acordo com o número de vezes que queremos repetir.
Algoritmos e Programação de Computadores1 Prof. Eduardo informação do passo (entre colchetes porque é opcional). O passo indica como será a variação de controle, veja: Forma geral com a informação do passo (algoritmo): para VarCont até fim faça [passo] inicio comando;... Fim para Por exemplo, quando for indicado passo, a variável de controle será aumentada em unidades a cada iteração até atingir o valor final. Quando a informação do passo for suprimida, isso significa que o incremento ou o decremento da variável de controle será de 1 unidade. Quando houver apenas um comando a ser repetido, os marcadores de bloco inicio ou e fim para ou poderão ser suprimidos. Exemplos: para i1 até 10 faça escreva(i); for(i=1;i<=10;i++) printf(i); O comando escreva(i) será executado dez vezes, ou seja, para i variando de 1 a 10. Assim, os valores de i serão: 1,, 3, 4, 5, 6, 7, 8, 9 e 10. para j1 até 9 faça [passo ] escreva(j); for(j=1;j<=9;j=j+)//j+= printf(j); O comando escreva(j) será executado cinco vezes, ou seja, para j variando de 1 a 10, de em. Assim, os valores de j serão: 1, 3, 5, 7 e 9. Quando se utiliza a estrutura de um loop numérico deve-se sempre observar o seguinte: 1) Embora o C permita, dentro do loop é perigoso fazer atribuições à variável de controle, pois seu valor deve ser alterado pela própria estrutura. ) É permitido criar laços aninhados; assim todas as instruções do laço mais interno serão integralmente executadas prioritariamente para cada valor da variável de controle do laço mais externo. No trecho do código abaixo a palavra Palmeiras será exibida 0 vezes, pois como o loop mais externo (controlado pela variável i) roda 4 vezes, então a cada rodada de i o loop mais interno (controlado por j) rodará 5 vezes. para i1 até 4 faça para j até 5 faça escreva( Palmeiras ); fim para for(i=1;i<=4;i++) for(j=1;j<=5;j++) printf( Palmeiras ); 1.. O comando enquanto ou while Essa estrutura de repetição é utilizada quando não se sabe o número de vezes que um trecho do algoritmo deve ser repetido, embora também possa ser utilizada quando se conhece esse número. Essa estrutura baseia-se na análise de uma condição. A repetição será feita enquanto a condição mostrar-se verdadeira. Existem situações em que o teste condicional dessa estrutura, que fica no, resulta em um valor falso logo na primeira comparação. Nesses casos, os comandos de dentro da estrutura de repetição não serão executados.
Algoritmos e Programação de Computadores1 Prof. Eduardo 3 Forma geral (em algoritmo): enquanto(condição) Forma geral (em C): while(condição) Enquanto a condição for verdadeira, o comando1 será executado. enquanto(condição) comando; fim enquanto while(condição) comando; Enquanto a condição for verdadeira, o comando1 e o comando serão executados. Observe que, como o teste lógico é realizado no, deverá haver alguma instrução para forçar a entrada no loop, ou seja, uma inicialização fazendo com que a condição se torne verdadeira, pelo menos na primeira execução. Veja: Veja uma simulação: x1; y5; enquanto(x < y) faça xx + ; y y + 1; fim enquanto Simulação: x y Valores 1 5 Valores iniciais 3 6 5 7 7 8 9 9 Valores obtidos dentro da estrutura de repetição 1.3. O comando repita até Neste outro tipo de loop lógico o teste é feito no fim do bloco de instruções. Essa estrutura de repetição é utilizada quando não se sabe o número de vezes que um trecho do algoritmo deve ser repetido, embora também possa ser utilizada quando se conhece esse número. Essa estrutura baseia-se na análise de uma condição. A repetição será feita enquanto a condição mostrar-se verdadeira. A diferença entre a estrutura enquanto e a repita é que nesta última os comandos serão repetidos pelo menos uma vez, já que a condição de parada se encontra no final.
Algoritmos e Programação de Computadores1 Prof. Eduardo 4 Forma geral (em algoritmo): repita comandos; até(condição); Forma geral (em C): do comandos; while(condição); No caso do algoritmo, ou seja repita até, os comandos serão executados até a condição se tornar verdadeira. Já no caso em C, ou seja, do...while, os comandos serão executados até a condição se tornar falsa. Veja uma simulação: x1; y5; repita xx + ; y y + 1; até(x >= y) Simulação: x y Valores 1 5 Valores iniciais 3 6 5 7 7 8 9 9 Valores obtidos dentro da estrutura de repetição 1.4. Execuções dos laços As estruturas de repetições levam a execuções de trechos de códigos uma ou várias vezes. Mas quantas vezes uma estrutura de repetição é executada? O programador pode obter uma prévia noção de quantas vezes determinado trecho de código do seu algoritmo será executado. Quando se utiliza apenas uma estrutura (um laço), descobrir essa quantidade é trivial, porém, em situações em que são utilizadas estruturas de repetição aninhadas, ou seja, um laço dentro de outro laço, obter essa quantidade nem sempre é simples e geralmente é obtida pelo método do chute ou, ainda, baseando-se em progressão aritmética (PA) e progressão geométrica (PG). O objetivo é que, ao elaborar um algoritmo, o aluno consiga evidenciar quantas vezes um trecho de algoritmo (código de programa) será repetido dentro de uma sequência de repetições.
Algoritmos e Programação de Computadores1 Prof. Eduardo 5 Uma série em que a a 1 r, onde r é constante, é uma PA. Utilizam-se as seguintes fórmulas: (1) a a ( 1) r 1, onde a é um termo de ordem, r a razão e a quantidade de termos; ( a a ) () a soma da PA, ou seja, S 1. Uma série a a 1,,, a, onde a a. r, com r 1 constante é uma PG. Utilizamos as seguintes fórmulas: (1) a a. 1 1 r e () a soma da PG, a.( r 1) ou seja, S 1, se > 1. r 1 A seguir serão apresentados cinco exemplos. Em alguns é usada a função menor inteiro (ou piso) que é a função que converte um número real x no maior número inteiro menor ou igual a x e é representada por x. Exemplos: (1) para i1 até n faça escreva( O valor de i é:,i); O laço executa n vezes. () para i1 até n faça para ji até n faça S; Fim para i j Executa S 1 1..n n..n n-1 3 3..n n-...... n n 1 O laço executa: (P.A.): n + n-1 + n- + n-3 +... + 1 a1 = n a = 1 r = -1 = n *( a 1 a ) n* ( n 1) n n
Algoritmos e Programação de Computadores1 Prof. Eduardo 6 (3) i = 1; enquanto( i 10 ) C; i = i + 1; Executa n vezes. (4) i = 4; enquanto( i n) C; i = i + n O laço executa 1 vezes. A variável i assume valores em PA. (5) i := 1; enquanto( i n) C; i := i * A variável i assume valores em PG. O laço executa: (P.G.): 1,, 4, 8,..., n a1 = 1 a = n r = =? a a r * 1 1 1 n 1* 1 n 1 log log 1 log n log n 1 n