Entwickler-Ecke
C# - Die Sprache - Konsolenanwendung Haus vom Nikolaus
Rakeem - Do 04.12.08 15:29
Titel: Konsolenanwendung Haus vom Nikolaus
Hi,
Ich bin noch anfänger und soll für die schule ein Haus programmieren mit for schleifen.
kriege es aber nicht hin.
using System;
C#-Quelltext
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: 52: 53: 54: 55: 56:
| namespace ConsoleApplication2 { class Class1 { [STAThread] static void Main(string[] args) { Console.WriteLine("\t\t### ########################################### ###"); Console.WriteLine("\t\t#### ####"); Console.WriteLine("\t\t#### Ausgabe eines Hauses ####"); Console.WriteLine("\t\t#### ####"); Console.WriteLine("\t\t### ########################################### ###\n\n");
int leerzeichen; int waggerecht; int senkrecht;
Console.Write("Geben sie die breite ein "); waggerecht = Convert.ToInt16(Console.ReadLine()); Console.Write("Geben sie die hoehe ein "); senkrecht = Convert.ToInt16(Console.ReadLine()); leerzeichen = waggerecht - 1; leerzeichen = senkrecht - 1;
if (waggerecht <= 0) { Console.WriteLine("Bitte ungerade Zahl eingeben"); } else { for (int reihe1 = 0; reihe1 < waggerecht; reihe1++) { Console.Write("*****"); { if (senkrecht <= 0) { Console.WriteLine("Bitte ungerade Zahl eingeben"); } else { for (int reihe2 = 0; reihe2 < senkrecht; reihe2++) { Console.WriteLine("\n* *"); { } } } } } } } } } |
soweit habe ich es aber den boden und denn dach kriege ich nicht hin.
bitte um hilfe
Moderiert von
Christian S.: C#-Tags hinzugefügt
katmai - Do 04.12.08 15:53
und wie soll das dann aussehen ?
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| ## ##### ######### ############# ################# ##################### ##################### ##################### ##################### ##################### ##################### |
so ?
for Schleifen haben Zählervariablen diese kannst du verwenden um die Anzahl der '#' und ' ' beim Dach zu definieren --> wird ja kleiner/größer...
Rakeem - Do 04.12.08 16:19
das soll so ausehen
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| * * * * * * * ******* * * * * * * * * * * ******* |
Moderiert von
UGrohne: Beitragsformatierung überarbeitet.
katmai - Do 04.12.08 16:25
aha, naja sollst du nur eine Schleife verwenden ?
wenn nich dann iss dat doch ziemlich easy...
wo genau liegt dein problem ?
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| * * * * * * * ******* * * * * * * * * * * ******* |
Rakeem - Do 04.12.08 16:29
ne mit mehreren aber wenn ich den boden einfügen will kommt das immer so raus
Quelltext
1: 2: 3:
| ********** * * ********** |
und immer so weiter
Moderiert von
UGrohne: Beitragsformatierung überarbeitet.
JüTho - Do 04.12.08 17:58
Hallo und noch :welcome:
Mit mehreren Schleifen? Nach meiner Einschätzung brauchst Du eine für das Dach, eine für die Decke, eine für die Wände, eine für den Boden. Boden = Decke, passt also in eine eigene Methode.
Die Schleife für Boden/Decke zeichnet immer ein einzelnes Sternchen; denn diese Anzahl soll ja variabel sein.
Für die Wände ist eine geschachtelte Doppelschleife sinnvoll: äußere Schleife nach den Bausteinen, darin ein Sternchen, dann die innere Schleife für die Breite, dann ein zweites Sternchen für die andere Mauer.
Für das Dach ähnlich: eine Anzahl von Leerzeichen, dann das erste Dach, dann eine Anzahl von Leerzeichen, dann das zweite Dach. (Die restlichen Leerzeichen brauchen nicht mehr gezeichnet zu werden.)
Dann noch eine Reihe weiterer Hinweise:
Ob eine Zahl gerade ist oder nicht, kann mit % (modulo) geprüft werden.
Anstelle von Convert.ToXxx ist besser Parse, ParseExact, TryParse, TryParseExact zu verwenden.
int ist Int32, nicht Int16.
Ich würde getrennt in je einer do-while-Schleife die Eingabe solange abfragen und ggf. wiederholen, bis es sich um ungerade Zahl handelt. (Wozu eigentlich? Davon hängt doch lediglich ab, ob der Dachfirst ein Zeichen breit ist oder zwei. Schöner dürfte also sein, die Anzahl der Leerzeichen einfach auszurechnen und die Schleifen anzupassen.) Erst danach kommt das Zeichnen, natürlich in der Reihenfolge Dach - Decke - Wände - Boden.
Ich hoffe, Du kannst mit diesen Hinweisen etwas anfangen. Jürgen
PS. Außerdem heißt es waagerecht. Einmal falsch kommt ja vor, aber ständig stört mich doch sehr.
Helo - So 04.01.09 21:10
Moin,
ich wollte nicht extra einen neuen Thread aufmachen, da dieser ja noch nicht so alt ist.
Das Haus an sich ist einfach, doch treiben mich gerade die Querstreben, die ja zum richtigen Haus vom Nikolaus, gehören in den Wahnsinn.
Hat vllt. jemand einen Tipp für mich wie ich die Streben am besten einbaue bzw. in For-Schleifen aufteile?
mfg
Kha - So 04.01.09 22:29
:welcome:
Die Zeilen zwischen Decken und Boden haben doch diesen Aufbau:
Stern(Linke Wand) Lücke1 Stern(Diagonale) Lücke2 Stern(Diagonale) Lücke1(da spiegelbildlich) Stern(rechte Wand)
In der ersten und letzten Zeile ist Lücke1 0, Lücke2 3 Leerzeichen breit:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| * * * * * * * ******* ** ** * * * * [...] |
Jetzt brauchst du nur noch eine Formel für die Lückenbreite bei den Zeilen dazwischen.
Helo - Mo 05.01.09 04:13
Danke für den Tipp Kha, habe es jetzt geschafft. Aber wenn ich es mir nun ansehe verstehe ich nicht mehr wo mein Problem lag, tja da passt das Sprichwort "Man sieht den Wald vor Bäumen nicht" ja wunderbar =)
mfg
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!