Você está na página 1de 29

Programação de Computadores

Estruturas de Seleção

José Romildo Malaquias

Departamento de Computação
Universidade Federal de Ouro Preto

2023.1

1/29
1 Expressões relacionais e lógicas

2 Estruturas de Seleção

2/29
Tópicos

1 Expressões relacionais e lógicas

2 Estruturas de Seleção

3/29
Relembrando...

#include <iostream>

using namespace std;

// programa que calcula a média de três números inteiros


int main () {
int num1, num2, num3;
cin >> num1 >> num2 >> num3;
int soma = num1 + num2 + num3;
double media = (double) soma / 3;
cout << media;
return 0;
}

4/29
Tipos de dados

Cada variável tem um tipo associado.


tipo valores
número inteiro short, int, long
número real float, double
caractere char
booleano bool

5/29
Tipo de dados lógico

Valores booleanos (lógicos): verdadeiro (true) ou falso (false).


Pode ser o resultado de uma expressão lógica
Exemplo: considere

int x = 10;
int y = 8;

expressão resultado
x < y falso
x != y verdadeiro
x <= 10 verdadeiro
y > x + 6 falso

6/29
Operadores relacionais

Aplicados a valores que estabelecem uma relação de ordem


Retornam true (verdadeiro) ou false (falso)
Sintaxe:

<expressão> <operador> <expressão>

O valor inteiro zero é tratado como falso e os diferentes de zero como verdadeiro
operador significado
== igual a
!= diferente
>= maior ou igual
> maior
<= menor ou igual
< menor

7/29
Operadores relacionais (cont.)

Exemplo: considere as variáveis:

int x = 10;
int y = 8;

expressão valor
x > y true
x != y true
y >= 100 false
x < y false
x <= 10 true
y > x-6 true

8/29
Operadores lógicos

Utilizados para conectar duas expressões lógicas (cujo resultado é verdadeiro ou falso).
Sintaxe:

<expressão> <operador> <expressão>

operador operação retorno


&& e verdadeiro quando todas as expressões são verdadaeiras
|| ou verdadeiro quando pelo menos uma das expressões é verdadeira
! negação verdadeiro quando a expressão é false, e vice-versa
Tabelas-verdade dos operadoes lógicos

A B A && B A B A || B A !A
V V V V V V V F
V F F V F V F V
F V F F V V
F F F F F F
9/29
Operadores lógicos (cont.)

Exemplo: considere as variáveis:

bool b;
int x = 10;
int y = 8;
int e = 44;
char c = 'w'

expressão valor
x > y && x > e false
x > y || x < e true
x > y && x < e true
!(x < y) true
c == 'W' || c == 'w' true

10/29
Tópicos

1 Expressões relacionais e lógicas

2 Estruturas de Seleção

11/29
Estruturas condicionais

Permitem selecionar um comando a ser executado com base em uma condição, representada por
uma expressão lógica.
Classificadas em três tipos:
condicional simples;
condicional composto;
seleção entre duas ou mais sequências de comandos.

12/29
Estrutura condicional simples

Permite a escolha do grupo de ações a ser executado quando determinada condição é satisfeita.
Comando if
Todo comando if requer uma condição
I Verdadeira ou falsa
I Caso seja verdadeira, executa um conjunto de instruções
Sintaxe

if (<condição>)
<comando1 >;

13/29
Estrutura condicional simples (cont.)

Exemplo:

#include <iostream>

using namespace std;

int main() {
int num;
cout << "Digite um número: ";
cin >> num;

if (num > 0)
cout << "positivo" << endl;

return 0;
}

14/29
Estrutura condicional composta

Permite a escolha entre dois grupos de ações a serem executados, dependendo se uma determinada
condição é satisfeita ou não.
Comando if-else
Utilizado quando existe um outro conjunto de instruções a ser executado quando o valor da condição
é falso.
Sintaxe

if (<condição>)
<comando1 >;
else
<comando2 >;

15/29
Estrutura condicional composta (cont.)

Exemplo:

#include <iostream>

using namespace std;

int main () {
int num;
cout << "Digite um número: ";
cin >> num;

if (num > 0)
cout << "positivo" << endl;
else
cout << "não é positivo" << endl;

return 0;
}

16/29
Aninhamento de if

É possível aninhar construções do tipo if-else em diversos níveis:


O if aninhado é simplesmente um if dentro da declaração de um outro if mais externo
Deve-se ter atenção para saber exatamente a qual if um determinado else está ligado
I A indentação é crucial neste caso.

17/29
Aninhamento de if (cont.)

Exemplo: seleção de duas ou mais opções

#include <iostream>
using namespace std;

