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

Informatiker Board » Themengebiete » Praktische Informatik » Wheinachtsbaum » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Seiten (3): « vorherige 1 [2] 3 nächste » Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Wheinachtsbaum
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
JKU11
Jungspund


Dabei seit: 10.11.2012
Beiträge: 20

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 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);
}
}
}
}
16.11.2012 02:03 JKU11 ist offline Beiträge von JKU11 suchen Nehmen Sie JKU11 in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

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

Schau dir einfach dein Programm noch mal an. Die anderen Zahlen passen ja auch nicht...
16.11.2012 02:12 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
JKU11
Jungspund


Dabei seit: 10.11.2012
Beiträge: 20

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

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

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von JKU11: 16.11.2012 14:30.

16.11.2012 14:29 JKU11 ist offline Beiträge von JKU11 suchen Nehmen Sie JKU11 in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

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

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 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
JKU11
Jungspund


Dabei seit: 10.11.2012
Beiträge: 20

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

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.
16.11.2012 16:19 JKU11 ist offline Beiträge von JKU11 suchen Nehmen Sie JKU11 in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

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

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 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
JKU11
Jungspund


Dabei seit: 10.11.2012
Beiträge: 20

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

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 JKU11 ist offline Beiträge von JKU11 suchen Nehmen Sie JKU11 in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

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

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 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
JKU11
Jungspund


Dabei seit: 10.11.2012
Beiträge: 20

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

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?
16.11.2012 20:31 JKU11 ist offline Beiträge von JKU11 suchen Nehmen Sie JKU11 in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

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

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 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
JKU11
Jungspund


Dabei seit: 10.11.2012
Beiträge: 20

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

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 JKU11 ist offline Beiträge von JKU11 suchen Nehmen Sie JKU11 in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

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

Ich verstehe leider nicht, was du zu erreichen versuchst und was deine Frage ist.
16.11.2012 21:25 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
JKU11
Jungspund


Dabei seit: 10.11.2012
Beiträge: 20

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

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
16.11.2012 22:57 JKU11 ist offline Beiträge von JKU11 suchen Nehmen Sie JKU11 in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

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

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 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
JKU11
Jungspund


Dabei seit: 10.11.2012
Beiträge: 20

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

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 JKU11 ist offline Beiträge von JKU11 suchen Nehmen Sie JKU11 in Ihre Freundesliste auf
Seiten (3): « vorherige 1 [2] 3 nächste » Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Wheinachtsbaum