AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

pyramide zeichnen

Ein Thema von riddler · begonnen am 23. Okt 2005 · letzter Beitrag vom 23. Okt 2005
Antwort Antwort
Seite 1 von 2  1 2      
riddler

Registriert seit: 23. Okt 2005
3 Beiträge
 
#1

pyramide zeichnen

  Alt 23. Okt 2005, 12:16
Hallo

ich bin absolut neu auf dem gebiet und habe erst seit den 3 monaten info in der schule! Für euch ist die frage wahrscheinlich lächerlich, aber ich hab keine ahnung von delphi! Ich muss ein pyramide aus rechtecken zeichnen! Dt eie pyramide soll mit einem recheck oben anfangen und dann 2 rechtecke in der 2. zeile haben und so weiter! Das ganze soll mit einer for...do schleife geschehen! Ich wäre euch dankbar wenn ich mir erklärt wie sowas funktioniert oder mir sagt wo sowas steht!

prog: Delphi 6
  Mit Zitat antworten Zitat
Benutzerbild von hanselmansel
hanselmansel

Registriert seit: 23. Feb 2005
Ort: Kaiserslautern
279 Beiträge
 
Delphi 2009 Enterprise
 
#2

Re: pyramide zeichnen

  Alt 23. Okt 2005, 12:46
HiHo,

zu aller Erst: Herzlich Willkommen in der DP!
nun zu deinem Problem: Man zeichnet in Delphi auf eine Leinwand. Das Ding nennt sich in englisch also Canvas. Solltet ihr schon mal gezeichnet haben, habt ihr sicherlich die Komponente TImage verwendet. Diese stellt über TImage.Canvas alle Zeichenfunktionen bereit, die du so brauchst.
Wo bekommst du die Information her, wie du auf das Canvas malst? Am besten mit der OH von Delphi. Delphi-Referenz durchsuchenTCanvas, Delphi-Referenz durchsuchenTImage
Wenn du es geschafft hast überhaupt erst mal ein Rechteck zu zeichnen, dann kannst du bei jedem Schleifendurchlauf die Anzahl von Rechtecken zeichnen lassen, die der Zähler als Wert hat.

Ich könnte jetzt noch stundenlang weiterschreiben, da ich aber nicht weiß, ob ich mit Prozeduren und Parameterübergabe bei dir böhmische Dörfer erzeuge, lass' ich dich einfach mal ein wenig experimentieren, bis du an die nächste, unüberwindbare Hürde kommst.

MfG,

hanselmansel
Es gibt nur sehr wenige Probleme auf dieser Welt, die sich nicht mit einigen hundert Gramm Sprengstoff lösen ließen.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: pyramide zeichnen

  Alt 23. Okt 2005, 12:48
Willkommen in der Delphi-PAXiS, riddler.

Zitat von riddler:
ich muss ein pyramide aus rechtecken zeichnen!
Rechtecke oder doch eher Quadrate?

Zitat von riddler:
Das ganze soll mit einer for...do schleife geschehen!
Dein Informatik-Lehrer müsste dir eigentlich noch eine ganze Menge mehr gesagt haben. Wie soll der Aufruf erfolgen, was sind die Parameter? Welche Komponenten sollst du zum Zeichnen verwenden?

Grüße vom marabu

oops - zu lange getippt...
  Mit Zitat antworten Zitat
riddler

Registriert seit: 23. Okt 2005
3 Beiträge
 
#4

Re: pyramide zeichnen

  Alt 23. Okt 2005, 12:55
Zitat:
Rechtecke oder doch eher Quadrate?
Nein rechtecke

Zitat:
. Das Ding nennt sich in englisch also Canvas. Solltet ihr schon mal gezeichnet haben, habt ihr sicherlich die Komponente TImage verwendet.
ja wir haben auch häuser und kirchen gemalt, das rechteck bekomm ich ja noch hin. canvas.rectangle (x,y, x+40, y+20)
aber bei der schleife komm ich net weiter ich hab keine idee wie sowas machen soll. Ich werd mir die delphihilfe noch mal angucken!

Wir sollen mit einem button arbeiten,der dann per klick anfängt zu zeichnen!

