Erste Schritte Pascalsche Dreieck

ocsme

Top Contributor
Guten Tag,
ich hab ein Programm geschrieben was das Pascalsche Dreieck berechnet. Dürfen nur Kontrollstrukturen benutzen.

So sieht meines aus:
Code:
public class PascalTriangle {
    public static void main(String[] args) {
       
        int eingabe=10;
        int n=0;
        int k=0;
        long fakn;
        long fakk;
        int nMinusk;
        long faknMinusk;
        long binom;
       
        while(n<eingabe) {
            k=0;
            while(k<=n) {
                fakn=1;
                fakk=1;
                nMinusk=n-k;
                faknMinusk=1;
               
                for(int i=n;i>=1;i--)
                    fakn*=i;
                for(int j=k;j>=1;j--)
                    fakk*=j;
                for(int l=nMinusk;l>=1;l--)
                    faknMinusk*=l;
               
                binom=fakn/(fakk*faknMinusk);
               
                if(k==n)
                    System.out.println(binom+" ");
                else System.out.print(binom+" ");
               
                k++;
            }
            n++;
        }
       
    }
}

ein Kumpel hat es so gemacht:
Java:
public class PascalTriangle {
    public static void main(String[] args) {
       
        int eingabe=10;
        long result1 = 1;
        long result2 = 1;
       
       
        System.out.println("1");
        for(int n = 1; n<eingabe; n++){
            System.out.print("1 ");
            for (int k=1; k<=n; k++){
                for(int i = (k+1); i<=n; i++)
                    result1 *=i;
                for(int x =1; x<=(n-k); x++)
                    result2 *= x;
                result1 /= result2;               
                System.out.print(result1+" ");
                result1 = 1;
                result2 = 1;
            }
            System.out.println("");           
        }
}
}

an sich verstehe ich es ja doch wieso hat er in der Schleife k+1 gemacht? Kann mir das jemand vielleicht Mathematisch erklären?
Unser Lehrer meinte man könnte es mit einer Schleife hin bekommen wie soll so etwas den gemacht werden?

Kann mir darauf jemand 1-2 Tipps geben?

LG
 

httpdigest

Top Contributor
Letztlich ist der Algorithmus, um den Binomialkoeffizient von (n k) zu berechnen, folgender:
Java:
r = 1;
for (int j = 1; j <= k; j++)
  r *= (n + 1 - j) / j
Bzw. äquivalent (wenn man bei 0 anfangen möchte):
Java:
r = 1;
for (int j = 0; j < k; j++)
  r *= (n - j) / (j + 1)
Siehe: https://de.wikipedia.org/wiki/Binomialkoeffizient#Definition

Jetzt musst du nur durch Äquivalenzumformungen (im Code) aus der obigen Schleife die zwei Schleifen aus deinem gezeigten Code machen.
Was man beobachten kann, ist, dass er die einzelnen Teilfaktoren (n - j) und (j + 1) jeweils in einer Schleife berechnet. Und das auch nicht von 0 an, sondern von k aus.
Wenn man es aber so kompakt wie möglich machen will, nimmt man einfach direkt die Definition des Binomialkoeffizienten als Code und wenn man lustig ist, das dann auch noch pseudo-funktional :)
Java:
import static java.util.stream.IntStream.*;
...
int eingabe = 10;
range(0, eingabe).forEach(n -> {
  rangeClosed(0, n).forEach(k -> System.out.print(
      range(0, k).reduce(1, (r, j) -> r * (n - j) / (j + 1)) + " ")
  );
  System.out.println();
});
 
Zuletzt bearbeitet:

httpdigest

Top Contributor
Oder tatsächlich funktional/nebeneffektfrei:
Java:
import static java.util.stream.IntStream.*;
import static java.util.stream.Collectors.*;
...
int eingabe = 10;
System.out.println(range(0, eingabe).mapToObj(n ->
  rangeClosed(0, n).map(k -> 
      range(0, k).reduce(1, (r, j) -> r * (n - j) / (j + 1))
  ).mapToObj(Integer::toString).collect(joining(" "))
).collect(joining("\n")));
 

ocsme

Top Contributor
Danke für die Antworten doch leider hatten wir so etwas noch nicht.
Habe es jetzt mit den 5 schleifen abgegeben! das habe ich auch selbst gemacht. Einige bei uns haben es mit 2 Schleifen hin bekommen doch dafür hatte ich jetzt keine weitere Zeit mir das an zu schauen. Werde es aber definitiv wieder versuchen ;)
Dann melde ich mich hier wieder also ist das Thema Erst einmal beantwortet Danke nochmal =)

