Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Kreuzmuster Einfach aber ich kriegs nicht hin


ReggaeGregi - Di 20.03.07 21:28
Titel: Kreuzmuster Einfach aber ich kriegs nicht hin
Hi Leute,
könnt ihr mir bitte helfen. Ich will als Übung ein Kreuzmuster erstellen. Dieses Krieg ich bereits hin

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
 
                        XXXXX
                        XXXX
                        XXX
                        XX
                        X

Aber andere Muster sollten eingentlich einfach sein aber ich bin noch nicht drauf gekommen. Vileicht könnt Ihr mir helfen. Ich würde gerne folgendes Muster hinkriegen:

Delphi-Quelltext
1:
2:
3:
4:
5:
        
                XXXXX
                 XXXXX
                  XXXXX
                   XXXXX

und das woll das schwierigste

Delphi-Quelltext
1:
2:
3:
4:
5:
      
                                                    X
                                                   X X
                                                  X X X
                                                 X X X X


VIELEN DANK FÜR EURE HILFE ;)


Narses - Di 20.03.07 21:32

Moin und :welcome: im Forum!

Zeig doch mal deinen bisherigen Code, dann können wir dir auch besser helfen; wenn du dann noch eine etwas genauere Beschreibung deiner "Problemstelle" gibst, sollten wir schon weiter kommen! ;)

cu
Narses


ReggaeGregi - Di 20.03.07 23:58

also soweit bin ich gekommen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
var i,spalte:integer; x,j:string;
begin

// Das ist eine Schleifenverschachtelung

For i:=1 to 4 Do
   begin
     j:=j+' ';
       For spalte:=1 to i Do
        begin
         j:=j+'X';
         Memo1.Lines.Add(j);
    end;
   end;


end;


aber mit diesem System krieg ich nciht die anderen hin. Also bitte helft mit dringend. Danke


Narses - Mi 21.03.07 00:06

Moin!

OK, erster Schritt, wie muss denn der Code geändert werden, um das Dreieck, was du damit erstellst, auf den Kopf zu stellen? ;)

cu
Narses


ReggaeGregi - Mi 21.03.07 00:10

na eigentlich einfach anstellen von 1 to 4 wird 4 to 1 aber ich brauch ja die anderen Muster


Narses - Mi 21.03.07 00:15

Moin!

Gut, dann schau dir mal das hier an: ;)

Quelltext
1:
2:
3:
4:
 XXXXX  
 oXXXXX  
 ooXXXXX  
 oooXXXXX

Was fällt dir auf?

cu
Narses


ReggaeGregi - Mi 21.03.07 00:34

Ich verstehe schon. Aber ich weiss nicht wie ich das genau in meinem Quelltext einbauen kann. Oder ich hab ein fehler drin. weil bei mir kommt das hier raus :

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
o Xo X
o Xo XX
o Xo XXo X
o Xo XXo XX
o Xo XXo XXX
o Xo XXo XXXo X
o Xo XXo XXXo XX
o Xo XXo XXXo XXX
o Xo XXo XXXo XXXX


Narses - Mi 21.03.07 00:36

Moin!

Du solltest erstmal deinen Code dazu bringen, überhaupt nur ein Dreieck zu erzeugen, ohne diese Spalten (oder ist das Teil der Aufgabe?). ;) Also sowas hier:

Quelltext
1:
2:
3:
4:
 x
 xx
 xxx
 xxxx

Poste doch mal deinen Code, der genau dieses Dreieck erzeugt.

cu
Narses


Narses - Mi 21.03.07 01:04

Moin!

Hm, einen kleinen Anschubser geb ich dir mal noch, das wäre der Code für das Dreieck:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
  var
    i,j: Integer;
    Zeile: String;
begin
  Memo1.Clear;
  for i := 1 to 4 do begin
    Zeile := '';
    for j := 1 to i do
      Zeile := Zeile +'X';
    Memo1.Lines.Add(Zeile);
  end;
end;

Gedanklicher Ansatz für das Parallelogramm: Es ist ja immer eine feste Anzahl Xe und die Anzahl der Leerzeichen davor ist "dreieckig"... ;)

cu
Narses

//EDIT: Variablenname ausgetauscht: aus 'x' -> 'Zeile' gemacht, passt besser und ist dann mit deinem Code stimmig ;)


ReggaeGregi - Mi 21.03.07 08:19

jo danke ich hatte einen kleinen Fehler irgendwo drinne. Aber auf diesem Rechner habe ich den richtigen Quelltext

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var i,j,d:integer; zeile,x:string;
begin
For i:=1 to 4 do
 begin
 Zeile:=' ';
 For j:=4 to i Do Zeile:=Zeile+'x';
 memo1.lines.add(zeile)
end;
 end;


