Buscar

Algoritmos Aula 6 Estrutura de decisão

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

Algoritmos Aula 6 - Estrutura de decisão 
Introdução 
Esta é a segunda parte das estruturas de decisão. Na primeira aula, 
vimos alguns conceitos básicos que são as estruturas iniciais para 
começarmos a tratar o assunto. 
Nesta aula, vamos mostrar as outras formas de tomar decisões e 
suas implementações em C++.Dessa forma, nosso repertório de 
comandos vai aumentar e você vai conseguir criar programas mais 
interessantes e completos em C++. 
Vamos lá? 
Recapitulando... 
No final da última aula, vimos a estrutura condicional de comando 
composto. Esta estrutura é a famosa “if-then-else”, porque trata o 
teste condicional de uma maneira completa: “se o teste for 
verdadeiro, então faça isso, senão faça aquilo”. Ela tem a seguinte 
forma, como vimos: 
 
Para lembrar a estrutura, observe o exemplo a seguir. 
 
Lembrou? 
O teste é feito na linha 10; caso verdadeiro, executa o bloco das 
linhas 10-12; senão, executa o bloco das linhas 13-15. 
Observe o teste da linha 10. Usamos o operador %, chamado mod. 
Este operador retorna como resultado o resto da divisão; no 
exemplo, do número n por 2. Se for zero, é um número par; senão, 
é um número ímpar. 
Mudando o teste... 
Para relaxar, vamos fazer uma brincadeira com C++. Se você quiser 
impressionar alguém e dizer que conhece bastante de 
programação, em vez de escrever as linhas 10 a 15, substitua-as 
apenas pela linha 10 deste código. O resultado é o mesmo que o 
código anterior. 
 
É uma forma que parece bem complicada, não é? Mas vamos 
explicar: trata-se de outro operador existente em C++ e em outras 
linguagens, chamado de operador ternário. Ele é uma alternativa 
para substituir o desvio condicional composto em algumas 
situações. 
Veja sua sintaxe: 
 
Como é um operador ternário, temos três operandos: 
 
 
Esse operador também é útil quando vamos atribuir um valor a 
uma variável como resultado de um if. 
Observe: 
if (x == 10) // Se x for igual a 10 
y = 20; // então faço y receber 20 
else 
y = 30; // senão faço y receber 30 
Usando o operador condicional ternário, poderíamos escrever: 
y = (x == 10) ? 20 : 30; // y recebe, se x for igual a 10 então 20, 
senão 30. 
Colocando um if Dentro do Outro 
Colocar um if dentro do outro é mais comum do que você imagina. 
Esta forma é chamada de aninhamento ou encadeamento de ifs e é 
usada em várias linguagens de programação e também com outros 
comandos. Vamos nos concentrar nos ifs por enquanto. 
1 #include <iostream> 
2 using namespace std; 
3 
4 int main(void){ 
5 int idade; 
6 char sexo; 
7 
8 cout<<"Qual a sua idade?"<<endl; 
9 cin>>idade; 
10 cout<<"Digite (m)para Masculino, (f)para Feminino"<<endl; 
11 cin>>sexo; 
12 
13 if (idade>=18){ 
14 cout<<"Você pode dirigir"<<endl; 
15 
16 if (sexo=='m'){ 
17cout<<"Você precisa ir no Serviço Militar"<<endl; 
18 } 
19 } 
20 else { 
21 if (idade>16){ 
22 cout<<"Você já pode votar"<<endl; 
23 } 
24 else { 
25 
cout<<"Você não pode votar nem 
dirigir"<<endl; 
26 } 
27 } 
28 return 0; 
29 } 
Veja que temos um if dentro do outro: 
 O if que começa na linha 13 vai até a linha 18, quando a 
condição (idade>=18) for 
verdadeira. 
✓ Dentro deste if, temos um if simples aninhado entre as linhas 16 
e 18. 
 Caso a condição da linha 13 seja falsa, temos o else, que 
