Calculadora de Equação de Segundo Grau, ora funciona, ora não. [RESOLVIDO]

1. Calculadora de Equação de Segundo Grau, ora funciona, ora não. [RESOLVIDO]

NN
NomeUnderground

(usa Debian)

Enviado em 19/12/2017 - 21:25h

Quando tento algums calculos, como:
a = 1
b = 1
c = -1
Dá: 0.618034 -1.618034
Este resultado está certo, porém se eu fizer a: 2, b:3, c:-5, o resultado é: 4 e -10 que está errado
O código que fiz:
program bhaskara;

var a, b, c, delta, x, bn, xp, xn : real;

begin
write('Digite o valor de a: ');
readln(a);
if a = 0 then
begin
writeln('A não pode ser 0');
exit;
end
else
begin
writeln('Valor de a está ok');
end;
write('Digite o valor de b: ');
readln(b);
write('Digite o valor de c: ');
readln(c);
writeln('Indo calcular delta');
delta := (b*b)-(4*a*c);
writeln(delta:0:6);
writeln('Indo calcular b negativo');
bn := (-1)*b;
writeln('Indo calcular x negativo');
xn := (bn - sqrt(delta))/2*a;
writeln('Indo calcular x positivo');
xp := (bn + sqrt(delta))/2*a;
writeln('Duas raízes foram achadas: ', xp:0:6, ' ', xn:0:6);
end.

Edit 1: Eu uso o compilador Free Pascal


  


2. Re: Calculadora de Equação de Segundo Grau, ora funciona, ora não. [RESOLVIDO]

NN
NomeUnderground

(usa Debian)

Enviado em 20/12/2017 - 12:05h

Fiz umas mudanças no código. Expliquei as variáveis e também tirei o teste de "a = 0", pois a nunca pode ser 0, e acho provável que o usuário saiba disso.
program bhaskara;

var a { a letra "a" }, b{ a letra "b"}, c { a letra "c"}, delta{ o delta }, x { o valor de x }, bn{ usei para transformar o b em um número negativo }, xp{ o x pode ter dois valores, este é do x positivo }, xn { x negativo} : real;

begin
write('Digite o valor de a: ');
readln(a); { recebe o valor de a }
write('Digite o valor de b: ');
readln(b); { recebe o valor de b }
write('Digite o valor de c: ');
readln(c); { recebe o valor de c }
writeln('Indo calcular delta');
delta := (b*b)-(4*a*c); { calcula o delta }
writeln(delta:0:6); { mostrei o delta só por teste }
writeln('Indo calcular b negativo');
bn := (-1)*b; { aqui transforma o b em negativo para calcular o bhaskara }
writeln('Indo calcular x negativo');
xn := (bn - sqrt(delta))/2*a; { calcula um dos valores do x, no caso o negativo }
writeln('Indo calcular x positivo');
xp := (bn + sqrt(delta))/2*a; { calcula o valor positivo do x }
writeln('Duas raízes foram achadas: ', xp:0:6, ' ', xn:0:6);
end.


 
 Frases do Mês  

"A Microsoft não é má. Eles só fazem sistemas operacionais realmente ruins." Linus Torvalds 

"Levar os homens à verdade é o maior benefício que se pode prestar aos outros.
" - Santo Tomás de Aquino





3. Re: Calculadora de Equação de Segundo Grau, ora funciona, ora não.

NN
NomeUnderground

(usa Debian)

Enviado em 20/12/2017 - 12:30h

Consegui resolver, o erro está em 2*a, na verdade era para ser (2*a) entre parênteses:
program bhaskara;

var a { constante "a" }, b{ a constante "b"}, c { a constante "c"}, delta{ o delta }, x { o valor de x }, bn{ usei para transformar o valor simétrico do b }, x1{ o primeiro x}, x2 { o segundo x} : real;

begin
write('Digite o valor de a: ');
readln(a); { recebe o valor de a }
if a = 0 then
begin
writeln('A não pode ser 0');
exit;
end;
write('Digite o valor de b: ');
readln(b); { recebe o valor de b }
write('Digite o valor de c: ');
readln(c); { recebe o valor de c }
writeln('Indo calcular delta');
delta := (b*b)-(4*a*c); { calcula o delta }
writeln(delta:0:6); { mostrei o delta só por teste }
writeln('Indo calcular b negativo');
bn := (-1)*b; { aqui transforma o b em negativo para calcular o bhaskara }
writeln('Indo calcular x negativo');
x2 := (bn - sqrt(delta))/(2*a); { calcula um dos valores do x, no caso o negativo }
writeln('Indo calcular x positivo');
x1 := (bn + sqrt(delta))/(2*a); { calcula o valor positivo do x }
writeln('Duas raízes foram achadas: ', x1:0:6, ' ', x2:0:6);
end.


