0er wegbekommen

Neue Frage »

Auf diesen Beitrag antworten »
SarahK. 0er wegbekommen

Meine Frage:
Hey zusammen,

ich habe folgendes Programm geschrieben:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:

public class Zwischenspeicher 
{
	public static void main (String[]args)
	{
		int hoehe = 6;    // Höhe muss laut Aufgabe frei wählbar sein
		int breite = 2*hoehe-1;
		int pascal [][] = new int [hoehe][breite]; //3x5 Matrix 
		int spalte = breite/2; 
		int zeile = 0; 
		for (int i=0; i<pascal.length; i++)
		{
			pascal[zeile][spalte]= 1;
			zeile++;
			spalte--;
		}
		
		spalte = breite/2; 
		zeile = 0; 
		for (int i=0; i<pascal.length; i++)
		{
			pascal[zeile][spalte]= 1;
			zeile++;
			spalte++; 
		}
		
		for (int j=0; j<pascal.length;j++)   // 2. for - Schleife
		{
			for(int k=0; k<pascal[0].length; k++)
			{
				System.out.print(pascal[j][k]);
			}
			System.out.println();
		}
	}
}






Meine Ideen:
Jetzt stören mich aber die 0er, es sollen nur die 1er in der Ausgabe stehen bleiben.

Hab's jetzt schon mit einer if - Anweisung versucht, nur müsste ich die 0er mit einem String " " ersetzen und das geht (zumindest mit meinen bisherigen Möglichkeiten) noch nicht.

Ich hoffe, Ihr könnt mir weiterhelfen.

Vielen Dank
 
Auf diesen Beitrag antworten »
SarahK.

Bitte die Kommentare nicht beachten, diese habe ich noch nicht passend abgeändert.
Auf diesen Beitrag antworten »
eulerscheZahl

Da stört noch mehr: die 1er stehen zu weit auseinander. Ich weiß nicht, in wie weit dir das Vorgehen vorgeschrieben ist. Aber eine quadratische Matrix wäre einfacher.

Wie auch immer, so kriegst du jedenfalls die 0en an den Enden weg:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
for (int j=0; j<pascal.length;j++)
{
	for(int k=0; k<pascal[0].length; k++)
	{
		if (k < spalte - j - hoehe || k > spalte + j - hoehe) {
			System.out.print(" ");
		}
		else {
			System.out.print(pascal[j][k]);
		}
	}	
	System.out.println();
}
Auf diesen Beitrag antworten »
SarahK.

Das mit den Einsern ist Absicht, soll am Ende das Pascalsche Dreieck werden.

Eine Frage noch:

code:
1:
for(int k=0; k<pascal[0].length; k++)


Was genau bedeutet das pascal[0].length?

Ich habe das im Internet mal recherchiert, da steht, dass es bei zweidimensionalen Arrays gebraucht wird?

Vielen Dank
 
Auf diesen Beitrag antworten »
eulerscheZahl

Mir ist schon klar, was du vorhast.
Trotzdem würde ich die Werte anders speichern (hätte auch den Vorteil, dass du auf einzelne Zahlen im Dreieck - die ja gleich den Binomialkoeffizienten sind - einfach zugreifen kannst, ohne Indexumrechnungen)
siehe hier

Du hast das Dreieck mit int pascal [][] = new int [hoehe][breite]; erzeugt.
pascal.length liefert die Länge der ersten Dimension, also hoehe.
Mit pascal[0].length holst du dir die erste Zeile und fragst deren Länge ab, erhältst also breite.
Auf diesen Beitrag antworten »
SarahK.

Dankeschön für die Erklärung :-)
Auf diesen Beitrag antworten »
SarahK.

Jetzt muss ich das Thema leider noch einmal aufgreifen, da ich die Berechnung nicht hinbekomme:

Einmal logisch überlegt, läuft die Berechnung folgendermaßen ab:

Das Ergebnis aus pascal [1][4] + pascal [1][6] muss in pascal [2][5] geschrieben werden.
Das Ergebnis aus pascal [2][3] + pascal [2][5] muss in pascal [3][4] geschrieben werden.
Das Ergebnis aus pascal [2][5] + pascal [2][7] muss in pascal [3][6] geschrieben werden.