compreende as linhas de 
20 a 27. 
✓ Dentro do else, temos um if-then-else completo nas linhas 21 a 
26. 
Como podemos ver, o aninhamento de ifs é muito útil e é mais 
comum do que pensa. 
Existem muitas situações que usam estruturas aninhadas, e nas 
próximas aulas esta 
estrutura ficará cada vez mais comum, e com outros comandos 
também. 
O Comando Switch 
Este comando é bastante útil. 
Veja um exemplo em que ele pode ser usado: imagine um 
programa no qual o usuário informa um mês, e o programa devolve 
se o mês tem 30 ou 31 dias. 
Como você faria esse programa? 
“Vou ter que ler o número do mês.” 
“Se for janeiro, tem 31 dias.” 
“Se for fevereiro, pode ter 28 ou 29 dias. Se o ano for bissexto, tem 
29; senão, tem 28. Bem, mas acho que desta vez, eu vou considerar 
que tem 28 dias, só pra facilitar.” 
“Se for março, tem 31.” 
“Abril tem 30”, “maio tem 31.” 
“se for junho, então são 30...” 
“e se for dezembro, tem 31.” 
“Caramba, vai ser um monte de ifs!” 
Vamos ver o programa em execução 
Se fosse usar o comando if, o programa teria pelo menos 12 ifs. O 
comando switch 
facilita a nossa vida. Sua sintaxe é: 
switch (variável){ 
 case constante1: 
 Instruções; 
 break; 
 case constante2: 
 Instruções; 
 break; 
 default 
 Instruções; 
} 
Veja como o switch seria usado nesse caso: 
1 #include <iostream> 
2 using namespace std; 
3 
4 int main(int argc, char** argv) { 
5 int mes,dias; 
6 
7 cout<<"Digite o número do mês:"<<endl; 
8 cin>>mes; 
9 
10 switch (mes){ 
11 case 1: 
12 dias = 31; 
13 break; 
14 case 2: 
15 dias = 28; 
16 break; 
17 case 3: 
18 dias = 31; 
19 break; 
20 case 4: 
21 dias = 30; 
22 break; 
23 case 5: 
24 dias = 31; 
25 break; 
26 case 6: 
27 dias = 30; 
28 break; 
29 case 7: 
30 dias = 30; 
31 break; 
32 case 8: 
33 dias = 31; 
34 break; 
35 case 9: 
36 dias = 30; 
37 break; 
38 case 10: 
39 dias = 31; 
40 break; 
41 case 11: 
42 dias = 30; 
43 break; 
44 case 12: 
45 dias = 31; 
46 break; 
47 default: 
48 
cout<<”Você digitou um mês 
inválido”<<endl; 
49 break; 
50 } 
51 cout<<"O mês "<<mes<<" tem "<<dias<<" dias."; 
52 return 0; 
53 } 
Entendeu como este comando funciona? Ele é muito útil e pode ser 
usado quando 
temos vários ifs. 
É interessante usá-lo para substituir vários ifs e deixar o código 
mais legível. Também 
é bastante usado em estruturas de menu. Porém, temos uma 
limitação: o comando 
não pode ser usado para avaliar expressões relacionais. 
Ele só funciona quando comparamos com um valor constante e, 
quando a comparação 
é verdadeira, um bloco de comandos é executado. 
No caso do exemplo, a linha a seguir avalia o valor da variável mês 
e, dependendo do 
valor, um determinado case será executado: 
10 switch (mes){ 
11 case 1: 
12 dias = 31; 
13 break; 
É muito importante usar o comando break após cada bloco de 
execução do case. O 
comando break interrompe o switch e o programa volta ao fluxo de 
execução após o 
fechamento do comando switch. 
Lembre-se sempre de colocar a cláusula default, como mostram as 
linhas 47 a 50. 
Fonte: https://youtu.be/EAIyHInguQk 
Durante o vídeo, você percebeu que foram testados alguns 
valores corretos para os meses, porém na última execução foi 
inserido o mês 29 e o programa executou a cláusula default. 
Imagine se fizéssemos esse programa usando o if. 
Seriam vários ifs e, além disso, seria difícil ler o programa. O switch 
é muito bom para deixar o programa mais claro. 
Porém, a última execução do programa deixou uma “rebarba”. Veja 
que, se o usuário digitar um mês negativo ou outro valor que não 
esteja dentro das cláusulas case, o programa executa corretamente 
a cláusula default, mas imprime na tela a mensagem da linha 51. 
Seria melhor que essa linha não fosse impressa quando o valor for 
inválido. 
E agora? 
Agora, precisamos de uma forma de criar uma condição lógica. Para 
isso, entramos no próximo tópico desta aula. 
Operadores Lógicos 
Em C++, temos três operadores: 
 
No exemplo anterior, precisamos criar uma condição que não deixe 
que o programa aceite valores abaixode 1 E acima de 12. Se fosse 
nas aulas de Matemática, seria fácil: poderíamos criar uma 
expressão assim: 
1<=mês<=12 
Mas em C++, precisamos transformar essa condição de acordo com 
a sintaxe da linguagem. 
Atividades 
Durante a aula, fizemos um exemplo no qual o usuário digita um 
número entre 1 e 12, e o programa retorna a quantidade de dias do 
mês correspondente. Lá, vimos que existem várias formas de fazer 
validação dos dados de forma que o programa não aceite um 
número inválido. 
Tente resolver de outra forma. Porém, agora coloque uma 
instituição na cláusula default, para informar o usuário que o valor 
é inválido. 
GABARITO 
Sugestão de resposta: 
1 #include <iostream> 
2 using namespace std; 
3 
4 int main(int argc, char** argv) { 
5 int mes,dias; 
6 bool invalido = false; 
7 
8 cout<<"Digite o número do mês:"<<endl; 
9 cin>>mes; 
10 
11 switch (mes){ 
12 case 1: 
13 dias = 31; 
14 break; 
15 case 2: 
16 dias = 28; 
17 break; 
18 case 3: 
19 dias = 31; 
20 break; 
21 case 4: 
22 dias = 30; 
23 break; 
24 case 5: 
25 dias = 31; 
26 break; 
27 case 6: 
28 dias = 30; 
29 break; 
30 case 7: 
31 dias = 30; 
32 break; 
33 case 8: 
34 dias = 31; 
35 break; 
36 case 9: 
37 dias = 30; 
38 break; 
39 case 10: 
40 dias = 31; 
41 break; 
42 case 11: 
43 dias = 30; 
44 break; 
45 case 12: 
46 dias = 31; 
47 break; 
48 default: 
49 cout<<"Você digitou um mês inválido"<<endl; 
50 invalido = true; 
51 break; 
52 } 
53 if(!invalido){ 
54 cout<<"O mês "<<mes<<" tem "<<dias<<" dias."; 
55 } 
56 return 0; 
57 } 
O que o seguinte programa imprime na tela? Suponha que: 
 
Nada. O programa está errado; 
6; 
7; 
• 8; 
9. 
GABARITO 
Na linha 3, temos o operador ternário. Neste caso, a interpretação 
da linha é: “ o número é maior que 0? Se for, incremente-o; caso 
contrário, decremente-o. Logo, o programa imprimirá o número 8 
na tela. 
A linguagem C++ oferece as seguintes estruturas de decisão: 
I. if 
II. if – else 
III. Switch 
IV. Operador ternário 
Qual é a alternativa correta? 
Somente I e II; 
Somente I, II e III; 
Somente I e III; 
Somente II, III e IV; 
• Todas estão corretas. 
GABARITO 
A linguagem C ++ oferece as quatro formas de estruturas de 
decisão. 
Observe o seguinte programa: 
 
O que o programa faz se digitarmos o caractere “A”? 
Nada, o programa possuiu erros e não será compilado; 
• Nada será impresso; 
Será impresso “a”; 
Será impresso “z”; 
Será impresso “ Você digitou certo!.” 
GABARITO 
O programa só imprimirá “Você digitou certo” se uma letra 
minúscula for digitada. 
Considere os pedaços de código abaixo: 
 
O resultado da execução dos fragmentos em I e II será, 
respectivamente: 
Perdeu o bônus e ganhou; 
Perdeu e ganhou o bônus; 
Ganhou e ganhou; 
Perdeu e perdeu; 
• Perdeu o bônus e ganhou o bônus. 
GABARITO 
Analisando as condições e valores, vemos que o exercício apenas 
coloca em uma linha o que aprendemos em várias linhas por 
questão de legibilidade.

Continue navegando