Mathematische Funktionen in Lazarus

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Neuling55
Beiträge: 5
Registriert: Mi 25. Nov 2009, 17:20

Mathematische Funktionen in Lazarus

Beitrag von Neuling55 »

Hallo,

ich habe eine echt simple Frage: Könntet mir jemand mathematiche Funktionen in Lazarus nennen? Sowas wie:

erg := x + y ;

Ich habe ein Feld x und ein Feld y in welche man den Variablen x+y Werte zuweisen kann. Anschließend kann man via Button eine Rechenart auswählen und das Ergebnis erscheint im Feld Ergebnis. Ein ganz einfacher Taschenrechner also... ;-)

Google hat leider nicht geholfen. Ich bräuchte etwas wie

sin (x) usw. Bei mir kommt wenn ich sin(x) eingebe ein Fehler! Bitte weitere Rechenarten auflisten!

Vielen Dank!

MfG

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Re: Mathematische Funktionen in Lazarus

Beitrag von creed steiger »

Was für ein Fehler soll da kommen?
Ansonsten:

http://www.freepascal.org/docs-html/rtl ... tions.html" onclick="window.open(this.href);return false;
http://coleweb.dc.fi.udc.es/docencia/ed ... ode14.html" onclick="window.open(this.href);return false;
http://www.freepascal.org/docs-html/rtl/math/index.html" onclick="window.open(this.href);return false;

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Mathematische Funktionen in Lazarus

Beitrag von monta »

Es scheitert wohl viel eher...

Wenn du einTextfed zur EIngabe hast, kommt da auch Text raus...auch wenn das Feld x heißt, kannst du das nicht direkt einsetzen.
sin(StrToInt(x.Text)) bspw. sollte keinen Fehler erzeugen. (x ist ein TEdit)

und zur ausgabe bspw.
ShowMessage(FloatToStr(StrToInt(x.Text)))
Johannes

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: Mathematische Funktionen in Lazarus

Beitrag von Euklid »

Sehr viele Standardfunktionen werden auch zusätzlich verfügbar, wenn du im uses-Bereich die Unit math hinzufügst.

Viele Grüsse, Euklid

Neuling55
Beiträge: 5
Registriert: Mi 25. Nov 2009, 17:20

Re: Mathematische Funktionen in Lazarus

Beitrag von Neuling55 »

monta hat geschrieben:Es scheitert wohl viel eher...

Wenn du einTextfed zur EIngabe hast, kommt da auch Text raus...auch wenn das Feld x heißt, kannst du das nicht direkt einsetzen.
sin(StrToInt(x.Text)) bspw. sollte keinen Fehler erzeugen. (x ist ein TEdit)

und zur ausgabe bspw.
ShowMessage(FloatToStr(StrToInt(x.Text)))

Daran scheitert es nicht, mein Quellcode sieht so aus:

Code: Alles auswählen

unit Unit1; 
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  StdCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    sinButton: TButton;
    plusButton: TButton;
    minButton: TButton;
    malButton: TButton;
    getteiltButton: TButton;
    xEdit: TEdit;
    yEdit: TEdit;
    ergEdit: TEdit;
    procedure plusButtonClick(Sender: TObject);
    procedure minButtonClick(Sender: TObject);
    procedure malButtonClick(Sender: TObject);
    procedure getteiltButtonClick(Sender: TObject);
    procedure sinButtonClick(Sender: TObject);
    procedure xEditChange(Sender: TObject);
    procedure xEditEnter(Sender: TObject);
    procedure yEditChange(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end; 
 
var
  Form1: TForm1;
  x,y : integer;
  erg : double;
 
 
implementation
 
{ TForm1 }
 
procedure TForm1.xEditChange(Sender: TObject);
begin
  x := StrToInt(xEdit.Text);
end;
 
procedure TForm1.xEditEnter(Sender: TObject);
begin
 
end;
 
procedure TForm1.plusButtonClick(Sender: TObject);
begin
   erg := x+y;
   ergEdit.Text := FloatToStr(erg);
end;
 
 
procedure TForm1.minButtonClick(Sender: TObject);
begin
      erg := x-y;
      ergEdit.Text := FloatToStr(erg);
end;
 
procedure TForm1.malButtonClick(Sender: TObject);
begin
       erg := x*y;
       ergEdit.Text := FloatToStr(erg);
end;
 
procedure TForm1.getteiltButtonClick(Sender: TObject);
begin
           erg := x/y;
           ergEdit.Text := FloatToStr(erg);
end;
 
procedure TForm1.sinButtonClick(Sender: TObject);
begin
  erg := y- x;
  ergEdit.Text := FloatToStr(erg);
end;
 
procedure TForm1.yEditChange(Sender: TObject);
begin
  y := StrToInt(yEdit.Text);
 
end;
 
 
initialization
  {$I unit1.lrs}
 
end.

Ich bin absoluter Abfänger also habe ich versucht die anderen Funktionen so einzubauen:

Code: Alles auswählen

procedure TForm1.sinButtonClick(Sender: TObject);
begin
   erg := sin(x)
   ergEdit.Text := FloatToStr(erg);
end;
So in etwa. Wie kann ich nun wirklich möglichst einfach Sinus, Cosinus, Quadratische Funktion hinzufügen?

Bitte leicht erklären ;-)