also das programm soll so aussehen ungefähr:

var x,y(,z) :integer
begin
die for..do schleife
  Mit Zitat antworten Zitat
Benutzerbild von hanselmansel
hanselmansel

Registriert seit: 23. Feb 2005
Ort: Kaiserslautern
279 Beiträge
 
Delphi 2009 Enterprise
 
#5

Re: pyramide zeichnen

  Alt 23. Okt 2005, 13:11
Ich weiß zwar immernoch nicht, ob du schon eigene Prozeduren schreiben kannst, aber wenn ja, dann kannst du eine Prozedur schreiben die für einen übergebenen Y-Wert und für eine übergebene Anzahl von Rechtecken eine ganze Zeile zeichnet. In deinem Programm müstest du dann die Mitte des Canvas als Mitte der Pyramide bestimmen.
In der Prozedur musst dann in etwa sowas stehen:
Delphi-Quellcode:
Procedure ZeichneMultiRect(Anzahl, Y :Integer);
Var
  Gesamtbreite :Integer;
  X :Integer;
  count :Integer;
Begin
Gesamtbreite := Anzahl * RECT_WIDTH; {RECT_WIDTH verwende ich als Konstante. Sie beinhaltet die Breite eines Rechtecks}
X := GetMitteVomCanvas - (Gesamtbreite DIV 2); {Diese Funktion müsstest du auch selbst schreiben, der name sollte aber selbsterklärend sein.}
For count := 1 to Anzahl do
  Begin
  ZeichneRechteck(X,Y); {Auch das ist eine eigene Prozedur.} 
  Inc(X, RECT_WIDTH);
End;
(ungetestet)

MfG,

hanselmansel
Es gibt nur sehr wenige Probleme auf dieser Welt, die sich nicht mit einigen hundert Gramm Sprengstoff lösen ließen.
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#6

Re: pyramide zeichnen

  Alt 23. Okt 2005, 13:15
Hi,

was genau sollen denn x und y beinhalten? Also ist das die größe der Rechtecke oder ist es die Größe der Pyramide. Ihr habt ja sicher eine Grenze für die for-to-do Schleife. Der Delphi Teil ist sehr einfach, wenn du schon weißt wie man zeichnet. Was du jedoch vorher tun musst, ist dir zu überlegen wie du mathematisch diese Pyramide zeichnest.
Keine Sorge, ist gar nicht so mathematisch. Aber überleg mal, was du über die unterste Reihe weißt und dann was du über die Reihe direkt darüber weißt. Am einfachsten indem du dir diese Pyramide auf ein Blatt Papier zeichnest und die Rechtecke mal anschaust. Dann erkennst du bestimmt einen einfachen Zusammenhang der Positionen. Breite und Höhe bleiben ja wahrscheinlich gleich...
Ach und da siehst du natürlich auch wie viel Blöcke pro Zeile du brauchst. Guck dir das für alle Zeilen an und wenn das jetzt zu unklar war oder nicht weiterhilft, sag einfach mal, was dir dabei so aufgefallen ist.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Benutzerbild von hanselmansel
hanselmansel

Registriert seit: 23. Feb 2005
Ort: Kaiserslautern
279 Beiträge
 
Delphi 2009 Enterprise
 
#7

Re: pyramide zeichnen

  Alt 23. Okt 2005, 13:23
In meinem Code gehe ich davon aus, dass die Höhe und die Breite der Rechtecke durch die Konstanten RECT_HEIGHT und RECT_WIDTH gegeben ist. Y ist die Y-Koordinate, die der Prozedur übergeben wird, damit sie weiß, in welche Höhe sie die Rechtecke zeichnen soll. Initialisiert und gesteuert wird Y von der äußeren For Y := 10 to (ZEILEN_ANZAHL * RECT_HEIGHT + 10) step RECT_HEIGHT do -Schleife.
X ist dann die Variable, die mir innerhalb der Prozedur sagt, wo ZeichneRechteck das Rechteck hinzeichnen soll. Außerhalb der Prozedur ist das absolut unwichtig, das wir die Pyramide ja zentrieren. (Wuppdi!)

