Pascalsche Dreieck

Roffel

Mitglied
Hi Leute
bin ganz neu hier im Forum und auch bei Java =)

und habe mit folgender Aufgabe schon ein Problem:

Aufgabe 4*) Java Programmierung: Pascalsche Dreieck
Erstellen Sie ein Programm das ein Pascalsches Dreieck erzeugt. Die Höhe des Dreiecks soll per Scanner
eingelesen werden.
Das Pascalsche Dreieck ist eine geometrische Darstellung der Binomialkoeffizienten
n
k
Sie sind im Dreieck derart angeordnet, dass jeder Eintrag die Summe der zwei darüberstehenden Einträge ist. Dieser
Sachverhalt wird durch die Gleichung
pascal3.gif
ausgedrückt.

also ich kenne mich leider mit Arrays auch noch nicht so gut aus.
soweit bin ich bis jetzt bei der Aufgabe gekommen...


Java:
import java.util.Scanner;

public class Aufgabe4 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        System.out.println(" Bitte geben Sie die Höhe des Dreieck's ein");
        int[][] pascal = new int[sc.nextInt()][];  // Alternative : n = in.nextInt();   
                                                   // int pascal [][] = new pascal [n][];

leider habe ich jetzt aber keine Anhung wie es weiter geht, bzw wie ich hier diese mathematische Formel in Java einbauen muss.

Wär nett wenn mir jemand weiter helfen könnte.

Grüße
Roffel
 

kreacher

Mitglied
Hi!
Du weißt aber schon was das Pascalsche Dreieck ist, oder?

"dass jeder Eintrag die Summe der zwei darüberstehenden Einträge ist"
-> das ganze soll so eine Ausgabe machen:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

Dein Ansatz ist schon nicht schlecht, aber du kannst gleich Länge und Höhe der "int-Matrix" festlegen:

Java:
int lines = sc.nextInt();
int[][] pascal = new int[lines][lines];

Tip, du brauchst zwei for-Schleifen, die das was du oben siehst berechnen. Mals dir auf papier auf, bis dir klar ist wie du das Dreieck errechnest, dann programmier es.

In Pseudo-Code:
Java:
for(i=0; i<lines; i++){
     for(j=0; j<i; j++){

         // Case: Rand des Dreiecks -> array[i][j] = 1
         // Case: Innen im Dreieck -> array[i][j] = Summe aus den beiden darüberliegenden Ziffern.

     }
}

Danach kannst du mit nochmal zwei For-Schleifen das Array ausgeben.

Viel Spaß;-)
 

Andi_CH

Top Contributor
Mit so hoch komplexen Sachen wie int[][] kenne ich mich auch nicht aus :D , aber das braucht es auch nicht.

Java:
public class PascalschesDreieck {

	private static void print(int[] arr) {
		for (int i=0; (i<arr.length)&&(arr[i]!=0); i++) {
			System.out.print(arr[i] + " ");
		}
		System.out.println();
	}
	
	/**
	 * Erstellt einen int[] der laenge "hoehe", der mit 0 intialisiert ist und
	 * an der ersten Stelle eine 1 hat
	 * 
	 * @param hoehe
	 * @return int[]
	 */
	private static int[] neueZeile(int hoehe) {
		int[] tmp = new int[hoehe];
		tmp[0] = 1;
		for (int i=1; i<hoehe; i++) {
			tmp[i]=0;
		}
		return tmp;
	}

	/**
	 * Druckt das Pascalsche Dreieck der Hoehe h aus.
	 * Der Berechnugsalgorithmus geht davon aus, dass der erstellte Array an erster
	 * Stelle eine 1 enthält und der Rest mit 0 initialisiert ist 
	 * 
	 * @param hoehe
	 */
	private static void printDreieck(int hoehe) {
		if (hoehe < 1)
			return;
		int[] zeile = neueZeile(hoehe);
		print(zeile);
		for (int x=1; x<hoehe; x++)  {
			int[] naechsteZeile = neueZeile(hoehe);
			// Bestimmen der nächsten Zeile
			for (int i=1; i<hoehe; i++) {
				naechsteZeile[i] = zeile[i-1] + zeile[i];
			}
			zeile = naechsteZeile;
			print(zeile);
		}
	}

