Resolução dos Exercícios

Capítulo 4
Comandos de Seleção (IF-THEN e IF-THEN-ELSE)



1. Considere a seguinte classificação de consumidores, baseada na percentagem do salário gasto com itens da cesta básica:

Esbanjador até 25% (inclusive)
Gastador entre 25% e 53% (inclusive)
Comedido entre 53% e 75% (inclusive)
Essencial entre 75% e 95% (inclusive)

(a)
Fazer um programa ClassificaConsumo, que recebe um número de 0 a 100 (real), representando a percentagem do salário gasta por uma família com itens da cesta básica, e retorna uma cadeia (string), contendo a classificação correspondente.
(b)
Fazer uma planilha com duas colunas. Na primeira, a percentagem do salário gasta por uma família com itens da cesta básica, que deve ir variando de 0 a 100% em intervalos de 10%. A segunda coluna contém a classificação.
(c)
O que acontece com 100%?
Resolução:
(a)

Function ClassificaConsumo(numero As Double) As String
    
    Dim resposta As String
    
    If numero <= 25 Then
        resposta = "Esbanjador"
    ElseIf numero > 25 And numero <= 53 Then
        resposta = "Gastador"
    ElseIf numero > 53 And numero <= 75 Then
        resposta = "Comedido"
    ElseIf numero > 75 And numero <= 95 Then
        resposta = "Essencial"
    End If
    
    ClassificaConsumo = resposta
    
End Function

(c)

100% não se enquadra em nenhuma classificação, portanto não é classficado!



2. Na vida real, as fronteiras de classificação são menos definidas. Suponha que nós tenhamos a seguinte classificação, ``com buracos'':

Esbanjador até 20%
Gastador entre 25% e 45%
Comedido entre 53% e 75%
Essencial entre 80% e 95%

(a)
Fazer um programa ClassificaConsumo2 tal que, se algum percentagem for fornecida que não é coberta pelos intervalos acima, o programa deve fornecer a cadeia "INDEFINIDO".
(b)
Fazer uma planilha semelhante à do exercício anterior.
Resolução:
(a)

Vamos resolver este exercício de 2 maneiras. Na função ClassificaConsumo2 resolvemos de uma forma mais simples, porém menos clara. A função ClassificaConsumo3 mostra uma outra forma (mais trabalhosa) de resolver o mesmo problema.

Function ClassificaConsumo2(numero As Double) As String
    
    ' Há 2 formas de resolver este exercício, a primeira é
    ' a mais simples:

    
    Dim resposta As String
    
    ' Basta supormos que no início todo consumidor é INDEFINIDO,
    ' caso ele se encaixe em alguma outra classificação, a resposta
    ' será alterada nos If's abaixo

    resposta = "INDEFINIDO"
    
    If numero < 20 Then
        resposta = "Esbanjador"
    ElseIf numero > 25 And numero < 45 Then
        resposta = "Gastador"
    ElseIf numero > 53 And numero < 75 Then
        resposta = "Comedido"
    ElseIf numero > 80 And numero < 95 Then
        resposta = "Essencial"
    End If
    
    ClassificaConsumo2 = resposta
    
End Function

Function ClassificaConsumo3(numero As Double) As String
    
    ' A outra forma de resolver este exercício é, preenchendo os
    ' buracos da classificação, e resolvermos da mesma maneira
    ' do exercício 1

    
    Dim resposta As String
    
    If numero < 20 Then
        resposta = "Esbanjador"
    ' Primeiro buraco:
    ElseIf numero >= 20 And numero <= 25 Then
        resposta = "INDEFINIDO"
    ElseIf numero > 25 And numero < 45 Then
        resposta = "Gastador"
    ' Segundo buraco:
    ElseIf numero >= 45 And numero <= 53 Then
        resposta = "INDEFINIDO"
    ElseIf numero > 53 And numero < 75 Then
        resposta = "Comedido"
    ' Terceiro buraco:
    ElseIf numero >= 75 And numero <= 80 Then
        resposta = "INDEFINIDO"
    ElseIf numero > 80 And numero < 95 Then
        resposta = "Essencial"
    ' Quarto buraco:
    ElseIf numero >= 95 And numero <= 100 Then
        resposta = "INDEFINIDO"
    End If
    
ClassificaConsumo3 = resposta
    
End Function



3. Considere uma equação do segundo grau (a * x2 + b*x + c = 0). Utilizando a função DELTA desenvolvida nos exercícicios do capítulo anterior, escreva um programa que calcula a(s) raíz(es) desta equação, tal que:

(a)
Se não houver raízes (Delta < 0), o programa retorna -9999.
(b)
Se houver uma única raiz (Delta = 0), o programa retorna o valor da raiz única igual a -b/2a.
(c)
Se houver duas raízes (Delta 0) o programa calcula as duas raízes: (x1 = ( -b - SQRT(Delta) )/ (2*a)) e (x2 = ( -b + SQRT(Delta) )/ (2*a))onde SQRT(X) é uma função pré-definida que calcula a raiz quadrada. O programa deve retornar a maior das duas raízes.
Crie uma planilha de 4 colunas. As três primeiras contêm os coeficientes da equação do segundo grau. A quarta contém o valor da maior raiz.

Atenção: A função SQRT não existe, o correto é SQR.

Resolução:

Lembrando a função DELTA do capítulo anterior:

Function delta(a As Double, b As Double, c As Double) As Double
    
    delta = b ^ 2 - 4 * a * c
    
End Function

Agora a função pedida:

Function CalculaRaiz(a As Double, b As Double, c As Double) As Double
    
    Dim valorDelta As Double ' Esta variável irá armazenar o valor de Delta
    Dim resposta As Double
    Dim x1 As Double ' Valor da raíz 1
    Dim x2 As Double ' Valor da raíz 2
    
    ' Repare que foi pedido no enunciado para utilizar a função DELTA
    ' desenvolvida nos exercícios do capítulo 3, portanto não iremos
    ' chamar a função DELTA já desenvolvida

    valorDelta = delta(a, b, c)
    
    ' Agora iremos calcular as raízes
    
    ' Se Delta = 0, não há raízes reais
    If valorDelta < 0 Then
        resposta = -9999
    
    ' Se Delta = 0, não 2 raízes reais iguais
    ElseIf valorDelta = 0 Then
        resposta = -b / (2 * a)
    
    ' Se Delta > 0, não 2 raízes reais distintas
    ElseIf valorDelta > 0 Then
    
        'Iremos calcular as 2 raízes:
        ' (há um erro no enunciado, a função SQRT(X) não existe
        ' o correto é SQR(X))

        x1 = (-b - Sqr(valorDelta)) / (2 * a)
        x2 = (-b + Sqr(valorDelta)) / (2 * a)
    
        'Vamos verificar qual é a maior raíz...
        If x1 > x2 Then
            resposta = x1
        Else
            resposta = x2
        End If
    
    End If
    
    CalculaRaiz = resposta
    
End Function

[ Voltar ]