Upload
truongtruc
View
215
Download
0
Embed Size (px)
Citation preview
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++; }}
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:
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
• 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:
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;}
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:
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!