Potenzfunktion mittels while- und for Schleife und rekursiv lösen



  • einDoof schrieb:

    0 hoch 0 ist übrigens auch 1

    Nein, 0^0 ist nicht definiert. 1 kann höchstens ab und zu praktisch sein, gerade als Konvention in der Programmierung.

    Dass es nicht definiert ist, sieht man daran, wenn man unterschiedliche Funktionen konvergieren lässt (z.B. x^x und 0^x für x->0+).



  • ich hab um ganz ehrlich zu sein nur schnell Google gefragt um mich abzusichern.
    Jedoch hab ich auch hier in diesem Forum einen Thread gefunden, in dem darüber diskutiert wurde, da einige Sprachen unterschiedliche Lösungen hierzu bieten.

    Einfach nichts zu tun wie in dem Beispiel erachte ich nicht als ok.

    Stell dir mal vor ein Anwender nutzt unwissend pow<0,0>::value.

    Also entweder 1 oder 0.

    Ich wär für 1



  • einDoof schrieb:

    Stell dir mal vor ein Anwender nutzt unwissend pow<0,0>::value.

    Also die beste Methode, das zu verhindern, ist ein kontrollierter Compiler-Fehler (was der obige Ansatz auch gut hinbekommt - die Spezialisierung pow<0,0> hat kein value) oder die Rückgabe eines Fehlerwertes (wo möglich).



  • Nexus schrieb:

    einDoof schrieb:

    0 hoch 0 ist übrigens auch 1

    Nein, 0^0 ist nicht definiert. 1 kann höchstens ab und zu praktisch sein, gerade als Konvention in der Programmierung.

    Dass es nicht definiert ist, sieht man daran, wenn man unterschiedliche Funktionen konvergieren lässt (z.B. x^x und 0^x für x->0+).

    Was hat die Stetigkeit zweier Funktionen mit der Definition von 0^0 zu tun? Ich würde meinen gar nichts. Was man höchstens daran sehen kann, ist, das solch eine Definition nicht wohldefiniert ist. Das heißt aber lange noch nicht, dass es eine solche Definition nicht gibt.



  • einDoof schrieb:

    ich hab um ganz ehrlich zu sein nur schnell Google gefragt um mich abzusichern.
    Jedoch hab ich auch hier in diesem Forum einen Thread gefunden, in dem darüber diskutiert wurde, da einige Sprachen unterschiedliche Lösungen hierzu bieten.

    Einfach nichts zu tun wie in dem Beispiel erachte ich nicht als ok.

    Stell dir mal vor ein Anwender nutzt unwissend pow<0,0>::value.

    Also entweder 1 oder 0.

    Ich wär für 1

    Ich wär dafür kein Ergebnis anzubieten, sodass der Benutzer den Fall separat abprüfen muss und das Ergebnis 1 setzen muss.



  • Nun also nochmal ich...
    mein Quellcode sieht momentan folgendermaßen aus:

    #include <stdio.h>		//Einbinden von Bibliotheken
    #include <conio.h>
    
    int potenz (int , int );
    
    int main(void)
    {
        int x;
        int y=0;
        int i=0;
        int e=x;
    	printf("Bitte geben Sie eine Basis ein: ");
    	scanf("%i", &x);
    	printf("Bitte geben Sie einen Exponenten ein: ");
    	scanf("%i", &y);
    	printf("%i", e);
    	getch();
    }
    
    int potenz (int x, int y)
    {
        int i;
        int e=x;
        for (i=0; i<=y; i+=1)
        {
           e=e*x;
        }
        return e;
    }
    

    Und irgendwie kommt halt immer 0 raus, oder wenn ich x nicht =0 deklariere immer eine reisige zahl

    Die vorgegebene Antwort hier hat mir nicht wirklich geholfen, da ich ja anscheinend wie SeppJ sagte eher c programmiere 🙂



  • Also ich habe nun ein wenig rumgetestet und festgestellt, je nachdem wie ich in der main Funktion die Werte deklariere kommt ein anderer wert fürs ergebnis raus, aber für alle zahlenkombinationen der gleiche...



  • 2Good4This schrieb:

    int potenz (int x, int y)
    {
        int i;
        int e=x;
        for (i=0; i<=y; i+=1)
        {
           e=e*x;
        }
        return e;
    }
    

    Der Integer x wird ja kopiert (da keine Referenz). Deshalb ist der Integer e völlig überflüssig. Und wieso deklarierst du den Integer i nicht im Kopf der for -Schleife? Der Standard sagt, dass alle Variablen die im for -Kopf deklariert werden, nachher nicht mehr existieren.

    MfG, EOutOfResources



  • Warum rufst du die Funktion nicht auf?


  • Mod

    2Good4This schrieb:

    Also ich habe nun ein wenig rumgetestet und festgestellt, je nachdem wie ich in der main Funktion die Werte deklariere kommt ein anderer wert fürs ergebnis raus, aber für alle zahlenkombinationen der gleiche...

    Seppj schrieb:

    Zum Testen wäre es vielleicht auch eine gute Idee, die Funktion zu benutzen.

    SeppJ schrieb:

    Die Variablen aus der main haben nichts mit den Variablen in potenz zu tun.

    Vielleicht solltest du dir ein paar Grundlagen über Funktionen und Variablen durchlesen? Bei dir scheint eine ganze Menge zu fehlen. Die Aufgabe scheint (obwohl sie sehr leicht ist) deinen Kenntnisstand weit zu übersteigen (ehrlich gesagt scheint dein Kenntnisstand nahe 0 zu sein 😞 ). Dir fehlen irgendwie komplett die ersten beiden Kapitel aus einem C-Buch, während dein Kurs schon in Kapitel 3 oder 4 zu sein scheint.



  • Du solltest die Funktion auch aufrufen:

    e = potenz(x,y);
    

    Leider ist die Ausgabe trotzdem falsch, überleg einmal, wie oft die Schleife bei

    potenz(2,3);
    

    durchlaufen wird.

    x = 2, y=3
    Du setzt e auf 2
    1. Durchlauf: i=0, i<=y
    e*=x -> 4
    2. Durchlauf: i=1 i<=y
    e*=x -> 8
    3. Durchlauf: i=2 i<=y
    e*=x -> 16
    4. Durchlauf: i=3 i<=y
    e*=x -> 32
    i>y -> Abbruch
    

    32 ist definitiv falsch für 23.



  • EOutOfResources schrieb:

    2Good4This schrieb:

    int potenz (int x, int y)
    {
        int i;
        int e=x;
        for (i=0; i<=y; i+=1)
        {
           e=e*x;
        }
        return e;
    }
    

    Der Integer x wird ja kopiert (da keine Referenz). Deshalb ist der Integer e völlig überflüssig.

    e ist das Ergebnis. Das kannst du nicht in x reinschreiben.



  • --


Anmelden zum Antworten