Vielen Dank!

MfG

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Re: Mathematische Funktionen in Lazarus

Beitrag von creed steiger »

Bei mir kommt wenn ich sin(x) eingebe ein Fehler


Ja und was für ein Fehler kommt den?

Neuling55
Beiträge: 5
Registriert: Mi 25. Nov 2009, 17:20

Re: Mathematische Funktionen in Lazarus

Beitrag von Neuling55 »

Ich ziehe einen Button (TButton) doppelklicke auf den Button und füge den Code ein:

Code: Alles auswählen

procedure TForm1.sinButtonClick(Sender: TObject);
begin
   erg := sin(x)
   ergEdit.Text := FloatToStr(erg);
end;
Dann speicher ich alles in einem NEUEN Ordner.

Fehler 1: Das Verzeichniss "C:\User..." ist noch nicht im Unit-Pfad. Aufnehmen?

Nach Beantwortung der Frage mit Ja kommt diese Frage:

Alte Datei "C\User...\unit1.pas" löschen?

Nacj Klick auf Nein werde ich gefragt ob ich die Verweise automatisch anpassen möchte. Nach Klick auf "Alles bestätigen" ist wohl soweit alles gutgegangen. Dann klick ich auf den Start Button (der grüne Pfeil) und dann kommt die Meldung:

Project project1.exe raised exception class 'EReadError' with message:Invalid value for property.

Klick auf Fortsetzen kommt die nächste Fehlermeldung:

Project project1.exe raised exception class 'EReadError' with message:Error reading sinButton1.OnClick:Invalid value for property.

Danach öffnet sich im Hintergrund wieder eine Fehlermeldung : :Error reading sinButton1.OnClick:Invalid value for property


Was ist also falsch?

Gruss

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Re: Mathematische Funktionen in Lazarus

Beitrag von creed steiger »

Wenn du dein Projekt in einen neuen Ordern speichern willst ist
Projekt veröffentlichen
die richtige Wahl.

Neuling55
Beiträge: 5
Registriert: Mi 25. Nov 2009, 17:20

Re: Mathematische Funktionen in Lazarus

Beitrag von Neuling55 »

Hallo,

ist wohl richtig - speichern läuft ohne weitere Fehlermeldung ab! Klicke ich jedoch dann auf den Start Button kommt wieder der Fehler:

Project project1.exe raised exception class 'EReadError' with message:Invalid value for property

Was tun? Soll ich mal den Ordner oder etwas hochladen?

Bitte um Hilfe!

Vielen Dank!

MfG

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: Mathematische Funktionen in Lazarus

Beitrag von Euklid »

Neuling55 hat geschrieben:Was tun? Soll ich mal den Ordner oder etwas hochladen?

Das ist eine gute Idee. Ich kann in deinem oben geposteten Quelltext keinen Fehler entdecken.

Viele Grüße, Euklid

Neuling55
Beiträge: 5
Registriert: Mi 25. Nov 2009, 17:20

Re: Mathematische Funktionen in Lazarus

Beitrag von Neuling55 »

Hallo,

ich habe die folgenden Funktionen hinzugefügt:

cos, sin, ^

