Author Topic: Testaufgabe 2  (Read 1667 times)

EisFach

  • Newbie
  • *
  • Posts: 9
  • Karma: +0/-0
    • View Profile
Testaufgabe 2
« on: June 02, 2006, 11:00:25 am »
Moinzen, wollte mal fragen ob noch andere die Testaufgabe 2 haben und mir vielleicht etwas helfen könnten????
Wär cool...

Grüße

mjb-86

  • Newbie
  • *
  • Posts: 32
  • Karma: +0/-0
    • View Profile
    • http://
Testaufgabe 2
« Reply #1 on: June 02, 2006, 11:19:50 am »
Womit können wir denn dir weiterhelfen?  :flower:

EisFach

  • Newbie
  • *
  • Posts: 9
  • Karma: +0/-0
    • View Profile
Testaufgabe 2
« Reply #2 on: June 02, 2006, 12:27:07 pm »
ich bekomme es einfach nicht hin, das er die Wurfparabel in der paintbox zeichnet.
Weiß jemand von euch weiter?

var
  Form1: TForm1;
  g: double = 9.81;
  x: double;
  y: double;
  p: double;
  v: double;
  t: double;
  x1:double;
  y1:double;


implementation

{$R *.dfm}



  procedure TForm1.PaintBoxClick(Sender: TObject);
  begin                         //nur das die PaintBox da is


  end;

  procedure TForm1.bt_berClick(Sender: TObject);

  begin


  try
  p:=StrToFloat(ed_phi.Text);  //auslesen der Daten
  v:=StrToFloat(ed_v.Text);

  except
  ed_phi.Text:='Eingabefehler';    //wenn falsche eingabe dann...
  exit;
  end;
  PaintBox.Canvas.MoveTo(0,400);   //bewegt stift nach links unten

  repeat  //scheife
  begin;
  PaintBox.Refresh;       //paintbox berechnung
    x:=round(v*t*cos(p));
    y:=round(v*t*sin(p)-(g/2)*t*t);
    Paintbox.Canvas.Pen.Color:=clRed;

    y1:=-round(y+400);              //koordinaten richtig machen
    Paintbox.canvas.LineTo(x,y1);
  end;
  until y<0;


  end;

end.

numerik

  • Full Member
  • ***
  • Posts: 184
  • Karma: +0/-0
    • View Profile
Testaufgabe 2
« Reply #3 on: June 05, 2006, 04:46:21 pm »
hm,
1: frage, warum nimsmte überall double typ für deine variablen, also ich hab dieselbe aufgabe und erst angefangen mit delphi aber ich würde real datentyp bevorzugen, oder ist double in deisen falle einfach besser ?
2:heinweis musst du bei phi, welcher ja als winkel zwischn 0-90° eingegeben wird net noch die umrechnung in bogenmaß machen, also hier von grad in bogenmaß müsste der faktor gradmaß*pi/180=bogenmaß sein .

MB Daddy

  • Newbie
  • *
  • Posts: 10
  • Karma: +0/-0
    • View Profile
    • http://
Testaufgabe 2
« Reply #4 on: June 15, 2006, 05:10:58 pm »
Ja, eine Umrechnung sollte dabei sein. Dazu kann man am Anfang der Unit unter "Uses" (wo schon so viel steht, wie 'Form, Messages, SysUtils, Variants ...' einfach 'Math' dazuschreiben (mit Komma abtrennen) und benutzt dann einfach
'RadToDeg', also zum Beispiel:
alpha := DegToRad(StrToFloat(Edit1.Text))

Nun noch was für Perfektionisten: Habe eine halbe Ewigkeit (mit Tutorials und Delphie-Hilfe) darüber gegrübelt, wie man Fehler bei der Eingabe in die beiden Datenfenster am besten vermeiden kann. Nach einer Stunde !!! (:'blink:') bin ich dann endlich fertig gewesen!:

als erstes muss kurz kurz nach 'Implementation' mit 'var' die Variable 'Kommazaehler: integer;' definiert werden, also

implementation

var
Kommazaehler: integer;

Dann folgt die Funktion:

function TForm1.Eingabepruefung(Key: Char; s: string):Char;
var i: integer;
begin
 if not (Key in [#8,#44, #46,#48 .. #57]) then // besagt, welche Zeichen zulässig sind - siehe Hilfe
   Key := #0
   else
   if Key = '.' then
     Key := ',';
   if Key = ',' then
     begin
       Kommazaehler := 0;
       for i := 1 to length(s) do
       begin
         if s = ',' then
           Kommazaehler := Kommazaehler + 1;
       end;
     Kommazaehler := Kommazaehler + 1;
     if Kommazaehler > 1 then
       begin
         key := #0;
       end;
end;
result := Key;
end;


Es können somit nur Zahlen eingegeben werden und Punkt wird in Komma umgewandelt und bei mehr als 2 Kommas passiert nichts (da Key := #0).
Aufrufen tut ihr diese Funktion mit einem einfachem Ereignis. Dazu einfach das Editfeld im Bearbeitungsmodus eures Projektes einmal anklicken und im Objectinspektor unter Ereignisse doppelt auf 'OnKeyPress' drücken und folgendes reinschreiben:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); // wird automatisch erstellt
s1 := Edit1.Text;                            // zum Bsp euer Alpha
Key := Eingabepruefung(Key, s1);  // lässt den Wert von Key anhand der Fkt. ermitteln


Viel Spasss damit!

Tom
\"Wissen ist die einzige Ressource, die sich vermehrt, wenn man sie teilt.\"

The Duke

  • Newbie
  • *
  • Posts: 3
  • Karma: +0/-0
    • View Profile
Testaufgabe 2
« Reply #5 on: June 20, 2006, 07:25:59 pm »
Wie habt ihr denn bitte das mit den Records in Files gelöst?
Habt ihr Gleitregler verwendet oder nur Edit Felder? bis zu welcher Geschwindigkeit v0 beschränkt ihr euren Gleitregler?

numerik

  • Full Member
  • ***
  • Posts: 184
  • Karma: +0/-0
    • View Profile
Testaufgabe 2
« Reply #6 on: June 22, 2006, 02:12:44 pm »
v0 über edit, winkel über regler....
mit den records das wusst ich auch net, hat mir nen kumpel gemacht, die speicherfunktion...

The Duke

  • Newbie
  • *
  • Posts: 3
  • Karma: +0/-0
    • View Profile
Testaufgabe 2
« Reply #7 on: June 22, 2006, 11:17:08 pm »
habt ihr für das record eine eigene UNIT gemacht, weil es doch glaube ich eine neue Klasse ist???  Habt ihr überhaupt mehr als eine Unit gemacht???

Fat Abbot

  • Newbie
  • *
  • Posts: 16
  • Karma: +0/-0
    • View Profile
    • http://
Testaufgabe 2
« Reply #8 on: July 06, 2006, 03:24:44 pm »
Ahoi,
muss in ner woche abgeben und hab nicht wirklich einen plan wie ich das mit der paintbox mache und schon gar net das mit den in die record files speichern.
wäre nett wenn jemand mal sein progi also zip oder rar hochladen könnte.  :rolleyes: