Escolar Documentos
Profissional Documentos
Cultura Documentos
13 de abril de 2015
Roteiro
1
Reviso
Comandos de Repetio
Construo Enquanto-Faa
Comando while
Sumilao de cdigo
9002 Aula 08
13 de abril de 2015
2 / 26
Reviso
Nas aulas anteriores, vimos como escrever programas capazes de
executar comandos de forma linear, e, se necessrio, tomar decises
com relao executar ou no um bloco de comandos.
9002 Aula 08
13 de abril de 2015
3 / 26
Reviso
9002 Aula 08
13 de abril de 2015
4 / 26
Exemplo at 4
9002 Aula 08
13 de abril de 2015
5 / 26
Exemplo at 4
9002 Aula 08
13 de abril de 2015
5 / 26
Exemplo at 4
9002 Aula 08
13 de abril de 2015
5 / 26
Exemplo at 4
9002 Aula 08
13 de abril de 2015
5 / 26
Exemplo at 4
9002 Aula 08
13 de abril de 2015
5 / 26
Exemplo at 100
Programa que imprime todos os nmeros inteiros entre 1 e 100
...
printf(1);
printf(2);
printf(3);
printf(4);
printf(5);
printf(6);
...
printf(99);
printf(100);
...
9002 Aula 08
13 de abril de 2015
6 / 26
Exemplo at 100
Programa que imprime todos os nmeros inteiros entre 1 e 100
...
printf(1);
printf(2);
printf(3);
printf(4);
printf(5);
printf(6);
...
printf(99);
printf(100);
...
9002 Aula 08
13 de abril de 2015
6 / 26
Exemplo at 100
Programa que imprime todos os nmeros inteiros entre 1 e 100
...
printf(1);
printf(2);
printf(3);
printf(4);
printf(5);
printf(6);
...
printf(99);
printf(100);
...
9002 Aula 08
13 de abril de 2015
6 / 26
Exemplo at 100
Programa que imprime todos os nmeros inteiros entre 1 e 100
...
printf(1);
printf(2);
printf(3);
printf(4);
printf(5);
printf(6);
...
printf(99);
printf(100);
...
9002 Aula 08
13 de abril de 2015
6 / 26
Exemplo at 100
Programa que imprime todos os nmeros inteiros entre 1 e 100
...
printf(1);
printf(2);
printf(3);
printf(4);
printf(5);
printf(6);
...
printf(99);
printf(100);
...
9002 Aula 08
13 de abril de 2015
6 / 26
Exemplo at 100
Programa que imprime todos os nmeros inteiros entre 1 e 100
...
printf(1);
printf(2);
printf(3);
printf(4);
printf(5);
printf(6);
...
printf(99);
printf(100);
...
9002 Aula 08
13 de abril de 2015
6 / 26
Exemplo at 100
Programa que imprime todos os nmeros inteiros entre 1 e 100
...
printf(1);
printf(2);
printf(3);
printf(4);
printf(5);
printf(6);
...
printf(99);
printf(100);
...
9002 Aula 08
13 de abril de 2015
6 / 26
Exemplo at 100
Programa que imprime todos os nmeros inteiros entre 1 e 100
...
printf(1);
printf(2);
printf(3);
printf(4);
printf(5);
printf(6);
...
printf(99);
printf(100);
...
9002 Aula 08
13 de abril de 2015
6 / 26
Exemplo at 100
Programa que imprime todos os nmeros inteiros entre 1 e 100
...
printf(1);
printf(2);
printf(3);
printf(4);
printf(5);
printf(6);
...
printf(99);
printf(100);
...
9002 Aula 08
13 de abril de 2015
6 / 26
Exemplo at 100
Programa que imprime todos os nmeros inteiros entre 1 e 100
...
printf(1);
printf(2);
printf(3);
printf(4);
printf(5);
printf(6);
...
printf(99);
printf(100);
...
9002 Aula 08
13 de abril de 2015
6 / 26
Exemplo at n dado
Programa que imprime todos os nmeros inteiros entre 1 e n (dado).
Sabendo que os valores de n variam entre 1 e 100.
...
int n;
scanf("%d", &n);
printf(1);
if (n>=2)
printf(2);
if (n>=3)
printf(3);
/* repete 96 vezes o bloco acima */
if (n>=100)
printf(100);
...
IEng - UFMT (2015/1)
9002 Aula 08
13 de abril de 2015
7 / 26
Exemplo at n dado
Programa que imprime todos os nmeros inteiros entre 1 e n (dado).
Sabendo que os valores de n variam entre 1 e 100.
...
int n;
scanf("%d", &n);
printf(1);
if (n>=2)
printf(2);
if (n>=3)
printf(3);
/* repete 96 vezes o bloco acima */
if (n>=100)
printf(100);
...
IEng - UFMT (2015/1)
9002 Aula 08
13 de abril de 2015
7 / 26
Exemplo at n dado
Programa que imprime todos os nmeros inteiros entre 1 e n (dado).
Sabendo que os valores de n variam entre 1 e 100.
...
int n;
scanf("%d", &n);
printf(1);
if (n>=2)
printf(2);
if (n>=3)
printf(3);
/* repete 96 vezes o bloco acima */
if (n>=100)
printf(100);
...
IEng - UFMT (2015/1)
9002 Aula 08
13 de abril de 2015
7 / 26
Exemplo at n dado
Programa que imprime todos os nmeros inteiros entre 1 e n (dado).
Sabendo que os valores de n variam entre 1 e 100.
...
int n;
scanf("%d", &n);
printf(1);
if (n>=2)
printf(2);
if (n>=3)
printf(3);
/* repete 96 vezes o bloco acima */
if (n>=100)
printf(100);
...
IEng - UFMT (2015/1)
9002 Aula 08
13 de abril de 2015
7 / 26
Exemplo at n dado
Programa que imprime todos os nmeros inteiros entre 1 e n (dado).
Sabendo que os valores de n variam entre 1 e 100.
...
int n;
scanf("%d", &n);
printf(1);
if (n>=2)
printf(2);
if (n>=3)
printf(3);
/* repete 96 vezes o bloco acima */
if (n>=100)
printf(100);
...
IEng - UFMT (2015/1)
9002 Aula 08
13 de abril de 2015
7 / 26
Exemplo at n dado
Programa que imprime todos os nmeros inteiros entre 1 e n (dado).
Sabendo que os valores de n variam entre 1 e 100.
...
int n;
scanf("%d", &n);
printf(1);
if (n>=2)
printf(2);
if (n>=3)
printf(3);
/* repete 96 vezes o bloco acima */
if (n>=100)
printf(100);
...
IEng - UFMT (2015/1)
9002 Aula 08
13 de abril de 2015
7 / 26
Exemplo at n dado
Programa que imprime todos os nmeros inteiros entre 1 e n (dado).
Sabendo que os valores de n variam entre 1 e 100.
...
int n;
scanf("%d", &n);
printf(1);
if (n>=2)
printf(2);
if (n>=3)
printf(3);
/* repete 96 vezes o bloco acima */
if (n>=100)
printf(100);
...
IEng - UFMT (2015/1)
9002 Aula 08
13 de abril de 2015
7 / 26
Repetindo...
9002 Aula 08
13 de abril de 2015
8 / 26
Estruturas de repetio
9002 Aula 08
13 de abril de 2015
9 / 26
Construo Enquanto-Faa
Nesta construo, o critrio de parada testado antes que a
sequncia de comandos da ao seja executada. Deste modo, a ao
executada enquanto a condio for verdadeira.
Fig. 2 - Fluxograma.
IEng - UFMT (2015/1)
9002 Aula 08
13 de abril de 2015
10 / 26
Construo Enquanto-Faa
Importante
Lembre-se de que um algoritmo deve sempre terminar. A condio
projetada deve deixar de ser verdadeira em algum momento. Por isto, a
ao deve alterar as variveis envolvidas na condio de parada.
9002 Aula 08
13 de abril de 2015
11 / 26
Construo Enquanto-Faa
Importante
Lembre-se de que um algoritmo deve sempre terminar. A condio
projetada deve deixar de ser verdadeira em algum momento. Por isto, a
ao deve alterar as variveis envolvidas na condio de parada.
9002 Aula 08
13 de abril de 2015
11 / 26
Construo Enquanto-Faa
Vamos refletir novamente sobre problema de imprimir os nmeros inteiros
entre 1 e 100.
Qual ao deve ser executada?
R: Impresso dos nmeros 1, 2, 3, ... 100
Ideia: Utilizar uma varivel, por exemplo, i para representar os
nmeros. Iniciar i com valor 1. Incrementar i repetidamente.
Quantas vezes a ao deve ser repetida?
R. 100 vezes.
Qual condio pode ser utilizada para representar esta repetio?
R. Como a varivel i indica quantas repeties foram executadas,
podemos utiliz-la diretamente. Nossa condio pode ser, por
exemplo, i 100.
9002 Aula 08
13 de abril de 2015
12 / 26
Construo Enquanto-Faa
Vamos refletir novamente sobre problema de imprimir os nmeros inteiros
entre 1 e 100.
Qual ao deve ser executada?
R: Impresso dos nmeros 1, 2, 3, ... 100
Ideia: Utilizar uma varivel, por exemplo, i para representar os
nmeros. Iniciar i com valor 1. Incrementar i repetidamente.
Quantas vezes a ao deve ser repetida?
R. 100 vezes.
Qual condio pode ser utilizada para representar esta repetio?
R. Como a varivel i indica quantas repeties foram executadas,
podemos utiliz-la diretamente. Nossa condio pode ser, por
exemplo, i 100.
9002 Aula 08
13 de abril de 2015
12 / 26
Construo Enquanto-Faa
Vamos refletir novamente sobre problema de imprimir os nmeros inteiros
entre 1 e 100.
Qual ao deve ser executada?
R: Impresso dos nmeros 1, 2, 3, ... 100
Ideia: Utilizar uma varivel, por exemplo, i para representar os
nmeros. Iniciar i com valor 1. Incrementar i repetidamente.
Quantas vezes a ao deve ser repetida?
R. 100 vezes.
Qual condio pode ser utilizada para representar esta repetio?
R. Como a varivel i indica quantas repeties foram executadas,
podemos utiliz-la diretamente. Nossa condio pode ser, por
exemplo, i 100.
9002 Aula 08
13 de abril de 2015
12 / 26
Construo Enquanto-Faa
Vamos refletir novamente sobre problema de imprimir os nmeros inteiros
entre 1 e 100.
Qual ao deve ser executada?
R: Impresso dos nmeros 1, 2, 3, ... 100
Ideia: Utilizar uma varivel, por exemplo, i para representar os
nmeros. Iniciar i com valor 1. Incrementar i repetidamente.
Quantas vezes a ao deve ser repetida?
R. 100 vezes.
Qual condio pode ser utilizada para representar esta repetio?
R. Como a varivel i indica quantas repeties foram executadas,
podemos utiliz-la diretamente. Nossa condio pode ser, por
exemplo, i 100.
9002 Aula 08
13 de abril de 2015
12 / 26
Construo Enquanto-Faa
Vamos refletir novamente sobre problema de imprimir os nmeros inteiros
entre 1 e 100.
Qual ao deve ser executada?
R: Impresso dos nmeros 1, 2, 3, ... 100
Ideia: Utilizar uma varivel, por exemplo, i para representar os
nmeros. Iniciar i com valor 1. Incrementar i repetidamente.
Quantas vezes a ao deve ser repetida?
R. 100 vezes.
Qual condio pode ser utilizada para representar esta repetio?
R. Como a varivel i indica quantas repeties foram executadas,
podemos utiliz-la diretamente. Nossa condio pode ser, por
exemplo, i 100.
9002 Aula 08
13 de abril de 2015
12 / 26
Construo Enquanto-Faa
Vamos refletir novamente sobre problema de imprimir os nmeros inteiros
entre 1 e 100.
Qual ao deve ser executada?
R: Impresso dos nmeros 1, 2, 3, ... 100
Ideia: Utilizar uma varivel, por exemplo, i para representar os
nmeros. Iniciar i com valor 1. Incrementar i repetidamente.
Quantas vezes a ao deve ser repetida?
R. 100 vezes.
Qual condio pode ser utilizada para representar esta repetio?
R. Como a varivel i indica quantas repeties foram executadas,
podemos utiliz-la diretamente. Nossa condio pode ser, por
exemplo, i 100.
9002 Aula 08
13 de abril de 2015
12 / 26
Construo Enquanto-Faa
Fig. 3 - Fluxograma.
IEng - UFMT (2015/1)
9002 Aula 08
13 de abril de 2015
13 / 26
Comando while
O comando while utilizado para executar um bloco de comandos
enquando uma condio for satisfeita
Sintaxe do while
while (condicao) {
ao;
}
Funcionamento:
Passo 1: Testa condio:
Se condio for verdadeira, executa o Passo 2.
Se condio for falsa, executa o Passo 4 (pula o bloco de
comandos).
Passo 2: Executa o bloco de comandos.
Passo 3: Volta para o Passo 1.
Passo 4: Executa os comandos fora do bloco repetitivo.
IEng - UFMT (2015/1)
9002 Aula 08
13 de abril de 2015
14 / 26
Comando while
O comando while utilizado para executar um bloco de comandos
enquando uma condio for satisfeita
Sintaxe do while
while (condicao) {
ao;
}
Funcionamento:
Passo 1: Testa condio:
Se condio for verdadeira, executa o Passo 2.
Se condio for falsa, executa o Passo 4 (pula o bloco de
comandos).
Passo 2: Executa o bloco de comandos.
Passo 3: Volta para o Passo 1.
Passo 4: Executa os comandos fora do bloco repetitivo.
IEng - UFMT (2015/1)
9002 Aula 08
13 de abril de 2015
14 / 26
...
i = 1;
while(i <= 100) {
printf(%d, i);
i = i + 1;
}
...
9002 Aula 08
13 de abril de 2015
15 / 26
...
i = 1;
while(i <= 100) {
printf(%d, i);
i = i + 1;
}
...
9002 Aula 08
13 de abril de 2015
15 / 26
9002 Aula 08
13 de abril de 2015
16 / 26
int i = 1, n;
scanf("%d", &n);
while (i <= n) {
printf("%d ", i);
i++;
}
9002 Aula 08
13 de abril de 2015
17 / 26
Exerccio
Exerccio
Calcule a diviso inteira de dois numeros positivos usando apenas soma e
subtrao.
9002 Aula 08
13 de abril de 2015
18 / 26
Soluo em C
...
scanf("%d %d", ÷ndo, &divisor);
contador = 0;
while (dividendo >= divisor) {
dividendo = dividendo - divisor;
contador++;
}
...
9002 Aula 08
13 de abril de 2015
19 / 26
Simulando cdigo
Bem simples: Existem apenas 2 passos.
I
I
9002 Aula 08
13 de abril de 2015
20 / 26
Simulando
...
scanf("%d %d", ÷ndo, &divisor); /*1*/
contador = 0; /*2*/
while (dividendo >= divisor) { /*3*/
dividendo = dividendo - divisor; /*3.1*/
contador++; /*3.2*/
}
...
9002 Aula 08
13 de abril de 2015
21 / 26
Simulando
...
scanf("%d %d", ÷ndo, &divisor); /*1*/
contador = 0; /*2*/
while (dividendo >= divisor) { /*3*/
dividendo = dividendo - divisor; /*3.1*/
contador++; /*3.2*/
}
...
9002 Aula 08
13 de abril de 2015
21 / 26
Simulando
...
scanf("%d %d", ÷ndo, &divisor); /*1*/
contador = 0; /*2*/
while (dividendo >= divisor) { /*3*/
dividendo = dividendo - divisor; /*3.1*/
contador++; /*3.2*/
}
...
9002 Aula 08
inteiro positivo
contador
?
13 de abril de 2015
21 / 26
Simulando
...
scanf("%d %d", ÷ndo, &divisor); /*1*/
contador = 0; /*2*/
while (dividendo >= divisor) { /*3*/
dividendo = dividendo - divisor; /*3.1*/
contador++; /*3.2*/
}
...
9002 Aula 08
inteiro positivo
contador
0
13 de abril de 2015
21 / 26
Simulando
...
scanf("%d %d", ÷ndo, &divisor); /*1*/
contador = 0; /*2*/
while (dividendo >= divisor) { /*3*/
dividendo = dividendo - divisor; /*3.1*/
contador++; /*3.2*/
}
...
inteiro positivo
divisor
7
9002 Aula 08
inteiro positivo
contador
0
13 de abril de 2015
21 / 26
Simulando
...
scanf("%d %d", ÷ndo, &divisor); /*1*/
contador = 0; /*2*/
while (dividendo >= divisor) { /*3*/
dividendo = dividendo - divisor; /*3.1*/
contador++; /*3.2*/
}
...
inteiro positivo
divisor
7
9002 Aula 08
inteiro positivo
contador
1
13 de abril de 2015
21 / 26
Simulando
...
scanf("%d %d", ÷ndo, &divisor); /*1*/
contador = 0; /*2*/
while (dividendo >= divisor) { /*3*/
dividendo = dividendo - divisor; /*3.1*/
contador++; /*3.2*/
}
...
inteiro positivo
divisor
7
9002 Aula 08
inteiro positivo
contador
1
13 de abril de 2015
21 / 26
Simulando
...
scanf("%d %d", ÷ndo, &divisor); /*1*/
contador = 0; /*2*/
while (dividendo >= divisor) { /*3*/
dividendo = dividendo - divisor; /*3.1*/
contador++; /*3.2*/
}
...
inteiro positivo
divisor
7
9002 Aula 08
inteiro positivo
contador
2
13 de abril de 2015
21 / 26
Simulando
...
scanf("%d %d", ÷ndo, &divisor); /*1*/
contador = 0; /*2*/
while (dividendo >= divisor) { /*3*/
dividendo = dividendo - divisor; /*3.1*/
contador++; /*3.2*/
}
...
inteiro positivo
divisor
7
9002 Aula 08
inteiro positivo
contador
2
13 de abril de 2015
21 / 26
Simulando
...
scanf("%d %d", ÷ndo, &divisor); /*1*/
contador = 0; /*2*/
while (dividendo >= divisor) { /*3*/
dividendo = dividendo - divisor; /*3.1*/
contador++; /*3.2*/
}
...
inteiro positivo
divisor
7
9002 Aula 08
inteiro positivo
contador
3
13 de abril de 2015
21 / 26
Simulando cdigo
Simule o algoritmo para dividendo igual 35 e divisor igual 6.
9002 Aula 08
13 de abril de 2015
22 / 26
Soluo em C (completo)
#include <stdio.h>
int main() {
int dividendo, divisor, contador;
// l dividendo e divisor
scanf("%d %d", ÷ndo, &divisor);
// realiza a diviso
contador = 0;
while (dividendo >= divisor) {
dividendo = dividendo - divisor;
contador++;
}
// mostra resultado da diviso
printf("%d\n", contador);
return 0;
}
IEng - UFMT (2015/1)
9002 Aula 08
13 de abril de 2015
23 / 26
9002 Aula 08
13 de abril de 2015
24 / 26
9002 Aula 08
13 de abril de 2015
24 / 26
9002 Aula 08
13 de abril de 2015
24 / 26
Exerccio
i=1
2
9002 Aula 08
13 de abril de 2015
25 / 26
Para-Faa - for
Repita-At - do...while
9002 Aula 08
13 de abril de 2015
26 / 26