Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Sonstige Fragen » 0er wegbekommen » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 10 Beiträge
SarahK.

Dankeschön :-)
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();
}
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?
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];
	}
}
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
SarahK.

Dankeschön für die Erklärung :-)
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.
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
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();
}
SarahK.

Bitte die Kommentare nicht beachten, diese habe ich noch nicht passend abgeändert.
Es sind weitere Beiträge zu diesem Thema vorhanden. Klicken Sie hier, um sich alle Beiträge anzusehen.