Przekazywanie liczby rzeczywistej i całkowitej do funkcji liczącej x^n

0

Witam dostałem takie polecenie na zajęciach: Napisać funkcję, która oblicza: w = x^n. Do funkcji przekazać: x –typu rzeczywistego, n –typu całkowitego. Funkcja zwraca obliczoną wartość.
Mój problem jest w miejscu żeby przekazać x rzeczywistego a n całkowitego. Wyskakuje mi jakiś błąd, gdy zrobię oba całkowitego to tego błędu nie ma. Poniżej kod mojej funkcji.

A to nazwa błędu:

9|error: invalid operands of types 'float' and 'int' to binary 'operator^'|
#include <iostream>

using namespace std;

float  funkcja_w(float x, int n)
{
    float w;
    {
    w=x^n;
    }
    return w;
}
int main()
{
    cout << "Hello world!" << endl;
    return 0;
}
1

^ to XOR a obstawiam, że Ty chcesz potęgować.

0

No tak zapomniałem że w c++ działa to inaczej. Muszę w tym wypadku zrobić pętle for prawda?

1

Można użyć gotowej funkcji: http://www.cplusplus.com/reference/cmath/pow/
ale podejrzewam że jeśli to zadanie na zaliczenie to nie będzie w takiej wersji zaliczone.

0

Nie. Możesz zrobić while, możesz zrobić rekurencyjnie, możesz użyć pow i pewnie możesz to zrobić na sto różnych sposobów.

0
Pijany Leopard napisał(a):

No tak zapomniałem że w c++ działa to inaczej. Muszę w tym wypadku zrobić pętle for prawda?

Najprościej chyba użyć funkcji pow
http://www.cplusplus.com/reference/cmath/pow/

0

Czy to jest poprawnie?

#include <iostream>

using namespace std;

float  funkcja_w(float x, int n)
{
    float w;
    for (int i=1; i<=n; i++)
        w=x*i;
    return w;
}

Funkcji pow nie możemy używać.

0

Nie to nie jest poprawnie. Zwracasz wynik mnożenia liczby x oraz wartość i z ostatniej iteracji.

0

n=0 możemy pominąć.
To jak to poprawić bo teraz się pogubiłem zamiana x na w nic nie da. chyba?

0

Wykonać o jedną iterację mniej
Twoja wartość w na początku powinna przyjąć wartość zmiennej x
Wartość w pomnożyć i razy przez x i powinno działać.

0

Ale umiesz Ty potęgować? jak masz x ^ n to znaczy, że n razy mnożysz x przez siebie.

0
  1. Zainicjuj wynik (w) wartością 1.
  2. w pętli wykonuj w = w * x;
0
Pijany Leopard napisał(a):

Czy to jest poprawnie?

#include <iostream>

using namespace std;

float  funkcja_w(float x, int n)
{
    float w;
    for (int i=1; i<=n; i++)
        w=x*i;
    return w;
}

Tak nie będzie, tak ma być:

float  funkcja_w(float x, int n)

     float w = 1;
     for (int i=1; i<=n; i++)
         w * = x
     return w;
 }

Tylko, czy tu nie będzie problemu z jakims błędem zaokrąglenia? To Musisz jeszcze rozpracować.

0

Dzięki wszystkim udało mi się to ogarnać, a co do tego potęgowania to tak jak mówiliście zżarł mnie stres ;)

1

Jak już po kartkówce to dorób na spokojnie wersję obsługującą n < 0.

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