Sunteți pe pagina 1din 8

INF1004/INF1005 Programao 1

Captulo 05: Repeties

Captulo 5: Repeties
INF1004 e INF1005 Programao 1

Pontifcia Universidade Catlica


Departamento de Informtica

Construo de Laos

Repetio:
Diversos problemas de difcil soluo podem ser resolvidos
numericamente por um computador se dividido em partes.
Acumulando o resultado de pequenas computaes, podemos
chegar soluo do problema como um todo.
Precisamos de mecanismos de programao que nos permitam
requisitar que um conjunto de instrues seja repetidamente
executado, at que uma determinada condio seja alcanada.
REPETIES SO PROGRAMADAS ATRAVS DA
CONSTRUO DE LAOS (OU CICLOS).

INF1004/INF1005 Programao 1
Captulo 05: Repeties

Construo de Laos:

o comando while

Em C, uma das formas de se trabalhar com repeties


atravs do comando while.
...
while(_expressao_booleana) {
_bloco_de_comandos_
...
}
...
Enquanto uma determinada _expresso_booleana_
for verdadeira, o _bloco de comandos_ executado!
Depois, a execuo procede nos comandos subsequentes
ao bloco while.

Exemplo:
Imprimir 100 nmeros: 0 a 99

#include <stdio.h>
int main(void) {
int x = 0;
while(x < 100){
printf("%d\n", x);
x++;
}
return 0;
}

INF1004/INF1005 Programao 1
Captulo 05: Repeties

Exemplo:
Fatorial de um nmero no-negativo

Exemplo: Fatorial de um nmero no-negativo.

int fatorial(int n) {
int f = 1;
while(n > 1){
f = f * n;
n = n 1;
}
return f;
}

Exemplo:
Clculo do MDC entre dois nmeros inteiros positivos

Exemplo: MDC (mximo divisor comum entre dois nmeros


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 diviso seja 0. e o valor em y o MDC desejado

INF1004/INF1005 Programao 1
Captulo 05: Repeties

Exemplo:
Clculo do MDC entre dois nmeros 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 Nmero Primo

Exemplo: determinar se um dado nmero inteiro positivo ou no


primo.
Como se sabe, um nmero dito primo se for divisvel apenas pelo
nmero 1 e pelo prprio nmero, sendo que 1 no primo (2 o
primeiro nmero 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;
}

INF1004/INF1005 Programao 1
Captulo 05: Repeties

Exemplo:
Imprimir o n-simo termo da Srie 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;
}
}

Construo de Laos:

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_
...
}
...

INF1004/INF1005 Programao 1
Captulo 05: Repeties

Exemplo:
Imprimir 100 nmeros: 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 nmero no-negativo

Na prtica, uma das vantagens do comando for que escrevemos a


expresso de atualizao logo no incio da construo. Com o comando
while, muitas vezes o programadores acabam esquecendo de escrever
a expresso de atualizao, criando um lao infinito.
Exerccio: 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;
}

INF1004/INF1005 Programao 1
Captulo 05: Repeties

Exemplo:
Clculo do MDC entre dois nmeros 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 Nmero Primo

Exemplo: determinar se um dado nmero inteiro


positivo ou no primo.
Como se sabe, um nmero dito primo se for divisvel apenas
pelo nmero 1 e pelo prprio nmero, sendo que 1 no 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;
}

INF1004/INF1005 Programao 1
Captulo 05: Repeties

Exemplo:
Imprimir o n-simo termo da Srie de Fibonacci

Repetio com Teste no Final




while e for: avaliam a expresso booleana que controla


a execuo do bloco de comandos no incio do lao.
A linguagem C oferece uma terceira construo de
laos atravs do comando do-while:
A expresso booleana avaliada no final do lao.
Isso significa que o bloco de comandos avaliado pelo menos
uma vez!

S-ar putea să vă placă și