Fakultät programmieren!

Status
Für weitere Antworten geschlossen.
@SaschaHa dann les dir bitte nochmal durch was der TE da geschrieben hat als Erklärung und "seinen code dazu"^^
daraus das abzuleiten, dass 0 ausgeschlossen und deswegen das komplett außen vor zu lassen..

mir wird daraus nur klar, dass der TE absolut keine Ahnung hat und es nicht schafft sinnvoll strukturiert sein Problem und Aufgabenstellung zu erklären.

Das ganze läuft daraus hinaus, dass er seine Hausaufgabe gelöst haben will und das ist glaub hier eh verboten im Forum, wie ich gerade nochmal nachgelesen habe!
 
Zuletzt bearbeitet:
BoardBricker schrieb:
Andererseits stellt sich mir die Frage, ob 0 jetzt wirklich zu den natürlichen Zahlen gehört[...]
Beides ist geläufig und nicht einheitlich festgelegt.
Im Endeffekt kommts darauf an, in welchem Bereich der Mathematik du dich bewegst, bzw. wie es dir von der Definition her, für deinen Anwendungsfall, am besten passt.

Wenn du Verwirrungen verringern willst, benennst du die Menge der natürlichen Zahlen ohne 0 einfach mit ℕ und die Menge der natürlichen Zahlen mit Null dagegen mit ℕ₀.
 
AW4 schrieb:
Wenn du Verwirrungen verringern willst, benennst du die Menge der natürlichen Zahlen ohne 0 einfach mit ℕ und die Menge der natürlichen Zahlen mit Null dagegen mit ℕ₀.
ich hab nirgends was von natürlichen Zahlen gelesen, noch irgendeine Definition dazu.
ich sag nur, beim programmieren sollte man genauer vorgehen.
 
peter.hahn schrieb:
mir wird daraus nur klar, dass der TE absolut keine Ahnung hat und es nicht schafft sinnvoll strukturiert sein Problem und Aufgabenstellung zu erklären.
Ja eben, das ist das Problem. Dann müssen wir das aber nicht für ihn übernehmen, gell?

Im Übrigen ist mein vorheriger Code auch nicht besonders sinnvoll, da er nicht die bereits berechneten Fakultäten berücksichtigt, sondern für jede nächst höhere wieder von vorne anfängt.

Optimiert und in einer Methode sähe das dann in etwa so aus:
Java:
//Negative Zahlen sind hier nicht berücksichtigt, 0! ist Teil der Menge
public static int[] solve(int n) {
    int[] list = new int[n+1];//n+1, da hier auch 0! enthalten ist
    list[0] = 1;//0!
    if (n == 0) return list;
    for (int i = 1; i <= n; i++) {//Beginnt bei 1, endet bei n
        list[i] = list[i-1]*(2*i-1)*2*i;//Vorherige Fakultät als Basis mal die 2 neuen Zahlen
    }
    return list;
}
Sofern ich mich nicht vertippt habe, dürfte dies die Fakultäten für alle positiven geraden Zahlen von 0 bis 2n liefern, also 0!, 2!, 4!, ..., (2n-2)! und (2n)!, insgesamt also n+1 an der Anzahl, da 0! diesmal Teil der Menge ist. Zufrieden @peter.hahn, oder findest du wieder etwas zu meckern?
 
@peter.hahn
Mein Gedanke, den du in #18 halb zitiert hast, war ja, dass man die 0 ausschließen kann, wenn erstens die Fakultät nur für natürliche Zahlen definiert ist und zweitens die 0 da nicht zugeordnet wird. Dann spielt die Geradheit von 0 keine Rolle.
Grundsätzlich hast du natürlich damit Recht, dass eine gute Programmierung im Idealfall durch Abdeckung aller Sonderfälle und möglicher Falschbedienungen den User vor sich selbst schützt. Soweit ist der TE aber noch gar nicht, wenn schon die grundlegende mathematische Beschreibung des Problems scheitert.

Unser Informatikprof legte uns daher nahe, am Anfang möglichst wenig zu programmieren und dafür umso länger über das Problem nachzudenken. Der Code käme dann relativ schnell von ganz alleine. Einfach drauf los coden und dann vermurkste Programme zu reparieren würde mehr Zeit und Nerven in Anspruch nehmen.


Auch wenn ich, zumindest gelegentlich, gerne über Detailfragen streite, hat mein Engagement hier nun sein Ende. Alles, was zum Thema gesagt werden kann, wurde gesagt, auch fast von jedem.
 
  • Gefällt mir
Reaktionen: SaschaHa
Status
Für weitere Antworten geschlossen.
Zurück
Oben