Problem z potęgami w C++


(Bartisz) #1

Napisałem następujący program:

# include 

# include 

# include 


const float PI = 3.14159265; 


int main()

{

    int nPromien1;

    float fWynik;

    int nPromien;

    float fWynik2;

    int nPotega = 2; //tutaj pojawia się problem


    std::cout << "/Autor: bartisz\\" << std::endl;

    std::cout << "--------------------" << std::endl;

    std::cout << "Podaj promien kola:" << std::endl;

    std::cin >> nPromien1;

    fWynik = (2 * nPromien1) * PI;


    fWynik2= PI * pow(nPromien,nPotega);

    std::cout << "Obwod kola to: " << fWynik << std::endl;

    std::cout << "Pole kola to: " << fWynik2 << std::endl;

    std::cout << "--------------------" << std::endl;

    std::cout << std::endl;


getch();

}

Program nie liczy potęg, na początku prosi o wpisanie promienia - obwód okręgu liczy dobrze, natomiast pole źle - pojawia się błąd

Dlaczego nie liczy potęg?


(Cslysy) #2

nie mozesz policzyc pola np tak:

fWynik2 = PI * (nPromien1 * nPromien1);

(Fiołek) #3

Prawidłowo działa! Ale wiem czemu uważasz, że działa źle. Spójrz na zmienne(szczególnie nPromien). Inicjujesz ją gdzieś? Nie, dlatego zawiera śmieci(domyślnie największą możliwą liczbę) i wynik potęgi wychodzi tak duży, że można go pokazać tylko w notacji naukowej.

Btw. Wzór na obwód koła to 2PIr a nie 2rPI(A no tak, przemienność mnożenia...). :wink:


(Ryan) #4

Iloczyn jest przemienny. :wink:

Warto czasem zerknąć na ostrzeżenia kompilatora, lub jeśli takowych nie serwuje - zmienić kompilator. Dobry powinien poinformować o użyciu niezainicjalizowanej zmiennej. :roll:


(Bartisz) #5

Bardzo dziękuję za poradę, wcześniej coś kombinowałem i się trrochę pogubiłem...

tak, muszę zmienić kompilator - dev-c++ jest średni...

Trzeba linuxa 8)


(Cslysy) #6

Racja nPromiem i nPromien1 wprowadzilo mnie w bład, stosujac funkcje pow napisz :

fWynik2= PI * pow(nPromien1,nPotega);

a zmienna nPromien wywal.


(Fiołek) #7

Na linuxie jest ten sam kompilator co w dev-c++. I tu g++ i tu g++(na windzie jego port[MinGw]).

Racja, mój błąd.


(Bartisz) #8

A znasz może jakieś dobre ide pod wina?


(GL1zdA) #9

Visual C++ Express