Operator no Overloaded

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Battlebunny
Beiträge: 5
Registriert: So 21. Aug 2016, 18:20

Operator no Overloaded

Beitrag von Battlebunny »

Hallo ich habe in folgendem Programm ein Problem:

Code: Alles auswählen

unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 [b] TSchildi = record
    x,y,w:real;[/b]
    stift:boolean;
  end;
 
var
  Form1: TForm1;
  Schildi: Tschildi;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure stift_ab;
begin
Schildi.stift:=true;
end;
 
procedure stift_auf;
begin
Schildi.stift:=false;
end;
 
procedure drehen(winkel:real);
begin
Schildi.w:=(Schildi.w-winkel)
end;
 
procedure start(x0,y0,w0:real);
begin
schildi.x:=x0;
schildi.y:=y0;
schildi.w:=w0;
end;
 
[b][u]procedure laufen(strecke:real);
begin
form1.canvas.moveto(round(schildi.x),round(schildi.y));
schildi.x:=strecke*cos(schildi.w*pi div 180);
schildi.y:=strecke*sin(schildi.w*pi div 180);
if schildi.stift then form1.canvas.lineto((round(schildi.x)),round(schildi.y));
end;[/u][/b]
 
 
procedure TForm1.Button1Click(Sender: TObject);
begin
 
start(200,200,0);
stift_ab;
drehen(45);
laufen(141);
stift_auf;
 
end;
 
end.
 




Jedenfalls kommt in dem unteren fett gedruckten Teil bei der procedure laufen eine Fehlermeldung
Error: Operator is not overloaded: "Extended" div "Byte"
Kann mir jemand helfen diesen Fehler zu beheben oder allgemein wie ich mit Winkeln rechnen kann?

PS: Ich will mittels dieses Programmes, welches weitesgehend unverändert bleiben sollte, eine procedure erstellen mit der ich ein beliebiges n-eck erstellen kann. Falls mir da noch jemand einen Tipp geben könnte, wäre es nett, man muss mir aber nicht helfen bei diesem Problem.
Zuletzt geändert von Lori am Mo 26. Sep 2016, 17:13, insgesamt 1-mal geändert.
Grund: Highlighter

Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

Re: Operator no Overloaded

Beitrag von Marsmännchen »

Hi,

der Operator DIV ist für Ganzzahlen reserviert: http://wiki.freepascal.org/Div/de. Dein Record verwendet aber Real. Nun kann man Operatoren überladen (was bei Div m.E. aber nicht viel Sinn machen würde). Deswegen meckert der Compiler, weil er nach einer Überladung für Real sucht und nix findet. Verwende doch stattdessen den ganz normalen Operator für Divisionen '/'.

Deine andere Frage bezieht sich auf Mathe. Da müssen die Anderen ran 8)
Ich mag Pascal...

Battlebunny
Beiträge: 5
Registriert: So 21. Aug 2016, 18:20

Re: Operator no Overloaded

Beitrag von Battlebunny »

Vielen Dank dafür. Nur noch eine Frage: rechnet Pascal grunsätzlich im Bogenmaß oder im Gradsystem (ich habe hier zB zuerst vom Gradmaß ins Bogenmaß umgerechnet)

Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Operator no Overloaded

Beitrag von Mathias »

Nur noch eine Frage: rechnet Pascal grunsätzlich im Bogenmaß oder im Gradsystem

Bogenmass.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Operator no Overloaded

Beitrag von wp_xyz »

Dazu vielleicht auch der Hinweis auf die Funktionen DegToRad(grad) und RadToDeg(bogenmass) in der Unit Math, die von Grad nach Bogenmaß und zurück konvertieren. Aber bitte nicht verwechseln mit GradToRad und RadToGrad, die sich auf diese komischen Winkeleinheit (Gon bzw. Neugrad, https://de.wikipedia.org/wiki/Gon) bezieht, in der der Kreisumfang 400 Grad überstreicht...

Antworten