Flag für Variablen



  • Hi, bevor ich es für heute gut sein lasse würde ich auch noch zu folgenden Code befragen.

    #include <stdio.h>
    
    double ergebnis(double wert,int potenz)
    {
    	int i;
    	double ergebnis=1.0;
    
    	if(potenz==0)
    		return (1);
    	else if(potenz<0)
    		return (-1);
    	else
    	{
    		for(i=1;i<=potenz;i++)
    			ergebnis=ergebnis*wert;
    	}
    }
    
    main()
    {
    double wert;
    int potenz;
    
    printf("Geben Sie eine zahl eindie potenziert werden soll: ");
    scanf("%lf",&wert);
    
    getchar();
    
    printf("Geben Sie die Potenz ein: ");
    scanf("%i",&potenz);
    getchar();
    
    printf("Das Ergebnis lautet %lf",ergebnis(wert,potenz));
    getchar();
    }
    

    Ich habe es mehrmals durch debugged und habe dadurch einen Fehler entdecken können. %lf anstelle von %f für gleitkomma Darstellung.Gut, es passt alles bis auf die vorletzte Zeile weil das Ergebnis das ich bekomme lautet -1.#IND00

    Ich denke das entsteht weil ich Variablen falsch verwende.

    dank



  • hast return vergessen


  • Mod

    Verschönerung der Potenzfunktion:
    -Wenn du negative Werte zulässt, dann rechne doch auch richtig. Ein Fehlerwert ist selten gut, besonders, wenn der Fehler dadurch vermieden werden könnte, indem die Funktion nur positive Werte nimmt. Eine negative Potenz ist auch nicht schwerer zu berechnen als eine positive.
    -Die Frage nach der 0 kannst du dir ebenfalls sparen, da das doch automatisch von der for-Bedingung erledigt wird. Da 0 <= 1 läuft die for-Schleife genau niemals und das Ergebnis ist korrekt 1.
    -Apropos for-Schleife: Das kannst du noch nicht wissen, aber <= ist eher unüblich. Zähl von 0 an aufwärts und vergleiche mittels < statt <=. Das wird später nochmal nützlich, da beispielsweise Felder von 0 an gezählt werden.

    Insgesamt als Vorschlag:

    double power(double base, int exponent) // Passendere Bezeichner!
    {
      int i;
      double result=1.0;                    // Englisch!
      int limit = (exponent < 0) ? -exponent : exponent;
    
      for(i = 0; i < limit ; ++i)           // Nicht so sparsam mit den Leerzeichen umgehen
        result = result * base;
      return (exponent < 0) ? 1 / result : result;
    }
    

    Dabei ist das Fragezeichen der Bedingungspperator (Kurzschreibweise für if), falls du den noch nicht kennen solltest:
    http://en.wikipedia.org/wiki/%3F:



  • Spezialfall 0 fehlt. Ach doch nicht .. 🙂



  • @Volkard. Vielen Dank. Auf das wäre ich selber nicht gekommen.

    @Seppj: Da, hast du das Programm aber ziemlich verkürzt. Ich muss gestehen das das wie bei meinen Aufgaben noch etwas im Hintergrund steht.Ich bin aber ich sehr über Vorschläge in die ich mich dann hineindenken kann. Das mit dem < anstelle von <= passt gut den ich mache jetzt gerade die Arrays.

    @alle: Gute Nacht!


Anmelden zum Antworten