Comando Condicional de Seleção
if e Expressões Lógicas
INF01202
Sumário
I
Expressões lógicas
I
Operadores lógicos
I
Precedência de operadores
I
Operadores relacionados
I
Comando condicional if
I
Com um único comando
I
Com múltiplos comandos
I
Exemplo
Motivação
11 INF 01202 – Marcelo Walter – Aula 04
NOVO ASSUNTO:
Operadores lógicos ou booleanos
ü
Expressar em programas decisões lógicas
ü
Analogia com situações do dia-a-dia
ü
Exemplo:
Vou à praia se tiver sol e tiver dinheiro
Vou visitar meu pai se for dia dos pais ou
final de semana
ü
Hoje tem sol. Vou à praia?
ü
Hoje é sábado. Visito meu pai?
E
OU
NÃO
SIM
Expressões lógicas com operadores lógicos
Slide 8Operadores lógicos ou
booleanos
8 F F F F V V F V && F V F V V V F V || V F F V !Em C, as expressões
lógicasretornam um
valor
:
•
0
, se falso;
•
1 ou
outro valor que
não zero
, se verdadeiro.
negação ! unário “ou” || binário “e” && Significado Operador Tipo binário
Cortesia: Prof. Mara Abel 4 / 28
Operadores relacionais
Slide 9
Operadores Relacionais
9
Em C, as expressões relacionais retornam um
valor
:
•
0
, se falso;
•
1 ou
outro valor que
não zero
, se verdadeiro.
O conteúdo de x é maior que o de y
x > y
>
O conteúdo de x é menor que o de y
x < y
<
O conteúdo de x é maior ou igual ao de y
x >= y
>=
O conteúdo de x é menor ou igual ao de y
x <= y
<=
O conteúdo de x é diferente do de yx != y
!=
O conteúdo de x é igual ao de yx == y
==
Comentário Exemplo OperadorExemplos do emprego de operadores relacionais
14 INF 01202 – Marcelo Walter – Aula 04
Operadores Relacionais
A é maior que 10? (a > 10) X é negativo? (x < 0) y é diferente de 10? (y != 10) nota é igual a 5? (nota == 5)Cuidado, aqui usamos dois sinais de igualdade consecutivos
Cortesia: Prof. Marcelo Walter 6 / 28
Mistura de operadores lógicos e relacionais
Slide 10 INF 01202
A expressão lógica em C
Retorna um valor lógico:
– falso: zero;– verdadeiro: 1 (ou qualquer valor diferente de zero).
Operandos podem ser expressões aritméticos ou lógicas,
incluindo operadores aritméticos, relacionais e lógicos.
Exemplos:
(a > b) || (c < d) valor > 10 !(a + c < b) (a == b) (a == b) && (a>=c) (a != b)!((a >= b) || (a+c)) // se resultado da soma 0, considera V!
Sintaxe:
<operando> <operador booleano> <operando> ou
<operando> <operador relacional> <operando>
Vejamos um exemplo prático
/* Programa que calcula algumas expressões lógicas */ #include <stdio.h>
int main() {
int a, b, c, d, valor; //Entrada
a = 1; b = 3; c = 5; d = 7; valor = 9;
int e1, e2, e3, e4, e5, e6, e7; //Saída e1 = (a > b) || (c < d); e2 = valor > 10; e3 = !(a + c < b); e4 = (a == b); e5 = (a == b) && (a>=c); e6 = (a != b); e7 = !((a >= b) || (a+c));
printf("Entradas: a=%d, b=%d, c=%d, d=%d, valor=%d\n", a, b, c, d, valor);
printf("Saídas: e1=%d, e2=%d, e3=%d, e4=%d, e5=%d, e6=%d, e7=%d\n", e1, e2, e3, e4, e5, e6, e7);
return 0;
Cuidados com inspirações da matemática
Slide 11 INF 01202
Expressões lógicas ou relacionais
a) codigo (variável inteira) entre 1 e 100
(valores limites considerados):
(codigo > 0 && codigo < 101)
ou
(codigo >= 1 && codigo <= 100)
(0 < codigo < 101)
Obs: esse trecho de código não gera erro de sintaxe, mas semanticamente não corresponde ao que foi pedido!!
Outros exemplos de misturas lógicas
Slide 12
Expressões lógicas ou
relacionais
12
a) codigo entre 1 e 100 (valores limites
considerados):
(codigo > 0 && codigo < 101)
(0 < codigo < 101)
b) contador maior ou igual a maximo ou valor igual a
procurado:
( contador >= maximo || valor == procurado )
c) valor igual a 1 ou 2 ou entre 5 e 7 (inclusive):
(valor == 1 || valor == 2 || (valor >=5 && valor
<=7))
Cortesia: Prof. Mara Abel 10 / 28
Precedência de operadores lógicos com exemplo
Precedência de operadores
em C
ordem operador 1o ! funções 2o * / % 3o + - 4o < > <= >= 5o == != 6o && 7o || Na expressão: (x != 10 || y > 1 && y < 10)Pela precedência dos operadores, primeiro serão resolvidos “>” e “ <“: y > 1 e y < 10 O próximo operador a ser considerado,
pela precedência será “!=“
x != 10
Restam os operadores “&&” e “||”, como “&&” é o de maior prioridade, será o próximo:
y < 1 && y < 10
Finalmente o “||” será resolvido. A versão a seguir com parênteses mostra
a ordem de execução da expressão:
( (x != 10) || ( ( y > 1) && (y < 10) ) ) RECOMENDAÇÃO:usar parênteses não só
para alterar a precedência de operadores, como também para tornar mais claras as expressões.
Testes com os exemplos
19 INF 01202 – Prof Edison – Aula 04
Exemplo anterior com valores
x=10, y=1
x=12, y=5
Y > 1 Y < 10 x != 10 y>1 && y<10 (x != 10) || ( ( y > 1) && (y < 10) )
Y > 1 Y < 10 x != 10 y>1 && y<10 (x != 10) || ( ( y > 1) && (y < 10) )
F V F F F
V V V V V
Cortesia: Prof. Edison Pignaton de Freitas
Vejamos como ca em formato de árvore, com regras de precedência.
Motivação para comandos de seleção condicional
21 INF 01202 – Prof Edison – Aula 04
Seleções
int main() { Instrução1; Instrução2; … … Instrução n; }Programa sequencial
Programa com seleção condicional
?
Comandos de seleção condicional
22 INF 01202 – Prof Edison – Aula 04
ü Condicional Simples if (condição) comando; ü Seleção Dupla if (condição) comando; else comando; ü Seleção múltipla switch (expressão) {
case valor1: comando; ...
}
Comandos de seleção condicional
Aula de Hoje!
Cortesia: Prof. Edison Pignaton de Freitas 14 / 28
Comando if (condicional simples, com único comando)
Slide 22
< expressão lógica >verdadeira falsa < comando >
if
( expressão lógica )
comando
;
C
se
< expressão lógica >
< comando >
Linguagem algorítmica
Comando condicional simples
Exemplo #1
Slide 23
Ex1:
Ler um valor e, no caso
de ser menor do que 10, emitir
uma mensagem.
Algoritmo:
1. Início.
2. Ler Valor.
3. Se Valor < 10
3.1 escrever
mensagem
4. Fim.
/* Lê valor e informa se maior que 10 */ #include <stdio.h>
int main() // programa principal {
int val1; // declaração da variável informada
printf("Valor 1:\n"); // mensagem impressa na tela
scanf("%d", &val1); // leitura da informação digitada
if (val1 < 10)
printf("%d é menor que 10\n", val1); // mensagem
return 0;
}
Comando condicional
simples
Cortesia: Prof. Mara Abel 16 / 28
Exemplo #2 (Enunciado e Algoritmo)
Slide 17 INF 01202
Ex2:
Processar uma venda de livros em uma livraria. Obter código do tipo de livro vendido (A, B, C) e número de unidades, calcular e informar valor a pagar.Preços: Tipo A: R$ 10,00 Tipo B: R$ 20,00
Tipo C: R$ 30,00
Caso tenham sido vendidos mais de 10 livros, emitir uma mensagem.
Comando condicional
simples
Algoritmo ProcessaUmaVenda
{processa uma venda e avisa caso tenham sido vendidas maisde 10 unidades}
entradas: codigo {do tipo do livro} nro_livros {vendidos}
saídas: valor total a ser pago (variavel valor_total)
mensagem (caso tenham sido vendidas mais de 10 unidades) 1. início
2. ler codigo, nro_livros
3. calcular preço a pagar (valor_total) 4. informar valor_total
5. se nro_livros > 10
5.1 informar “mais de 10 livros vendidos” 6. fim se codigo = ´A´ valor_total
nro_livros* 10; se codigo = ´B´ valor_total
nro_livros* 20; se codigo = ´C’ valor_total
nro_livros* 30;Exemplo #2 (Enunciado e Algoritmo Completo)
Slide 18 INF 01202
Ex2: Processar uma venda de livros em uma livraria.
Obter código do tipo de livro vendido (A, B, C) e número de unidades. Preços: Tipo A: R$ 10,00
Tipo B: R$ 20,00 Tipo C: R$ 30,00
Calcular e informar preço total. Caso tenham sido vendidas mais de 10 livros, emitir uma mensagem.
Algoritmo ProcessaUmaVenda
{processa uma venda e avisa caso tenham sido vendidas maisde 10 unidades}
entradas: codigo {do tipo do livro} nro_livros {vendidos}
saídas: valor total a ser pago (variável valor_total)
mensagem (caso tenham sido vendidas mais de 10 unidades) 1. início
2. ler codigo, nro_livros 3. se codigo = ´A´ 3.1 valor_total nro_livros* 10; 4. se codigo = ´B´ 4.1 valor_total
nro_livros* 20; 5 se codigo = ´C’ 5.1 valor_total
nro_livros* 30; 6. informar valor_total 7. se nro_livros > 107.1 informar “mais de 10 livros vendidos” 8. fim
Cortesia: Prof. Claudio Jung 18 / 28
Exemplo #2 (Código em C)
/* processa uma venda e avisa caso se mais de 10 unidades vendidas foram vendidas */
#include<stdio.h>
int main(void)
{
char codigo;
int nro_livros;
float apagar;
printf("digite o codigo do produto e número de unidades:\n"); scanf(" %c %d",&codigo, &nro_livros);
if (codigo == 'a'|| codigo == 'A') apagar = nro_livros*10;
if (codigo == 'b'|| codigo == 'B') apagar = nro_livros*20;
if (codigo == 'c' || codigo == 'C') apagar = nro_livros*30;
printf("o valor a pagar é de R$ %6.2f.\n",apagar); if (nro_livros > 10)
printf("Foram vendidas mais de 10 unidades do tipo %c.\n", codigo); return 0;
}
gcc exemplo-livros.c -o exemplo-livros #./exemplo-livros
Exemplo #3 (Enunciado)
Slide 27
Localização de um ponto no
plano
Dados um par de valores
x
e
y
, que
representam as coordenadas de um ponto no
plano, determinar a localização do ponto: se
em um quadrante, em um dos eixos ou na
origem.
Saída: mensagem adequada
–
Entradas
: coordenadas x e y de um ponto.
–
Processamento
: testes, verificando onde
o par de valores se enquadra.
Cortesia: Prof. Mara Abel 20 / 28
Exemplo #3 (Ententendo o Enunciado)
35 INF 01202 – Prof Edison – Aula 04
Quadrante 1
Quadrante 2
Quadrante 4
Quadrante 3
Eixo dos Xs
Eixo dos Ys
x = 0 e y = 0
x < 0 e y > 0
x = 0 e y ≠ 0
x > 0 e y > 0
x ≠ 0 e y = 0
x > 0 e y <0
x < 0 e y < 0
Origem
Exemplo #3 (Pensamento Computacional → Passos)
Slide 29
Passos do Algoritmo
• leitura dos valores de x e y.
• determinação, pela avaliação de condições, de
onde o ponto se encontra: se em um quadrante,
em um eixo ou na origem.
• escrita da mensagem, onde é indicada a
localização do ponto – apenas 1 mensagem por
par de valores.
Cortesia: Prof. Mara Abel 22 / 28
Exemplo #3 (Algoritmo)
Slide 30
Escrita do algoritmo em pseudolinguagem
Algoritmo LocalizaQuadrante
Entradas
: x, y (coordenadas)
Saída
: mensagem (localização)
1. início
2. ler x , y
3. se x = 0 e y = 0 escrever “ponto na
origem”
4. se x > 0 e y > 0 escrever “quadrante 1”
5. etc…
(...)
9. se x 0 e y = 0 escrever “eixo dos x”
10.fim
Exemplo #3 (Código em C)
/* Obtem coordenadas e informa localização */ #include <stdio.h> int main() { float x, y; //Entrada printf("Coordenadas: x = "); scanf("%f", &x); printf("e y = "); scanf("%f", &y); if ( x == 0 && y == 0 )
printf("\n Ponto na origem"); if ( x > 0 && y > 0 )
printf("\n Ponto no quadrante 1"); if ( x < 0 && y > 0 )
printf("\n Ponto no quadrante 2"); if ( x < 0 && y < 0 )
printf("\n Ponto no quadrante 3"); if ( x > 0 && y < 0 )
printf("\n Ponto no quadrante 4"); if ( x == 0 && y != 0 )
printf("\n Ponto no eixo dos y"); if ( x != 0 && y == 0 )
printf("\n Ponto no eixo dos x"); printf("\n"); return 0; } gcc exemplo-coordenadas.c -o exemplo-coordenadas ./exemplo-coordenadas 24 / 28
Comando if (cond. composto, com múltiplos comandos)
33 INF 01202 – Prof Edison – Aula 04
< expressão lógica > verdadeira falsa < comando1 > if ( expressão lógica ) { comando 1; ... comando n; } se < expressão lógica > < comandoS > < comando2 > 1comando composto
C
Linguagem algorítmica
Comando condicional composto
Exemplo #4 (Livros, com desconto)
Slide 34
Ex2: Processar uma venda de livros em uma livraria.
Obter código do tipo de livro vendido (A, B, C) e número de unidades. Preços: Tipo A: R$ 10,00
Tipo B: R$ 20,00 Tipo C: R$ 30,00
Calcular e informar preço a pagar. Se o livro for do Tipo A, dar 10% de desconto. Caso tenham sido vendidas mais de 10 livros, emitir uma mensagem.
Algoritmo UmaVenda
{processa uma venda e avisa caso tenham sido vendidas mais de 10 unidades}
entradas: codigo {do tipo do livro} nro_livros {vendidos} saídas: apagar
mensagem {caso tenham sido vendidas mais de 10 unidades} 1. início
2. ler codigo, nro_livros 3. calcular preço a pagar 4. informar apagar 5. se nro_livros > 10
5.1 informar “mais de 10 livros vendidos” 6. fim se codigo = ´A´ apagar
nro_livros* 10; apagar apagar * 0.9; se codigo = ´B´ apagar
nro_livros* 20;Cortesia: Prof. Mara Abel 26 / 28
Exemplo #4 (Código em C)
/* processa uma venda e avisa caso se mais de 10 unidades vendidas foram vendidas */
#include<stdio.h>
int main(void)
{
char codigo;
int nro_livros;
float apagar;
printf("digite o codigo do produto e número de unidades:\n"); scanf(" %c %d",&codigo, &nro_livros);
if (codigo == 'a'|| codigo == 'A') { apagar = nro_livros*10; apagar = apagar * 0.90; } if (codigo == 'b'|| codigo == 'B') apagar = nro_livros*20; if (codigo == 'c' || codigo == 'C') apagar = nro_livros*30;
printf("o valor a pagar é de R$ %6.2f.\n",apagar); if (nro_livros > 10)
printf("Foram vendidas mais de 10 unidades do tipo %c.\n", codigo); return 0;
}
gcc exemplo-livros-desconto.c -o exemplo-livros-desconto #./exemplo-livros-desconto