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
Caesar44 hat folgendes geschrieben : |
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
Narses: 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
MfG André Stollenwerk
jakobwenzel - Fr 12.12.08 18:14
ImbaPanda hat folgendes geschrieben : |
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 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... ;-)
Caesar44 hat folgendes geschrieben : |
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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!