INF1004/INF1005 – Programação 1
Capítulo 05: Repetições
Capítulo 5: Repetições
INF1004 e INF1005 – Programação 1
Pontifícia Universidade Católica
Departamento de Informática
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).
1
INF1004/INF1005 – Programação 1
Capítulo 05: Repetições
Construção de Laços:
o comando while
Em C, uma das formas de se trabalhar com repetições
é através do comando while.
...
while(_expressao_booleana) {
_bloco_de_comandos_
...
}
...
Enquanto uma determinada “_expressão_booleana_”
for verdadeira, o “_bloco de comandos_” é executado!
Depois, a execução procede nos comandos subsequentes
ao bloco while.
Exemplo:
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;
}
2
INF1004/INF1005 – Programação 1
Capítulo 05: Repetições
Exemplo:
Fatorial de um número não-negativo
Exemplo: Fatorial de um número não-negativo.
int fatorial(int n) {
int f = 1;
while(n > 1){
f = f * n;
n = n – 1;
}
return f;
}
Exemplo:
Cálculo do MDC entre dois números inteiros positivos
Exemplo: MDC (máximo divisor comum entre dois números
inteiros positivos usando o algoritmo de Euclides)
MDC entre 42 e 23:
MDC entre 42 e 24:
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
3
INF1004/INF1005 – Programação 1
Capítulo 05: Repetições
Exemplo:
Cálculo do MDC entre dois números inteiros positivos
int mdc(int x, int y) {
int r = x%y;
while(r != 0){
x = y;
y = r;
r = x%y;
}
return y;
}
Exemplo:
Verificar se um 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;
}
4
INF1004/INF1005 – Programação 1
Capítulo 05: Repetições
Exemplo:
Imprimir o n-ésimo termo da 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;
}
}
Construção de Laços:
o comando for
Usando o comando for – que é equivalente ao comando while
sendo que com uma sintaxe mais compacta.
Sintaxe:
...
for(_expr_inicial; _expr_booleana; _expr_atualizacao) {
_bloco_de_comandos_
...
}
...
5
INF1004/INF1005 – Programação 1
Capítulo 05: Repetições
Exemplo:
Imprimir 100 números: 0 a 99
Exemplo: imprimir na tela os valores de 0 a 99:
#include <stdio.h>
#include <stdio.h>
int main(void) {
int x = 0;
while(x < 100){
printf("%d\n", x);
x++;
}
return 0;
}
int main(void) {
int x;
for(x=0;x<100;x++){
printf("%d\n", x);
}
return 0;
}
Exemplo:
Fatorial de um número não-negativo
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:
int fatorial (int n) {
int i;
int f = 1;
for(i=2; i<=n; i++) {
f = f * i;
}
return f;
}
6
INF1004/INF1005 – Programação 1
Capítulo 05: Repetições
Exemplo:
Cálculo do MDC entre dois números inteiros positivos
int mdc(int x, int y) {
int r;
for(r=x%y; r!=0; r = x%y) {
x=y;
y=r;
}
return y;
}
Exemplo:
Verificar se um 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.
#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;
}
7
INF1004/INF1005 – Programação 1
Capítulo 05: Repetições
Exemplo:
Imprimir o n-ésimo termo da Série de Fibonacci
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!
8
Download

Capítulo 5: Repetições - Departamento de Informática