LG
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
1 2D-Array, dass das pascalsche Dreieck berechnet Java Basics - Anfänger-Themen 2
R Pascalsche Dreieck Java Basics - Anfänger-Themen 4
R Pascalsche Dreieck Java Basics - Anfänger-Themen 8
H Compiler-Fehler Pascalsche Dreieck Java Basics - Anfänger-Themen 2
E Pascalsche Dreieck aus Java openbook Java Basics - Anfänger-Themen 3
T Pascalsche Dreieck ERKLÄRUNG Java Basics - Anfänger-Themen 6
G Pascalsche Dreieck in Dreieckform Java Basics - Anfänger-Themen 2
X Pascalsche Dreieck Java Basics - Anfänger-Themen 6
_so_far_away_ pascalsches Dreieck Zentrierung. Java Basics - Anfänger-Themen 12
laxla123 Dreieck erstellen Java Basics - Anfänger-Themen 1
JustAProgrammer Ein Dreieck mit Arrays erstellen Java Basics - Anfänger-Themen 2
kxrdelis Konstruktor für ein Rechtwinkliges Dreieck Java Basics - Anfänger-Themen 10
G Magisches Dreieck Java Basics - Anfänger-Themen 2
F Pascalsches Dreieck mit Rückgabewert Java Basics - Anfänger-Themen 2
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
S Überprüfung rechtwinkliges Dreieck Java Basics - Anfänger-Themen 4
Z Warum kein Dreieck aus Sternen? Java Basics - Anfänger-Themen 9
L Dreieck Java Basics - Anfänger-Themen 22
H Stern Dreieck (Buch: Grundkurs Programmieren) Java Basics - Anfänger-Themen 2
L Pascalsches Dreieck Java Basics - Anfänger-Themen 4
D Pascal'sches Dreieck Java Basics - Anfänger-Themen 6
N Methoden Gleichseitiges Dreieck erstellen Java Basics - Anfänger-Themen 8
U Dreieck Java Basics - Anfänger-Themen 22
E Dreieck zeichnen Java Basics - Anfänger-Themen 3
L Dreieck Kreis Java Basics - Anfänger-Themen 12
B Dreieck Flächenberechnung Java Basics - Anfänger-Themen 2
B Java Grafikprogrammierung Dreieck Java Basics - Anfänger-Themen 6
I Umgedrehtes Dreieck Java Basics - Anfänger-Themen 3
M Dreieck erstellen Java Basics - Anfänger-Themen 17
J Dreieck Ausgeben Java Basics - Anfänger-Themen 3
C Pascalsches Dreieck: Ausgabeproblem Java Basics - Anfänger-Themen 10
K pascalsches Dreieck Java Basics - Anfänger-Themen 8
M Pascalsches Dreieck Java Basics - Anfänger-Themen 12
M Dreieck prüfen Java Basics - Anfänger-Themen 8
W Pascalsches Dreieck Java Basics - Anfänger-Themen 19
B Bitte um Hilfe es geht um Array + Punkte wie Dreieck,Fläche etc. Java Basics - Anfänger-Themen 12
D Pascalsches Dreieck Java Basics - Anfänger-Themen 9
H Dreieck aus Zeichen Java Basics - Anfänger-Themen 4
L Paskalsche Dreieck im Array Java Basics - Anfänger-Themen 2
U Rekursive lösung von pascal dreieck Java Basics - Anfänger-Themen 11
H2SO3- dreieck, bild --> maus klick event. Wie gehts? Java Basics - Anfänger-Themen 10
Antoras Dreieck zeichnen Java Basics - Anfänger-Themen 2
A Problem Gleichseitiges Dreieck aus Sternchen Java Basics - Anfänger-Themen 7
G Dreieck mit Java Apllet Java Basics - Anfänger-Themen 10
V Dreieck spiegeln Java Basics - Anfänger-Themen 3
L Dreieck soll Farbe ändern Java Basics - Anfänger-Themen 4
L Dreieck füllen Java Basics - Anfänger-Themen 4
X Dreieck ausgeben Java Basics - Anfänger-Themen 3
B Hindergrundfarbe in JPanel und Dreieck zeichnen Java Basics - Anfänger-Themen 4
D Das Problem mit dem Dreieck. Java Basics - Anfänger-Themen 5
B auf der Spitze stehendes Dreieck mit for-Schleifen Java Basics - Anfänger-Themen 6
lan2711 Anfänger: Konstruktion Dreieck Java Basics - Anfänger-Themen 2
G Pascalsches Dreieck Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben