1 of 26

Programação I

E se não for verdade?

Seção 7.3

2 of 26

O que acontece quando a idade for menor que 18?

E se quisermos dar uma resposta indicando que ele não é menor de idade?

3 of 26

O que acha dessa solução?

4 of 26

Solução: else

5 of 26

6 of 26

“Hands on”

  1. Faça você mesmo o código anterior.
  2. Quando uma pessoa é classificada como idoso, ela tem direito à gratuidade no uso do transporte público. No Brasil, considera-se idosas as pessoas com 60 anos ou mais. Modifique o seu programa para que dada uma idade, imprima “gratuito”, quando a idade representar um idoso ou “pagante” caso contrário.
  3. Faça um programa que imprima “par” quando o número digitado for par ou “ímpar” quando o número digitado for ímpar.
  4. Faça um programa que dado um número inteiro, indique se o número é múltiplo de 5

7 of 26

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”

8 of 26

Selecionando entre várias opções

9 of 26

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.

10 of 26

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

11 of 26

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

12 of 26

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 }

13 of 26

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?

14 of 26

15 of 26

Exercícios

  1. Escreva, compile e execute o problema do salário.
  2. Altere para que a tabela de aumentos seja:

Exemplos de valores para testar: 1000, 2000, 2050, 2100, 2150, 5000, 6000, 8000, 8100, 20000

16 of 26

Exercícios

3. Altere para que a tabela seja

17 of 26

Exercício

Huxley: 42 - Eleitor - https://www.thehuxley.com/problem/42

18 of 26

Exercício

Huxley - 6 - Equação do segundo grau - https://www.thehuxley.com/problem/6

19 of 26

Exercício

Huxley - 2 números em ordem crescente - https://www.thehuxley.com/problem/691

20 of 26

2 números em ordem crescente

21 of 26

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.

22 of 26

Assuma que a é o menor

Se for verdade, basta imprimir a b , nessa ordem.

Mas ainda restam 2 situações:

  • quando a é maior que b
  • quando são iguais

Mas se forem iguais, tanto faz a ordem da impressão

23 of 26

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;

}

24 of 26

Como trocar os valores entre a e b?

Primeira tentativa:

a = b;

b = a;

25 of 26

Forma correta

temp = a;

a = b;

b = temp;

26 of 26

E agora? como ficaria a nossa solução?