int main() {
int num;
cout << "Digite um número:";
cin >> num;
if (num > 0)
cout << "positivo" << endl;
else
if (num < 0)
cout << "negativo" << endl;
else
cout << "nulo" << endl;
return 0;
}

18/29
Aninhamento de if (cont.)

Ou ainda:

#include <iostream>
using namespace std;

int main() {
int num;
cout << "Digite um número:";
cin >> num;
if (num > 0)
cout << "positivo" << endl;
else if (num < 0)
cout << "negativo" << endl;
else
cout << "nulo" << endl;
return 0;
}

19/29
Bloco de comandos

Um bloco é uma sequência de instruções agrupadas que podem ser executadas como se fosse um
único comando.
Sintaticamente é delimitada por chaves.
Variáveis declaradas dentro de um bloco são locais ao bloco.
Usamos bloco de comandos quando precisamos escrever vários comandos em um contexto onde
expera-se um único comando, como por exemplo nas alternativas do comando condicional.

20/29
Bloco de comandos (cont.)

#include <iostream>
using namespace std;
int main() {
double num = 10;
char c = 's';
{
cout << "Bloco 1" << endl;
double dinheiro = 3.55;
cout << "O valor é: " << dinheiro << endl;
}
// cout << "O valor é: " << dinheiro << endl; /* ERRO */
cout << "Informe um numero: ";
cin >> num;
if (num == 50)
cout << "Bloco IF" << endl;
else {
cout << "Bloco ELSE" << endl;
cout << endl;
}
return 0;
}
21/29
Exercício

Escreva um programa que leia a distância em km e a quantidade de litros de gasolina consumidos


por um carro em um percurso qualquer. Calcule o consumo em Km/l e escreva uma mensagem de
acordo com a relação abaixo:
consumo (km/l) mensagem
menor que 8 venda o carro
entre 8 e 14 econômico
maior que 14 super econômico

22/29
Comando switch

O comando switch é um comando de seleção múltipla.


Permite a seleção entre várias seções de código, dependendo do valor de uma expressão integral.
O comando switch tem uma expressão de controle e uma sequência de alternativas.
Cada alternativa tem um constante, introduzia pela palavra chave case, e um bloco de comandos
A expressão de controle é avaliada, e o seu valor é comparado com cada constante das alternativas,
até encontrar alguma que seja igual. O bloco correspondente é então executado até encontrar o
comando break, ou até atingir o final do comando switch.
Normalmente cada alternativa deve ser encerrada com o comando break.
Se nenhum constante for igual ao valor da expressão e houver um alternativa identificada como
default, então esta alternativa é escolhida.

23/29
Comando switch (cont.)
#include <iostream> break;
using namespace std; case 6:
cout << "sábado";
int main() { break;
int dia; case 7:
cout << "Dia da semana (inteiro)? "; cout << "domingo";
cin >> dia; break;
switch (dia) { }
case 1: return 0;
cout << "segunda-feira"; }
break;
case 2:
Dia da semana (inteiro)? 5
cout << "terça-feira";
sexta-feira
break;
case 3:
cout << "quarta-feira";
break;
case 4:
cout << "quinta-feira";
break;
case 5:
cout << "sexta-feira"; 24/29
Comando switch: exemplo

25/29
Comando switch: exemplo (cont.)
// Calculadora simples break;
#include <iostream> case '/':
using namespace std; cout << num1 << " / " << num2
int main() { << " = " << num1 / num2;
char oper; break;
double num1, num2; default:
cout << "Operador (+, -, *, /): "; // operador não é nenhuma das
cin >> oper; // constantes (+, -, *, /)
cout << "Operandos: "; cout << "Erro: operador incorreto";
cin >> num1 >> num2; break;
switch (oper) { }
case '+': return 0;
cout << num1 << " + " << num2 }
<< " = " << num1 + num2;
break; Operador (+, -, *, /): *
case '-': Operandos: 45.1 2.0
cout << num1 << " - " << num2 45.1 * 2 = 90.2
<< " = " << num1 - num2;
break; Operador (+, -, *, /): ^
case '*': Operandos: 2 3
cout << num1 << " * " << num2 Erro: operador incorreto
<< " = " << num1 * num2; 26/29
Comando switch: exemplo

27/29
Comando switch: exemplo (cont.)
#include <iostream> break;
using namespace std; }
int main() { return 0;
char letra; }
cout << "Digite uma letra: ";
cin >> letra;
switch(letra) { Digite uma letra: E
case 'A': E
case 'B':
cout << "A ou B" << endl; Digite uma letra: C
break; C ou D
E
case 'C':
case 'D':
cout << "C ou D" << endl;

case 'E':
cout << "E" << endl;
break;

default:
cout << "Letra maior que E" << endl; 28/29
Fim

29/29

Você também pode gostar