	public static void main(String[] args) {
		printDreieck(6);
	}
}
 

Roffel

Mitglied
Danke für die schnellen Antworten.
Komme leider dennoch nicht weiter...

Java:
import java.util.Scanner;

public class Aufgabe4 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        System.out.println(" Bitte geben Sie die Höhe des Dreieck's ein");
        int l = sc.nextInt();
        int[][] pascal = new int[l][(2*l)+1];    /* neues Array: Anzahl der Zeilen=l, Anzahl der Spalten=2*l+1-->so dass außen immer 2 Nullen sind und schöne Darstellung entsteht: geht das so`? */
    
        for (int zeile=0; zeile<pascal.length;zeile++); {       //for Schleife um die einzelnen Einträge abzurufen -->"Reihenschleife"
            for(int spalte=0; spalte<pascal[zeile].length;spalte++); {
                
                    if (pascal[zeile][spalte] ==0) {         // if Schleife, dass nur Werte ungleich 0 ausgegeben werden
                        System.out.print("  "); }
                    else {
                        System.out.print(pascal[zeile][spalte] + "  ");
                    }
        }
            System.out.println();

Es soll glaube ich laut meiner Aufgabestelleung nur die Höhe des Dreiecks per Scanner eingegeben werden.
weiß aber nicht wie ich dann die tolle Form des dreiecks hinbekommen kann wenn ich nur die Höhe eingeben soll.

Leide kommt unten bei j,i auch immer noch der Fehler : " Cannot find Symbol". wieso kommt das? habe doch eigentlich j und i deklariert...

und wie müsste ich jetzt fortfahren?
bitte um dringende Hilfe, muss das heute noch abgeben :(


Grüße
Roffel
 

Andi_CH

Top Contributor
Was für ein Marke hat der Scanner? ist es einer von Canon oder ein Brother ???:L

Oben steht die Lösung und wenn du mit "Scanner" einlesen von der Console meinst, dann ist das ein anderes Thema.

Ich würde mal google und die Forumssuche strapazieren wie das geht - du wirst herausfinden, dass das schon einige Leute irgendwann einmal gemacht haben.

Ich stell mir das etwa so vor

Java:
	private static int einlesenMitScanner() {
		//TODO - ja genau to do - als mach es
		return 6;
	}

	public static void main(String[] args) {
		printDreieck(einlesenMitScanner());
	}

und der Rest ist genau wie oben.
 
Zuletzt bearbeitet:
S

SlaterB

Gast
desweiteren:

> Leide kommt unten bei j,i auch immer noch der Fehler : " Cannot find Symbol"

im geposteten Code gibts weder j noch i, mit zeilen und spalten aber denselben Fehler,
denn die Schleifen werden direkt mit einem Semikolon nach dem for beendet,

freilich sieht man auch bei laufenden Schleifen wenig, bei 0 werden ja nur Leerzeichen ausgegeben..


> if Schleife
gibts übrigens nicht, außer if-schleife.de
schnell besser lernen
 

Roffel

Mitglied
Ja mir bringt das auch nichts wenn jemand eine fertige Lösung postet, d.h. ja nicht das ich es dann verstehen könnte. Außerdem habe ich auch noch nie etwas gehört wie "private" in seiner Lösung, das haben wir an der Uni nicht behandelt, auf jedenfall bisher nicht.
Und ja ich meine natürlich eine Scanner Eingabe mit der Console, was anderes kenn ich auch gar nicht =)

import java.util.Scanner; ....
Scanner sc = new Scanner (System.in); ich sollte ja bei meiner Aufgabe NUR die Höhe des Dreiecks eingeben. soviel dazu.

habe es jetzt nach einer gefühlten Ewigkeit so gelöst:

Java:
import java.util.Scanner;									

    public class Aufgabe4 {			

	public static void main(String args[]) {
		
		Scanner sc = new Scanner(System.in);				//Deklaration des Scanners
                                        System.out.println("Bitte Höhe des Pascalschen Dreiecks eingeben:");	
		
        	int Höhe = sc.nextInt();					//Die Varriable Höhe wird eingelesen
        	int [][] matrix = new int [Höhe][(2*Höhe)+1];			//Erstellen eines Arrays "matrix"; zuerst die Anzahl der Zeilen = Höhe und danach die Anzahl der Spalten = 2*Höhe+1 
       		matrix = Werte(matrix, Höhe);                                   //neuer Methodenaufruf in Verbindung mit der neuen Methode "Werte" außerhalb der Methode "main"
        
        	for(int i = 0; i < matrix.length; i++) {                        //Wir brauchen 2 for-Schleifen um in das zweidimensionale Array zuzugreifen
                    for(int j = 0; j < matrix[i].length; j++) {                   
                        if(matrix[i][j] == 0) {                                 //if-Schleife: Überprüfung der Werte gleich 0, "==" testet zwei Variablen auf Gleichheit
				
                                        System.out.print("  ");			//Ausgabe von zwei Leerzeichen für den Wert 0 
			}
                        else{												
					System.out.print(matrix[i][j]+" ");     //Ausgabe der Werte + ein weiteres Leerzeichen
			}
                    }
                                        System.out.println("\n");		//Die Ausgabe "\n" bewirt den Zeilenumbruch der nächsten Werte auf die nächste Zeile
		}
        }
	
	public static int[][] Werte(int[][] matrix, int Höhe) {                 //Erstellen einer neuen Methode "Werte"
		
                matrix[0][Höhe] = 1;                                            //In "Zeile 1" (0) kann nur der Wert 1 ausgegeben werden, es bildet die Spitze des Pascalschen Dreiecks 
                for(int i = 1; i < matrix.length; i++) {                        //for-Schleife: Initialisierung des Zählers (ab welchem Wert wird gezählt)--> hier erst ab 1, da 0 schon definiert
                    for(int j = 1; j < 2*Höhe; j++) {                           
	    		  
                matrix[i][j] = matrix[i-1][j-1] + matrix[i-1][j+1];             //Berechnung der unteren Werte --> Addition des Wertes eine Reihe höher und eine Spalte weiter links mit dem Wert eine Reihe höher aber eine Spalte weiter rechts
	    	    }                                                           
	       }
	       return matrix;                                                   //greift auf die Inhalte(Werte) des Array's "matrix" zurück und gibt diese durch die Standardausgabe aus
	}    
    }

Dennoch Danke für die Mühen
Gruß
ROffel
 
Zuletzt bearbeitet von einem Moderator:

Andi_CH

Top Contributor
Ja mir bringt das auch nichts wenn jemand eine fertige Lösung postet, d.h. ja nicht das ich es dann verstehen könnte. Außerdem habe ich auch noch nie etwas gehört wie "private" in seiner Lösung, das haben wir an der Uni nicht behandelt, auf jedenfall bisher nicht.

Mein Gott ist das ein Chaos in deinem Code - Also unter meinem Tisch steht ein Scanner von Cannon - den kannte ich vie früher als den von Java.

Aber eigentlich wollte ich nur zum letzten Satz etwas sagen: Mir haben fertige Lösungen immer beim lernen geholfen und sie tun es immer noch.

Dazu ein Zitat:
Wer immer nur das tut was er schon kann, wird immer das bleiben was er schon ist. (Henry Ford)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Erste Schritte Pascalsche Dreieck Java Basics - Anfänger-Themen 3
1 2D-Array, dass das pascalsche Dreieck berechnet Java Basics - Anfänger-Themen 2
R Pascalsche Dreieck Java Basics - Anfänger-Themen 4
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