![]() |
Pyramide zeichnen
Hi,
ich soll in Informatik eine (möglichst große) Pyramide in Delphi zeichnen. Ich hab das jetzt auch soweit, dass pro Zeile immer mehr Sternchen (meine Pyramidenbauteile :D) dazukommen, jedoch geht das nur in eine Richtung und man müsste eben noch Leerzeichen einfügen, dass der oberste Punkt der Pyramide genau in der Mitte ist. ![]() Das ist mein Problem, denn ich weiß absolout nicht wie es geht. Ich habe zwar schon mit einer zweiten FOR Schleife expeimentiert, aber dann hatte ich es genau andersrum, also dass die Pyramide pro Zeile am Anfang immer mehr Leerzeichen bekommt. Hier mal mein Code, soweit ich ihn für durchschaubar halte ^^
Code:
Wenn ihr wollt, könnt ihr euch alle Delphi Dateien auch vom Webspace von mir ziehen:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) pnlTitel: TPanel; Memo1: TMemo; procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var y : integer; i : integer; zeile : string; begin y := 0; Memo1.Lines.Clear; while y < Memo1.Height do begin zeile := ''; for i := 0 to (y div 15) do begin zeile := zeile + '*' end; Memo1.Lines.Add (zeile); y := y + 15; end; end; end. ![]() Hoffe, ihr könnt mir helfen. Mit freundlichen Grüßen me2u |
Re: Pyramide zeichnen
Ändere einfach die Property "Aligment" auf Center, dann sind deine Sternchen in der Mitte... (und bilden auch eine Dreieck)
|
Re: Pyramide zeichnen
Wenn du eine Pyramide zeichen willst, nimm dafür lieber ein TImage.
|
Re: Pyramide zeichnen
Zitat:
Sieht jetzt so aus: ![]() Das Problem ist nur, dass wir das ganze mit Schleifen lösen sollen. Das ist der Sinn der Übung. Wäre das privat und nur für mich, würde mir das ausreichen, da ich ja nur das Dreieck haben will. Aber mein Lehrer will wahrscheinlich eher die Schleife sehen. Naja, hat noch jemand einen Vorschlag ? Wäre sehr nett ! Zitat:
|
Re: Pyramide zeichnen
Was meinst du mit "einzelnen Zeilen"? Du kannst die Höhe und Breite in Pixeln bestimmen und wenns dir Spaß macht kannst du die Pyramide auch aus einzelnen Quadraten aufbauen, wodurch du wieder einzelne "Zeilen" hast. Auf jeden Fall sieht das sehr viel schöner aus.
|
Re: Pyramide zeichnen
Könntest du das mal bitte etwas konkreter auf mein Beispiel anwenden ?
also kann man da dann machen, dass ein Quadrat gezeichnet wird, dann eine Zeile weiter 2 Quadrate usw. |
Re: Pyramide zeichnen
Zitat:
//Edit: Quote-Tag |
Re: Pyramide zeichnen
Hi,
Delphi-Quellcode:
vielleicht so ? ;)
procedure TForm1.Button1Click(Sender: TObject);
var i,x,y: Integer; begin for i:= 0 to 200 do begin x:= 300 - i; // 300 ist die X Position der Spitze y:= 10 + i; // 10 ist die Y Position der Spitze Canvas.Pen.Color := RGB(random(256),random(256),random(256)); // wenn mans bunt haben will :P (randomize ins FormCreate! Canvas.MoveTo(x,y); Canvas.LineTo(x+i*2,y); end; end; Ergänzung: Und als komfortable Procedure:
Delphi-Quellcode:
Gruß
procedure DrawPyramide(Canvas: TCanvas;const x,y,Height: Integer; Coloured: Boolean);
var i: Integer; fx,fy: Integer; begin for i:= 0 to Height do begin fx:= x - i; fy:= y + i; if Coloured then Canvas.Pen.Color := RGB(random(256),random(256),random(256)); Canvas.MoveTo(fx,fy); Canvas.LineTo(fx+i*2,fy); end; end; // Aufruf DrawPyramide(Canvas,200,30,400,true); Neutral General |
Re: Pyramide zeichnen
StringOfChar?
i = 1 to zeilen i-mal für die Sterne und (zeilen - i)-mal für die Leerzeichen davor
Delphi-Quellcode:
for i := 1 to 30 do
Memo1.Lines.Add(StringOfChar(' ', 30 - i) + StringOfChar('*', i)); alternativ deines mit den Strings
Delphi-Quellcode:
L := ' ';
S := '*'; Repeat Memo1.Lines.Add(L + S); S := S + '*'; Delete(L, 1, 1); Until L = ''; |
Re: Pyramide zeichnen
Hab nochmal geguckt in der Aufgabenstellung. Also wir sollen das schon mit den Sternchen da machen.
Danke himitsu ! Habs jetzt zum Laufen bekommen. Es ist zwar nicht ganz gerade, aber ich denke das liegt an Delphi und nicht am Code. Bei deiner zweiten Möglichkeit ist es etwas ungüngstig, dass die Größe von den Leerzeichen abhängt. Also wird nicht unbedingt das größtmögliche Dreieck "konstruiert". Man müsste irgendwie (y DIV 15) * ' ' rechnen können, aber das geht ja nicht oder ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz