need help plz!



  • #include <iostream>
    #include <conio.h> 
    
    using namespace std; 
    
    int Faculty(int k,int n,int o,int p);
    int main()
    {
     int loesung;
     int n;
     int k;
     int o;
     int p;
     cout << "Fakultaet von: ";
     loesung=Faculty(k,n,o,p);
     cout << endl << "!" << n << " = " << loesung;
     getch();
    }
     int Faculty (int k,int n,int o,int p)
    {
     cin >> n;
     do {k=n*--n;} while(false);
     while(n>0)
     {
      o=k*--n;
      k=o;
     }
     return o;
    }
    

    Hab das mal probiert aber es geht nicht .. jedesmal kommt "!256 = 0", egal was ich für n einsetzte..



  • Dieser Thread wurde von Moderator/in akari aus dem Forum VCL/CLX (Borland C++ Builder) in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • mulo schrieb:

    [...]
    do {k=n*--n;} while(false);
    [...]
    

    *lol* --> ioccc!?

    #include <iostream>
    
    unsigned long faculty( unsigned long value ) {
    
    	if( !value ) {
    
    		return 1;
    	}
    
    	return value * faculty( value - 1 );
    }
    
    int main( ) {
    
    	std::cout << faculty( 3 ) << std::endl;
    }
    

    Funktioniert natürlich nur für den Wertebereich eines unsigned long's (Ergebnis).

    greetz, Swordfish



  • versteh ich überhaupt nicht -.- was bedeutet !value?

    value!=0 oder? und was meinst du mit ioccc?

    mit der zeile wollte ich nur einmalig k den wert von n*(n-1) geben. War mein Ansatz denn so falsch?



  • mulo schrieb:

    versteh ich überhaupt nicht -.- was bedeutet !value?

    In dem Fall eine beschissene Art auf 0 zu testen.

    int Faculty (int k,int n,int o,int p)  // FEHLER: Die fakultät berechnet man aus genau einer zahl, nicht aus 4
    { 
     cin >> n; // FEHLER: Die Fakultät erwartet kein lesen von einem Stream
     do {k=n*--n;} while(false); /// FEHLER: n*--n ist nicht definiert!!!
     while(n>0) 
     { 
      o=k*--n; 
      k=o; 
     } 
     return o; 
    }
    


  • oh gott... oO

    das was ich da machen wollte nennt sich doch dekrementieren, und das ist doch nichts weiter als 1 abzuziehen, und wäre es nich tso richtig

    n=4
    cout << --n << "\n" // -> 3, n wird erst dekrementiert
    cout << --n << "\n" // -> 2, und dann ausgegeben
    //etc
    
    n=4
    cout << n-- << "\n" // n-> 4, n wird ausgegeben und 
    cout << n-- << "\n" // n-> 3, erst dann dekrementiert
    //etc
    

    edit: ne .. hab den unterschied verstanden zwischen --n und n-1, danke



  • Helium schrieb:

    In dem Fall eine beschissene Art auf 0 zu testen.

    Besten dank für die Blumen...

    greetz, Swordfish



  • Jo, aber n*--n...

    nehmen wir an n ist 5:

    erst dekrementieren, dann multiplizieren?
    4*4

    oder vielleicht zuaberhaft eine Kopie von n zwischenspeichern, n dekrementieren und dann multiplizieren?

    5*4

    n*--n ist einfach nicht definiert.



  • Swordfish schrieb:

    Helium schrieb:

    In dem Fall eine beschissene Art auf 0 zu testen.

    Besten dank für die Blumen...

    Er hat aber ein wenig recht. 😉
    Du willst ja nicht testen, ob 'value' nix ist, sondern ob es null ist. Frag mal einen x-beliebigen Mathematiker, der wird Dir heimleuchten, wenn Du ihm unterjubeln willst, dass null nichts ist.



  • Swordfish schrieb:

    Helium schrieb:

    In dem Fall eine beschissene Art auf 0 zu testen.

    Besten dank für die Blumen...

    greetz, Swordfish

    hehe...nimms dir nicht zu herzen die gesamte !value community steht hinter dir 🙂



  • Konrad Rudolph schrieb:

    Swordfish schrieb:

    Helium schrieb:

    In dem Fall eine beschissene Art auf 0 zu testen.

    Besten dank für die Blumen...

    Er hat aber ein wenig recht. 😉
    Du willst ja nicht testen, ob 'value' nix ist, sondern ob es null ist. Frag mal einen x-beliebigen Mathematiker, der wird Dir heimleuchten, wenn Du ihm unterjubeln willst, dass null nichts ist.

    Einzig und allein entscheidend ist - nachdem beide Methoden im Rahmen der Sprache C++ das selbe Ergebnis liefern - wohl die Lesbarkeit. Ich finde, dass beides klar und deutlich ist. Glaubens-/Geschmacks-/Einstellungsfrage...

    greetz, Swordfish



  • Rekursiv, rein intuitiv ( lol ):

    #include<iostream>
    using namespace std;
    
    unsigned long fak( unsigned n )
    {
       if( n==0 ) return 1;
       return n * fak( n - 1 );
    }
    
    int main()
    {
     cout << fak(5);
     return 0;
    }
    

    🙂



  • hmmm vllt auch einfach den Code von Swordfish kopiert!?


Anmelden zum Antworten