Programação I
E se não for verdade?
Seção 7.3
O que acontece quando a idade for menor que 18?
E se quisermos dar uma resposta indicando que ele não é menor de idade?
O que acha dessa solução?
Solução: else
“Hands on”
Exercício
18 - Menor de 3
https://www.thehuxley.com/problem/18
Tentem um pouco, depois farei com vocês!
Dica: assuma que um dos números é o menor e só faça algo caso você esteja errado.
Não use “else”
Selecionando entre várias opções
Desafio
O chefe decide dar um aumento escalonado a todos os funcionários. Faça um programa que dado o salário do funcionário, calcule o novo salário.
Primeira tentativa
E se o salário for 950?
1 ...
2 if (salario <= 1000)
3 {
4 salario = salario * 1.15 // 15% de aumento
5 }
6 if (salario > 1000 && salario <= 2000 )
7 {
8 salario = salario * 1.10 // 10% de aumento
9 }
10 if (salario > 2000)
11 {
12 salario = salario * 1.05 // 5% de aumento
13 }
14 printf(“O novo salário é de: %d\n”,salario);
15 ...
Primeira tentativa
E se o salário for 950?
Qual foi o nosso problema?
1 ...
2 if (salario <= 1000)
3 {
4 salario = salario * 1.15 // 15% de aumento
5 }
6 if (salario > 1000 && salario <= 2000 )
7 {
8 salario = salario * 1.10 // 10% de aumento
9 }
10 if (salario > 2000)
11 {
12 salario = salario * 1.05 // 5% de aumento
13 }
14 printf(“O novo salário é de: %d\n”,salario);
15 ...
Precisamos escolher apenas uma dentre várias opções:
else if
1 if (expressão 1)
1 {
2 bloco de comandos 1
3 }
4 else if (expressão 2)
5 {
6 bloco de comandos 2
7 }
8 ...
9 else if (expressão n)
10 {
11 bloco de comandos n
12 }
13 else
14 {
15 bloco comandos n+1
16 }
1 ...
1 if (salario <= 1000)
2 {
3 salario = salario * 1.15 // 15% de aumento
4 }
5 else if (salario > 1000 && salario <= 2000 )
6 {
7 salario = salario * 1.10 // 10% de aumento
8 }
9 else if (salario > 2000)
10 {
11 salario = salario * 1.05 // 5% de aumento
12 }
13 printf(“O novo salário é de: %d\n”,salario);
14 ...
Dá pra melhorar?
Exercícios
Exemplos de valores para testar: 1000, 2000, 2050, 2100, 2150, 5000, 6000, 8000, 8100, 20000
Exercícios
3. Altere para que a tabela seja
Exercício
Huxley: 42 - Eleitor - https://www.thehuxley.com/problem/42
Exercício
Exercício
Huxley - 2 números em ordem crescente - https://www.thehuxley.com/problem/691
2 números em ordem crescente
2 números em ordem crescente
Vamos melhorar nossa solução
1- Trocar o conteúdo entre duas variáveis
2- Fazer de conta que uma situação é verdade e só agir caso contrário.
Assuma que a é o menor
Se for verdade, basta imprimir a b , nessa ordem.
Mas ainda restam 2 situações:
Mas se forem iguais, tanto faz a ordem da impressão
1 #include<stdio.h>
2 int main()
3 {
4 int a, b;
5 scanf("%d%d",&a,&b);
6 if (a > b)
7 {
8 // TROCAR O VALOR DE A POR B
9 }
10 printf("%d %d\n",a,b);
11 return 0;
}
Como trocar os valores entre a e b?
Primeira tentativa:
a = b;
b = a;
Forma correta
temp = a;
a = b;
b = temp;
E agora? como ficaria a nossa solução?