pow als Funktion



  • Hallo,

    ich habe eine Aufgabe in der ich den BEfehl pow selber programmieren soll.
    Dabei habe ich folgenden Ansatz, der aber das falsche Ergebnis bringt. Ich würde auch lieber mit einer For-Schleife arbeiten und ein Exponent mit NULL und negativ soll auch möglich sein...

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    float power(float basis, int exponent)
    {
    
    	while(exponent)
    	{
    	         basis = basis * basis;
    		exponent = exponent -1;
    	}
    
    	return basis;
    }
    
    	int main(int argc, char* argv[])
    	{
    		float basis;
    		int exponent;
    		float ausgabe;
    
    		printf("Basis: ");
    		scanf ("%f", &basis);
    		printf("Exponent: ");
    		scanf ("%i", &exponent);
    
    		// Funktionsaufruf
    		ausgabe = power(basis, exponent);
    
    		// Ausgabe des Volumens
    		printf("Ergebnis: %6.2f\n", ausgabe);
    
    		return 0;
    	}
    

    Danke für eure Hilfe



  • Habe eine Lösung erarbeiten können.
    Wenn wer eine elegantere Lösung hat, bitte posten.
    Danke,
    Heiko

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    float power(float basis, int exponent)
    { 
    	int n; 
    	float ergebnis;
    	ergebnis = basis;
    
    	if (exponent==0) return basis;
    
    	if (exponent<0)
    	{
    		for(n=1;n<exponent*-1;n++)
    		{
    			ergebnis = ergebnis * basis;
    		}
    		ergebnis = 1 / ergebnis;
    		return ergebnis;
    	}
    	else
    	{
    		for(n=1; n<exponent; n++)	
    		{
    			ergebnis = ergebnis * basis;
    		}
    		return ergebnis;
    	}
    }
    
    	int main(int argc, char* argv[])
    	{
    		float basis;
    		int exponent;
    		float ausgabe;
    
    		// Header
    		printf("Exponentenrechnung\n");
    		printf("---------------------\n");
    		printf("Basis: ");
    		scanf ("%f", &basis);
    		printf("Exponent: ");
    		scanf ("%i", &exponent);
    
    		// Funktionsaufruf
    		ausgabe = power(basis, exponent);
    
    		// Ausgabe des Volumens
    		printf("Ergebnis: %f\n", ausgabe);
    
    		return 0;
    	}
    


  • Naja, ich würde folgenden Ansatz benutzen:

    x^n = x * x^(n-1)

    Die Funktion sieht dann so aus:

    float my_pow(float x, int n) {
       return n ? x * my_pow(x, n-1) : 1;
    }
    

    Finde ich persönlich "eleganter" 🤡

    PS: Falsches Forum



  • hier stand mist 😞



  • Spawny schrieb:

    if (exponent==0) return basis;
    

    ist übrigens falsch:
    x0 = 1
    und x1 = x



  • Danke an Alle - hat geholfen.


Anmelden zum Antworten