INF1005: Programação 1
Repetições
08/03/10
(c) Paula Rodrigues
1
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:
MDC entre 42 e 23:
x = 42, y = 24
Na etapa seguinte o y passa
a ser x e o resto passa a ser y.
O processo se repete até que o resto
da divisão seja 0. e o valor em y é o MDC desejado
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,
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;
}
1 se for)*/
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 reescrever 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
Referências
Waldemar Celes e Roberto Ierusalimschy, Apostila de Programação
(disponível para download no site da disciplina)‫‏‬
•
Capítulo 5 – Repetições
26
Download

Repetições