Exercícios Resolvidos de Ponteiros e funções

Ver Teoria

Enunciado

Implemente uma função que calcule as raízes de uma equação do segundo grau do tipo

A x 2 + B x + C = 0

Lembrando que:

X = - B ± Δ 2 ⋅ A

Onde:

Δ = B 2 - 4 A C

A variável A têm que ser diferente de zero.

  • Se Δ < 0 não existe raiz.
  • Se Δ = 0 existe uma raiz real.
  • Se Δ > 0 existe duas raízes reais.

A função deve obedecer ao seguinte protótipo:

i n t   r a i z e s ( f l o a t   A ,   f l o a t   B ,   f l o a t   C ,   f l o a t   & X 1 ,   f l o a t   & X 2 )

Essa função deve retornar à quantidade de raízes reais e da equação, e os valores das raízes devem ser armazenados nas variáveis referenciadas por X 1 e X 2 .

Passo 1

Vamos lá pessoal! Essa é uma questão de função com passagem por referência.

A questão pede pra gente criar uma função que calcula uma equação de segundo grau. Mas tem um detalhe, uma equação de segundo grau pode ter até dois resultados, porém uma função do C++ retorna apenas um único valor. Então, como podemos retornar dois valores?

É aí que entra a passagem por referência! Ao invés de retornar as raízes da equação, nós vamos passar as variáveis X 1 e X 2 como argumentos da função através de passagem por referência. Dessa forma, quando a gente alterar o conteúdo de X 1 e X 2 dentro da função, essa alteração será automaticamente aplicada nas variáveis fora da função!

Ou seja, usar passagem por referência possibilita que uma função do C++ “retorne” mais de um valor.

Com tudo isso entendido, vamos começar o nosso código. Vamos escrever o cabeçalho do código incluindo a biblioteca c m a t h para facilitar nossas contas.

Passo 2

Começaremos a função.

A questão já da pra gente a assinatura da questão:

i n t   r a i z e s ( f l o a t   A ,   f l o a t   B ,   f l o a t   C ,   f l o a t   & X 1 ,   f l o a t   & X 2 )

Vamos entender. Primeiro de tudo, essa é uma função do tipo i n t , ou seja, que retorna um valor inteiro. O retorna dessa função é a quantidade de raízes existentes na equação, que pode ser zero, uma ou duas raízes.

Agora vamos olhar os parâmetros. Primeiro, os coeficientes da função de segundo grau A ,   B e C serão recebidos através de passagem por valor com tipo f l o a t .

Logo em seguida, usando passagem por referência, serão recebidos X 1 e X 2 . Essas variáveis irão armazenar os resultados da equação de segundo grau. Como elas foram passadas por referência, todas as alterações que fizermos dentro da função será refletida fora da função também.

Então vamos iniciar a nossa função:

O primeiro cálculo que temos de fazer é o do delta da equação:

Δ = B 2 - 4 A C

Show de bola. Agora existem três possibilidades de resposta:

  1. Não há resposta! Isso ocorre quando Δ < 0 ou quando A = 0
  2. Existe uma única resposta. Ocorre quando Δ = 0
  3. Existe duas respostas. Que ocorre quando Δ > 0

Então vamos desenvolver uma estrutura i f - e l s e para considerar os três casos

Passo 3

Beleza, vamos continuar desenvolvendo a função.

A primeira situação acontece quando não existe resposta esses são os casos quando delta é menor que zero ou quando o coeficiente A é igual a zero.

Na biblioteca c m a t h temos a palavra-chave N A N que significa “não é um número” (not a number). A gente usa essa palavra-chave em situações em que a resposta não pode ser calculada. Ou seja, a gente não pode calcular os valores os valores de X 1 e X 2 , então eles serão definidos como N A N .

Além disso, o número de raízes é zero! Então vamos retornar 0 .

O segundo caso ocorre quando Δ = 0 . Nesse caso, as duas raízes serão iguais, então calculamos apenas uma vez, e igualamos um resultado com o outro. E como temos apenas uma única raiz, retornamos 1

A última situação ocorre quando Δ > 0 . Então a gente calcula as duas raízes e retorna 2 :

Passo 4

Agora a gente precisa testar a nossa função. Pra isso precisamos de uma m a i n ( )

Primeira vamos declarar as duas variáveis x 1 e x 2 do tipo f l o a t   que vão armazenar os resultados da equação.

E também vamos precisar de uma variável inteira que armazene a quantidade de raízes existentes na equação:

Pronto! Agora é só fazer vários testes, com várias combinações diferentes de parâmetros.

Rodando o código com todos esses testes vamos ter o seguinte resultado:

E pronto! Questão feita!

Resposta