Rückgabe Funktionswert (Klappt nicht, was mach ich falsch)



  • double hoch(double wert, int potenz) {
    	int i;
    	double ergebnis=1.0;
    	if(potenz == 0) return(1);   /* laut Definition */
    	else if(potenz < 0) return(-1);   /* ungültiger Wert */
    	else {
    		for(i=1; i<=potenz; i++)
    			ergebnis = ergebnis * wert;
    		return(ergebnis);
    	}
    }
    
    main(){
           double wert;
           int potenz;
           printf("\n Geben sie einen Wert ein!");
           scanf("%d",&wert);
           printf("\n Geben sie eine Potenz ein");
           scanf("%i",&potenz);
           hoch(wert, potenz);
           printf("\n Ergebnis lautet %d",hoch(wert,potenz));
           }
    

    Die Potenz soll berechnet werden, dazu habe ich eine Unterfunktion, leider kommt immer 0 raus, egal was ich eingebe. Bei hoch 1 soll ja 1 rauskommen, bei Potenz <0 soll er soll er -1 zurückgeben und bei einer potenz >1 soll er die potenz mit dem übergeben wert berechnen.



  • Auf die Schnelle fällt mir nur ein Fehler auf - du verwendest die falschen Format-Kennungen für die double-Ein/Ausgabe. Richtig wären "%lf" bei der Eingabe bzw. %f bei der Ausgabe.

    (und das alleinstehende 'hoch(wert,potenz);' ist auch nutzlos)



  • Der Compiler spuckt keinen Fehler aus. Ich probiers noch mal

    hoch(float wert, int potenz) {
    	int i;
    	float ergebnis=1.0;
    	if(potenz == 0) return(1);   /* laut Definition */
    	else if(potenz < 0) return(-1);   /* ungültiger Wert */
    	else {
    		for(i=1; i<=potenz; i++)
    			ergebnis = ergebnis * wert;
    		return(ergebnis);
    	}
    }
    
    main(){
           float wert;
           int potenz;
           printf("\n Geben sie einen Wert ein!");
           scanf("%f",&wert);
           printf("\n Geben sie eine Potenz ein");
           scanf("%i",&potenz);
           hoch(wert, potenz);
           printf("\n Ergebnis lautet %d",(hoch)); 
           }
    

    Jetzt kommt bei 2 hoch 2 aber 4144545 oder so raus anstatt 4 😃 Hab ich nen Logikfehler drin? Bei printf("\n Ergebnis lautet %d",(hoch)); will ich das Ergbnis aus "hoch" anzeigen lassen, ist das syntaktisch so richtig?



  • ragnar79 schrieb:

    Der Compiler spuckt keinen Fehler aus.

    Ja, nicht jeder Compiler macht sich die Mühe, den Inhalt der Formatstrings mit den übergebenen Parametern zu vergleichen - da mußt du schon selber darauf achten, daß die Angaben stimmen (wenn nicht, kann niemand dafür garantieren, was dein Programm anstellt).



  • Danke für deine Antwort, hatte meinen Beitrag noch mal editiert, da hattest du bereits geantwortet. Hast du vielleicht noche inen Tipp woran es liegen könnte, dass das Program falsch arbeitet?



  • Erstens: Beim scanf()-Aufruf brauchst du "%lf" (einfaches "%f" schreibt in float)

    Zweitens: Du gibst die Adresse der Funktion aus, nicht ihren Rückgabewert.

    Und drittens: Der freistehende Funktionsaufruf ist immer noch wirkungslos.

    printf("\n Geben sie einen Wert ein!");
    scanf("%lf",&wert);//richtige Formatkennung
    printf("\n Geben sie eine Potenz ein");
    scanf("%i",&potenz);
    //hoch(wert, potenz);//sinnlos
    printf("\n Ergebnis lautet %f",hoch(wert,potenz));//richtige Formatkennung und korrekter Aufruf
    


  • Du kannst deine hoch-Methode sogar ein wenig "optimieren" 😉

    double hoch(float wert, int potenz) {
        int i = 0;
        float ergebnis = 1.0;
        //if (potenz == 0) return 1;   /* laut Definition */
        if (potenz < 0) return -1;   /* ungültiger Wert */
        else {
            for (i = 0; i < potenz; i++)
                ergebnis *= wert;
            return ergebnis;
        }
    }
    

Anmelden zum Antworten