' Depende do objeto LDGraph da extensão do LitDev
' Baixar em -> http://litdev.hostoi.com/
'---------------------------------------------------------------------------------------------------------------------'
' Inicialização das constantes pra caracteres especiais de controle em código ASCII: '
'---------------------------------------------------------------------------------------------------------------------'
BEL= Text.GetCharacter (7) ' Produz um beep pelo PC-Speaker interno
BS= Text.GetCharacter (8) ' Backspace (Volta 1 posição prá esquerda)
TAB= Text.GetCharacter (9) ' Tabulação Horizontal (HT)
LF= Text.GetCharacter (10) ' Line-Feed (Pula-Linha)
CR= Text.GetCharacter (13) ' Retorno de Carro (Volta ao início da linha)
ESC= Text.GetCharacter (27) ' Tecla "Esc"
TRI= Text.GetCharacter (30) ' Triângulo
SETA= Text.GetCharacter (187) ' Flecha prá direita
SPC= " " ' Espaço em Branco (SPaCe)
'---------------------------------------------------------------------------------------------------------------------'
' Outros procedimentos de inicialização: '
'---------------------------------------------------------------------------------------------------------------------'
Dec= 4 ' Máx. de casas decimais pros resultados
Plotar= "True" ' Ativa a exibição gráfica da equação
If Program.ArgumentCount > 0 Then ' Checa se algum argumento foi passado pela Interface de Comando de Linha (CLI)
Argumentos() ' Inicializa a variável coeficientes[] com o conteúdo dos argumentos
Goto Pula_ABC ' Pula a 1ª subrotina ABC(), já q serão usados os argumentos provindos da CLI
EndIf
'---------------------------------------------------------------------------------------------------------------------'
' Ponto de partida do laço do programa: '
'---------------------------------------------------------------------------------------------------------------------'
Laço:
TextWindow.Clear() ' Limpa a janela de textos
ABC() ' Requisita q/ o usuário digite 3 valores pra atribuir-lhes os coeficientes a, b & c
Pula_ABC:
Espelhar_Coeficientes() ' Transfere os 3 elementos do conjunto coeficientes[] prás variáveis a, b & c
Criar_Equação() ' Cria a expressão pra exibição q/ representa os coeficientes a, b & c
Exibir_Equação() ' Exibe em forma de equação quadrática os valores obtidos dos coeficientes
If a = 0 And b = 0 Then ' Equação sem raízes!
Resultado_Ø()
Goto Fim
EndIf
If a = 0 Then ' Equação de 1º grau!
Calcular_Linear()
Resultado_Linear()
Goto Fim
EndIf
' Se o programa chegou até aqui, temos certeza q a ≠ 0, e a função é de 2º grau >;-)
Calcular_Δ() ' Obter a discriminante delta e também a sua raiz quadrada
Resultado_Δ()
If Δ < 0 Then ' Equação com raízes complexas!
Calcular_Complexo()
Resultado_Complexo()
Else ' Equação com raízes reais!
Calcular_Quadrático()
Resultado_Quadrático()
EndIf
Fim:
If Plotar Then
Fazer_Gráfico() ' Cria e exibe o gráfico da equação com os valores dos coeficientes
EndIf
Encerrar() ' Perguntar se o usuário deseja calcular outra raiz de 2º grau :-D
Goto Laço ' Volta ao início do laço, caso positivo ^_^
'==================================================================================================='
' Subrotinas Compartimentalizadas do Programa '
'==================================================================================================='
Sub Encerrar
' Encerrar o programa se a tecla 'Q' ou 'Esc' for pressionada:
TextWindow.ForegroundColor= "DarkMagenta
TextWindow.WriteLine (LF + "Pressione 'Q' ou 'Esc' pra encerrar ou qualquer outra pra reiniciar...")
tecla= Text.ConvertToUpperCase ( TextWindow.ReadKey() )
If tecla = "Q" Or tecla = ESC Then
Program.End()
EndIf
Sub Argumentos
' Obtem os 3 primeiros argumentos usados ao rodar o programa
' e armazena-os na variável conjunto coefs[], representando os valores de a, b & c :
For índice= 1 To 3
coefs[índice]= Math.Power( Program.GetArgument(índice), 1 ) ' Eleva-se a 1 pra sanitizar os valores!
EndFor
Sub ABC
' Requisitar os valores de a, b & c do usuário:
TextWindow.ForegroundColor= "Red
TextWindow.WriteLine ("Digite os valores de A, B & C prá equação do 2º grau:")
TextWindow.ForegroundColor= "Magenta
TextWindow.WriteLine ("Modelo -> ax² + bx + c = 0" + LF)
For índice= 97 To 99 ' Seqüência em ASCII correspondentes às letras "a", "b" e "c"
TextWindow.ForegroundColor= "Yellow
TextWindow.Write ( "Valor de " + Text.GetCharacter(índice) + ": " )
TextWindow.ForegroundColor= "White
TextWindow.BackgroundColor= "DarkYellow
coefs[índice - 96]= Math.Power( TextWindow.ReadNumber(), 1 ) ' Sanitiza e armazena o № digitado em coefs[]
TextWindow.BackgroundColor= CorFundo
EndFor
Sub Espelhar_Coeficientes
' Espelha os 3 valores armazenados em coeficientes[] prás variáveis a, b & c
' por motivos de estética e clareza de código, nas partes q calculam as raízes da equação:
a= coefs[1] ' Coeficiente Quadrático "a"
b= coefs[2] ' Coeficiente Linear "b"
c= coefs[3] ' Termo Constante "c"
Sub Criar_Equação
' Cria um cordão alfanumérico representando a equação com os respectivos valores de a, b & c:
equação= "f(x) " + "-> " ' Início da formação da variável alfanumérica "equação"
' Coeficiente Quadrático "a":
' ======================
If a <> 0 Then ' Somente os termos com coeficientes ≠ 0 serão exibidos!
If a <> 1 And a <> -1 Then ' Condição impede de imprimir os №s 1 e -1 na frente da variável x²!
equação= equação + a
ElseIf a = -1 Then ' No caso do -1, apenas o sinal negativo é acrescentado
equação= equação + "-
EndIf
' Coeficiente Linear "b":
'======================
If b <> 0 Then ' Somente os termos com coeficientes ≠ 0 serão exibidos!
If b < 0 Then
equação= equação + "- "
If a = 0 Then
equação= equação + BS ' Se o coeficiente quadrático for nulo, faz com q o sinal negativo fique
EndIf 'colado à variável linear x, ao acrescentar um deslocamento prá esquerda
ElseIf a <> 0 Then ' ( a ≠ 0 & b > 0 )
equação= equação + "+ "
EndIf
If b <> 1 And b <> -1 Then ' Condição impede de imprimir os №s 1 e -1 na frente da variável x!
equação= equação + Math.Abs(b)
EndIf
' Termo Constante "c":
'======================
If a = 0 And b = 0 Then ' Se ambos os x da equação forem nulos,
equação= equação + c + SPC 'imprima o termo constante "c" sem qualquer alteração
ElseIf c <> 0 Then ' Caso contrário, adiciona um sinal antes de imprimi-lo se c ñ for nulo
If c < 0 Then ' ( a ≠ 0 | b ≠ 0 ) & c < 0 c é negativo
equação= equação + "- "
Else ' ( a ≠ 0 | b ≠ 0 ) & c > 0 c é positivo
equação= equação + "+ "
EndIf
Sub Resultado_Ø
' As 2 variáveis x possuem coeficientes nulos:
TextWindow.ForegroundColor= "DarkRed
TextWindow.WriteLine ("Tanto os coeficientes quadrático 'a' e linear 'b' são = 0" + BEL)
TextWindow.WriteLine ("Portanto, as variáveis x são nulas, ñ existindo raiz alguma pra calcular!")
Sub Resultado_Complexo
' Exibir o conjugado complexo no modelo z = x ± ι, sendo ι = √ -1 :
TextWindow.ForegroundColor= "Green
TextWindow.WriteLine ("Esta equação possui 2 raízes complexas conjugadas")
TextWindow.WriteLine ("sendo 1 parte em real e 2 imaginárias:" + LF)