Permalänk

c++ hjälp ;)

ska skriva en funktion som räknar ut potenser, men utan cmath - pow. felet med nedanstående? förslag?

#include <iostream>
using namespace std;

int potens(int bas, int exponent);

int main()
{
int bas, exponent;
cout << "Mata in bas & exponent för att berökna potensen(Tex 2 3): ";
cin >> bas >> exponent;

return 0;
}

int potens(int bas, int exponent);
{
int result;
result = bas ^ exponent;
cout << bas << " upphöjt i " << exponent << "= " << result;
}
}

// Mvh theo

Visa signatur

LG LW60 - EEE 901

Permalänk

Operatorn ^ betyder inte potens utan xor.

Permalänk

hur skall jag göra då?

Visa signatur

LG LW60 - EEE 901

Permalänk

Använd något färdigt matematikbibliotek eller skriv en metod som räknar potenser rekursivt t.ex. så här (för icke-negativa heltal):

int potens(int bas, int exponent){
if (exponent == 0) return 1;
if (exponent == 1) return bas;
else return bas * potens(bas, exponent-1);
}

Obs! Helt o-optimerad kod!

Permalänk
Medlem

Här är två till förslag på lösningar:

int potens(int bas, int exponent){ if(exponent > 1){ return potens(bas*exponent, exponent-1); } return bas; }

Eller:

int potens(int bas, int exponent){ for(;exponent > 1; exponent--){ bas *= exponent; } return bas; }

Visa signatur

There is no end to the infinite number of stupid things that could be done on a Turing complete system.

Permalänk
Citat:

Ursprungligen inskrivet av M2
Här är två till förslag på lösningar:

int potens(int bas, int exponent){ if(exponent > 1){ return potens(bas*2, exponent-1); } return bas; }

Eller:

int potens(int bas, int exponent){ for(;exponent > 1; exponent--){ bas *= 2; } return bas; }

Nej, nu blev det fel hördu!

Permalänk
Medlem

Oj glömde att upphöjt till noll blir ett så klantigt av mig

Visa signatur

There is no end to the infinite number of stupid things that could be done on a Turing complete system.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av M2
Oj glömde att upphöjt till noll blir ett så klantigt av mig

Det är inte det bara det som är fel. Din kod klarar bara av tvåpotenser och kan i princip förkortas till base<<exp-1 som den står nu om man bortser från att man får ett annat fel värde för 2**0.

Permalänk
Medlem

int upphojt(int tal, int potens) { int retval = tal; for(int i = 1; i < potens; i++) { retval *= tal; } return retval; }

edit: fixade ett litet fel.

Visa signatur

Scud: The other day, in the park, I was wondering why frisbees look bigger and bigger as they get closer to you
Scud: And then it hit me

Permalänk

tack för all hjälp, nu funka det. hata skoluppgifter?

Visa signatur

LG LW60 - EEE 901