Wheinachtsbaum |
JKU11
Jungspund
Dabei seit: 10.11.2012
Beiträge: 20
|
|
Ja habs jetzt endlich
Jetzt nur mehr 1 Problem lösen, und zwar dass die größte Zahl nicht 2 mal ausgegeben werden soll:
6
24816323216842Drücken Sie eine beliebige Taste . . .
Versteh nicht warum, mein code sieht nun so aus:
public class Pyr {
public static void main(String[] args) {
int n,x;
int b=2;
n=Input.readInt();
int a=(2*n)-1;
int [] Zeile;
Zeile = new int[a];
System.out.print(b);
for (int i=0; i<n-1;i++) {
Zeile[i]=b;
b=b*2;
if (b>=Math.pow(2.0, n)) {
for (x=n-1; x>=1
{
b=(int)(b-Math.pow(2.0, x));
System.out.print(b);
x=x-1;
}
}
else {
System.out.print(b);
}
}
}
}
|
|
16.11.2012 02:03 |
|
|
Karlito
Kaiser
Dabei seit: 11.04.2011
Beiträge: 1.461
|
|
Schau dir einfach dein Programm noch mal an. Die anderen Zahlen passen ja auch nicht...
|
|
16.11.2012 02:12 |
|
|
Karlito
Kaiser
Dabei seit: 11.04.2011
Beiträge: 1.461
|
|
OK, du kannst jetzt eine Zeile des Baumes ausgeben. Ich würde jetzt noch Leerzeichen einfügen, so dass man die einzelnen Zahlen erkennt.
Außerdem würde ich das jetzt in eine Funktion packen, wo du nur noch die Zeilenzahl übergibst und die enxprechende Zeile dann Ausgegeben wird.
VG,
Karlito
|
|
16.11.2012 15:27 |
|
|
JKU11
Jungspund
Dabei seit: 10.11.2012
Beiträge: 20
|
|
Habs jetzt so versucht, kommt aber ganz was anderes raus.
int n,x;
int b=2;
n=Input.readInt();
int y=n;
int a=(2*n)-1;
int c=(int)(Math.pow(2.0, n));
int [] Zeile;
Zeile = new int[a];
for (int z=0; z<=y; z++) {
for (int i=0; i<=n-1;i++) {
Zeile[i]=b;
System.out.print(b +" ");
b=b*2;
}
for (x=n-1; x>=1
{
c=(int)(c-Math.pow(2.0, x));
System.out.print(c+ " ");
x=x-1;
}
System.out.println();
n=n-1;
}
}
}
Hab grad keinen Plan wie ich das umsetzen soll.
|
|
16.11.2012 16:19 |
|
|
Karlito
Kaiser
Dabei seit: 11.04.2011
Beiträge: 1.461
|
|
Du machst es dir zu schwer!
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:
|
public class Pyr {
public static void print_zeile(int n){
int x;
int b = 2;
int a = (2 * n) - 1;
int c = (int) (Math.pow(2.0, n));
int[] Zeile;
Zeile = new int[a];
for (int i = 0; i <= n - 1; i++) {
Zeile[i] = b;
System.out.print(b+ " ");
b = b * 2;
}
for (x = n - 1; x >= 1;) {
c = (int) (c - Math.pow(2.0, x));
System.out.print(c + " ");
x = x - 1;
}
System.out.println();
}
public static void main(String[] args) {
int n;
n = 5;
for(int c = 1; c<=n; c++){
print_zeile(c);
}
}
}
|
|
|
|
16.11.2012 16:28 |
|
|
JKU11
Jungspund
Dabei seit: 10.11.2012
Beiträge: 20
|
|
Ah vielen Dank!
Naja das mit den statischen Variablen war mir bisher neu.
Frage: Wozu steht das int n in public static void print_zeile(int n)?
Und was genau sagt das print_zeile(c); aus?
Sorry für die Fragen im Inet hab ich nichts Verständliches gefunden.
|
|
16.11.2012 17:34 |
|
|
Karlito
Kaiser
Dabei seit: 11.04.2011
Beiträge: 1.461
|
|
Zitat: |
Original von JKU11
Naja das mit den statischen Variablen war mir bisher neu.
|
Was genau meinst du mit statischen Variablen?
Zitat: |
Original von JKU11
Frage: Wozu steht das int n in public static void print_zeile(int n)?
|
Das n ist ein Parameter. Er wird verlangt, wenn man die Funktion print_zeile aufruft.
Zitat: |
Original von JKU11
Und was genau sagt das print_zeile(c); aus?
|
Rufe die Funktion print_zeile() mit dem Wert von c als Parameter auf.
VG,
Karlito
|
|
16.11.2012 18:05 |
|
|
JKU11
Jungspund
Dabei seit: 10.11.2012
Beiträge: 20
|
|
Hab nach dem ausdruck gegoogelt und bin iwie auf statische variablen gekommen.
Mir ist noch nicht ganz klar was jetzt genau die absteigende Form der Pyramide im code ausmacht.
Warum wird das n in public static void print_zeile.. nicht benötigt. Dachte der Compiler läuft von oben nach unten das Progaramm ab?
|
|
16.11.2012 20:31 |
|
|
Karlito
Kaiser
Dabei seit: 11.04.2011
Beiträge: 1.461
|
|
Es ist wenn dann eine statische Funktion, keine statische Variable. Was das zu bedeuten hat, wirst du irgendwann noch erfahren. Fürs erste: normalerweise musst du für die Benutzung von Funktionen in einer Klasse immer Objekte dieser Klasse instanziieren. Bei statischen Methoden braucht man das nicht.
Wie der Compiler das Programm abgeht ist erst einmal egal. Die Frage ist, wie das Programm abgearbeitet wird. Bei Java ist es so, dass der Einstieg immer die main ist. Von da aus wird das Programm Zeile für Zeile abgegangen. Bei Schleifen ist Klar, dass der Verlauf nicht linear ist. In der Schleife wird die Funktion print_zeile aufgerufen und komplett abgearbeitet.
In print_zeile wird das n weiterhin benötigt. Der Wert von n wird durch den Aufruf der Funktion festgelegt. (Der Parameter)
VG,
Karlito
|
|
16.11.2012 20:59 |
|
|
JKU11
Jungspund
Dabei seit: 10.11.2012
Beiträge: 20
|
|
Vielen Dank, sehr verständlich erklärt!
Habe jetzt beide Funktionen separat ausgeführt.
Bei public static void print_zeile als main funktion werden ja nur die Zahlen in einer Zeile ausgeführt: 2 4 8 4 2 zb.
Bei
public class Zeile {
public static void main(String[] args) {
int n;
System.out.println("Input: ");
n=Input.readInt();
for(int c = 1; c<=n; c++){
System.out.print("1");
werden alle 1 in der Zeile ausgegeben.
Wie kommt man dann zu dem "halben Berg" als Output?
|
|
16.11.2012 21:17 |
|
|
Karlito
Kaiser
Dabei seit: 11.04.2011
Beiträge: 1.461
|
|
Ich verstehe leider nicht, was du zu erreichen versuchst und was deine Frage ist.
|
|
16.11.2012 21:25 |
|
|
JKU11
Jungspund
Dabei seit: 10.11.2012
Beiträge: 20
|
|
Würd gern genau wissen wie die halbe Pyramide im Ouput entsteht:
2
242
24842 ..
Mir is schon klar mit dem Code, den du mir gegeben hast. Das Einzige was mir nicht klar ist, mit welcher Funktion erreicht wird das um in jeder Zeile 2 Werte dazukommen.
Hoffe ich konnte es dir verständlich erklären
|
|
16.11.2012 22:57 |
|
|
Karlito
Kaiser
Dabei seit: 11.04.2011
Beiträge: 1.461
|
|
Na jede Zeile wird durch die Funktion print_zeile erzeugt.
print_zeile(1) erzeugt 2
print_zeile(2) erzeugt 242
print_zeile(3) erzeugt 24842
usw.
Die Aufrufe mit den aufsteigenden Werten werden in der Schleife in der main erzeugt.
Passe doch mal den Schleifenkopf der for-Schleife an und schau was passiert...
VG,
Karlito
|
|
16.11.2012 23:05 |
|
|
JKU11
Jungspund
Dabei seit: 10.11.2012
Beiträge: 20
|
|
In der main wird im ersten Durchlauf c mit 1 initialisiert, im zweiten Durchlauf mit 2 usw. Wie weiß dann die Funktion print_Zeile das sie nur 2 und nicht 2 4 8 16 8 4 2 ausgeben soll?
Beste Güße
|
|
16.11.2012 23:29 |
|
|
|