A Microsoft não é má. Eles só fazem sistemas operacionais realmente ruins." Linus Torvalds 

"Levar os homens à verdade é o maior benefício que se pode prestar aos outros.
" - Santo Tomás de Aquino





4. Re: Calculadora de Equação de Segundo Grau, ora funciona, ora não. [RESOLVIDO]

lainion
lainion

(usa Void Linux)

Enviado em 20/12/2017 - 13:41h

Faz um loop até a não ser zero.
pascal computa raiz negativa??

Não subestime o usuário



5. Re: Calculadora de Equação de Segundo Grau, ora funciona, ora não. [RESOLVIDO]

NN
NomeUnderground

(usa Debian)

Enviado em 20/12/2017 - 14:53h

lainion escreveu:

Faz um loop até a não ser zero.
pascal computa raiz negativa??

Não subestime o usuário


Verdade, seria até melhor um while do que um if, pois assim se o usuário usar 0, não precisa abrir o programa de novo, mas sim, apenas digitar um outro número.
Sobre raiz negativa não sei muito bem, comecei no pascal faz pouco tempo. Quanto ao delta ficar negativo e na hora da raiz dar problema ( Não sei se dá problema, nunca testei ), mas aí é só colocar um if depois de calcular o delta:

if delta < 0 then
begin
writeln('Nenhuma raíz real'); { Pois quando o delta é negativo, não haverá nenhuma raiz real, que eu saiba }
exit;
end;


Valeu pelas dicas.

 
 Frases do Mês  

"A Microsoft não é má. Eles só fazem sistemas operacionais realmente ruins." Linus Torvalds 

"Levar os homens à verdade é o maior benefício que se pode prestar aos outros.
" - Santo Tomás de Aquino





6. Re: Calculadora de Equação de Segundo Grau, ora funciona, ora não. [RESOLVIDO]

NN
NomeUnderground

(usa Debian)

Enviado em 20/12/2017 - 14:58h

Acabei de testar aqui, o Pascal dá erro quando recebe raiz negativo:

program teste;

var raiz, testeraiz : real;

begin
raiz := -4;
testeraiz := sqrt(raiz);
writeln(testeraiz);
end.
Output: Runtime error 200 at $00000000004001EF
$00000000004001EF
$000000000040018F


Não chega nem ao "writeln".

 
 Frases do Mês  

"A Microsoft não é má. Eles só fazem sistemas operacionais realmente ruins." Linus Torvalds 

"Levar os homens à verdade é o maior benefício que se pode prestar aos outros.
" - Santo Tomás de Aquino





7. Re: Calculadora de Equação de Segundo Grau, ora funciona, ora não. [RESOLVIDO]

lainion
lainion

(usa Void Linux)

Enviado em 20/12/2017 - 17:15h

Então, vai ter que testar e se for negativo multiplica por -1 antes de tirar a raiz, só que agora não vai poder somar ao -b pois é um número imaginário.

Eu não sou da área e faz um tempo que não mexo com pascal, na época eu navegava por esse forúm aqui:
https://www.portugal-a-programar.pt/forums/forum/56-pascal/


8. Re: Calculadora de Equação de Segundo Grau, ora funciona, ora não. [RESOLVIDO]

NN
NomeUnderground

(usa Debian)

Enviado em 20/12/2017 - 17:42h

lainion escreveu:

Então, vai ter que testar e se for negativo multiplica por -1 antes de tirar a raiz, só que agora não vai poder somar ao -b pois é um número imaginário.

Eu não sou da área e faz um tempo que não mexo com pascal, na época eu navegava por esse forúm aqui:
https://www.portugal-a-programar.pt/forums/forum/56-pascal/


Obrigado pelas dicas.

 
 Frases do Mês  

"A Microsoft não é má. Eles só fazem sistemas operacionais realmente ruins." Linus Torvalds 

"Levar os homens à verdade é o maior benefício que se pode prestar aos outros.
" - Santo Tomás de Aquino





9. Re: Calculadora de Equação de Segundo Grau, ora funciona, ora não. [RESOLVIDO]

NN
NomeUnderground

(usa Debian)

Enviado em 20/12/2017 - 17:58h

Consegui resolver o problema no caso do delta 0
 
 Frases do Mês  

"A Microsoft não é má. Eles só fazem sistemas operacionais realmente ruins." Linus Torvalds 

"Levar os homens à verdade é o maior benefício que se pode prestar aos outros.
" - Santo Tomás de Aquino









Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts