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

Informatiker Board » Themengebiete » Sonstige Fragen » 0er wegbekommen » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen 0er wegbekommen
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
SarahK.
unregistriert
0er wegbekommen Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
10.01.2015 00:18
SarahK.
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Bitte die Kommentare nicht beachten, diese habe ich noch nicht passend abgeändert.
10.01.2015 01:07
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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();
}


__________________
Syntax Highlighting fürs Board (Link)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von eulerscheZahl: 10.01.2015 07:05.

10.01.2015 07:04 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
SarahK.
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
10.01.2015 09:09
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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.

__________________
Syntax Highlighting fürs Board (Link)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von eulerscheZahl: 10.01.2015 09:35.

10.01.2015 09:35 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
SarahK.
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Dankeschön für die Erklärung :-)
10.01.2015 09:49
SarahK.
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
10.01.2015 11:37
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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];
	}
}


__________________
Syntax Highlighting fürs Board (Link)
10.01.2015 12:30 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
SarahK.
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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?
10.01.2015 12:41
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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();
}


__________________
Syntax Highlighting fürs Board (Link)
10.01.2015 13:01 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
SarahK.
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Dankeschön :-)
10.01.2015 14:44
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Sonstige Fragen » 0er wegbekommen