So, jetzt dachte ich mir, man könnte doch mit 2 for - Schleife das Problem lösen?

for (int x=0;n<pascal.length;n++)
{
for (int y=0; y<pascal[0].length;y++)
{
int ergebnis = pascal [x][y] + pascal [x][y+2];
}

Allerdings wird mir das y+2 wieder Schwierigkeiten machen?

Danke für deine Hilfe smile
Auf diesen Beitrag antworten »
eulerscheZahl

Ja, das wird etwas aufwändiger, wenn das gewählte Modell zur Speicherung nicht optimal ist.

code:
1:
2:
3:
4:
5:
for (int x = 2; x < pascal.length; x++) {
	for (int y = spalte - hoehe - x + 2; y < spalte + x - hoehe; y += 2) {
		pascal[x][y] = pascal[x - 1][y - 1] + pascal[x - 1][y + 1];
	}
}
Auf diesen Beitrag antworten »
SarahK.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
public class Zwischenspeicher 
{
	public static void main (String[]args)
	{
		int hoehe = 6;    // Höhe muss laut Aufgabe frei wählbar sein
		int breite = 2*hoehe-1;
		int pascal [][] = new int [hoehe][breite]; 
		int spalte = breite/2; 
		int zeile = 0; 
		for (int i=0; i<pascal.length; i++)
		{
			pascal[zeile][spalte]= 1;
			zeile++;
			spalte--;
		}
		
		spalte = breite/2; 
		zeile = 0; 
		for (int i=0; i<pascal.length; i++)
		{
			pascal[zeile][spalte]= 1;
			zeile++;
			spalte++; 
		}
			for (int j=0; j<pascal.length;j++)
		{
			for(int k=0; k<pascal[0].length; k++)
			{
				if (k < spalte - j - hoehe || k > spalte + j - hoehe) 
				{
					System.out.print(" ");
				}
				else 
				{
					System.out.print(pascal[j][k]);
				}
			}	
			System.out.println();
		}
		for (int x = 2; x < pascal.length; x++) 
		{
			for (int y = spalte - hoehe - x + 2; y < spalte + x - hoehe; y += 2) 
			{
				pascal[x][y] = pascal[x - 1][y - 1] + pascal[x - 1][y + 1];
			}
		}
	}
}





Kann das sein, dass noch etwas gelöscht werden muss? Bekomme immer noch die gleiche Ausgabe wie vorher?
Auf diesen Beitrag antworten »
eulerscheZahl

Die Zeilen 40-46 solltest du zwischen 24 und 25 einfügen. Sonst gibst du ja erst das Ergebnis aus, um es danach zu berechnen.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
int hoehe = 6; // Höhe muss laut Aufgabe frei wählbar sein
int breite = 2 * hoehe - 1;
int pascal[][] = new int[hoehe][breite];
int spalte = breite / 2;
int zeile = 0;
for (int i = 0; i < pascal.length; i++) {
	pascal[zeile][spalte] = 1;
	zeile++;
	spalte--;
}

spalte = breite / 2;
zeile = 0;
for (int i = 0; i < pascal.length; i++) {
	pascal[zeile][spalte] = 1;
	zeile++;
	spalte++;
}
for (int x = 2; x < pascal.length; x++) { //nach oben geschoben
	for (int y = spalte - hoehe - x + 2; y < spalte + x - hoehe; y += 2) {
		pascal[x][y] = pascal[x - 1][y - 1] + pascal[x - 1][y + 1];
	}
}
for (int j = 0; j < pascal.length; j++) {
	for (int k = 0; k < pascal[0].length; k++) {
		if (k < spalte - j - hoehe || k > spalte + j - hoehe) {
			System.out.print(" ");
		} else {
			System.out.print(pascal[j][k]);
		}
	}
	System.out.println();
}
Auf diesen Beitrag antworten »
SarahK.

Dankeschön :-)
 
Neue Frage »
Antworten »


Verwandte Themen