✅ PROBLEMA: Desenvolva um algoritmo que calcule as soluções de uma equação do 2º grau qualquer.
-
- Deve ser feito um teste para verificar se a equação fornecida pelo operador é ou não uma equação do 2º grau.
- Verifique também se, a partir do valor de delta (∆) encontrado, a equação dada possui raízes reais ou não.
📚 O que é uma equação do 2º Grau?
Uma equação do segundo grau é uma equação algébrica da forma ax² + bx + c = 0, onde a e b são os coeficiente, c é o termo independente e x é a incógnita. Uma equação do segundo grau pode ser resolvida usando a fórmula geral:

Onde:
-
- a, b e c são, respectivamente, os coeficientes de x e o termo independente da equação ax² + bx + c = 0. Observe que, se a = 0, teremos: 0.x² + bx + c = bx + c = 0 (Equação do 1º Grau);
- e ∆ é o discriminante, dado por: ∆ = b² – 4 . a . c.
Individualmente as raízes são dadas por:

Contudo, a presença ou ausência de raízes reais depende do valor do discriminante (∆ = b² – 4 . a . c):
-
- Se ∆ > 0, a equação tem duas raízes reais distintas, x’ e x”;
- Se ∆ = 0, a equação tem uma raiz real única dada por: -b/2.a;
- Se ∆ < 0 negativo, a equação não tem raízes reais.
RESUMINDO…
Para resolver uma equação do 2º grau da forma ax² + bx + c = 0:
-
- Utilizamos a fórmula geral: x = (-b ± √∆) / 2.a.
- Substituímos os valores de a, b e c na fórmula.
- Calculamos o valor de delta (∆ = b² – 4.a.c).
- Verificamos se delta é positivo, negativo ou zero.
- Caso delta seja positivo, temos duas raízes reais e distintas, dadas por x‘ = (-b – √∆) / 2.a e x” = (-b + √∆) / 2.a, respectivamente.
- Caso delta seja igual a zero, temos uma raiz real e dupla, dada por -b/2.a.
- Caso delta seja negativo, não há raízes reais.
Exemplo: Resolvendo a equação x² + 5x + 6 = 0.
-
- Temos: a = 1, b = 5 e c = 6.
- Calculamos o discriminante:
∆ = b² – 4ac
∆ = 5² – 4 .1 .6
∆ = 25 – 24
∆ = 1 - Como ∆ > 0, temos duas raízes reais e distintas.
- Utilizando a fórmula geral:
x = (-b ± √∆) / 2a
x = (-5 ± √(1)) / 2
x = (-5 ± 1) / 2
Temos:
x’ = (-5 + 1) / 2
x’ = -2
e
x” = (-5 – 1) / 2
x” = -4 - Concluímos que as raízes da equação x² + 5x + 6 = 0 são -2 e -4.
💻 Algoritmo: Portugol | VisuaAlg.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
algoritmo "Equação do 2º Grau" // Função : Solução de uma equação do 2º Grau // Autor : Hélio Andrade // Data : 18/02/2014 var a, b, c, delta, x1, x2: real inicio // Solicita os valores dos coeficientes a, b e c da equação escreva("a = ") leia(a) escreva("b = ") leia(b) escreva("c = ") leia(c) // Calcula o valor de delta delta <- b^2 - 4 * a * c // Verifica as condições para existência de raízes reais se(delta < 0) entao // Exibe o valor de delta e informa que não existem raízes reais escreval("DELTA = ", delta) escreva("Não existem raízes reais!") senao se(delta = 0) entao // Calcula e exibe o valor de x quando delta é igual a zero (uma única raiz) x1 <- -b/(2*a) escreval("DELTA = ", delta) escreval("x' = x'' = ", x1:6:2) senao // Calcula e exibe os valores de x quando delta é maior que zero (duas raízes) x1 <- (-b - raizq(delta)) / (2 * a) x2 <- (-b + raizq(delta)) / (2 * a) escreval("x' = ", x1:6:2) escreval("x'' = ", x2:6:2) fimse fimse fimalgoritmo |
⚠️ Exercícios para testar o algoritmo. Clique aqui! ⚠️
—
Já sabemos que, para a equação ax² + bx + c = 0 ser considerada do 2º grau, o coeficiente a deve ser diferente de zero (a ≠ 0). O algoritmo com as alterações que verificam essa condição é mostrado abaixo. [As alterações feitas estão nas linhas 15, 33, 34 e 35, respectivamente.]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
algoritmo "Equação do 2º Grau" // Função : Solução de uma equação do 2º Grau // Autor : Hélio Andrade // Data : 18/02/2014 var a, b, c, delta, x1, x2: real inicio // Solicita ao usuário para inserir os valores dos coeficientes a, b e c escreva("a = ") leia(a) escreva("b = ") leia(b) escreva("c = ") leia(c) // Verifica se a equação é do 2º grau (a diferente de zero) se (a <> 0) entao // Calcula o valor do discriminante (delta) delta <- b^2 - 4 * a * c // Verifica se existem raízes reais com base no valor do discriminante se(delta < 0) entao // Exibe o valor do discriminante e informa que não existem raízes reais escreval("DELTA = ", delta) escreva("Não existem raízes reais!") senao // Verifica se existem uma ou duas raízes reais com base no valor do discriminante se(delta = 0) entao // Calcula e exibe o valor da única raiz real (x) x1 <- -b/(2*a) escreval("DELTA = ", delta) escreval("x' = x'' = ", x1:6:2) senao // Calcula e exibe os valores das duas raízes reais (x1 e x2) x1 <- (-b - raizq(delta)) / (2 * a) x2 <- (-b + raizq(delta)) / (2 * a) escreval("x' = ", x1:6:2) escreval("x'' = ", x2:6:2) fimse fimse senao // Informa ao usuário que não é uma equação do 2º grau (a igual a zero) escreval("Não é uma equação do 2º grau!") fimse fimalgoritmo |
—
EXPLICANDO…
- Linha 1 – Aqui é dado um nome ao algoritmo com a palavra reservada
algoritmo
. - Linhas 2, 3 e 4 – São informações adicionais (comentários) definidas com as duas barras,
//
, no começo de cada linha. Lembre-se: comentários são importantes para deixar seus algoritmos mais legíveis e são ignorados durante a execução do código. - Linha 5 – A instrução
var
define que variáveis estão sendo declaradas. - Linha 6 – são declaradas as seguintes variáveis:
a, b, c, delta, x1, x2
do tiporeal
. Observe que nomes de variáveis não podem conter símbolos, caracteres especiais nem acentos, então, no lugar de ∆, x’ e x” declaramosdelta
,x1
ex2
, respectivamente. - Linhas 7 e 36 – As palavras reservadas
inicio
efimalgoritmo
, como seus nomes já dizem, indicam o início e o fim do algoritmo propriamente dito. - Linhas 8 a 13 – Aqui ocorrem as entradas de dados por meio da exibição de uma mensagem, instruções
escreva("a = ")
,escreva("b = ")
eescreva("c = ")
; seguida da leitura do que foi digitado no teclado, instruçõesleia(a)
,leia(b)
eleia(c)
. - Linha 14 – Linha em branco; ignorada durante a execução do algoritmo.
- Linha 15 – A instrução
se(a <> 0) entao
verifica se a ≠ 0, e caso seja, serão executadas as linhas 16 a 32; se a = 0, será executada a linha 34,escreval("Não é uma equação do 2º grau!"
). - Linha 16 – O valor de ∆ é calculado:
delta <- b^2 - 4 * a *
c
. - Linha 17 – Linha em branco; ignorada durante a execução do algoritmo.
- Linha 18 – Verifica se ∆ < 0. Se for verdadeiro, são executadas a linhas 19 e 20:
escreval("DELTA = ", delta
)
eescreval("DELTA = ", delta)
, respectivamente. - Linha 21 – Instrução
senao
: até aqui já sabemos que ∆ não é negativo (menor que zero) e nos resta saber se ele é igual a zero ou maior que zero… - Linha 22 – Aqui fazemos o teste para saber se ∆ é igual a zero com a instrução
se(delta = 0)
entao
, caso seja, existirá apenas uma raiz para a equação e será calculada na linha 23 com a instruçãox1 <- -b/(2*a
)
e exibido na tela"DELTA = "
seguido pelo valor de delta (linha 24), e"x' = x'' = "
seguido pelo valor dex1
(linha 25). - Linha 26 – Instrução
senao
: caso as condições nas instruçõesse
anteriores não sejam atendidas, ou seja, ∆ não é menor que zero nem igual a zero, é calculadox1
através da fórmulax1 <- (-b - raizq(delta)) / (2 * a)
, linha 27, ex2
através da fórmulax2 <- (-b + raizq(delta)) / (2 * a)
, linha 28.-
- O cálculo da raiz quadrada de ∆ é feito com a função
raizq()
. - Em seguida, são exibidos na tela
"x' = "
seguido pelo valor dex1
e"x'' = "
seguido pelo valor dex2
, linhas 29 e 30.
Observe que os valores das raízes calculadas serão exibidos com tamanho máximo de 6 caracteres (dígitos) dos quais 2 são reservados para casas decimais, conforme a formataçãox1:6:2
ex2:6:2
.
- O cálculo da raiz quadrada de ∆ é feito com a função
-
- Linha 31 – Instrução
fimse
: indica o fechamento dose
é da linha 22. Cuidado: para cadase
deve haver umfimse
associado. - Linha 32 – Instrução
fimse
: indica o fechamento dose
é da linha 18. - Linhas 33 e 34 – Instrução
senao
: verifique a explicação dada na linha 15. - Linha 35 – Instrução
fimse
: indica o fechamento dose
é da linha 15. - Linha 36 – Instrução
fimalgoritmo
: marca o final do algoritmo.
—
🐍 Versão em Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# Algoritmo "Equação do 2º Grau" # Autor : Hélio Andrade # Data : 18/02/2014 a = float(input("a = ")) b = float(input("b = ")) c = float(input("c = ")) if a != 0: delta = b**2 - 4 * a * c if delta < 0: print("DELTA = ", delta) print("Não existem raízes reais!") elif delta == 0: x1 = -b/(2*a) print("DELTA = ", delta) print("x' = x'' = ", x1) else: x1 = (-b - (delta)**0.5) / (2 * a) x2 = (-b + (delta)**0.5) / (2 * a) print("x' = ", x1) print("x'' = ", x2) else: print("Não é uma equação do 2º grau!") |
🔥 E para atiçar ainda mais sua curiosidade, podemos modificar o código acima em Python para que seja desenhado (plotado) o gráfico da equação do segundo grau dada! Vejamos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
import numpy as np import matplotlib.pyplot as plt # Solicita os valores dos coeficientes a, b e c da equação a = float(input("a = ")) b = float(input("b = ")) c = float(input("c = ")) # Verifica se é uma equação do 2° grau if a != 0: eq = "Equação do 2° Grau" delta = b**2 - 4 * a * c # Verifica as condições para existência de raízes reais if delta < 0: print("DELTA = ", delta) print("Não existem raízes reais!") elif delta == 0: x1 = -b/(2*a) print("DELTA = ", delta) print("x' = x'' = ", x1) else: x1 = (-b - (delta)**0.5) / (2 * a) x2 = (-b + (delta)**0.5) / (2 * a) print("x' = ", x1) print("x'' = ", x2) else: print("Não é uma equação do 2º grau!") eq = "Equação do 1° Grau" # Cria um array de valores de x para plotar o gráfico x = np.linspace(-10, 10, 100) y = a*x**2 + b*x + c # Plota o gráfico da equação plt.plot(x, y) plt.xlabel("x") plt.ylabel("y") # Define o título do gráfico com base no tipo de equação plt.title(eq) plt.show() |
Saída:
1 2 3 4 5 |
a = -1 b = -4 c = 16 x' = 2.4721359549995796 x'' = -6.47213595499958 |
📈 Gráfico gerado:
—
📚 Livros
-
- Aprendendo Algoritmo com Visualg
Rafael Soares de Almeida
<https://amzn.to/3DeiwxN>
- Aprendendo Algoritmo com Visualg
-
- Introdução à linguagem Python
José Augusto N. G. Manzano
<https://amzn.to/3tS3A2Y>
- Introdução à linguagem Python
-
- Algoritmos: Lógica para Desenvolvimento de Programação de Computadores
José Augusto N. G. Manzano e Jayr Figueiredo de Oliveira
<https://amzn.to/43sGKic>
- Algoritmos: Lógica para Desenvolvimento de Programação de Computadores
—
*Atualizado em 19 de julho de 2023
Em JavaScript:
Em Java:
Versão desse algoritmo em Dart:
Versão desse algoritmo em Linguagem C:
As raízes da equação x2 +5x + 6 são -2 e -3. -4 não é raiz da equação
Estou iniciando em programação e não entendi por que foi usado dois pontos e os números 6 e 2 nas expressões:
escreval(“x’ = “, x1:6:2) e escreval(“x” = “, x2:6:2).
Alguém poderia me explicar?
@José Nicolau, suponhamos que você queira exibir o número decimal n = 1234.56. No Portugol do VisuAlg (que é baseado na linguagem Pascal), isso é feito da seguinte maneira: n:7:2 – 7 é a quantidade de dígitos incluindo o ponto e casas decimais, e 2 indica a reserva de duas casas decimais após o ponto decimal.
Estou iniciando em programação e não entendi por que foi usado dois pontos e os números 6 e 2 nas expressões:
escreval(“x’ = “, x1:6:2) e escreval(“x” = “, x2:6:2).
Alguém poderia me explicar?
vlw
Davi, dê uma olhada neste vídeo -> https://www.youtube.com/watch?v=6sL029vc1XA
Muito obrigado, Hélio!
Disponha.
A fórmula da resolução da equação do 2º grau não é de Bhaskara. Favor alterar o texto “Fórmula de Bhaskara”. Maiores informações leia o texto disponível no site https://www.somatematica.com.br/curiosidades/c65.php
Valeu, Vicente! Corrigido!