Program obliczający potegi liczb całkowitych, C

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;
 
 }
0

Ile razy wykona się ta pętla?

     if (b < 0)
        {   
        res = a;
           for (i = 1; i < b; ++i)
           {
              res = (res * a);
           }
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);
           }
0

Raczej na taki:

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

I zmienna res musi być typu float albo double.

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?

0

bo źle porównujesz

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

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

Jeszcze raz wielkie dzięki za pomoc.

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