Autor Beitrag
Rakeem
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Do 04.12.08 15:29 
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;

ausblenden volle Höhe 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 user profile iconChristian S.: C#-Tags hinzugefügt
katmai
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35

Win xp

BeitragVerfasst: Do 04.12.08 15:53 
und wie soll das dann aussehen ?

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Do 04.12.08 16:19 
das soll so ausehen

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
                *
               * *
              *   *
             *     *
             *******
             *     *
             *     *
             *     *
             *     *
             *     *
             *******


Moderiert von user profile iconUGrohne: Beitragsformatierung überarbeitet.
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von Rakeem am Do 04.12.08 16:26, insgesamt 1-mal bearbeitet
katmai
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35

Win xp

BeitragVerfasst: 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 ?

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
                *
               * *
              *   *
             *     *
             *******
             *     *
             *     *
             *     *
             *     *
             *     *
             *******
Rakeem Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Do 04.12.08 16:29 
ne mit mehreren aber wenn ich den boden einfügen will kommt das immer so raus
ausblenden Quelltext
1:
2:
3:
                  **********
                  *        *
                  **********

und immer so weiter

Moderiert von user profile iconUGrohne: Beitragsformatierung überarbeitet.
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: 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
Hält's aus hier
Beiträge: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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:
ausblenden 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
Hält's aus hier
Beiträge: 2



BeitragVerfasst: 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