Buscar

Aula09_Estruturas de controle_while

Prévia do material em texto

Universidade Federal da Grande Dourados
Faculdade de Ciências Exatas e de Tecnologias
Curso de Bacharelado em Sistemas de Informação
Algoritmos e programação
Comandos while e do...while
Profª Janne Oeiras Lachi
1
Plano de aula
` Estrutura de repetição na Linguagem C:
` Comando while
` Comando do...while
Laço de repetição condicional pré-teste
` Em Português estruturado usa os comandos:
enquanto, faça e fim_enquanto
` Sintaxe do comando:
enquanto (<condição>) faça
comando 1
comando 2
...
comando n
fim_enquanto
Exemplo 1
` Escreva um algoritmo que leia dois números inteiros. Enquanto o primeiro número for 
menor que o segundo, incremente o primeiro com 2 unidades e o segundo número com 1 
unidade. Ao término do algoritmo, imprima os novos valores dos números.
programa novo_valor
var
x, y: inteiro
início
escreva “Informe dois numeros inteiros: ”
leia x, y
enquanto (x < y) faça
x Å x +2
y Å y + 1
fim_enquanto
escreva “O novo valor de x eh: ”, x 
escreva “O novo valor de y eh: ”, y
fim
Exemplo 1: execução da repetição com o 
comando enquanto
Simulação:Exemplo:
x ← 1
y ← 5
enquanto (x < y) faça
x ← x + 2
y ← y + 1
fim_enquanto
x y condição
.v.
.v.
.v.
.v.
1 5
3 6
5 7
7 8
9 9 .f.
Valores iniciais
Valores 
obtidos 
dentro do 
enquanto
Valores informados pelo 
usuário
A saída do algoritmo neste caso vai ser:
O novo valor de x eh: 9
O novo valor de y eh: 9
Comando while: sintaxe
while (condição)
comando;
while (condição)
{
comando1;
comando2;
...
}
Quando você tiver 1 comando 
dentro do bloco.
Quando você tiver mais de 1 
comando dentro do bloco, não 
esqueça de usar as chaves
para delimitar o bloco.
Comando while: atenção!
while (condição)
comando;
while (condição)
{
comando1;
comando2;
...
}
Não existe ; após a condição
Exemplo 1
` Escreva um algoritmo que leia dois números inteiros. Enquanto o primeiro número for 
menor que o segundo, incremente o primeiro com 2 unidades e o segundo número com 1 
unidade. Ao término do algoritmo, imprima os novos valores dos números.
programa novo_valor
var
x, y: inteiro
início
escreva “Informe dois numeros inteiros: ”
leia x, y
enquanto (x < y) faça
x Å x +2
y Å y + 1
fim_enquanto
escreva “O novo valor de x eh: ”, x 
escreva “O novo valor de y eh: ”, y
fim
Exemplo 1: código em Linguagem C
` Escreva um algoritmo que leia dois números inteiros. Enquanto o primeiro número for 
menor que o segundo, incremente o primeiro com 2 unidades e o segundo número com 1 
unidade. Ao término do algoritmo, imprima os novos valores dos números.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int x, y;
printf("Informe dois numeros inteiros: ");
scanf("%d%d", &x, &y);
while (x < y) 
{
x = x +2;
y = y + 1;
}
printf(“\nO novo valor de x eh:%d", x); 
printf(“\nO novo valor de y eh:%d", y);
system("pause"); 
return 0;
}
Note que o bloco do while possui 2 comandos 
dentro dele. Por essa razão precisamos de { e }
enquanto (x < y) faça
x Å x +2
y Å y + 1
fim_enquanto
Exemplo 2
` Elaborar um algoritmo que receba como entrada um 
número inteiro qualquer, em seguida multiplique o valor 
de entrada por 3 e apresente o resultado. Realizar a 
execução dos passos anteriores cinco vezes.
Exemplo 2: solução com o “para”
` Elaborar um algoritmo que receba como entrada um número inteiro 
qualquer, em seguida multiplique o valor de entrada por 3 e apresente o 
resultado. Realizar a execução dos passos anteriores cinco vezes.
programa MULT_3
var
N, R, I : inteiro
início
para I de 1 até 5 passo 1 faça
escreva “Informe um número inteiro:”
leia N
R Å N * 3
escreva R
fim_para
fim
Exemplo 2: solução com “enquanto”
programa MULT_3
var
N, R, I : inteiro
início
I Å 1
enquanto (I <=5) faça
escreva “Informe um número inteiro:”
leia N
R Å N * 3
escreva R
I Å I + 1
fim_enquanto
fim
` Note que podemos resolver este problema também com o comando 
enquanto ... fim_enquanto
Observe que neste caso é necessário 
inicializar a variável I que controla o laço 
e incrementá-la explicitamente dentro do 
laço.
Exemplo 2: código em Linguagem C
` Elaborar um algoritmo que receba como entrada um número inteiro qualquer, em seguida 
multiplique o valor de entrada por 3 e apresente o resultado. Realizar a execução dos passos 
anteriores cinco vezes.
programa MULT_3
var
N, R, I : inteiro
início
I Å 1
enquanto (I <= 5) faça
escreva “Informe um número
inteiro:”
leia N
R Å N * 3
escreva R
I Å I +1
fim_enquanto
fim
#include <stdio.h>
int main()
{
int N, R, I;
I = 1;
while (I <= 5)
{
printf(“Informe um número inteiro:”);
scanf(“%d”, &N);
R = N * 3;
printf(“%d”, R); 
I = I +1;
}
return 0;
}
Exemplo 3
O teste condicional 
avaliará os valores 0, 1, 
2, 3, 4 e 5.
x = 0;
while (x != 5)
{
printf(“Valor de x = %d\n”,x);
x = x + 1;
}
printf(“Valor de x depois de sair
da estrutura =%d\n”,x);
Note que a variável de controle do laço 
geralmente é alterada de modo que em 
algum momento a repetição chegue ao fim.
Saída do programa:
Valor de x = 0
Valor de x = 1
Valor de x = 2
Valor de x = 3
Valor de x = 4
Valor de x depois de sair da estrutura = 5
Exemplo 3
` Elaborar um algoritmo que receba como entrada um número inteiro 
qualquer, em seguida multiplique o valor de entrada por 3 e 
apresente o resultado. Ao final da apresentação do resultado o 
programa deve perguntar ao usuário se ele deseja inserir um novo 
número e fazer novamente o cálculo.
Exemplo 3: solução em Port. estruturado
` Elaborar um algoritmo que receba como entrada um número inteiro qualquer, em seguida multiplique o 
valor de entrada por 3 e apresente o resultado. Ao final da apresentação do resultado o programa deve 
perguntar ao usuário se ele deseja inserir um novo número e fazer novamente o cálculo.
programa MULT_user
var
N, R : inteiro
RESP : caractere
início
RESP Å “S”
enquanto (RESP = “S” .ou. RESP = “s”) faça
escreva “Informe um número inteiro:”
leia N
R Å N * 3
escreva R
escreva “Deseja continuar (S ou N)?”
leia RESP
fim_enquanto
fim Em se tratando do comando ENQUANTO, você não pode esquecer de pensar em qual será o 
valor inicial da variável que controla o laço (neste 
caso RESP)
Exemplo 3
` Elaborar um algoritmo que receba como entrada um número inteiro qualquer, em seguida 
multiplique o valor de entrada por 3 e apresente o resultado. Ao final da apresentação do 
resultado o programa deve perguntar ao usuário se ele deseja novo cálculo.
#include <stdio.h>
int main()
{
int N, R;
char RESP;
RESP = 'S';
while (RESP == 'S' || RESP == 's')
{
printf("\nInforme um número inteiro:");
scanf("%d", &N);
R = N * 3;
printf("\n%d", R);
fflush(stdin);
printf("\nDeseja continuar (S/N)?");
scanf("%c", &RESP);
}
return 0;
}
Exemplo 3
` Elaborar um algoritmo que receba como entrada um número inteiro qualquer, em seguida 
multiplique o valor de entrada por 3 e apresente o resultado. Ao final da apresentação do 
resultado o programa deve perguntar ao usuário se ele deseja novo cálculo.
#include <stdio.h>
#include <ctype.h>
int main()
{
int N, R;
char RESP;
RESP = 'S';
while (toupper(RESP) == 'S')
{
printf("\nInforme um número inteiro:");
scanf("%d", &N);
R = N * 3;
printf("\n%d", R);
fflush(stdin);
printf("\nDeseja continuar (S/N)?");
scanf("%c", &RESP);
}
return 0;
}
Exemplo 4
` Faça um algoritmo que receba números e imprima o dobro 
de cada número. A execução do algoritmo termina quando 
o usuário entrar com o número 0 (zero).
` Neste caso, qual o tipo de repetição você usaria?
` Comando para ... fim_para
` Comando enquanto ... fim_enquantoExemplo 4: uma possível solução
` Faça um algoritmo que receba números e imprima o dobro de cada 
número. A execução do algoritmo termina quando o usuário entrar 
com o número 0 (zero).
programa DOBRO
var 
num : realinícioescreva “Entre com um número ou 0 para terminar: ”leia numenquanto (num <> 0) façaescreva num*2escreva “Entre com um número ou 0 para terminar: ”leia numfim_enquantofim
Exemplo 4: código em Linguagem C
` Faça um algoritmo que receba números e imprima o dobro de cada 
número. A execução do algoritmo termina quando o usuário entrar 
com o número 0 (zero).
#include <stdio.h>
int main()
{
float num;
printf("\nEntre com um número ou 0 para terminar: ");
scanf("%f", &num);
while(num != 0)
{
printf("O dobro eh: %.2f", num*2);
printf("\nEntre com um número ou 0 para terminar: ");
scanf("%f", &num);
}
system("pause");
return 0;
}
Exercício 1
` Converta o algoritmo abaixo para um programa em Linguagem C.
O algoritmo recebe números enquanto forem positivos e imprime 
quantos números positivos foram digitados. 
programa POSITIVOS
var 
num, qtde : real
início
qtde ← 0escreva “Entre com um número positivo: ”leia numenquanto (num > 0) faça
qtde ← qtde +1 escreva “Entre com um número positivo: ”leia numfim_enquanto
escreva “A quantidade de números positivos digitados foi”, qtdefim
Exercício 1: resolução em Linguagem C
#include <stdio.h>
int main()
{
float num;
int qtde = 0;
printf("\nEntre com um número positivo: ");
scanf("%f", &num);
while (num > 0)
{
qtde = qtde + 1;
printf("\nEntre com um número positivo: ");
scanf("%f", &num);
}
printf("\nA quantidade de números digitados foi: %d", qtde);
return 0;
}
Exercício 2
` Transforme o algoritmo abaixo para um programa na Linguagem C.
programa FEMININO
var 
num_fem : inteiro
sexo : caractereinícioescreva “Entre com o sexo (F ou M) ou outra letra para 
sair: ”leia sexo
num_fem ← 0enquanto (sexo = “F” .ou. sexo = “M”) faça
se sexo = “F” então
num_fem ← num_fem +1 fim_seescreva “Entre com o sexo (F ou M) ou outra letra 
para sair: ”leia sexofim_enquanto
escreva “A quantidade de mulheres foi ”, num_femfim
Exercício 2: resolução
#include <stdio.h>
#include <ctype.h>
int main()
{
int num_fem;
char sexo;
printf("\nEntre com o sexo (F ou M) ou outra letra para sair: ");
scanf("%c", &sexo);
num_fem = 0;
while (toupper(sexo) == 'F' || toupper(sexo) == 'M')
{
printf("\n sexo: %c", sexo);
if (toupper(sexo) == 'F')
num_fem++;
fflush(stdin);
printf("\nEntre com o sexo (F ou M) ou outra letra para sair: ");
scanf("%c", &sexo);
}
printf("\nA quantidade de mulheres foi: %d", num_fem);
return 0;
}
Laço de repetição condicional pós-teste
` Em Português estruturado usa os comandos:
continua ... enquanto_for
` Sintaxe do comando:
continua
comando 1
comando 2
...
comando n
enquanto_for (<condição>)
Comando continua ... enquanto_for
` Estrutura de repetição para número indefinido de 
repetições
` Utilizada quando não se sabe o número de vezes que um 
trecho do algoritmo deve ser repetido.
` Embora também possa ser utilizada quando se conhece esse 
número.
` Estrutura com teste no final
` Baseia-se na análise de uma condição, ou seja, a repetição será
feita enquanto a condição for verdadeira.
` Quando o teste condicional resultar em valor falso, os 
comandos dentro do bloco de repetição não serão executados.
` A diferença entre a estrutura enquanto e a estrutura 
continua-enquanto_for é que nesta última, os comandos 
são repetidos pelo menos uma vez, já que a condição de 
parada se encontra no final.
Comando do ... while: sintaxe
do
comando;
while (condição);
do
{
comando1;
comando2;
...
}
while (condição);
Quando você tiver 1 comando 
dentro do bloco.
Quando você tiver mais de 1 
comando dentro do bloco, não 
esqueça de usar as chaves 
para delimitar o bloco.
Comando do ... while: sintaxe
do
comando;
while (condição);
do
{
comando1;
comando2;
...
}
while (condição);
Note que em ambos os casos 
EXISTE o ; no final
Exemplo 1
` Elaborar um algoritmo que receba um valor numérico inteiro qualquer. Em seguida 
calcule o valor de entrada, multiplicando-o por 3 e apresente o resultado dessa 
operação. Após mostrar o resultado, o algoritmo deve perguntar se o usuário 
deseja um novo cálculo. 
programa mult_3
var
num: inteiro
resp: caractere
início
continua
escreva “Informe um número inteiro:”
leia num
escreva num * 3
escreva “Deseja continuar calculando (S ou N)?”
leia resp
enquanto_for (resp = “S” .ou. resp = “s”)
fim
Exemplo 1: em Linguagem C
` Elaborar um algoritmo que receba como entrada um número inteiro qualquer, em seguida 
multiplique o valor de entrada por 3 e apresente o resultado. Ao final da apresentação do 
resultado o programa deve perguntar ao usuário se ele deseja novo cálculo.
#include <stdio.h>
#include <ctype.h>
int main()
{
int N, R;
char RESP;
do
{
printf("\nInforme um número inteiro:");
scanf("%d", &N);
R = N * 3;
printf("\n%d", R);
fflush(stdin);
printf("\nDeseja continuar (S/N)?");
scanf("%c", &RESP);
} while (toupper(RESP) == 'S');
return 0;
}
Exemplo 2: em Português estruturado
` Elaborar um algoritmo que receba como entrada um 
número inteiro qualquer, em seguida multiplique o 
valor de entrada por 3 e apresente o resultado. 
Realizar a execução dos passos anteriores cinco 
vezes.
` Qual tipo de repetição usar?
` Para
` Enquanto
Exemplo 2: solução com enquanto_for
` Elaborar um algoritmo que receba como entrada um número inteiro 
qualquer, em seguida multiplique o valor de entrada por 3 e apresente o 
resultado. Realizar a execução dos passos anteriores cinco vezes.
programa MULT_3
var
N, R, I : inteiro
início
I Å 1
continua
escreva “Informe um número inteiro:”
leia N
R Å N * 3
escreva R
I Å I +1
enquanto_for (I <=5)
fim
Exemplo 2: em Linguagem C
` Elaborar um algoritmo que receba como entrada um número inteiro 
qualquer, em seguida multiplique o valor de entrada por 3 e apresente o 
resultado. Realizar a execução dos passos anteriores cinco vezes.
#include <stdio.h>
#include <ctype.h>
int main()
{
int N, R, I;
I = 1;
do
{
printf("\nInforme um número inteiro:");
scanf("%d", &N);
R = N * 3;
printf("\n%d", R);
I = I +1;
} while (I <= 5);
return 0;
}
Exercício 1
` Faça um algoritmo para calcular a área de um triângulo, que 
não permita a entrada de dados inválidos, ou seja, medidas 
menores ou iguais a 0. Dica: área = (base x altura) / 2. 
Exercício 1
` Transforme o algoritmo abaixo para um programa na 
Linguagem C.
programa AREA_TRIANGULO
var 
area, base, altura: realiníciocontinua
escreva “Entre com a base do triângulo: ”leia baseenquanto_for (base <= 0)
continua
escreva “Entre com a altura do triângulo: ”leia alturaenquanto_for (altura <= 0)
area ← (base * altura) / 2
escreva “Medida da área é:”, area
fim
Exercício 1: resolução
#include <stdio.h>
int main()
{
float base, altura, area;
do
{
printf("\nEntre com a base do triangulo: ");
scanf("%f",&base);
}while(base <= 0);
do
{
printf("\nEntre com a altura do triangulo: ");
scanf("%f",&altura);
}while(altura <= 0);
area = (base * altura)/2;
printf("\nArea = %.2f", area);
return 0;
}
Exercício 2
` Converta o algoritmo abaixo para um programa em linguagem C. O 
algoritmo calcula e imprime o valor de bn. O valor de n deverá ser maior 
do que 1 e inteiro e o valor de b maior ou igual a 2 e inteiro .
programa B_N
var 
res, b, n: inteiroiníciocontinua
escreva “Entre com um valor inteiro de b >= 2: ”leia benquanto_for (b < 2)
continua
escreva “Entre com um valor inteiro de n > 1: ”leia nenquanto_for (n <= 1)
res ← b ↑ n
escreva“O valor final é:”, res
fim
Exercício 3
` Considere os seguintes valores: 2, 9, 47, -7, -11, -49, 47, 30, 100, -100, 
-120, -47, 14, 114, 13. 
Quantos números serão impressos? 
a) 8 números 
b) 9 números 
c) 7 números 
d) 15 números 
e) 6 números 
(Observe que nem todos os números 
precisam ser lidos.) 
programa E3 
var
A: inteiro
inicio
leia A 
enquanto (A ≤ 100) faça 
se (A > -10) 
escreva A 
leia A 
fim_enquanto
fim
Exercício 4
` Considere os seguintes valores: 2, 9, 47, -7, -11, -49, 47, 30, 100, -100, 
-120, -47, 14, 114, 13. 
Quantos números serão impressos? 
a) 8 números 
b) 9 números 
c) 7 números 
d) 15 números 
e) 6 números 
(Observe que nem todos os números 
precisam ser lidos.) 
programa E3 
var
A: inteiro
inicio
continua
leia A 
se (A > -10) 
escreva A 
enquanto_for (A ≤ 100) 
fim
Exercício 5
` Analise o programa em C a seguir e indique qual será a saída, considerando 
5 como entrada. 
Referências
` Algoritmos – Fundamento e Prática. Everton Coimbra de 
Araújo. Florianópolis: Visual Book, 2007.
` Algoritmos - Lógica para desenvolvimento de programação de 
computadores. José Augusto N. G. Manzano, Jayr Figueiredo 
de Oliveira. São Paulo: Érica, 2006.
` Victorine Viviane Mizrahi. Treinamento em linguagem C. 
São Paulo: Pearson Prentice Hall, 2008. 
` Ricardo Sonaglio Albano e Silvie Guedes Albano. Programação 
em Linguagem C. Rio de Janeiro; Editora Ciência Moderna, 
2010.
42
	Algoritmos e programação
	Plano de aula
	Laço de repetição condicional pré-teste
	Exemplo 1
	Exemplo 1: execução da repetição com o comando enquanto
	Comando while: sintaxe
	Comando while: atenção!
	Exemplo 1
	Exemplo 1: código em Linguagem C
	Exemplo 2
	Exemplo 2: solução com o “para”
	Exemplo 2: solução com “enquanto”
	Exemplo 2: código em Linguagem C
	Exemplo 3
	Exemplo 3
	Exemplo 3: solução em Port. estruturado
	Exemplo 3
	Exemplo 3
	Exemplo 4
	Exemplo 4: uma possível solução
	Exemplo 4: código em Linguagem C
	Exercício 1
	Exercício 1: resolução em Linguagem C
	Exercício 2
	Exercício 2: resolução
	Laço de repetição condicional pós-teste
	Comando continua ... enquanto_for
	Comando do ... while: sintaxe
	Comando do ... while: sintaxe
	Exemplo 1
	Exemplo 1: em Linguagem C
	Exemplo 2: em Português estruturado
	Exemplo 2: solução com enquanto_for
	Exemplo 2: em Linguagem C
	Exercício 1
	Exercício 1
	Exercício 1: resolução
	Exercício 2
	Exercício 3
	Exercício 4
	Exercício 5
	Referências

Continue navegando