Fakultät mit for-Schleife berechnen
-
Schreiben Sie eine Funktion
int fakultaet(int n)
, in der die Fakultät mit einer for-Schleife berechnet wird.
Meine Idee:
#include <iostream> using namespace std; int fakultaet(int value) { if(value == 0) { return 1; } else if(value >=1) { int ergebnis = 1; for(int i=1; i<= value;i++) { ergebnis *= i; } return ergebnis; } } int main() { int j,k; cout << "Für welche natuerliche Zahl n soll die Fakultaet berechnet werden?" << endl; cin >> j; k=fakultaet(j); cout << "n!= " << k << endl; }
Ich würde gerne noch Folgendes haben:
Falls jemand eine negative ganze Zahl eingibt, soll eine Fehlermeldung erscheinen. Wie kann ich das noch ergänzen?
Ist das so okay?
Viele Grüße
computing1
-
computing1 schrieb:
Ich würde gerne noch Folgendes haben:
Falls jemand eine negative ganze Zahl eingibt, soll eine Fehlermeldung erscheinen. Wie kann ich das noch ergänzen?
Na überleg mal:
wenn j negativ ist: "Fehlermeldung"
sonst: "weiter im Text"
-
#include <iostream> int main() { long long factorial = 1; int counter; std::cout << "Gebe einen Wert N zum berechnen ein : "; do { std::cin >> counter; std::cin.get(); } while(counter < 0); for(int i = 1; i <= counter; i++) { factorial *= i; } std::cout << std::endl << counter << "! = " << factorial << std::endl << std::endl; std::cout << "Druecke \'Return\' zum beenden." << std::endl; std::cin.get(); return 0; }
Natürlich wird hier nicht abgefangen wenn die Fakultät der eingegeben Zahl die obere Grenze sprengt, also größer ist als der darstellbare Zahlenwert eines 'long long'.
-
Achso:
main()
ist zwar eine besondere Funktion, aber letztlich auch nur eine Funktion, die einen Wert an den Aufrufer zurückgibt.
Anders als andere Funktionen gibt sie allerdings einen Wert (nämlich 0) zurück wenn ihr Ende erreicht wird, ohne dass ein explizites return vor der schließenden geschweiften Klammer steht.
Deswegen schreibst Du keinreturn 0;
als letzte Anweisung.Aber Du kannst auch
main()
auf verschiedenen Pfaden verlassen.
Fehler werden dabei meist mit Rückgabewerten != 0 signalisiert.int main(){ bool out_of_fuel = ...; bool target_missed = ...; ...; if(out_of_fuel){ std::cerr << "out of fuel!\n"; return 1; } if(target_missed){ std::cerr << "plenty of fuel left. But target missed.\n"; return 2; } ....; //return 0; // implizit ("O.K.") }
PS: Wenn Du übrigens über eine rudimentäre Fehlerbehandlung nachdenkst (anstatt Ende mit Schrecken) fällt mir gerade dieser Thread ein:
cin>>zahl; überprüfen, dass da nur eine zahl und nix anderes drin steht.Ich schlage vor Du gehst erstmal davon aus, dass ein
int
eingegeben wird und prüfst denint
auf Gültigkeit.
-
Jau ok, alte Gewohnheit von mir das 'return 0' zu schreiben
Aber mal zurück zu OP, die Explizite Lösung der Aufgabe Wäre natürlich das hier.
#include <iostream> long long compute_factorial(int n) { long long factorial = 1; for(int i = 1; i <= n; i++) { factorial *= i; } return factorial; } int main() { int counter; std::cout << "Gebe einen Wert N zum berechnen ein : "; do { std::cin >> counter; std::cin.get(); } while(counter < 0); std::cout << std::endl << counter << "! = " << compute_factorial(counter) << std::endl << std::endl; std::cout << "Druecke \'Return\' zum beenden." << std::endl; std::cin.get(); }
Ich denke das Überprüfen ob da wirklich auch ein int drinne steht etc. würde glaube die Aufgabenlösung sprengen. Denke nicht das das so weit gefragt war
aber ich bin ja auch nicht der OP
-
@Videonauth:
Ich hatte schon lange vor Deinem Posting angefangen meins zu verfassen...
Hat alles nur länger gedauert mit der Formulierung...gerne kannst Dureturn 0;
schreiben oder nicht
-
computing1 schrieb:
Falls jemand eine negative ganze Zahl eingibt, soll eine Fehlermeldung erscheinen. Wie kann ich das noch ergänzen?
Da hast angeblich diese Programm geschrieben und bekommst nun das nicht hin? Man findet wohl genug Idioten im Netz die einem die Hausaufgaben machen.