Buscar

Prog-1 - 04 - Estruturas_de_Selecao

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 9 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 9 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 9 páginas

Prévia do material em texto

1
Estruturas de Seleção
Programação I
2
Estruturas de Seleção
� Existem situações em que desejamos que nem todos os 
comandos incluídos em um algoritmo sejam executados.
� Nestas situações, ensinamos o computador a tomar 
decisões, optando ou não por executar determinados 
comandos.
� Como os computadores não tomam decisões sozinhos, 
devemos instruí-lo a seguir um determinado caminho no 
algoritmo.
� Para isto é necessário o teste do resultado de uma expressão 
lógica.
3
Comando SE
� Estrutura de decisão básica em algoritmos
� Sintaxe:
se <expr_lógica> então <comandoV>;
se <expr_lógica> então <comandoV> senão <comandoF>;
ou
Apenas um dos dois
comandos é executado
ComandoV é executado 
se expr_lógica avaliar
para Verdadeiro
4
Comando SE em C/C++ e Java
(simples)
if (condição) // onde condição pode ser uma expressão 
Comando1;
Ou em caso de mais de um comando
if (condição) // onde condição pode ser uma expressão 
{
Comando1;
Comando2;
...
}
5
Comando SE em C/C++ e Java
(composta)
if (condição) // onde condição pode ser uma expressão
Comando1;
else // caso a condição anterior não seja satisfeita
Comando2;
6
Comando SE em C/C++ e Java
(composta)
Em caso de mais de um comando
if (condição) // onde condição pode ser uma expressão
{
Comando1;
Comando2;
}
else // caso a condição anterior não seja satisfeita
{
Comando3;
Comando4;
}
2
7
Exemplo SE em C/C++
if (x >= y) 
{
cout << “X é maior ou igual a Y.”; 
}
else
{ 
cout << “X é menor que Y.”;
}
8
Exemplo SE em Java
if (x >= y) 
{
System.out.println(“X é maior ou igual a Y.”); 
}
else
{ 
System.out.println(“X é menor que Y.”);
}
9
Comando SE
� Exemplo:
� Ler a idade de uma pessoa e imprimir a mensagem “Você é 
maior de idade” se ela tiver 18 anos ou mais.
� Solução
� Aplicação simples do comando SE.
� Única entrada é a idade de uma pessoa, que será armazenada 
numa variável inteira.
� Não é possível resolver este problema utilizando apenas 
seqüenciação.
10
Comando SE
� Solução (cont.)
� O algoritmo fica assim:
Variáveis
idade : inteiro;
Início
escrever “Forneça a idade: “;
ler idade;
se idade >= 18 então
escrever “Você é maior de idade”;
Fim
11
Comando SE
�Converta o algoritmo anterior 
para um programa em C/C++ e 
tente executá-lo.
12
Exemplo SE em C/C++
#include <iostream>
using namespace std;
int main()
{
// declaração de variáveis
int idade=0;
cout << "Forneça a idade: ";
cin >> idade;
if (idade >=18)
cout << "Você é maior de idade.";
return 0;
}
3
13
Exemplo SE em Java
public static void main(String[] args) {
// declaração de variáveis
int idade=0;
System.out.println(“Forneça a idade:");
idade=leia(idade);
if (idade >=18)
System.out.println(“Você é maior de idade.”);
}
14
Comando SE com SENÃO
� Modifique o programa anterior. Ele agora deverá:
� Ler a idade de uma pessoa e imprimir a mensagem “Você é 
maior de idade” se ela tiver 18 anos ou mais, ou “Você é menor 
de idade” caso contrário.
15
Comando SE
� Solução (cont.)
� O algoritmo fica assim:
Variáveis
idade : inteiro;
Início
escrever “Forneça a idade: “;
ler idade;
se idade >= 18 então
escrever “Você é maior de idade”
senão
escrever “Você é menor de idade”;
Fim
16
Exemplo SE com SENÃO em C/C++
#include <iostream>
using namespace std;
int main()
{
int idade=0;
cout << "Forneça a idade: ";
cin >> idade;
if (idade >=18)
cout << "Você é maior de idade.";
else
cout << "Você é menor de idade.";
return 0;
}
17
Exemplo SE com SENÃO em Java
public static void main(String[] args) {
// declaração de variáveis
int idade=0;
System.out.println(“Forneça a idade:");
idade=leia(idade);
if (idade >=18)
System.out.println(“Você é maior de idade.”);
else
System.out.println(“Você é menor de idade.”);
}
18
Comando SE
� Exercício:
� Faça um programa em Java que leia um número inteiro 
informado pelo usuário e diga se ele é par ou ímpar.
� Sugestão: Use o % (resto da divisão inteira) para saber se o 
número é par ou ímpar.
4
19
Comando SE
� Exemplo 3:
� Ler um número inteiro e dizer se ele é par ou ímpar.
� Solução
Variáveis
numero : inteiro;
Início
escrever “Forneça o número: “;
ler numero;
se (numero % 2) = 0 então
escrever “O número é par”
senão
escrever “O número é ímpar”;
Fim
20
Solução em C/C++
#include <iostream>
using namespace std;
int main()
{
int numero=0;
cout << "Forneça o número: ";
cin >> numero;
if (numero % 2 == 0)
cout << "O número é par.";
else
cout << "O número é ímpar.";
return 0;
}
21
Solução em JAVA
public static void main(String[] args) {
// declaração de variáveis
int numero=0;
System.out.println(“Forneça o número:");
numero=leia(numero);
if (numero %2 == 0)
System.out.println(“O número é par.”);
else
System.out.println(“O número é ímpar.”);
}
22
Comando SE
� Exercícios
� Ler um número inteiro e dizer se ele é par e divisível 
por 3.
� Ler o preço de dois produtos e imprimir qual é o maior. 
Desconsidere empates.
� Imprimir se um número X é divisível por um número Y.
23
Testes encadeados
� Em determinadas situações é necessária a realização 
de testes dentro de outros testes.
� Normalmente esta necessidade surge da combinação 
de decisões a serem tomadas.
� Este tipo de estrutura é chamado de encadeamento ou 
aninhamento.
� Quando ocorre um encadeamento de testes, o algoritmo 
possui um comando de decisão dentro de outro.
� Este comando mais interno pode estar localizado junto ao 
ENTÃO ou junto ao SENÃO.
24
Testes encadeados
� Exemplos de encadeamento
se A > B então
se K > M então
C <- K
senão
C <- M;
...
se X < Y então
S <- X + Y
senão
se X < A + B
A <- C;
senão
B <- C;
5
25
Instruções de seleção
� Problema do else oscilante
if (x > 5)
if (y > 5)
cout << "x e y são > 5";
else
cout << "x é <= 5";
Não é o que
parece
26
Instruções de seleção
� Problema do else oscilante (cont.)
if (x > 5) {
if (y > 5)
cout << "x e y são > 5";
} else
cout << "x é <= 5";
Agora sim
27
Instruções de seleção
� Cuidado com blocos
if (nota >= 7)
cout << "Aprovado";
else
cout << “Prova final necessária";
cout << “Verificar data na secretaria";
Não funciona
como deveria
{
}
Agora
está
correto
28
Testes encadeados
� Exemplo 4:
� Um quiosque de sorvetes vende casquinhas somente nos 
sabores Chocolate (letra ‘C’) e Morango (letra ‘M’), não 
permitindo misturar os sabores num mesmo sorvete. Faça um 
algoritmo para imprimir uma mensagem nas seguintes 
situações:
� Sorvete de chocolate com mais de três bolas: “desconto de 10%”;
� Sorvete de chocolate com qualquer quantidade de bolas: “desconto 
de 5%”;
� Sorvete de morango com qualquer quantidade de bolas: “sorvete 
sem desconto”.
29
Testes encadeados
� Para imprimir a mensagem correta, o algoritmo precisa 
saber dois dados: o sabor do sorvete e a quantidade de 
bolas.
� Imprimir a mensagem correta requer testar as variáveis 
de entrada.
30
Testes encadeados
� Solução (cont.)
� O corpo do algoritmo ficaria assim:
Variáveis
sabor : caractere;
bolas : inteiro;
Início
escreva “Entre com o sabor (C ou M): “;
ler sabor;
escreva “Entre com a quantidade de bolas: ”;
ler bolas;
se sabor = ‘C’ então
se bolas > 3 então
escreva “Desconto de 10%”
senão
escreva “Desconto de 5%”;
senão
escreva “Sorvete sem desconto”;
Fim
6
31
Testes encadeados
� Exercícios
� Fazer um algoritmo para ler as três notas de um aluno em uma 
disciplina, e depois imprimir a média aritmética das notas e a 
situação do aluno, a partir das seguintes regras:
� Média >= 7.0 – Aprovado;
� 4 <= Média < 7 – Prova Final;
� Média < 4 – Reprovado.
� Um casal possui três filhos: Marquinhos, Zezinho e Luluzinha. 
Faça um algoritmo para ler as idades dos filhos e exibir quem é 
o caçula da família; suponha que não haja empates.
� Faça um algoritmo para ler as coordenadas de um ponto (x, y)do 
plano cartesiano, e exibir uma mensagem dizendo se pertence 
ao eixo X, ao eixo Y, à origem ou a nenhuma das situações.
32
Comando CASO
� O comando caso é útil em situações onde há necessidade de se 
testar uma mesma variável (ouexpressão) que possa conter 
diversos valores
� Cada valor exige a execução de comandos diferentes.
� Uma expressão é comparada a diversos valores de acordo com a 
ordem definida.
� Ao encontrar uma ocorrência do valor correto, o comando relativo é 
executado e o algoritmo segue para o fim do CASO.
� Se nenhum dos valores for igual ao conteúdo da variável, poderá 
ser executado um outro comando através do complemento SENÃO.
33
Comando CASO
� Sintaxe:
caso <var ou expr> seja
<valor1> : <comando1>;
<valor2> : <comando2>;
<valor3> : <comando3>;
.
.
.
<valorN> : <comandoN>;
senão <comandoF>;
fimcaso;
34
Comando CASO em C/C++ e Java
A sintaxe do switch é:
switch (expressão){
case constante1:
expressões;
break;
case constante2:
expressões;
break;
default:
expressões;}
35
Comando CASO
� Exemplo:
� Dado o número de matrícula de um sócio do clube Boa Social, 
fornecido pelo usuário, faça um algoritmo que imprima o mês de 
pagamento da anuidade, de acordo com as condições abaixo.
� Final 0 – Pagamento em Janeiro;
� Final 1 – Pagamento em Fevereiro;
� Final 2 – Pagamento em Março;
� Final 3 – Pagamento em Abril;
� Outro final – Pagamento em Maio.
36
Comando CASO
� Solução:
� Teremos que receber o número de matrícula do usuário e 
identificar o último dígito. Para isto podemos utilizar o resto da 
divisão do número de matrícula por 10.
� Utilizar uma estrutura de decisão para imprimir corretamente o 
mês de pagamento da anuidade.
� Podem ser utilizados o comando SE ou o comando CASO.
7
37
Comando CASO
� Solução:
Variáveis
num_matricula, final : inteiro;
Início
escrever “Forneça o número de matrícula: ”;
ler num_matricula;
final <- num_matricula % 10;
caso final seja
0 : escrever “Pagamento em Janeiro”;
1 : escrever “Pagamento em Fevereiro”;
2 : escrever “Pagamento em Março”;
3 : escrever “Pagamento em Abril”;
senão
escrever “Pagamento em Maio”;
fimcaso;
Fim
38
Exemplo switch em C/C++
#include <iostream>
using namespace std;
int main()
{
// declaração de variáveis
int matricula = 0, final_numero =0;
cout << "Forneça o número da matrícula: ";
cin >> matricula;
final_numero = matricula % 10;
switch (final_numero) {
case 0:
cout << "Pagamento em Janeiro.";
break;
39
Exemplo switch em C/C++
case 1:
cout << "Pagamento em Fevereiro.";
break;
case 2:
cout << "Pagamento em Março.";
break;
case 3:
cout << "Pagamento em Abril.";
break;
default:
cout << "Pagamento em Maio.";
break;
}
return 0;
}
40
Exemplo switch em Java
public static void main(String[] args) {
// declaração de variáveis
int matricula = 0, final_numero =0;
System.out.println("Forneça o número da matrícula:");
matricula=leia(matricula);
final_numero = matricula % 10;
switch (final_numero) {
case 0:
System.out.println("Pagamento em Janeiro.");
break;
case 1:
System.out.println("Pagamento em Fevereiro.");
break;
41
Exemplo switch em Java
case 2:
System.out.println("Pagamento em Março.");
break;
case 3:
System.out.println("Pagamento em Abril.");
break;
default:
System.out.println("Pagamento em Maio.");
break;
}
}
42
Comando CASO
� Exemplo:
� Ler o número referente a um dia da semana e imprimir a 
mensagem “dia útil” ou “fim-de-semana”, considerando que 1 = 
domingo, 2 = segunda-feira, etc.
� Solução
� Para este algoritmo, iremos utilizar algumas facilidades providas 
pelo comando CASO.
� Se precisarmos comparar mais de um valor para a execução de um 
determinado comando, podemos separá-los por vírgulas;
� Se quisermos comparar um intervalo de valores, podemos indicá-
los por dois pontos seguidos.
8
43
Comando CASO
� Solução:
Variáveis
cod_dia : inteiro;
Início
escrever “Entre com o código do dia: ”;
ler cod_dia;
caso cod_dia seja
2..6 : escrever “Dia Útil”;
1,7 : escrever “Fim-de-semana”;
senão
escrever “Código inválido”;
fimcaso;
Fim
Incluído caso o
usuário forneça um
dia inválido
44
Exemplo 2 switch em C/C++
#include <iostream>
using namespace std;
int main()
{
// declaração de variáveis
int cod_dia = 0;
cout << "Entre com o código do dia:";
cin >> cod_dia;
switch (cod_dia) {
case 1:
case 7:
cout << "Fim de semana.";
break;
45
Exemplo 2 switch em C/C++
case 2:
case 3:
case 4:
case 5:
case 6:
cout << "Dia útil.";
break;
default:
cout << "Código inválido.";
}
return 0;
}
46
Exemplo 2 switch em Java
public static void main(String[] args) {
// declaração de variáveis
int cod_dia = 0;
System.out.println("Entre com o código do dia:");
cod_dia=leia(cod_dia);
switch (cod_dia) {
case 1:
case 7:
System.out.println("Fim de semana.");
break;
47
Exemplo 2 switch em Java
case 2:
case 3:
case 4:
case 5:
case 6:
System.out.println("Dia útil.");
break;
default:
System.out.println("Código inválido.");
}
}
48
Comando CASO
� Limitações do comando CASO
� Só pode ser usado para comparação de valores diretos e que 
sejam inteiros.
� Não é possível comparar com números fracionários.
� É possível comparar com caracteres, que estarão entre aspas 
simples (ex.: ‘a’, ‘b’, etc.).
� Permite apenas comparações de igualdade, não permitindo as 
demais comparações relacionais (maior que, menor que, etc.).
� Compara apenas uma única variável ou expressão.
9
49
Blocos de comando
� Vimos que nos comandos SE e CASO, um determinado 
comando pode ser executado a depender do valor de 
uma variável.
� Existem situações em que desejaremos executar mais 
de um comando de acordo com o resultado da 
expressão.
� Nestas situações, será necessária a utilização de blocos 
de comandos.
50
Blocos de comando
� Sintaxe:
� Os blocos de comandos são pacotes de comandos que 
podem ser utilizados nos locais em que espera-se um 
único comando.
[[
<comando1>;
<comando2>;
.
.
.
<comandoN>;
]]
51
Blocos de comando em C/C++ e Java
� Sintaxe:
{
<comando1>;
<comando2>;
.
.
.
<comandoN>;
} 
52
Blocos de comando
� Exemplo:
Variáveis
valor1, valor2, divisao : real;
Início
escrever “Entre com o primeiro número: ”;
ler valor1;
escrever “Entre com o segundo número: “;
ler valor2;
se valor2 = 0 então
escrever “Não há como dividir por 0”
senão
divisao <- valor1 / valor2;
escrever “O valor da divisão é ”, divisao;
Fim
Existe algum erro
neste algoritmo?
53
Comando CASO
� Algoritmo correto:
Variáveis
valor1, valor2, divisao : real;
Início
escrever “Entre com o primeiro número: ”;
ler valor1;
escrever “Entre com o segundo número: “;
ler valor2;
se valor2 == 0 então
escrever “Não há como dividir por 0”
senão
[[
divisao = valor1 / valor2;
escrever “O valor da divisão é ”, divisao;
]];
Fim
Dúvidas ?

Outros materiais