mc-102 aula 05 comandos repetitivoswainer/cursos/2s2012/aula05.pdf · (instituto de computa˘c~ao {...

54
MC-102 — Aula 05 Comandos Repetitivos Instituto de Computa¸c˜ ao – Unicamp 11 de Agosto de 2012

Upload: others

Post on 10-Oct-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

MC-102 — Aula 05Comandos Repetitivos

Instituto de Computacao – Unicamp

11 de Agosto de 2012

Page 2: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Roteiro

1 Comandos Repetitivos

2 Comando while

3 Comando do-while

4 O comando for

5 Exemplos com Lacos

6 Exercıcios

7 Informacoes Extras: continue e break

8 Informacoes Extras: Simulacao de codigo

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 2 / 54

Page 3: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Comandos Repetitivos

Ate agora vimos como escrever programas capazes de executarcomandos de forma linear, e, se necessario, tomar decisoes comrelacao a executar ou nao um bloco de comandos.

Entretanto, eventualmente e necessario executar um bloco decomandos varias vezes para obter o resultado esperado.

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 3 / 54

Page 4: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Introducao

Ex.: Programa que imprime todos os numeros de 1 a 4.

Sera que da pra fazer com o que ja temos?

printf(“1”);printf(“2”);printf(“3”);printf(“4”);

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 4 / 54

Page 5: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Introducao

Ex.: Programa que imprime todos os numeros de 1 a 100

printf(“1”);printf(“2”);printf(“3”);printf(“4”);/*repete 95 vezes a linha acima*/

printf(“100”);

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 5 / 54

Page 6: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Introducao

Ex.: Programa que imprime todos os numeros de 1 ate n (informadopelo usuario)

printf(“1”);if (n>=2)

printf(“2”);if (n>=3)

printf(“3”);/*repete 96 vezes o bloco acima*/

if (n>=100)

printf(“100”);

Note que o programa e valido assumindo que n ≤ 100.

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 6 / 54

Page 7: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Comando while

Estrutura:

while ( condicao )

comando;

Ou:

while ( condicao ){

comandos;

}

Enquanto a condicao for verdadeira (!=0), ele executa o(s)comando(s);

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 7 / 54

Page 8: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Comando while

Passo 1: Testa condicao. Se condicao for verdadeira vai para Passo 2.

Passo 2.1: Executa comandos;

Passo 2.2: Volta para o Passo 1.

Comandos

Testa condicao

Se for verdadeira

Se for falsa

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 8 / 54

Page 9: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Imprimindo os 100 primeiros numeros inteiros

int i=1;

while (i<=100)

{printf(“%d ”,i);i++;

}

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 9 / 54

Page 10: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Imprimindo os n primeiros numeros inteiros

int i=1,n;

scanf(“%d”,&n);while (i<=n)

{printf(“%d ”,i);i++;

}

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 10 / 54

Page 11: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Comando while

1. O que acontece se a condicao for falsa na primeira vez?

while (a!=a)

a=a+1;

2. O que acontece se a condicao for sempre verdadeira?

while (a == a)

a=a+1;

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 11 / 54

Page 12: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Comando while

1. O que acontece se a condicao for falsa na primeira vez?

while (a!=a)

a=a+1;

R: Ele nunca entra na repeticao (loop).

2. O que acontece se a condicao for sempre verdadeira?

while (a == a)

a=a+1;

R: Ele entra na repeticao e nunca sai (loop infinito).

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 12 / 54

Page 13: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Comando do-while

Estrutura:

do

comando;

while ( condicao );

Ou:

do{

comandos;

}while ( condicao );

Diferenca do while: Sempre executa comandos na primeira vez.Teste condicional e feito por ultimo.

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 13 / 54

Page 14: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Comando do-while

Passo 1: Executa comandos;

Passo 2: Testa condicao. Se for verdadeira vai para Passo 1.

Se for verdadeira

Comandos

Se for falsa

Testa condicao

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 14 / 54

Page 15: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Imprimindo os 100 primeiros numeros inteiros

int i;

i=1;

do{

printf("\n %d",i);

i = i+1;

}while(i<= 100);

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 15 / 54

Page 16: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Imprimindo os n primeiros numeros inteiros

int i, n;

i=1;

scanf("%d",&n);

do{

printf("\n %d",i);

i++;

}while(i<=n);

O que acontece se o usuario digitar 0 (n=0)?

O que acontece se usarmos o while?

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 16 / 54

Page 17: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

O comando for

Estrutura:

for (inicio ; condicao ; passo)

comando ;

Ou:

for (inicio ; condicao ; passo) {

comandos;

}

Inıcio: Uma ou mais atribuicoes, separadas por “,”

Condicao: Executa enquanto a condicao for verdadeira.

Passo: Um ou mais comandos, separados por “,”

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 17 / 54

Page 18: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

for (inicio ; condicao ; passo) { comandos ;}

Passo 1: Executa comandos em ”inicio”.

Passo 2: Testa condicao. Se for verdadeira vai para passo 3.

Passo 3.1: Executa comandos

Passo 3.2: Executa comandos em ”passo”.

Passo 3.2: Volta ao Passo 2.

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 18 / 54

Page 19: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Comando do-while

Se for verdadeira

Testa condicaoSe for falsa

Comandos

Passo

Comandos

Inicio

Comandos

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 19 / 54

Page 20: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

O for e equivalente a seguinte construcao utilizando o while:

inicio;

while(condicao){

comandos;

passo;

}

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 20 / 54

Page 21: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Imprimindo os 100 primeiros numeros inteiros

int i;

for(i=1; i<= 100; i=i+1){

printf("\n %d",i);

}

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 21 / 54

Page 22: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Imprimindo os n primeiros numeros inteiros

int i, n;

scanf("%d",&n);

for(i=1; i<=n; i++){

printf("\n %d",i);

}

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 22 / 54

Page 23: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

I’ll not throw paper airplanes in class

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 23 / 54

Page 24: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Variavel Acumuladora

Vamos ver alguns exemplos de problemas que sao resolvidosutilizando lacos.

Ha alguns padroes de solucao que sao bem conhecidos, e sao uteis emdiversas situacoes.

O primeiro padrao deles e o uso de uma ”variavel acumuladora”.

Exemplo

Ler um inteiro positivo n, em seguida ler n numeros do teclado eapresentar a soma destes.

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 24 / 54

Page 25: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Variavel Acumuladora

Como n nao e definido a priori, nao podemos criar n variaveis edepois soma-las.

A ideia e criar uma variavel acumuladora que a cada iteracao de umlaco acumula a soma de todos os numeros lidos ate entao.

acumuladora = 0 // inicialmente n~ao somamos nada

Repita n vezes

Leia um numero aux

acumuladora = acumuladora + aux

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 25 / 54

Page 26: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Variavel Acumuladora

Podemos usar qualquer estrutura de laco de C para esta solucao.

Abaixo temos uma solucao utilizando o comando for.

acu = 0;

for(i=1; i<=n; i++){

printf("Digite um numero: ");

scanf("%d", &aux);

acu = acu + aux;

}

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 26 / 54

Page 27: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Variavel Acumuladora

Codigo completo:

#include <stdio.h>

int main(){

int acu, i, n, aux;

printf("Entre com n: ");

scanf("%d", &n);

acu = 0;

for(i=1; i<=n; i++){

printf("Digite um numero: ");

scanf("%d", &aux);

acu = acu + aux;

}

printf("Soma total: %d\n", acu);

}

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 27 / 54

Page 28: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Calculando potencias de 2

Mais um exemplo:

Leia um inteiro positivo n, e imprima as potencias: 20, 21, . . . , 2n.

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 28 / 54

Page 29: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Calculando potencias de 2

Usamos uma variavel acumuladora que a cada iteracao i de um laco,possui o valor 2i .

Para a proxima iteracao multiplica-se esta variavel por 2.

acumuladora = 1 // Corresponde a 2^0

Repita n+1 vezes

imprima acumuladora

acumuladora = acumuladora * 2

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 29 / 54

Page 30: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Calculando potencias de 2

Repetir n + 1 vezes pode ser feito com uma construcao:

for(i=0; i<=n; i++){

}

Mas vamos fazer este exemplo utilizando o comando while.

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 30 / 54

Page 31: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Imprimindo as n primeiras potencias de 2

Em C:

int i, n, pot;

scanf("%d",&n);

pot = 1;

i = 0;

while(i <= n){

printf("2^%d = %d\n",i,pot);

pot = pot *2;

i++;

}

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 31 / 54

Page 32: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Imprimindo as n primeiras potencias de 2

Programa completo:

#include <stdio.h>

int main(){

int i, n, pot;

scanf("%d",&n);

pot = 1;

i = 0;

while(i <= n){

printf("2^%d = %d\n",i,pot);

pot = pot *2;

i++;

}

}

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 32 / 54

Page 33: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Calculando o valor de n!

Vamos fazer um programa que le um valor inteiro positivo n e calculao valor de n!.

Lembre-se que n! = n ∗ (n − 1) ∗ (n − 2) ∗ . . . 2 ∗ 1.

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 33 / 54

Page 34: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Calculando o valor de n!

Novamente vamos criar uma variavel acumuladora que ate a iteracaoi de um laco armazena o valor de i !.

Na iteracao (i + 1) seguinte, basta atualizarmos a variavelacumuladora mutiplicando-a por (i + 1) obtendo (i + 1)!.

acumuladora = 1

i = 1

repita n vezes

acumuladora = acumuladora * i

i = i + 1

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 34 / 54

Page 35: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Calculando o valor de n!

Em C:

int i, n, acu;

scanf("%d", &n);

acu = 1;

for(i=1; i <= n; i++){

acu = acu * i;

}

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 35 / 54

Page 36: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Calculando o valor de n!

Programa completo:

#include <stdio.h>

int main(){

int i, n, acu;

scanf("%d", &n);

acu = 1;

for(i=1; i <= n; i++){

acu = acu * i;

}

printf("Fatorial de %d e: %d\n",n, acu);

}

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 36 / 54

Page 37: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Exercıcio

Faca um programa que imprima um menu de 4 pratos na tela e umaquinta opcao para sair do programa. O programa deve imprimir oprato solicitado. O programa deve terminar quando for escolhido aquinta opcao.

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 37 / 54

Page 38: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Exercıcio

Faca um programa que le dois numeros inteiros positivos a e b.Utilizando lacos, o seu programa deve calcular e imprimir o valor ab.

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 38 / 54

Page 39: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Exercıcio

Faca um programa que le um numero n e que compute e imprima ovalor

n∑i=1

i .

OBS: Nao use formulas como a da soma de uma P.A.

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 39 / 54

Page 40: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Exercıcio

Faca um programa que le um numero n e imprima os valores entre 2e n, que sao divisores de n.

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 40 / 54

Page 41: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Exercıcio

Faca um programa que le um numero n e imprima os valores

j∑i=1

i

para j de 1 ate n, um valor por linha.

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 41 / 54

Page 42: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Informacoes Extras: Lacos e o comando break

O comando break faz com que a execucao de um laco seja terminada,passando a execucao para o o proximo comando depois do final do laco.

int i;

for(i = 1; i<= 10 ; i++){

if(i >= 5)

break;

printf("%d\n",i);

}

printf("Terminou o laco");

O que sera impresso?

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 42 / 54

Page 43: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Informacoes Extras: Lacos e o comando breakAssim como a ”condicao”em lacos, o comando break e utilizado emsituacoes de parada de um laco.

int i;

for(i = 1; ; i++){

if(i > 10)

break;

printf("%d\n",i);

}

e equivalente a:

int i;

for(i = 1; i<=10 ; i++){

printf("%d\n",i);

}

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 43 / 54

Page 44: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Informacoes Extras: Lacos e o comando continue

O comando continue faz com que a execucao de um laco seja alteradapara final do laco.

int i;

for(i = 1; i<= 10 ; i++){

if(i == 5)

continue;

printf("%d\n",i);

}

printf("Terminou o laco");

O que sera impresso?

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 44 / 54

Page 45: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Informacoes Extras: Lacos e o comando continueO comando continue e utilizado em situacoes onde comandos dentro dolaco so serao executados caso alguma condicao seja satisfeita.Imprimindo area de um cırculo, mas apenas se raio for par (e entre 1 e 10).

int r;

double area;

for(r = 1; r<= 10 ; r++){

if( (r % 2) != 0)

continue;

area = 3.1415*r*r;

printf("%lf\n",area);

}

Mas note que poderıamos escrever algo mais simples:

int r;

double area;

for(r = 2; r<= 10 ; r = r+2){

area = 3.1415*r*r;

printf("%lf\n",area);

}(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 45 / 54

Page 46: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Introducao

As vezes, acontece de programarmos um codigo, porem ele nao faz oque esperavamos que fizesse.

Isso acontece por varios motivos, entre os quais destacam-se:I Erros de programacao: instrucoes escritas erradas.I Erros da nossa logica: o conjunto de passos pensados que parecia

resolver o problema na realidade nao cobre todas as situacoes.

Eventualmente, simplesmente olhar o codigo pode nao trazer a tona oerro.

Por isso, utiliza-se uma tecnica de simulacao do codigoI Pode ser automatizada (utilizando um debugger)I Pode ser feita manualmente, utilizando papel e caneta.

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 46 / 54

Page 47: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Informacoes Extras: Simulacao Manual

Bem simples: Existem apenas 2 passos.I “Alocacao” dos espacos de variaveisI “Execucao” de uma instrucao de cada vez.

Alocacao de memoria:I Ex. Suponha o codigo:

1. int divisor,dividendo;

2. float resultado;

Apos “executar” a linha 1Tipo int int

Nome divisor dividendo

Valor ? ?

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 47 / 54

Page 48: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Informacoes Extras: Simulacao Manual

Bem simples: Existem apenas 2 passos.I “Alocacao” dos espacos de variaveisI “Execucao” de uma instrucao de cada vez.

Alocacao de memoria:I Ex. Suponha o codigo:

1. int divisor,dividendo;

2. float resultado;

Apos “executar” a linha 2Tipo int int float

Nome divisor dividendo resultado

Valor ? ? ?

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 48 / 54

Page 49: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Informacoes Extras: Simulacao Manual

Execucao em memoria:I Ex. Suponha o codigo:

1. int divisor,dividendo;

2. float resultado; ← Ultimo executado3. divisor=10; ← Proximo Comando4. dividendo=13;5. resultado = dividendo / divisor;

Apos “executar” a linha 2Tipo int int float

Nome divisor dividendo resultado

Valor ? ? ?

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 49 / 54

Page 50: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Informacoes Extras: Simulacao Manual

Execucao em memoria:I Ex. Suponha o codigo:

1. int divisor,dividendo;

2. float resultado;

3. divisor=10; ← Ultimo executado4. dividendo=13; ← Proximo Comando5. resultado = dividendo / divisor;

Apos “executar” a linha 3Tipo int int float

Nome divisor dividendo resultado

Valor ? ? ?10

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 50 / 54

Page 51: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Informacoes Extras: Simulacao Manual

Execucao em memoria:I Ex. Suponha o codigo:

1. int divisor,dividendo;

2. float resultado;

3. divisor=10;4. dividendo=13; ← Ultimo executado5. resultado = dividendo / divisor; ← Proximo Comando

Apos “executar” a linha 4Tipo int int float

Nome divisor dividendo resultado

Valor ? ? ?10 13

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 51 / 54

Page 52: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Informacoes Extras: Simulacao Manual

Execucao em memoria:I Ex. Suponha o codigo:

1. int divisor,dividendo;

2. float resultado;

3. divisor=10;4. dividendo=13;5. resultado = dividendo / divisor; ← Ultimo executado

Apos “executar” a linha 5Tipo int int float

Nome divisor dividendo resultado

Valor ? ? ?10 13 1.0

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 52 / 54

Page 53: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Informacoes Extras: Simulacao Manual

Execucao em memoria:I Ex. Suponha o codigo:

1. int divisor,dividendo;

2. float resultado;

3. divisor=10;4. dividendo=13;5. resultado = dividendo / divisor; ← Ultimo executado

Termino da execucao (nao ha mais comandos)Tipo int int float

Nome divisor dividendo resultado

Valor ? ? ?10 13 1.0

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 53 / 54

Page 54: MC-102 Aula 05 Comandos Repetitivoswainer/cursos/2s2012/aula05.pdf · (Instituto de Computa˘c~ao { Unicamp) MC-102 | Aula 05 11 de Agosto de 2012 2 / 54. Comandos Repetitivos At

Informacoes Extras: Simulacao Manual

Execucao em memoria:I Ex. Suponha o codigo (corrigido):

1. int divisor,dividendo;

2. float resultado;

3. divisor=10;4. dividendo=13;5. resultado = (float)dividendo / (float)divisor;

Execucao completa

Tipo int int float

Nome divisor dividendo resultado

Valor ? ? ?10 13 1.3

(Instituto de Computacao – Unicamp) MC-102 — Aula 05 11 de Agosto de 2012 54 / 54