Program obliczający potegi liczb całkowitych, C

Odpowiedz Nowy wątek
2011-10-25 17:11
świeżak
0

Witam, próbuję napisać program obliczający potęgi liczb całkowitych w funkcji, ale niezbyt mi to wychodzi.

Zasadniczo, kiedy działa potęgowanie w jednym z przypadków, inne są ignorowane albo dostaje w ogóle jakieś dziwne wyniki. Czy ktoś moze mi podpowiedzieć, co powinienem tutaj zmienić aby działało jak należy?

 #include <stdio.h>

 float power(float a, float b);

main()
{
 float a,b;

 printf("Podaj podstawe potegi i stopien potegi: \n");
 scanf("%f %f", &a, &b);
 printf("%f \n",power(a,b));

 system("PAUSE");
}

//==========FUNKCJE=============

 float power(float a, float b)
 {
 int i, res;

     if (b > 0)
        {   
        res = a;
           for (i = 1; i < b; ++i)
           {
              res = (res * a);    
           }
        }

     if (b < 0)
        {   
        res = a;
           for (i = 1; i < b; ++i)
           {
              res = (res * a);
           }
        res = (1/res);   
        }

     if (b = 0) 
        { 
        res = 1;
        }   
 return res;

 }

Pozostało 580 znaków

2011-10-25 17:22
bo
0

Ile razy wykona się ta pętla?

     if (b < 0)
        {   
        res = a;
           for (i = 1; i < b; ++i)
           {
              res = (res * a);
           }

Pozostało 580 znaków

2011-10-25 17:51
świeżak
0
bo napisał(a)

Ile razy wykona się ta pętla?

if (b < 0)
{   
res = a;
for (i = 1; i < b; ++i)
{
res = (res * a);
}

Ani razu... bo przy istniejącym warunku (b < 0) warunek w pętli (i < b) nigdy nie dojdzie do skutku jeśli na początku jest (i = 1) co stoi w sprzeczności z tym najwcześniejszym.
Uff. Czy dobrze myślę ; / ?
Czy w takim wypadku kod powinienem zmienić na coś takiego? :

     if (b < 0)
        {   
        res = a;
           for (i = 0; i > b; --i)
           {
              res = (res * a);
           }

Pozostało 580 znaków

2011-10-25 18:01
bo
0

Raczej na taki:

           for (i = -1; i < b; --i)
           {
              res = (res * a);
           }

I zmienna res musi być typu float albo double.

źle mi sie nierówność napisała, for (i = -1; i > b; --i) - bogdans 2011-10-25 18:03

Pozostało 580 znaków

2011-10-25 18:19
świeżak
0

No, prawie mi się udało...

dzięki za pomoc z pętlą i nakierowanie mnie na zmianę typu zmiennej :)

Jeszcze tylko jedno pytanie; w ostatnim z przypadków, gdy potęga jest równa zeru, wynik powinien wynosić jeden. Mimo to gdy wpisuje potęgę zerową wynik wynosi również zero. Dlaczego tak się dzieje?

Pozostało 580 znaków

2011-10-25 18:23
0

bo źle porównujesz

     if (b == 0) 
        { 
        res = 1;
        }  

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

2011-10-25 18:31
świeżak
0

Rzeczywiście, używałem przypisywania...

Jeszcze raz wielkie dzięki za pomoc.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0