problemas com if e scanf [RESOLVIDO]

1. problemas com if e scanf [RESOLVIDO]

Vinícius dos Santos Oliveira
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;
}


  


2. MELHOR RESPOSTA

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 19/04/2009 - 18:12h

Vamos lá:
Se me lembro bem você disse que sabia Pascal, mas não C.
No Pascal o operador de atribuição é o ":=".
No C é somente "=".
No Pascal o operador "comparativo de igualdade" é o "=".
No C o operador "comparativo de igualdade" é o "==".

"if(delta == 0)" é diferente de "if(delta = 0)".
No Pascal essa operação é "if(delta = 0)". Em C não é a mesma coisa.
No C "if(delta = 0)" você estará atribuindo o valor zero a variavel delta, em seguida será executada uma operação lógica no if, ou seja, delta = 0 é falso(nulo).

Mais uma vez:
//não será executado nenhum comando do if abaixo, pois você está
//atribuindo zero a delta (delta = 0)
if(delta = 0){
//execute comando1
//comando 2;
//...
//comandoN
}

Que é o mesmo que fazer:
//antes do if
delta = 0;
//só será executado algum comando daqui se delta for verdadeiro, ou seja, não nulo
if(delta){
//execute comando1
//comando 2;
//...
//comandoN
}

Se não entender posta denovo.
vlw!


3. Re: problemas com if e scanf [RESOLVIDO]

Vinícius dos Santos Oliveira
vinipsmaker

(usa Arch Linux)

Enviado em 19/04/2009 - 17:12h

nota: escolha a=1, b=-4 e c=4 para delta ficar igual a 0 e para ver o segundo erro (o erro com o if?).
o primeiro erro deve ser com o scanf, eu não consigo fazer com que o usuário possa escolher entre notação científica e números racionais sem notação científica.


4. não sei se ajuda mas....

Rodrigo Chaves
stilldre

(usa Funtoo)

Enviado em 19/04/2009 - 17:39h

#include <iostream>
#include <cmath> //define a função sqrt()

int main() {

float a, b, c;
cout << "Insira os coeficientes da equação quadrática: ";
cin >> a >> b >> c;

if (a==0) {
cout << "Essa não é uma equação quadrática: a==0\n";
return 0; //aqui vc usa sua propria implementação
}

cout << "A equação é: " << a << "x^2 + " << b << "x + " << c << " = 0\n";
double d, x1, x2;
d = b*b - 4*a*c; //o discriminante
if (d < 0) {
cout << "Essa equação não possui solução real: d < 0\n";
return 0; //aqui tbm =)
}

x1 = (-b + sqrt(d))/(2*a);
x2 = (-b - sqrt(d))/(2*a);
cout << "As soluções são: " << x1 << ", " << x2 << endl;
}


5. Re: problemas com if e scanf [RESOLVIDO]

Vinícius dos Santos Oliveira
vinipsmaker

(usa Arch Linux)

Enviado em 19/04/2009 - 20:20h

Corrigi todos os erros, realmente cometi dois equívocos:
if(delta = 0); //o certo é if(delta == 0);
scanf("%c" , usch); //o mais apropriado é scanf("%s" , usch);

Agora estou tentando fazer com que o código possa resolver equações quando b = 0, quando c = 0 e poder resolver equações de primeiro grau.


6. Re: problemas com if e scanf [RESOLVIDO]

Vinícius dos Santos Oliveira
vinipsmaker

(usa Arch Linux)

Enviado em 19/04/2009 - 20:52h

Outra boa apostila sobre c:
http://equipe.nce.ufrj.br/adriano/c/apostila/texfiles/apostilaC.pdf

Estou bem perto de terminar o programa.


7. Re: problemas com if e scanf [RESOLVIDO]

Vinícius dos Santos Oliveira
vinipsmaker

(usa Arch Linux)

Enviado em 19/04/2009 - 21:02h

http://www.twilightsembrace.com/personal/gamelibs.php lista de bibliotecas livres com foco no desenvolvimento de jogos, a lista é bem completa e organizada
http://loomsoft.net/resources/alltut/alltut_index.htm completo sobre allegro, em inglês
http://equipe.nce.ufrj.br/adriano/c/apostila/indice.htm antigas apostilas do cara da ufrj
Também são muito boas e eu já estou quase terminando o programa.


8. Re: problemas com if e scanf [RESOLVIDO]

Vinícius dos Santos Oliveira
vinipsmaker

(usa Arch Linux)

Enviado em 19/04/2009 - 21:14h

Certo, para terminar:
http://www.apostilando.com/sessao.php?cod=11
http://www.cprogramming.com/
http://agnor.gamedev-pt.net/gamedev/index.html
http://www.programadoresdejogos.com/

E, TERMIENEI O CÓDIGO, testei muitas possibilidades e todas funcionaram.
Realmente eu estava competindo com os links, mas eu tinha a vantagem de já ter uma extensa lista de enderenços salvos no firefox:
[editado por mim para manter um pouco de privacidade]


9. Re: problemas com if e scanf [RESOLVIDO]

Rodrigo Chaves
stilldre

(usa Funtoo)

Enviado em 19/04/2009 - 23:05h

eu gosto da Qt, mto divertido programar nela...


10. Re: problemas com if e scanf [RESOLVIDO]

Vinícius dos Santos Oliveira
vinipsmaker

(usa Arch Linux)

Enviado em 20/04/2009 - 09:26h

Qt não é muito aberto ao desenvolvimento e é uma biblioteca, não linguagem de programação. Prefiro o GTK+, também é multi-plataforma.

Publiquei a versão final do script:
http://www.vivaolinux.com.br/script/Equacoes-de-primeiro-e-segundo-grau/

Calcula equações de primeiro (quando "a" for igual a 0) e segundo grau e está muito bem comentado.


11. Re: problemas com if e scanf [RESOLVIDO]

Rodrigo Chaves
stilldre

(usa Funtoo)

Enviado em 21/04/2009 - 21:22h

não entendi a parte do "não é muito aberto ao desenvolvimento", e sim, acreditem, eu sei que Qt não é uma linguagem de programação mas uma meta-biblioteca....


12. Re: problemas com if e scanf [RESOLVIDO]

Vinícius dos Santos Oliveira
vinipsmaker

(usa Arch Linux)

Enviado em 22/04/2009 - 11:04h

O que vocês acharam do código-fonte final?






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts