Baixe o app para aproveitar ainda mais
Prévia do material em texto
Comandos de Repetição Comandos de Repetição for while do-while 9 Estruturas de Controle de repetição permitem controlar o fluxo de execução de uma instrução, ou um conjunto de instruções/comandos, repetidas vezes. P r o f . P i t e r i - 4 ª A u l a – L i n g u a g e m C Comandos de Repetição - for Comando for: É adequado para ser utilizado quando conhecemos “a priori”, a partir do enunciado do problema, exatamente o número de vezes (iterações) que o loop (laço) será executado, ou, quando sabemos o número máximo de vezes que uma instrução ou grupo de instruções será executada. P r o f . P i t e r i - 4 ª A u l a – L i n g u a g e m C Exemplos de problemas: ¾ Obter a soma dos n primeiros números pares ou ímpares; ¾ Obter o fatorial de n, (n≥0); ¾ Obter a soma dos n primeiros números naturais; ¾ Obter os divisores de um número inteiro positivo p (p>0); ¾ Verificar se um número inteiro positivo p é primo; ¾ Verificar se um número inteiro positivo p é perfeito for (expressão1; expressão2; expressão3){ } próxima_instrução; Bloco de instruções no interior do comando for Onde: comandos e próxima_instrução são quaisquer instruções válidas da linguagem C, inclusive o próprio comando for. P r o f . P i t e r i - 4 ª A u l a – L i n g u a g e m C comandos;; Forma geral Æ Comandos de Repetição - for ondeonde expressão1: Expressão que inicializa a variável de controle do loop (laço). É executada uma única vez. expressão2: Expressão associada a condição de terminação do comando de repetição. É executada antes do início de cada iteração. Se o seu valor for verdadeiro, então as instruções no interior do bloco serão executadas, senão, a próxima_instrução após o comando for, será executada. expressão3 : Expressão que incrementa ou decrementa a variável de controle, após o término de cada iteração É executada automaticamente após a ultima instrução no interior do grupo de instruções internas ao bloco associado ao comando for. Em geral faz o papel de um contador. Observação: Lembre-se que na linguagem C, toda expressão diferente de 0 (zero) é verdadeira. P r o f . P i t e r i - 4 ª A u l a – L i n g u a g e m C Comandos de Repetição - for ... for( i=1; i <= MAX; i++ ) printf(“ Linha <%d> \n”,i); próxima_instrução; ... P r o f . P i t e r i - 4 ª A u l a – L i n g u a g e m C expressão1 expressão2 expressão3 expressão1:Æ inicialização da variável de controle; expressão2:Æ condição de terminação da laço; expressão3:Æ incremento ou decremento da vc; Comandos de Repetição - for Exemplos de trechos de códigos ... for(i=1; i <= MAX; i++) if (i%2 == 0) sp = sp + i; else si = si + i; próxima_instrução; ... P r o f . P i t e r i - 4 ª A u l a – L i n g u a g e m C Comandos de Repetição - for ... #define MAX 100 ... for(i=1; i <= MAX; i = i+2) printf(“ Linha %d \n”,i); próxima_instrução; ... ... for(i=MAX; i >= 0; i--) printf(“ Linha %d \n”,i); próxima_instrução; ... ... #define MAX 100 ... for(i=1; i <= MAX; i++) { printf(“Próximo termo da seqüência >>: ”); scanf(“%d”,&num); if (num%2 == 0){ sp = sp + num; // sp += num; qp = qp + 1; // qp++ } else { si = si + num; // si += num qi = qi + 1; // qi++ } } // for ... P r o f . P i t e r i - 4 ª A u l a – L i n g u a g e m C ExemplosExemplos de de trechostrechos de de ccóódigosdigos Comandos de Repetição - for Múltiplos Comandos for Há muitas situações no exercício cotidiano de programação onde uma ou mais instruções no interior de um comando for é um outro comando for. Esta construção lógica é referenciada por for´s aninhados ou encadeados. Quantas vezes esta instrução será executada? Para cada iteração (valor de i) no for mais externo, o for mais interno será executado m vezes. Como o for mais externo é executado n vezes, então, o comando printf(.) será executado n*m vezes. P r o f . P i t e r i - 4 ª A u l a – L i n g u a g e m C Exemplo: ... for (i=1; i<=n; i++) // for mais externo for (j=1; j<=m; j++) // for mais interno printf(“%d \n”, i*j); Simule os códigos abaixo e verifique quais serão as respectivas saídas. P r o f . P i t e r i - 4 ª A u l a – L i n g u a g e m C Múltiplos Comandos for ... for(i=1;i<3;i++) for (j=2; j <=3; j++) for (k=1; k<j; k++) printf(“(%d %d %d) \n”,i,j,k); próxima_instrução; ... ... for(i=1;i<5;i=i+2) for (j=2; j<=4; j++) for (k=1; k<j; k++) for (l=3; l>=i; l--) printf(“(%d %d %d %d)\n”,i,j,k, l); próxima_instrução; ... Comando break O comando break quando executado no interior de um Comando de Repetição provoca a saída incondicional do loop (laço) associado, mesmo que a condição de terminação ainda seja válida. P r o f . P i t e r i - 4 ª A u l a – L i n g u a g e m C Logo, você poderá utilizar o break para interromper a execução do comando for quando já tiver a informação desejada, mesmo que ainda falte muitas iterações a serem realizadas. Exemplos de trechos de códigos com o uso do break ... #define MAX 5000 ... for(i=1; i <= MAX; i++) if ( i%10 == 0) break; else printf(“%d \n ”,i); ... Qual o resultado da execução de ambos os trechos de código? ... a=0; for(i=1; i <= MAX; i++) { a = a+i; if ( i == 3) break; printf(“ %d \n”,a); } ... ComandoComando breakbreak Um bom exemplo é quando estamos verificando a primalidade de um número inteiro positivo muito grande. Se já descobrimos que o número não é primo (encontramos um divisor), não há necessidade de continuar a tentando encontrar um divisor. 1 2 3 ...... p 2 ≤≤ variável i ≤≤ pp--11 Descobrimos que há um divisor. Por quê continuar? Já temos a informação desejada. Com o uso do break poupamos esforço computacional. Olhar o código do programa que irá em anexo. P r o f . P i t e r i - 4 ª A u l a – L i n g u a g e m C Comando continue O comando continue deve ser usado somente no interior de um comando de repetição. O comando continue ao ser executado no interior de um comando de repetição, como por exemplo o comando for, causa a terminação da iteração atual (ignorando todas as instruções a seguir no interior do bloco de instruções do comando for), passando o controle do fluxo de execução imediatamente para a próxima iteração. Qual a diferença entre os comandos break e continue? O uso do comando continue pode ser perigoso, já que provoca a interrupção normal da seqüência de instruções no interior do loop. Ambas as instruções break e continue são usadas para alterar a execução normal do fluxo de controle. P r o f . P i t e r i - 4 ª A u l a – L i n g u a g e m C Comando continue ... #define MAX 5000 #define IMPAR(x) ( (x%2 != 0) ? 1: 0) ... for(i=1; i <= MAX; i++) if ( i == 100) break; else { if ( IMPAR(i) ) continue; printf(“%d \n ”,i); } ... Qual o resultado da execução deste trecho de código? P r o f . P i t e r i - 4 ª A u l a – L i n g u a g e m C ExemploExemplo:: Exercícios P r o f . P i t e r i - 4 ª A u l a – L i n g u a g e m C 01) Reescreva em C, todos os exemplos desenvolvidos em pseudocódigo; 02) 02) Elabore programas em C associados aos exercícios (problemas) da Lista 01; Desafios Adicionais P r o f . P i t e r i - 4 ª A u l a – L i n g u a g e m C 2 2 2.a b c+ = ¾Encontre o primeiro valor de n (n = 0,1,2,3,4,...), para o qual: - n2 - n + 41 não seja primo; - n2 -79n+1601 não seja primo. Encontre todas as ternas de valores 1 ≤ (a,b,c) ≤ 100 (números de Pitágoras) que satisfazem à relação acima. inteira que satisfaz 0 < a ≤ b ≤ c ≤ d ≤ e < f ≤ 75. Encontre-a. 55 5 5 5 5a b c d e f+ + + + =¾A equação possui exatamente uma solução ¾Um triângulo retângulo pode ter lados a, b e c, que sejam todos inteiros. O conjunto de valores inteiros associados aos lados desse triângulo é denominado número de Pitágoras. Sabemos a mais de 2000 anos que num triângulo retângulo vale a relação Escreva programas em C para resolver cada um dos problemas abaixo. Desafios Adicionais P r o f . P i t e r i - 4 ª A u l a – L i n g u a g e m C ¾ Imprima uma tabela de valores resultantes das funções trigonométricas seno (sin(x)), cosseno (cos(x)) e tangente (tan(x)) no intervalo de [0º,360º), com variação de 1 grau. Lembre-se que os argumentos das funções trigonométricas da biblioteca padrão <math.h> devem estar em radianos. Observações: Æ A saída deve estar formatada em colunas devidamente alinhadas; Æ Cada uma das linhas deve conter os seguintes valores: grau, radianos, sin(x), cos(x), tan(x); Æ Para alguns valores, a função tangente não está definida. Cuidado! Desafios Adicionais P r o f . P i t e r i - 4 ª A u l a – L i n g u a g e m C ¾ Elabore um programa em C para obter uma aproximação do número π com 15 casas decimais usando 100 termos de cada uma das relações abaixo. O valor de π com 10000 dígitos pode ser observado no site: http://www.educ.fc.ul.pt/icm/icm2001/icm34/digitosdopi.htm "−+−+−= 9 1 7 1 5 1 3 11 4 π "+++++= 2222 2 5 1 4 1 3 1 2 11 6 π "−+−+−= 3333 9 1 7 1 5 1 3 11S onde 3 32*S=π . (relação 1) (relação 2) (relação 3)
Compartilhar