Mehrdimensionales Array

Neue Frage »

Auf diesen Beitrag antworten »
123michi19 Mehrdimensionales Array

Meine Frage:
Hi Leute,

gut dass es euch gibt :-)

Ich muss unter der Verwendung mehrdimensionaler Arrays das Pascalsche Dreieck ausgeben lassen. Der Einfachheit halber darf es folgendermaßen ausgegeben werden:
1
11
121
1331
usw.

Die Höhe muss frei wählbar sein.

Meine Ideen:
Meine Gedanken dazu:

mehrdimensionales Array initialisieren mit der gewünschten Höhe

int [] pascal = [3][3];

Aber jetzt halt das Problem, dass ich es nicht schaffe, die jeweils zwei zusammengehörenden Zahl zu addieren?


Vielen Dank für Eure Hilfe :-)
 
Auf diesen Beitrag antworten »
eulerscheZahl

Hi,
ein zweidimensionales Array initialisierst du aber anders:
code:
1:
2:
int size = ...;
int[][] pascal = new int[size][size];

dann eine Initialisierung der 1en:
pascal[0][n] = 1;

anschließend wird der Inhalt befüllt nach der bekannten Formel
[latex]\binom{n}{k} = \binom{n-1}{k-1}+\binom{n-1}{k}[/latex] (für k, n > 0)
hierfür brauchst du zwei verschachtelte Schleifen.
Auf diesen Beitrag antworten »
123michi19

Vielen Dank für die Antwort. Wäre der folgende Ansatz teilweise richtig?

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
package testpackage;

public class TestKlasse 
{

	public static void main(String[] args) 
	{
		int n=1;
		int [][] pascal = new int [0][n];
		
				for (int i=0; i<pascal.length; i++)
					{
						for (int j=0; j<i; j++)
						{
							System.out.println (n);
						}
						
					}
			
		
	}
}
Auf diesen Beitrag antworten »
123michi19

Hier noch einmal ohne das viele (von dir gehasste großes Grinsen ) einrücken :-)

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
package testpackage;

public class TestKlasse 
{

	public static void main(String[] args) 
	{
		int n=1;
		int [][] pascal = new int [0][n];
		
				for (int i=0; i<pascal.length; i++)
					{
					for (int j=0; j<i; j++)
						{
						System.out.println (n);
						}
					}
	}
}
 
Auf diesen Beitrag antworten »
eulerscheZahl

Nein.

Wenn wir ein pascalsches Dreieck im Speicher anlegen wollen, dann brauchen wir genauso viele Zeilen wie Spalten (siehe mein Codebeispiel, da steht nicht ohne Grund zweimal die selbe Größe).
Der Speicherinhalt soll später so aussehen:
code:
1:
2:
3:
4:
5:
6:
7:
n\k 0 1  2  3 4 5
0   1 0  0  0 0 0
1   1 1  0  0 0 0
2   1 2  1  0 0 0
3   1 3  3  1 0 0
4   1 4  6  4 1 0
5   1 5 10 10 5 1

das heißt wir legen ein zweidimensionales Array der Größe 6x6 an (können wir später noch durch eine Konstante ersetzen, ich will es so greifbar wie möglich halten und dich nicht unnötig verwirren)
code:
1:
int[][] pascal = new int[6][6];


als nachstes kommen die 1er für k=0 (linker Rand)
code:
1:
2:
for (int n = 0; n < 6; n++)
    pascal[n][0] = 1;

ich werde konsequent den ersten Index für n und den zweiten für k verwenden. Könnte man theoretisch auch tauschen. Das ist komplett egal, man darf dabei nur nicht durcheinanderkommen.

So und jetzt die Berechnung der restlichen Felder:
code:
1:
2:
3:
for (int n = 1; n < 6; n++)
    for (int k = 1; k <= n; k++)
        pascal[n][k] = *hier Berechnungsformel einfügen*;


edit: so würde ich die Formatierung erwarten:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
public class TestKlasse 
{

	public static void main(String[] args) 
	{
		int n=1;
		int [][] pascal = new int [0][n];
		
		for (int i=0; i<pascal.length; i++)
		{
			for (int j=0; j<i; j++)
			{
				System.out.println (n);
			}
		}
	}
}

aber für den Compiler ist beides lesbar - und das ist ja das wichtigste (solange man keine Fehler finden muss, weil der Kollege was verbockt hat).
Auf diesen Beitrag antworten »
123michi19

Vielen Dank für deine Hilfe. Eine Frage noch: Wie lange dauert es denn, bis man solche Aufgaben in deiner Geschwindigkeit lösen kann? Ich studiere jetzt seit 8 Wochen Informatik und frage mich (die Erfahrung fehlt mir natürlich) ob es überhaupt der richtige Studiengang ist, da mir schon die Ansätze richtig schwer fallen?
Auf diesen Beitrag antworten »
eulerscheZahl

Dass du in 8 Wochen nicht meinen Stand erreichst, ist zu erwarten. Alles andere wäre ein schlechtes Zeugnis für mich, schließlich lerne ich es (teilweise im Selbststudium) seit etwa 7 Jahren. Angefangen habe ich im Matheunterricht der 8. Klasse mit Pascal - der Lehrer hat die Variablen damals a,b,c,d genannt. Hat eine Weile gedauert, bis ich mir das wieder abgewöhnt hatte smile

Ich hatte mit soetwas am Anfang auch Probleme, aber mit der Zeit wiederholen sich bestimmte Dinge, du musst öfter mal zwei Schleifen verschachteln - irgendwann erkennst du das von selbst und kannst es ohne lange nachzudenken eintippen. Auch die Syntax einer Sprache lernt man mit der Zeit, weiß an welchen Stellen man auf Bibliotheksfunktionen zugreifen kann und so ein paar Zeilen abkürzen kann.

Mach' dir keine allzugroßen Gedanken, wenn es am Anfang etwas länger dauert, bleibt hartnäckig und habe vor allem Spaß bei der Sache, dann geht es mit der Zeit ganz von allein.
Auf diesen Beitrag antworten »
123michi19

Vielen Dank für deine aufmunternden Worte :-) und die Hilfe natürlich ;-)
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »