Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Anfänger-Problem mit "For"-Schleife (https://www.delphipraxis.net/102895-anfaenger-problem-mit-schleife.html)

DJA 6. Nov 2007 17:55


Anfänger-Problem mit "For"-Schleife
 
Hi,
wir haben in der Schule mit Delphi angefangen und sollen nun ein Programm schreiben, dass das Haus vom Nikolaus zeichnet.
So weit so gut:
http://img155.imageshack.us/img155/8265/hvnsf8.jpg

Nun gibt man die X- und Y-Koordinate an, wo angefangen werden soll das Haus zu zeichen.
Dann klickt man auf Start, und durch Klick auf diesen Button wird folgender Quellcode ausgeführt:

Delphi-Quellcode:
Zahl1:=StrToFloat(Edit1.Text);               //Variablen für Haus-Start-Koordinaten umwandeln:
Zahl2:=StrToFloat(Edit2.Text);               //String To Float konvertieren (damit Quellcode Variable lesen kann)
meinStift.bewegeBis(Zahl1,Zahl2);            //Koordinaten wo das Haus stehen soll
meineUhr.warte(500);
meinStift.runter;
meinStift.dreheUm(135);
meinStift.bewegeUm(280);                 //erste Linie unten Rechts-->oben links
meineUhr.warte(500);
meinStift.dreheUm(225);
meinStift.bewegeUm(200);                 //zweite Linie oben links-->oben rechts
meineUhr.warte(500);
meinStift.dreheUm(225);
meinStift.bewegeUm(280);                 //dritte Linkie oben rechts-->unten links
meineUhr.warte(500);
meinStift.dreheUm(135);
meinStift.bewegeUm(200);                 //vierte Linie unten links-->unten rechts
meineUhr.warte(500);
meinStift.dreheUm(90);
meinStift.bewegeUm(200);                 //fünfte Linie unten rechts-->oben rechts
meineUhr.warte(500);
meinStift.dreheUm(45);
meinStift.bewegeUm(140);                 //sechste Linie oben rechts-->Dach
meineUhr.warte(500);
meinStift.dreheUm(90);
meinStift.bewegeUm(140);                 //siebte Linie Dach-->oben links
meineUhr.warte(500);
meinStift.dreheUm(45);
meinStift.bewegeUm(200);                 //achte Linie oben links-->unten Links
meineUhr.warte(2000);
                //Radiervorgang
derBildschirm.loescheAlles;
Klassen:
Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, mSum,mUhr, StdCtrls, ActnList;
Variablen:

Delphi-Quellcode:
var
  Form1: TForm1;
  Zahl1, Zahl2  : real;
  derBildschirm : Bildschirm;                 //verschiedene Objekte aufführen
  dieMaus      : Maus;
  dieTastatur  : Tastatur;
  meinStift    : Stift;
  meineUhr     : Uhr;
  Schleifen    : integer;



Nun ist unsere Aufgabe, mit Hilfe einer "For"-Schleife das Haus an mehreren verschiedenen Stellen zeichnen zu lassen.
Es mehrmals zeichnen zu lassen ist kein Problem - aber wie das verschieben funktionieren soll leuchtet mir nicht so ganz ein; das Programm zeichnet nun ein mal ganz normal das Haus vom Nikolaus, aber dann beim zweiten mal ist es nicht großartig verschoben, sondern steht auf dem Kopf oder liegt auf der Seite. Zudem ist immer eine überflüssige Linie vorhanden.

Hier eine Skizze wie das ganze dann aussieht:
(die Skizze habe ich mit Paint gemacht, da ich von dem laufenden Programm keinen Screen machen kann, der das Haus zeigt O.o)
http://img220.imageshack.us/img220/7659/hvn2dd6.jpg

Wo liegt der Fehler..?

shmia 6. Nov 2007 18:04

Re: Anfänger-Problem mit "For"-Schleife
 
Das Problem ist, das nach dem ersten Zeichnen des Hauses der Winkel sich verändert hat.
Also ganz grob sieht die Schleife so aus:
Delphi-Quellcode:
for i := 0 to 5 do
begin
  meinStift.SetzeWinkel(0);  // setze Winkel auf definierten Ausgangswert
  meinStift.bewegeBis(Zahl1+i*20,Zahl2+i*30);            //Koordinaten wo das Haus stehen soll
 
  // hier das Häusle zeichnen
end;

DJA 6. Nov 2007 18:22

Re: Anfänger-Problem mit "For"-Schleife
 
Hi,
danke für deine Antwort, leuchtet mir ein...
du meinst also:
Der Stift endet (bei meiner Zeichnungsweg) unten links und zeigt nach unten.
Und jetzt zeichnet er wieder ein Haus aber dreht sich in den angegebenen Winkeln in dem Winkel von unten links aus, korrekt?
Okay das kann ich soweit nachvollziehen...

Ich habe nun:

Delphi-Quellcode:
for Schleifen := 1 to 5 do
begin
Zahl1:=StrToFloat(Edit1.Text);               //Variablen für Haus-Start-Koordinaten umwandeln:
Zahl2:=StrToFloat(Edit2.Text);               //String To Float konvertieren (damit Quellcode Variable lesen kann)
meinStift.bewegeBis(Zahl1+Schleifen*20,Zahl2+Schleifen*30);  //Koordinaten wo das Haus stehen soll
meineUhr.warte(500);
meinStift.runter;
meinStift.winkel:= 1;
meinStift.dreheUm(135);
meinStift.bewegeUm(280);                 //erste Linie unten Rechts-->oben links
meineUhr.warte(500);
meinStift.dreheUm(225);
meinStift.bewegeUm(200);                 //zweite Linie oben links-->oben rechts
.......
und bekomme aber bei dem "Winkel"-Befehl den Fehler:
[Fehler] hvn6.pas(72): Der linken Seite kann nichts zugewiesen werden

??

SirThornberry 6. Nov 2007 18:36

Re: Anfänger-Problem mit "For"-Schleife
 
@DJA: Könntest du die Bilder bitte an den Beitrag anhängen? Ansonsten sind sie verschwunden sobald du sie bei imageshack löschst. Und dann wäre der ganze Beitrag hier nutzlos für Leute die das gleiche oder ein ähnliches Problem haben. Danke :)

shmia 6. Nov 2007 18:40

Re: Anfänger-Problem mit "For"-Schleife
 
Zitat:

Zitat von DJA
und bekomme aber bei dem "Winkel"-Befehl den Fehler:
[Fehler] hvn6.pas(72): Der linken Seite kann nichts zugewiesen werden

Die Unit hvn6.pas kenne ich nicht; ist wohl von deinem Lehrer.
Wenn du den Winkel nicht direkt setzen kannst, muss es irgend eine andere Möglichkeit geben
den Winkel auf einen definierten Wert (0 Grad) zu setzen.

Ach ja: Stift rauf und runter ist auch wichtig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:51 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 by Thomas Breitkreuz