Mit Mathematik machst du mir Angst. Ich finde es sinnvoller, sich zu überlegen, wie man eine Zeile von beliebig vielen Rechtecken zentriert.

MfG,

hanselmansel

€dit: Ich merke gerade, dass Delphi das Step-Statement nicht kennt. Formulieren wir also um:
Delphi-Quellcode:
Var
  line :integer;

For line := 0 to ZEILEN_ANZAHL do
  Begin
  Y := 10 + RECT_HEIGHT * line;
  ZeichneMultiRect(line, Y);
  End;
Es gibt nur sehr wenige Probleme auf dieser Welt, die sich nicht mit einigen hundert Gramm Sprengstoff lösen ließen.
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#8

Re: pyramide zeichnen

  Alt 23. Okt 2005, 13:36
@hanselmansel sorry, meinte eigentlich riddler mit dem Mathematik und so. Wollte ihm halt einen Denkanstoß in der Richtung geben, die du dann wieder stark vorimplementiert vorgibst. Meinte damit auch nur, genau das was du so machen würdest. Wenn man sich die Pyramide aufzeichnet sollte man doch recht gut sehen, wie in jeder Zeile ein Block weniger vorhanden ist und dann halt einen Mittelpunkt bestimmen (für x Blöcke in der i-ten Zeile) und mit Mathe meinte ich dann halt den Zusammenhang zwischen Zeile-Nr i und Anzahl der Blöcke x (ok, x ist gerade dumm gewählt weil Koordinate) und dann halt die Position (x,y) <- hier wirklich die Koordinaten!
Sah nur so aus, als ob bei der eigentlichen Aufgabe alles in einer Schleife gelöst werden soll (denke mal eine verschachtelte wird nötig sein).
Wie gesagt, sollte nur ein Denkanstoß sein, wie man so ein Problem löst, war sicher nicht das letzte in der Art
  Mit Zitat antworten Zitat
Benutzerbild von hanselmansel
hanselmansel

Registriert seit: 23. Feb 2005
Ort: Kaiserslautern
279 Beiträge
 
Delphi 2009 Enterprise
 
#9

Re: pyramide zeichnen

  Alt 23. Okt 2005, 13:40
Puh, da bin ich aber froh. Ich dachte schon, ich stünde im Wald. Im übrigen arbeite ich mit geschachtelten Schleifen, nur dass man es bei mir nicht sieht, weil die eine in eine Prozedur ausgelagert wurde...

MfG,

hanselmansel

P.S.: Ich habe das Programm gerade mal implementiert. Wenn man dann Pyramiden mit 30 Zeilen zeichnen lässt, sieht das ja mal sehr geil aus.
Es gibt nur sehr wenige Probleme auf dieser Welt, die sich nicht mit einigen hundert Gramm Sprengstoff lösen ließen.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: pyramide zeichnen

  Alt 23. Okt 2005, 13:44
Sollt ihr das vielleicht rekusriv lösen?
Delphi-Quellcode:
Procedure ZeichneRechtecke (Var Links : Integer; Oben, Breite, Höhe, Anzahl, MaxAnzahl : Integer);
Var
  i : Integer;
Begin
  If Anzahl<MaxAnzahl Then
    ZeichneRechtecke (Links, Oben + Höhe, Breite, Höhe, Anzahl + , MaxAnzahl1) // Erstmal die Ebene unter 'mir' zeichnen. Die
// sagt mir auch, wo 'ich' mich hinzeichnen soll
  Else
    Links := 0; // Die unterste Reihe fängt bei 0 an
  For i:=0 to Anzahl - 1 do
    ZeichneRechteck (Links+i*Breite, Oben, Breite, Höhe);
  Links := Links + Breite/2; // Wir müssen noch der aufrufenden Ebene sagen, wo sie sich zeichnen soll.
End;
Der Aufruf ginge dann mit
Delphi-Quellcode:
Var
  Links : Integer;

Begin
  ZeichneRechtecke (Links, 0, 40,20,1,5); // Zeichnet 5 Reihen. Jedes Rechteck ist 40x20 Pixel gross.
End;
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz