Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
--- Wheinachtsbaum (http://www.informatikerboard.de/board/thread.php?threadid=1321)


Geschrieben von JKU11 am 16.11.2012 um 02:03:

 

Ja habs jetzt endlich großes Grinsen

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>=1Augenzwinkern {
b=(int)(b-Math.pow(2.0, x));
System.out.print(b);
x=x-1;
}
}
else {
System.out.print(b);
}
}
}
}



Geschrieben von Karlito am 16.11.2012 um 02:12:

 

Schau dir einfach dein Programm noch mal an. Die anderen Zahlen passen ja auch nicht...



Geschrieben von JKU11 am 16.11.2012 um 14:29:

 

So, hab jetzt den Fehler gefunden.

public class Pyr {

public static void main(String[] args) {

int n,x;
int b=2;
n=Input.readInt();
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();

}
}


Das Output stimmt jetzt auch smile



Geschrieben von Karlito am 16.11.2012 um 15:27:

 

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



Geschrieben von JKU11 am 16.11.2012 um 16:19:

 

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>=1Augenzwinkern {
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.



Geschrieben von Karlito am 16.11.2012 um 16:28:

 

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



Geschrieben von JKU11 am 16.11.2012 um 17:34:

  RE: Wheinachtsbaum

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.



Geschrieben von Karlito am 16.11.2012 um 18:05:

  RE: Wheinachtsbaum

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



Geschrieben von JKU11 am 16.11.2012 um 20:31:

  RE: Wheinachtsbaum

Hab nach dem ausdruck gegoogelt und bin iwie auf statische variablen gekommen. smile

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?



Geschrieben von Karlito am 16.11.2012 um 20:59:

 

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



Geschrieben von JKU11 am 16.11.2012 um 21:17:

 

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?



Geschrieben von Karlito am 16.11.2012 um 21:25:

 

Ich verstehe leider nicht, was du zu erreichen versuchst und was deine Frage ist.



Geschrieben von JKU11 am 16.11.2012 um 22:57:

 

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 großes Grinsen



Geschrieben von Karlito am 16.11.2012 um 23:05:

 

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



Geschrieben von JKU11 am 16.11.2012 um 23:29:

 

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


Forensoftware: Burning Board, entwickelt von WoltLab GmbH