Buscar

12. Instrução de Desvio If

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 41 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 41 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 41 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

Prévia do material em texto

Ju
d
so
n
 S
an
to
s 
S
an
ti
ag
o
A INSTRUÇÃO DE DESVIO IF
Programação de Computadores
Objetivos da Aula
Aprender a usar a instrução de desvio if,
if else e suas variantes
A instrução if
A instrução if else
Encadeando if else's
Operadores Lógicos
Introdução
 Computadores fazem mais que armazenar 
dados e repetir instruções
 Eles agem de forma inteligente
 Uma das formas de prover inteligência a um 
programa é permiti-lo tomar decisões
 C++ possui duas instruções de tomada de 
decisão:
 A instrução if
 A instrução switch
A Instrução if
 Utiliza-se a instrução if quando um programa 
deve decidir se ele faz uma determinada ação
 Se a nota for maior que 7 o aluno está aprovado
 Se o sensor detectar movimento dispare o alarme
 Se os objetos colidirem emita o som de explosão
 Se o nível do rio exceder o limite abra a comporta
 A instrução if possui duas formas:
 if
 if else
A Instrução if
 A instrução if executa uma instrução ou bloco 
de instruções se a condição for satisfeita 
if (condição)
instrução
Testa se a condição é verdadeira
Instrução (ou bloco de instruções) 
a ser executada
A Instrução if
instrução1;
if (condição)
instrução2;
instrução3;
instrução 1
instrução 3
instrução 2teste
if
falso
verdadeiro
A Instrução if
 A condição é freqüentemente uma expressão 
relacional, como aquelas usadas nos loops
 Da mesma forma que nos testes dos loops, a 
expressão de teste é convertida para um valor 
booleano:
 Zero é convertido para false
 Qualquer valor não nulo é convertido para true
 Se a condição é falsa a instrução (ou bloco de 
instruções) é simplesmente saltada
A Instrução if
#include <iostream>
using namespace std;
int main()
{ 
char ch;
int espacos = 0;
int total = 0;
cin.get(ch);
while (ch != '.') // encerra no final da frase
{
if (ch == ' ') // verifica se ch é um espaço
++espacos;
++total; // total de caracteres
cin.get(ch);
}
cout << espacos << " espaços e " << total;
cout << " caracteres na frase.\n";
system("pause");
return 0;
}
A Instrução if
 Saída do Programa:
 ++espacos é executado apenas quando o 
caractere é um espaço
 ++total é executado para cada ciclo do loop 
while
O desenhista era 
um visionário.
3 espaços e 30 caracteres na frase.
A Instrução if else
 O if else decide qual de duas instruções ou 
dois blocos de instruções é executado
if (condição)
instrução1
else
instrução2
Testa se a condição é verdadeira
Instrução executada 
se a condição é falsa
Instrução executada 
se a condição é verdadeira
A Instrução if else
instrução1;
if (condição)
instrução2;
else
instrução3;
instrução4;
instrução 1
instrução 4
instrução 2teste
if else
falso verdadeiro
instrução 3
A Instrução if else
#include <iostream>
using namespace std;
int main()
{
char ch;
cout << "Digite, que eu repito.\n";
cin.get(ch);
while (ch != '.') // encerra no final da frase
{
if (ch == '\n')
cout << ch; // imprime a nova linha
else
cout << ++ch; // imprime outro caractere
cin.get(ch);
}
cout << "\nPor favor desculpe a confusão\n";
system("pause");
return 0;
}
A Instrução if else
 Saída do Programa:
 Tente usar ch + 1 no lugar de ++ch para ver 
um efeito interessante
 O segredo está em como cout trata tipos 
diferentes
Digite, que eu repito.
Eu estou muito satisfeito
Fv!ftupv!nvjup!tbujtgfjup
em usar esse maravilhoso computador.
fn!vtbs!fttf!nbsbwjmiptp!dpnqvubeps
Por favor desculpe a confusão
Formatando if else
 Se o programador desejar executar mais de 
uma instrução num if ou if else é preciso 
delimitar blocos com o uso de chaves
if (ch == 'S')
{
afavor++;
cout << "Mais um usuário a favor.\n";
}
else
{
contra++;
cout << "Esse usuário é contra.\n";
}
Formatando if else
 A primeira formatação enfatiza a estrutura de 
blocos, enquanto esta aproxima mais o bloco 
das palavras if e else
if (ch == 'S') {
afavor++;
cout << "Mais um usuário a favor.\n";
} 
else {
contra++;
cout << "Esse usuário é contra.\n";
}
Formatando if else
 Enquanto o anterior aproxima mais o bloco 
das palavras if e else, esta formatação 
aproxima mais os blocos um do outro
if (ch == 'S') {
afavor++;
cout << "Mais um usuário a favor.\n";
} else {
contra++;
cout << "Esse usuário é contra.\n";
}
 A instrução if else pode ser estendida se for 
necessário escolher entre mais de duas 
opções
if (ch == 'A')
letraA++;
else
if (ch == 'B')
letraB++;
else
outra++;
Aninhando if else
Um if (ou if else) é tratado 
como uma única instrução
Aninhando if else
 A construção if else pode ser reorganizada
com a formatação abaixo
 Porém não existe uma instrução chamada 
else if, como essa formatação faz parecer
if (ch == 'A')
letraA++;
else if (ch == 'B')
letraB++;
else if (ch == 'C')
letraC++;
Aninhando if else
#include <iostream>
using namespace std;
const int Fav = 27;
int main()
{
int n;
cout << "Digite um número entre 0 e 100 para ";
cout << "descobrir meu favorito: ";
do
{
cin >> n;
if (n < Fav)
cout << "Muito baixo, tente novamente: ";
else if (n > Fav)
cout << "Muito alto, tente novamente: ";
else
cout << Fav << " é o meu favorito!\n";
} while (n != Fav);
system("pause");
return 0;
}
Aninhando if else
 Saída do Programa:
 Reverta a expressão de comparação de 
igualdade para prevenir erros
Digite um número entre 0 e 100 para descobrir meu favorito: 50
Muito alto, tente novamente: 25
Muito baixo, tente novamente: 37
Muita alto, tente novamente: 31
Muito alto, tente novamente: 27
27 é meu favorito!
if (num = 3) // atribuição indesejada
if (3 == num) // mesmo que if (num == 3)
if (3 = num) // erro na compilação
Expressões Lógicas
 Freqüentemente é necessário testar mais que 
uma condição:
 Para um caractere ser minúsculo ele deve ser 
maior ou igual a 'a' e menor ou igual a 'z'
 Um aluno está reprovado direto se ele tiver média 
final inferior a 3.5 ou mais de 15 faltas
 Para suprir essa necessidade C++ oferece três 
operadores lógicos:
 OU (||), E (&&) e NÃO (!)
Operador Lógico OU
 A expressão com OU lógico é verdadeira 
quando uma ou ambas as condições são 
verdadeiras, de acordo com a tabela verdade 
abaixo:
A B A OU B
0 0 0
1 0 1
0 1 1
1 1 1
Operador Lógico OU
 O operador C++ equivalente ao OU Lógico é o 
operador ||
 O operador || tem uma precedência menor 
que os operadores relacionais, por isso os 
parênteses não são necessários neste 
exemplo
5 > 3 || 5 > 10 // true || false = true
5 > 8 || 5 < 10 // false || true = true
5 < 8 || 5 > 2 // true || true = true
5 > 8 || 5 < 2 // false || false = false
Operador Lógico OU
 O operador || é um ponto de seqüência, 
qualquer mudança feita do lado esquerdo 
ocorre antes da avaliação da expressão do 
lado direito
 Se a variável i tem inicialmente o valor 10, ela terá 
o valor 11 no momento da comparação com j
 Além disso, C++ não avaliará a expressão a 
direita se a expressão a esquerda é verdadeira
i++ < 6 || i == j
Operador Lógico OU
#include <iostream>
using namespace std;
int main()
{
cout << "Este programa pode formatar seu disco rígido\n"
"e destruir todos os seus dados.\n"
"Você deseja continuar? <s/n> ";
char ch;
cin >> ch;
if (ch == 's' || ch == 'S')
cout << "Você foi avisado!\a\a\n";
else if (ch == 'n' || ch == 'N')
cout << "Uma escolha sábia... Tchau!\n";
else
cout << "Você não respondeu corretamente,"
"eu devia apagar seu disco!\n";
system("pause");
return 0;
}
Operador Lógico OU Saída do Programa:
 O programa lê apenas um caractere, mesmo 
que o usuário responda NÃO, apenas o N será 
lido pelo programa
Este programa pode formatar seu disco rígido
e destruir todos os seus dados.
Você deseja continuar? <s/n> N
Uma escolha sábia...Tchau!
Operador Lógico E
 A expressão com E lógico é verdadeira 
apenas quando ambas as condições são 
verdadeiras, de acordo com a tabela verdade 
abaixo:
A B A E B
0 0 0
1 0 0
0 1 0
1 1 1
Operador Lógico E
 O operador C++ equivalente ao E Lógico é o 
operador &&
 O operador && tem uma precedência menor 
que os operadores relacionais, por isso os 
parênteses não são necessários neste 
exemplo
5 == 3 && 4 == 4 // false && true = false
5 > 3 && 5 > 10 // true && false = false
5 < 8 && 5 < 10 // true && true = true
5 > 8 && 5 < 2 // false && false = false
Operador Lógico E
 O operador && é um ponto de seqüência, 
qualquer mudança feita do lado esquerdo 
ocorre antes da avaliação da expressão do 
lado direito
 Se a variável i tem inicialmente o valor 10, ela terá 
o valor 11 no momento da comparação com j
 Além disso, C++ não avaliará a expressão a 
direita se a expressão a esquerda é falsa
i++ < 6 && i == j
Operador Lógico E
#include <iostream>
using namespace std;
const int VetTam = 6;
int main()
{
float idades[VetTam];
cout << "Entre com a idade dos seus vizinhos.\n"
"O programa termina quando você tiver " 
<< VetTam << " entradas ou digitar um " 
"valor negativo.\n";
cout << "Primeiro valor: ";
int temp;
cin >> temp;
int i = 0;
while (i < VetTam && temp >= 0)
{
idades[i++] = temp;
cout << "Próximo valor: ";
cin >> temp;
}
continua 
Operador Lógico E
if (i == 0)
cout << "Sem dados, tchau!\n";
else
{
cout << "Entre com sua idade: ";
int voce;
cin >> voce;
int cont = 0;
for (int j = 0; j < i; j++)
if (idades[j] > voce)
++cont;
cout << cont;
cout << " dos seus vizinhos são mais velhos que você."; 
}
system("pause");
return 0;
}
Operador Lógico E
 Saída do Programa:
 O programa usa um contador para guardar 
quantos valores obedecem a uma condição
Entre com a idade dos seus vizinhos.
O programa termina quando você tiver 
6 entradas ou digitar um
valor negativo.
Primeiro valor: 39
Próximo valor: 45
Próximo valor: 19
Próximo valor: 28
Próximo valor: -1
Entre com sua idade: 20
3 dos seus vizinho são mais velhos que você.
Operador Lógico E
#include <iostream>
using namespace std;
const char * qualifica[4] = // vetor de ponteiros para char
{ "jovem.\n", "adulto.\n", "velho.\n", "bebê.\n" };
int main()
{
int idade, indice;
cout << "Entre com sua idade em anos: ";
cin >> idade;
if (idade > 17 && idade < 35)
indice = 0;
else if (idade >= 35 && idade < 50)
indice = 1;
else if (idade >= 50 && idade < 65)
indice = 2;
else
indice = 3;
cout << "Você se qualifica na categoria " << qualifica[indice];
return 0;
system("pause")
}
Operador Lógico E
 Saída do Programa:
 Observe que para o teste da faixa de valores o 
operador && deve unir duas expressões 
relacionais
Entre com sua idade em anos: 87
Você se qualifica na categoria bebê.
if (idade > 17 && idade < 35) // OK
if (17 < idade < 35) // Não faça isso
if ((17 < idade) < 35) // Sempre verdadeiro
Operador Lógico NÃO
 O operador lógico de negação inverte o valor 
verdade da expressão, tornando-a falsa se ela 
é verdadeira, e verdadeira se ela é falsa
 O operador C++ equivalente a negação é o 
operador !
A NÃO A
0 1
1 0
Operador Lógico NÃO
 Muitas vezes uma relação pode ser expressa 
de forma mais clara sem o operador de 
negação
 Porém ele é muito útil para usar com funções 
que retornam zero em caso de sucesso
 A função strcmp(s1, s2) retorna zero se as strings 
s1 e s2 são iguais
if (!(x > 5)) // a mesma coisa que if (x <= 5)
if (!strcmp(s1,s2)) // se as strings são iguais...
Operador Lógico NÃO
#include <iostream>
#include <climits>
using namespace std;
bool is_int(double);
int main()
{ 
cout << "Entre com um valor inteiro: ";
double num;
cin >> num;
while (!is_int(num)) // repete enquanto não é um inteiro
{
cout << "Fora da faixa, tente novamente: ";
cin >> num;
}
int val = int (num); // type cast
cout << "Você digitou o inteiro " << val << "\nTchau!\n";
return 0;
system("pause")
}
Operador Lógico NÃO
 Saída do Programa:
bool is_int(double x)
{ 
if (x <= INT_MAX && x >= INT_MIN)
return true;
else
return false;
} 
Entre com um valor inteiro: 6234128679
Fora da faixa, tente novamente: -8000222333
Fora da faixa, tente novamente: 99999
Você digitou o inteiro 99999
Tchau!
Operadores Lógicos
 Os operadores lógicos E e OU tem uma 
precedência menor que os relacionais
 O operador lógico NÃO tem uma precedência 
maior que os operadores relacionais ou 
aritméticos
x > 5 && x < 10 // equivalente a (x > 5) && (x < 10)
!(x > 5) // falso se x maior que 5
!x > 5 // sempre falso, !x é convertido para 1 ou 0
Operadores Lógicos
 O operador lógico E tem uma precedência 
maior que o operador lógico OU
 Recomenda-se o uso de parênteses para 
aumentar a legibilidade e clareza do código
// equivalente a (x > 30 && x < 45) || y > 300
x > 30 && x < 45 || y > 300
(idade > 50) || ((peso > 80) && (donativo > 1000))
Conclusão
 A instrução if e if else permitem executar 
desvios na execução de um programa
 if
 if else
 If else's aninhados
 Os operadores lógicos podem ser usados para 
construir condições complexas para o desvio 
da execução
 &&, || e !

Outros materiais