26
08/03/10 (c) Paula Rodrigues 1 INF1005: Programação 1 Repetições

Capítulo 5: repetições - PUC-Rioinf1005/material/slides/backup/2011_2/tema06... · a execução do bloco de comandos no início do laço. • A linguagem C oferece uma terceira

Embed Size (px)

Citation preview

08/03/10 (c) Paula Rodrigues 1

INF1005: Programação 1

Repetições

Tópicos Principais

• Construção de Laços com while• Algoritmos com Repetição• Construção de Laços com for• Repetição com Teste no Final

08/03/10 (c) Paula Rodrigues 2

Construção de Laços

• Repetição:– Diversos problemas de difícil solução podem ser resolvidos

numericamente por um computador se dividido em partes.– Acumulando o resultado de pequenas computações, podemos

chegar à solução do problema como um todo.– Precisamos de mecanismos de programação que nos permitam

requisitar que um conjunto de instruções seja repetidamente executado, até que uma determinada condição seja alcançada.

– REPETIÇÕES SÃO PROGRAMADAS ATRAVÉS DA CONSTRUÇÃO DE LAÇOS (OU CICLOS).

Construção de Laços

• Em C, uma das formas de se trabalhar com repetições é através do comando while.

Enquanto uma determinada “_expressão_booleana_” for verdadeira, o “_bloco de comandos_” é executado! Depois, a execução procede nos comandos subsequentes ao bloco while.

Imprimir 100 números: 0 a 99

#include <stdio.h>

int main(void) { int x = 0; while(x < 100){ printf("%d\n", x); x++; } return 0;}

Computar nota de n alunos

float maior_valor(float a, float b) { if (a>=b) return a; else return b;}

float media_nums(float a, float b) { return (a+b)/2.0;}

int main(void) { int n_alunos; float P1, P2, P3; float media; int i=1; printf("Entre com o numero de alunos:"); scanf("%d", &n_alunos); while(i<=n_alunos) { printf("Entre com a nota da P1 do aluno %d:", i); scanf("%f", &P1); printf("Entre com a nota da P2 do aluno %d:", i); scanf("%f", &P2); media = media_nums(P1, P2); if ((media >=5.0) && (P1>=3) && (P2>=3.0)){ printf("Aluno %d aprovado por media com media = %.2f\n", i, media); }else { printf("Entre com a nota da P3 do aluno %d:", i); scanf("%f", &P3); P1 = maior_valor(P1,P2); media = media_nums(P1, P3); if (media >=5.0) printf("Aluno %d aprovado por P3 com media = %.2f", i, media); else printf("Aluno %d reprovado com media = %.2f", i, media); } i++; }}

Fatorial de um número não-negativo

• Exemplo: Fatorial de um número não-negativo.

Algoritmos com Repetição

• Exemplo: MDC (máximo divisor comum entre dois números inteiros positivos usando o algoritmo de Euclides)

MDC entre 42 e 24:

x = 42, y = 24Na etapa seguinte o y passaa ser x e o resto passa a ser y.O processo se repete até que o restoda divisão seja 0. e o valor em y é o MDC desejado

MDC entre 42 e 23:

Algoritmos com Repetição

Número Primo

• Exemplo: determinar se um dado número inteiro positivo é ou não primo.– Como se sabe, um número é dito primo se for divisível apenas pelo

número 1 e pelo próprio número, sendo que 1 não é primo (2 é o primeiro número primo)

/* retorna 0 se n nao for primo, 1 se for)*/int primo(int n) { int i; if (n<2) return 0; i=2; while(i<n) { if (n%i == 0) return 0; i++; } return 1;}

Série de Fibonacci

/* retorna o n-esimo termo da serie de fibonacci */int fibonacci(int n) { if (n <=2) { return (n-1); } else { int a = 1; /* primeiro termo */ int b = 1; /* segundo termo */ int c; /* termo atual */ int cont = 3; while(cont <=n) { c = a+b; a = b; b = c; cont++; } return c; }}

Avaliação de Séries

• Exemplo: algoritmo adicional avaliar o valor de pi. O número pi pode ser dado a partir do calculo da serie:

Avaliação de Séries

float pow_1(int n) { if (n%2 ==0) return 1.0; else return -1.0;}

float valor_pi(int n) { int i; float soma = 0.0; i = 0; while(i<n) { soma = soma + (pow_1(i)/(2*i+1)); i++; } return 4*soma;}

Exercícios

• Escreva um programa em C que calcule e imprima o produto dos inteiros mpares de 1 a 15.

• Escreva um programa em C que recebe um numero n como entrada, com n > 0. Seu programa deve imprimir, como sada, os divisores de n.

• Escreva um programa em C para calcular a media de n valores reais entrados via teclado. Inicialmente, deve-se capturar o numero de valores n que serão fornecido. Em seguida, usando um comando de repeticão, o programa deve capturar os valores reais e exibir, ao final, a media calculada.

Construção de Laços (cont.)

• Usando o comando for – que é equivalente ao comando while sendo que com uma sintaxe mais compacta.

• Sintaxe:

Construção de Laços

• Exemplo: imprimir na tela os valores de 0 a 99:

Construção de Laços

• Na prática, uma das vantagens do comando for é que escrevemos a expressão de atualização logo no início da construção. Com o comando while, muitas vezes o programadores acabam esquecendo de escrever a expressão de atualização, criando um laço infinito.

• Exercício: escrever o fatorial usando for:

MDC usando FOR

int mdc(int x, int y) { int r; for(r = x%y; r!=0; r = x%y) { x=y; y=r; } return y;}

Número Primo usando FOR

• Exemplo: determinar se um dado número inteiro positivo é ou não primo.– Como se sabe, um número é dito primo se for divisível apenas

pelo número 1 e pelo próprio número, sendo que 1 não é primo.

#include <stdio.h>

int primo(int n){ int i; if (n <2) return 0; for (i=2;i<n;i++) { if (n%i == 0) return 0; } return 1;}

Série de Fibonacci usando FOR

Avaliação de Séries

• Exemplo: algoritmo adicional avaliar o valor de pi. O número pi pode ser dado a partir do calculo da serie:

Avaliação de Séries

• Nossa função pode receber como parâmetro o número de termos da série, n, que se deseja usar na avaliação.– Para melhor visualizar a implementação da função, podemos re-

escrever a serie acima como um somatório:

Avaliação de Séries

Repetição com Teste no Final

• while e for: avaliam a expressão booleana que controla a execução do bloco de comandos no início do laço.

• A linguagem C oferece uma terceira construção de laços através do comando do-while:– A expressão booleana é avaliada no final do laço.– Isso significa que o bloco de comandos é avaliado pelo menos

uma vez!

Repetição com Teste no Final

26

Referências

Waldemar Celes e Roberto Ierusalimschy, Apostila de Programação (disponível para download no site da disciplina)

• Capítulo 5 – Repetições