Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Dziwny wynik "nan"

Ostatnio zmodyfikowano 2012-09-29 22:51
Autor Wiadomość
rgv475
Temat założony przez niniejszego użytkownika
Dziwny wynik "nan"
» 2012-09-29 21:30:32
Dobry wieczór ;). Mam problem z programem i bardzo bym Was prosił o naprowadzenie co źle robię, że wychodzą takie wyniki.
Program oblicza równania kwadratowe, niestety (czasem - nie zawsze) wyniki miejsc zerowych wylicza mi "nan" (np. gdy wpiszę a:4, b:5, c:6).
Poniżej moje wypociny.:P
Pozdrawiam.
C/C++
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <conio.h>
#include <cmath>
#include <string>

double fA;
double fB;
double fC;
double delta( double a, double b, double c )
{
    double dDelta;
    dDelta = fB * fB - 4 * fA * fC;
    return dDelta;
}


int main()
{
    std::cout << "Podaj wspolczynnik a: ";
    std::cin >> fA;
   
    std::cout << "Podaj wspolczynnik b: ";
    std::cin >> fB;
   
    std::cout << "Podaj wspolczynnik c: ";
    std::cin >> fC;
   
    if( fA == 0 )
    {
        std::cout << "Brak rozwiazan. A nie moze byc rowne 0." << std::endl;
    }
    delta( fA, fB, fC );
    if( delta < 0 && fA != 0 )
    {
        std::cout << "Brak miejsc zerowych" << std::endl;
        getch();
    }
   
    if( delta == 0 && fA != 0 )
    {
        double fMZ1;
        fMZ1 = - fB /( 2 * fA );
        std::cout << "Funkcja ma jedno miejsce zerowe: " << fMZ1 << std::endl;
    }
    if( delta > 0 && fA != 0 )
    {
        double fMZ1;
        double fMZ2;
        delta( fA, fB, fC );
        fMZ1 =( - fB -( sqrt( delta( fA, fB, fC ) ) ) ) /( 2 * fA );
        fMZ2 =( - fB +( sqrt( delta( fA, fB, fC ) ) ) ) /( 2 * fA );
        std::cout << "Funkcja ma 2 miejsca zerowe: " << fMZ1 << ", " << fMZ2 << std::endl;
       
    }
    getch();
}
P-65770
OSA_PL
» 2012-09-29 22:00:38
Po co przyjmujesz parametry do funkcji jak ich w ogóle nie używasz?:
C/C++
double delta( double a, double b, double c )
{
    double dDelta;
    dDelta = fB * fB - 4 * fA * fC;
    return dDelta;
}

delta( fA, fB, fC );
 - i co to ma niby robić?

Tu też coś masz pokićkane co ma oznaczać to delta?
C/C++
if( delta < 0 && fA != 0 )
{
    std::cout << "Brak miejsc zerowych" << std::endl;
    getch();
}

Chyba musisz sobie powtórzyć funkcje.

P-65771
rgv475
Temat założony przez niniejszego użytkownika
» 2012-09-29 22:20:01
Hm, delta jest potrzebna do obliczenia miejsc zerowych. ( Nie rozumiem Twojego pytania do czego ta delta )
Jeżeli chodzi ci o to:
C/C++
if( delta > 0 && fA != 0 )
{
    double fMZ1;
    double fMZ2;
    delta( fA, fB, fC );
    fMZ1 =( - fB -( sqrt( delta( fA, fB, fC ) ) ) ) /( 2 * fA );
    fMZ2 =( - fB +( sqrt( delta( fA, fB, fC ) ) ) ) /( 2 * fA );
    std::cout << "Funkcja ma 2 miejsca zerowe: " << fMZ1 << ", " << fMZ2 << std::endl;
   
}
To racja, nie wiem po co ją tam wpisałem ;)

Dręczy mnie problem czemu wynikiem miejsc zerowych jest "nan".
Czyżbym źle równanie złożył obliczania miejsc zerowych? (wątpię)

Jeśli ktoś wie w czym problem to proszę o pomoc jak mu zaradzić.
ps. Proszę o wyrozumiałość, uczę się tego 2 dni.:P
Pozdrawiam.
P-65772
Admixior
» 2012-09-29 22:26:20
C/C++
delta( fA, fB, fC );
if( delta < 0 && fA != 0 )

dobrze zadał pytanie; przyjrzyj się tym linijkom i odpowiedz czy to funkcja czy zmienna

PS napoczątku sprawdzasz czy fA==0
to po co później w każdym ifie sprawdzasz to samo
Przydatny link:http://pl.wikipedia.org/wiki/NaN
P-65773
rgv475
Temat założony przez niniejszego użytkownika
» 2012-09-29 22:37:39
No przecież! :D
Ale ze mnie gapa, przecież to zmienna była.
Dlatego właśnie sprawdzałem czy a != 0...
Ok kod poprawiłem, wszystko śmiga.
C/C++
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <conio.h>
#include <cmath>
#include <string>

double fA;
double fB;
double fC;
double delta( double a, double b, double c )
{
    double dDelta;
    dDelta = fB * fB - 4 * fA * fC;
    return dDelta;
}


int main()
{
    std::cout << "Podaj wspolczynnik a: ";
    std::cin >> fA;
   
    std::cout << "Podaj wspolczynnik b: ";
    std::cin >> fB;
   
    std::cout << "Podaj wspolczynnik c: ";
    std::cin >> fC;
   
    if( fA == 0 )
    {
        std::cout << "Brak rozwiazan. A nie moze byc rowne 0." << std::endl;
    }
    delta( fA, fB, fC );
    if( delta( fA, fB, fC ) < 0 )
    {
        std::cout << "Delta = " << delta( fA, fB, fC ) << std::endl;
        std::cout << "Brak miejsc zerowych" << std::endl;
        getch();
    }
   
    if( delta( fA, fB, fC ) == 0 )
    {
        double fMZ1;
        fMZ1 = - fB /( 2 * fA );
        std::cout << "Delta = " << delta( fA, fB, fC ) << std::endl;
        std::cout << "Funkcja ma jedno miejsce zerowe: " << fMZ1 << std::endl;
    }
    if( delta( fA, fB, fC ) > 0 )
    {
        double fMZ1;
        double fMZ2;
        std::cout << "Delta = " << delta( fA, fB, fC ) << std::endl;
        fMZ1 =( - fB -( sqrt( delta( fA, fB, fC ) ) ) ) /( 2 * fA );
        fMZ2 =( - fB +( sqrt( delta( fA, fB, fC ) ) ) ) /( 2 * fA );
        std::cout << "Funkcja ma 2 miejsca zerowe: " << fMZ1 << ", " << fMZ2 << std::endl;
       
    }
    getch();
}
Dzięki Wam. ;)
Pozdrawiam.
P-65774
OSA_PL
» 2012-09-29 22:45:52
Wpisz jako a 0 ( Program przy obliczaniu miejsc zerowych będzie dzielił przez zero, czego nie powinien robić )
P-65775
Admixior
» 2012-09-29 22:48:25
Zapomniałeś przerwać program w if-ie fA==0 ;]
P-65776
rgv475
Temat założony przez niniejszego użytkownika
» 2012-09-29 22:51:19
Racja, poprawiłem:
if( delta( fA, fB, fC ) > 0 && fA != 0 )
Teraz chyba wszystko jest ok.

Poprawiłem aby sprawdzało, ponieważ jeszcze nie wiem jak zamykać program.
P-65777
« 1 »
  Strona 1 z 1