Wie kann ich eine Wurzel ziehen?

Hier die Datei (+Quellcode):
http://rapidshare.com/files/313775299/project1.lpi.html" onclick="window.open(this.href);return false;
http://rapidshare.com/files/313775300/project1.lpr.html" onclick="window.open(this.href);return false;
http://rapidshare.com/files/313775301/project1.lrs.html" onclick="window.open(this.href);return false;
http://rapidshare.com/files/313775302/unit1.lrs.html" onclick="window.open(this.href);return false;
http://rapidshare.com/files/313775303/q ... e.txt.html" onclick="window.open(this.href);return false;

Der aktuelle Quellcode:

Code: Alles auswählen

unit Unit1; 
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  StdCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    sinButton: TButton;
    cosButton: TButton;
    hochButton: TButton;
    plusButton: TButton;
    minButton: TButton;
    malButton: TButton;
    getteiltButton: TButton;
    xEdit: TEdit;
    yEdit: TEdit;
    ergEdit: TEdit;
    procedure cosButtonClick(Sender: TObject);
    procedure hochButtonClick(Sender: TObject);
    procedure plusButtonClick(Sender: TObject);
    procedure minButtonClick(Sender: TObject);
    procedure malButtonClick(Sender: TObject);
    procedure getteiltButtonClick(Sender: TObject);
    procedure sinButtonClick(Sender: TObject);
    procedure xEditChange(Sender: TObject);
    procedure xEditEnter(Sender: TObject);
    procedure yEditChange(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end; 
 
var
  Form1: TForm1;
  x,y : integer;
  erg : double;
 
 
implementation
 
{ TForm1 }
 
procedure TForm1.xEditChange(Sender: TObject);
begin
  x := StrToInt(xEdit.Text);
end;
 
procedure TForm1.xEditEnter(Sender: TObject);
begin
 
end;
 
procedure TForm1.plusButtonClick(Sender: TObject);
begin
   erg := x+y;
   ergEdit.Text := FloatToStr(erg);
end;
 
procedure TForm1.cosButtonClick(Sender: TObject);
begin
  erg := cos(x);
  ergEdit.Text := FloatToStr(erg);
end;
 
procedure TForm1.hochButtonClick(Sender: TObject);
begin
  erg := x^y;
  ergEdit.Text := FloatToStr(erg);
end;
 
 
procedure TForm1.minButtonClick(Sender: TObject);
begin
      erg := x-y;
      ergEdit.Text := FloatToStr(erg);
end;
 
procedure TForm1.malButtonClick(Sender: TObject);
begin
       erg := x*y;
       ergEdit.Text := FloatToStr(erg);
end;
 
procedure TForm1.getteiltButtonClick(Sender: TObject);
begin
           erg := x/y;
           ergEdit.Text := FloatToStr(erg);
end;
 
procedure TForm1.sinButtonClick(Sender: TObject);
begin
  erg := sin(x);
  ergEdit.Text := FloatToStr(erg);
end;
 
procedure TForm1.yEditChange(Sender: TObject);
begin
  y := StrToInt(yEdit.Text);
 
end;
 
initialization
  {$I unit1.lrs}
 
end.
Vielen Dank für jede Hilfe!

MfG

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Mathematische Funktionen in Lazarus

Beitrag von monta »

Könnte man das nicht bitte hier als Zip-Archiv hochladen. (Ich persönlich klicke mich nicht durch Rapidshare durch und lade nichdazu jede Datei einzeln.)

Ich sehe da keinen Fehler, eigentlich funktioniert folgendes wunderbar:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var x: integer;
    erg : double;
begin
  x := 23;
  erg := sin(x);
  ShowMessage(FloatToStr(erg));
end;
Johannes

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Re: Mathematische Funktionen in Lazarus

Beitrag von creed steiger »

Neuling55 hat geschrieben:
Wie kann ich eine Wurzel ziehen?
http://www.lazarusforum.de/viewtopic.php?p=33699#p33699" onclick="window.open(this.href);return false;
erster link

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: Mathematische Funktionen in Lazarus

Beitrag von Euklid »

Neuling55 hat geschrieben:Wie kann ich eine Wurzel ziehen?

Code: Alles auswählen

Wurzel:=sqrt(zahl);

Antworten