vinipsmaker
(usa Arch Linux)
Enviado em 19/04/2009 - 16:16h
O código calcula as soluções de uma função de segundo grau e pergunta se usuário quer o resultado em notação científica. O cálculo está correto, mas tem alguma coisa errada com as condições ou com a função scanf.
Para compilar:
gcc -o equ.bin -lm equacao\ do\ segundo\ grau.c
--------------------------------------------
Versão final completa e corrigida
http://www.vivaolinux.com.br/script/Equacoes-de-primeiro-e-segundo-grau
--------------------------------------------
Versão sem formatação:
/*Este código é um código simples, acho que é innútil tentar patentear uma porta,
assim como é inútil tentar patentear a fórmula de resolução da equação do segundo
grau, então não tente patentear ou vender este código ou uma versão compilada do
mesmo. Versão do código: 0.1
*/
#include <stdio.h>
#include <math.h>
int main(void)
{
char usch; //registra a variável que registrará se o usuário quer o resultado em notação científica
int a , b , c , usch2; //registra as variáveis a, b, c e a variável que aramzenará o valor da resposta (pergunta explicada acima) convertido para número em base hexadecimal
float x1 , x2 , delta;
printf("Digite o valor de a\n");
scanf("%d" , &a); //obtem o valor de a
printf("Digite o valor de b\n");
scanf("%d" , &b); //obtem o valor de b
printf("Digite o valor de c\n");
scanf("%d" , &c); //obtem o valor de c
delta = b * b -4 * a * c; // calcula delta
if (delta > 0) //verifica se delta é maior que 0 (possui duas raízes reais
{
delta = sqrt(delta); //calcula raiz quadrada de delta
x1 = (-b + delta)/(2*a); //calcula o valor de x1
x2 = (-b - delta)/(2*a); //calcula o valor de x2
printf("Você quer o resultado em notação científica? {TEXTO}50s{TEXTO}57n{TEXTO}51\n"); // imprime a pergunta
scanf("%c" , &usch); //deveria armazenar o que o usuário digitou
usch2 = printf("%#x" , usch); //converte o valor acima para código ascii em hexadecimal
if (usch2 == 0x73) //verifica se o usuário digitou "s"
{
printf("As raízes da função são %e e %e\n" , x1 , x2); //imprime a solução usando notação científica caso a condição tenha sido executada
}
else //sequencia de comandos do que ocorrerá caso o usuário não tenha digitado "s"
{
printf("As raízes da função são %f e %f\n" , x1 , x2); //imprime a solução em números reais sem usar notação científica
}
}
else //caso delta seja menor ou igual a 0
{
if (delta = 0) //acho que não está funcionando
{
x1 = (-b)/(2*a); //calula a raiz
printf("Você quer o resultado em notação científica? \50s\57n\51\n"); /imprime a pergunta
scanf("%c" , &usch); //pega a resposta da pergunta acima
usch2 = printf("%#x" , usch); //converte para um número de base hexadecimal de acordo com o código da tabela ascii
if (usch = 0x73) //verifica se o valor digitado foi "s" (código ascii em hexadecimal:73)
{
printf("A raiz da função é %e\n" , x1); //imprime a solução em notação científica
}
else //caso contrário
{
printf("A raiz da função é %f\n" , x1); //imprime a solução em números reais em base decimal sem utilzar notação científica
}
} //caso delta seja menor que 0
else //vai acontecer
{
printf("A função não tem raízes reais\n"); //imprime a mensagem
}
}
return 0;
}