Aber sorry ich kriegs immer noch nicht. Ich schaff nicht mal wirklich überhaupt ein R echteck

Delphi-Quelltext
1:
2:
3:
               xxxxx
               xxxxx
               xxxxx

Geschweige es versetzt anzusetzten. Das muss man doch mit einer weiteren Variable arbeiten oder?

Mfg
ReggaeGregi


Narses - Mi 21.03.07 10:32

Moin!

user profile iconReggaeGregi hat folgendes geschrieben:
Aber sorry ich kriegs immer noch nicht. Ich schaff nicht mal wirklich überhaupt ein Rechteck

Ein Rechteck ist doch noch einfacher, als ein Dreieck: ;)


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  var
    i: Integer;
begin  
  for i := 1 to 4 do  
    Memo1.Lines.Add('XXXXX');
end;


user profile iconReggaeGregi hat folgendes geschrieben:
Geschweige es versetzt anzusetzten.

Jetzt brauchst du doch das Ganze nur noch zu kombinieren, sprich ein Leerzeichen-Dreieck davor zu setzen. ;)

cu
Narses


freak4fun - Mi 21.03.07 10:36

Mal so als Idee:

Delphi-Quelltext
1:
function LeftSpaces(const ACount: Integer; const AChr: String = ' '): String;                    



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  Memo1.Clear;
  for i := 1 to 4 do
    Memo1.Lines.Add(LeftSpaces(i - 2'  ') + 'xxxx');
end;

function TForm1.LeftSpaces(const ACount: Integer; const AChr: String = ' '): String;
var
  i: Integer;
begin
  Result := '';
  for i := 0 to ACount do    
    Result := Result + AChr;
end;


Der Sinn hat sich mir aber noch nicht erschlossen. :rofl:

MfG
freak


oldmax - Mi 21.03.07 10:55

Hi
Also, Narses hat dir ja nun ein lauffähiges Beispiel gegeben und wenn das bei dir nicht funktioniert, dann sind Fehler von deiner Seite drin. Aber nun, warum ich mich dazu melde, du mußt dich davon lösen, das ein PC ein kompliziertes Teil ist und eine Programmiersprache noch viieeel komplizierter.
nehmen wir mal den Code vo Narses und gehen Schritt für Schritt durch, denn genau das tust du, wenn du es mit der Hand auf ein Blatt Papier malst . 1. Reihe 1 Kreuz
2. Reihe 2 Kreuze, dritte Reihe 3 Kreuze usw. So entsteht dein Kreuzmuster "Dreieck".


Delphi-Quelltext
1:
2:
3:
x
xx
xxx

Sieht ein bischen komisch aus, du wolltest doch

Delphi-Quelltext
1:
2:
3:
4:
    x
   xxx
  xxxxx
 xxxxxxx

also beginnen wir mit der ersten Reihe. Du hast eine Vorstellung, wieviele Zeilen du schreiben willst und daher beginnst du genau mit der Anzahl an Leerzeichen (Spacetaste) wie du Zeilen hast-1.
nun zählst du einmal die Kreuze in den Zeilen und stellst fest, die Anzahl verhält sich wie ZeilenZahl*2-1
also Zeile 1= 1*2-1=1
Zeile 2= 2*2-1=3
Zeile 3= 3*2-1=5
Zeile 4= 4*2-1=7
usw.
Wenn dir diese Schritte und Zusammenhänge klar sind, dann wirst du auch entsprechende Programmierung hinbekommen.
In diesem Fall sieht's dann so aus:
angenommen 4 zeilen

Also
vereinbare erst mal ein paar einfache Variable


Delphi-Quelltext
1:
2:
3:
Zeilen   : Integer;
AnzLeer : Integer;
Anzeige : String;



Setze im Programm die Zeilenzahl


Delphi-Quelltext
1:
Zeilen:=4;                    


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
For i:=1 to Zeilen do // i entspricht der Zeile
begin  
  Anzeige:=''// Anzeige ist ganz leer
  For J=1 to Zeile-1 do Anzeige:=Anzeige+' '// erinnern wir uns, Leerzeichenzahl ist Zeilenzahl -1
  For j:=1 to i*2-1 do Anzeige:=Anzeige+'X'// X=Zeilenzahl *2-1, siehe obige Erklärung
  Memo1.Lines.Add(x); // und nun tragen wir den String "Anzeige ins Memofeld ein
end;


Diesen Code kannst du auch mal mit einer anderen Zeilenzahl ausprobieren. Nun zu deinen anderen Wünschen. Die Vorgehensweise ist analog. Erst überlegen, wie sehen die Schritte aus und wie muß ich Programmieren, um diese Schritte mit einem Programm abzubilden.
Viel Spaß


ReggaeGregi - Sa 24.03.07 11:29

Jo Vielen Dank. Leute. Ich hab alles hingekriegt. Das ist super.