Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - round funktion


Caesar44 - Do 11.12.08 19:30
Titel: round funktion
Hey ich hab ne Frage zu dem Befehl round:(real zu integer)
In der Hilfe steht :function Round(X: Extended): Longint;
Muss es jetzt analog: function Round (i: Real): Integer; heißen um den Wert i zu runden?
Bei mir funktioniert das nämlich nicht.

Gruß Caesar44
(Bin nähmlich gar nich dof;-))


Marc. - Do 11.12.08 19:33

user profile iconCaesar44 hat folgendes geschrieben Zum zitierten Posting springen:
Bei mir funktioniert das nähmlich nicht.Gruß Caesar44

Wer nämlich mit h schreibt ist...

Was funktioniert nicht? Welche Fehlermeldung erscheint?

Grüße,
Marc.


Caesar44 - Do 11.12.08 19:41

"Fehler.....Anweisung erwartet, aber FUNCTION gefunden"

Gruß Caesar


platzwart - Do 11.12.08 19:46

Bitte zeig mal deinen Quellcode.


Caesar44 - Do 11.12.08 20:12


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
procedure TForm1.Mal_BildClick(Sender: TObject);
var i,y: real;

begin
with image1.canvas do
  begin
    moveto (300,0);
    LineTo (300,600);
    MoveTo (0,300);
    LineTO (600,300);
    TextOut(600,300,'x');
    TextOut(300,0,'y');
    i:= -4;
    repeat
      i:= i+0.1;
      y:= i*i;
      function round (i);
      function round (y);
      Pixels[i*25+300,-y*25+300]:=clred;
    until i >= 3;
  end;
end;

end.


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


platzwart - Do 11.12.08 20:21

hi,

du verwendest die funktion falsch!

falsch: function round (i);
richtig: i:= round(i);

Du musst auch sagen, in welche Variable der Wert wieder gespeichert werden soll!


@Klugmann: Hatte mich verlesen und habs korrigiert ^^


Timosch - Do 11.12.08 20:22

1.) Bitte schließe deinen Quelltext im Beitrag in  und ein (oder clicke auf Bereiche->Delphi). Dann sieht das viel lesbarer aus.
2.) Du solltest erstmal die Grundlagen von Delphi lernen. Hier [http://www.delphi-treff.de/tutorials/grundlagen/] gibts ein paar Tutorials.
3.) Verwende statt Real lieber Single oder Double.
4.) Statt function round(y) musst du x=round(y) schreiben, und natürlich vorher die Integer-Variable x deklariert haben.

Platzwart: Das funktioniert so nicht. Round gibt einen Integer zurück; i ist bei ihm aber ein Real.


Delete - Do 11.12.08 20:23

Moin!


Benutze bitte für deinen Quellcode Delphitags.Die findest du unter "Bereiche" im Post-Menu.

;)


ImbaPanda - Do 11.12.08 20:26

Am besten setzt du deinen Code erstmal in Delphi-Tags. Dies machst du mit  am Anfang bzw. am Ende des Codes.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
procedure TForm1.Mal_BildClick(Sender: TObject);
var i,y: real;

begin
with image1.canvas do
begin
moveto (300,0);
LineTo (300,600);
MoveTo (0,300);
LineTO (600,300);
TextOut(600,300,'x');
TextOut(300,0,'y');
i:= -4;
repeat
i:= i+0.1;
y:= i*i;
i := round (i);    <---- Versuch's mal so
y := round (y);    <-----      "
Pixels[i*25+300,-y*25+300]:=clred;
until i >= 3;

end;

end;

end.


MfG André Stollenwerk

Edit: Man bin ich grade langsam mit dem Tippen xD


Caesar44 - Fr 12.12.08 18:01

Vielen Dank im Grundsatz funktioniert es jetzt auch schon, allerdings ist mir jetzt etwas besseres eingefallen:
Kann man mit Round auch auf eine bestimmte Stelle runden?
Ich möchte auf die zweite Stelle hinter dem Komma runden und dann mit Hundert multiplizieren, sodass ich wieder einen Integerwert habe.


jaenicke - Fr 12.12.08 18:03

Geht es um die Ausgabe als String? Dann würde ich mir einmal den Format-Befehl anschauen. ;-)


Caesar44 - Fr 12.12.08 18:08

Nein es soll eine Parabel gezeichnet werden. Die sieht momentan aber leider noch ziemlich ungenau aus.
So wird mit der Round-Funktion glaube ich alles hinter dem Komma abgeschnitten.

MfG Jonas


ImbaPanda - Fr 12.12.08 18:10

Um auf die zweite Nachkommastelle zu runden nimmst du einfach folgendes

Delphi-Quelltext
1:
i:=Round(i*100) / 100;                    


Wenn du nun einfach das ganze wieder mal 100 nehmen willst um einen Integerwert zu haben, lass einfach das dividieren durch 100 weg

Delphi-Quelltext
1:
i:=Round(i*100);                    


MfG André Stollenwerk


jakobwenzel - Fr 12.12.08 18:14

user profile iconImbaPanda hat folgendes geschrieben Zum zitierten Posting springen:
Um auf die zweite Nachkommastelle zu runden nimmst du einfach folgendes

Warum nicht einfach RoundTo verwenden?
Das macht intern zwar auch nix anderes, aber egal :P


ImbaPanda - Fr 12.12.08 18:30

@Jakobwenzel: kommt im Endeffekt auf das Gleiche Ergebnis hinaus, wie du bereits gesagt hast^^


Caesar44 - Fr 12.12.08 20:02

Dankeschön für eure Antworten.
Ich habe jetzt allerdings ein weiteres Problem:
Ich möchte nun gern die Punkte verbinden mit lineTo.
Das Problem ist, dass die Striche immer nur kurz "aufploppen" und dann verschwinden. Warum ist das so?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
procedure TForm1.Mal_BildClick(Sender: TObject);
var i,y: real;
    x, h: integer;

begin
with image1.canvas do
  begin
    {Pixels[30,10]:=clred;
    for i:= 30 to 300 do pixels[i,i div 2]:=clblue;
    pen.width:= 5;
    pen.color:=clsilver;
    moveto (50,50);
    lineto (100,100);
    lineto (200,100);
    brush.style:= bsclear;
    rectangle(30,30,100,100);
    ellipse (100,100,200,200);}

    moveto (300,0);
    LineTo (300,600);
    MoveTo (0,300);
    LineTO (600,300);
    TextOut(600,300,'x');
    TextOut(300,0,'y');
    i:= -3;
    repeat
      i:= i+0.1;
      y:= i*i;
      x := round (i*100);
      h := round (y*100);
      Canvas.Pen.Width :=3;
      canvas.lineTo(x*1+300,-h*1+300);
    until i >= 3;


  end;

end;

end.


jaenicke - Fr 12.12.08 20:07

Tja, das kommt davon, wenn man with benutzt, selbst schuld... ;-)
user profile iconCaesar44 hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
2:
3:
4:
5:
with image1.canvas do
  begin
  [...]
    Canvas.Pen.Width :=3;
    Canvas.lineTo(x*1+300,-h*1+300);
Du benutzt so das Canvas des Formulars, nicht das von Image1...
(Denn auf das with bezogen wäre das Image1.Canvas.Canvas, das gibt es nicht, und deshalb bezieht es sich nicht auf Image1.)


Caesar44 - Fr 12.12.08 20:46

Vielen, vielen Dank.
Programm funktioniert einwandfrei.
Alle Probleme gelöst.


MfG Caesar