Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wurzel ziehen (https://www.delphipraxis.net/102654-wurzel-ziehen.html)

DJA 1. Nov 2007 21:06


Wurzel ziehen
 
Hi,
ich habe angefangen mir Delphi beizubringen, bin also ein totaler Noob :oops:
Also ich habe mir vorgenommen einen Taschenrechner zu programmieren,
und dann immer schwerere Funktionen hinzuzufügen =)
Addieren, Subtrahieren, Multiplizieren, Dividieren und Quadrieren kann er schon
*stolz sei obwohl das jeder in 2 Mins programmieren kann* :mrgreen:

Naja nun bin ich beim Wurzel Ziehen..ich habe schon in der Delphi-Suche geforscht
und bin irgendwie über qw:=Power(Zahl1, 0.5); (qw = QuadratWurzel) gestolpert,
aber da bekomme ich immer die Fehlermeldung

[Fehler] Unit1.pas(84): Undefinierter Bezeichner: 'Power'

Was mache ich falsch? Oder muss ich da sowieso ganz anders herangehen?

In der Schule haben wir mal das Heron-Verfahren durchgenommen, also eine
Wurzel nur mit den Grundrechenarten zu bestimmen - aber dass umzusetzen ist sicherlich
viel zu umständlich!?

Naja,
schon mal DANKE für eure Antworten!

Greetz
DJA

PS: Ich habe Delphi 7

mkinzler 1. Nov 2007 21:08

Re: Wurzel ziehen
 
Delphi-Quellcode:
Uses ...,Math;

Tommy1988 1. Nov 2007 21:14

Re: Wurzel ziehen
 
Zitat:

Zitat von mkinzler
Delphi-Quellcode:
Uses ...,Math;

Beispiel:
Delphi-Quellcode:
Caption := FloatToStr(sqrt(25)); // Ergebnis natürlich 5
Edit:
Alles richtig so?

DJA 1. Nov 2007 21:19

Re: Wurzel ziehen
 
Hi,
thx für die schnellen und ausführlichen :freak: Antworten :-D
ich habe nun
Zitat:

Label4.Caption := FloatToStr(sqrt(Zahl1));
eingegeben, aber als Ergebnis erhalte ich immer 0..:(

mkinzler 1. Nov 2007 21:20

Re: Wurzel ziehen
 
Welchen Wert hat Zahl1?

Tommy1988 1. Nov 2007 21:21

Re: Wurzel ziehen
 
[weist du was FloatToStr bedeutet?

IntToStr => IntegerWert in einen String umwandeln
FloatToStr => DezimalWert (Real, Extended ..) in einen String umwandeln.

Als was ist Zahl1 deklariert?

DJA 1. Nov 2007 21:27

Re: Wurzel ziehen
 
Jap das wusste ich,
Zahl1 ist bei mir die Variable, aus der die WUrzel gezogen werden soll.
Mein Quellcode wie ich ihn bisher habe:

Zitat:

var
Form1: TForm1;
Zahl1, Zahl2, Ergebnis: integer;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Zahl1:=StrToInt(Edit1.Text);
Zahl2:=StrToInt(Edit2.Text);
Ergebnis:=Zahl1+Zahl2;
Label4.Caption:=IntToStr(Ergebnis);
end;

dann halt die Subtraktions-Prozeduren etc.

procedure TForm1.Button6Click(Sender: TObject);
begin
Label4.Caption := FloatToStr(sqrt(Zahl1));
end;
http://img110.imageshack.us/img110/1479/rechnerpf5.jpg

Tommy1988 1. Nov 2007 21:33

Re: Wurzel ziehen
 
Delphi-Quellcode:
Zahl1, Zahl2, Ergebnis: integer;
Da muss Real, nicht integer hin.
Un überall wo StrToInt steht, machst du dann StrToFloat draus.

DJA 1. Nov 2007 21:46

Re: Wurzel ziehen
 
dann gibts bei
Label4.Caption:=IntToStr(Ergebnis);
den Fehler
[Fehler] Unit1.pas(47): Es gibt keine überladene Version von 'IntToStr', die man mit diesen Argumenten aufrufen kann

Zitat:

procedure TForm1.Button1Click(Sender: TObject);
begin
Zahl1:=strtofloat(Edit1.Text);
Zahl2:=strtofloat(Edit2.Text);
Ergebnis:=Zahl1+Zahl2;
Label4.Caption:=IntToStr(Ergebnis);
end;
da habe ich alle "inttostr" zu "floattostr" gemacht, doch dann gibts bei:
Ergebnis:=Zahl1 div Zahl2; // die Division
den Fehler
[Fehler] Unit1.pas(70): Operator ist auf diesen Operandentyp nicht anwendbar

aber um den Fehler einfach zu umgehen und mal auszutesten habe ich "div" durch "+" ersetzt, dann kann ich den Code zwar compilieren, aber das Ergebnis ist immer noch Null!?

Tommy1988 1. Nov 2007 21:47

Re: Wurzel ziehen
 
Delphi-Quellcode:
zahl1 / zahl2
Delphi-Quellcode:
Label4.Caption:=IntToStr(Ergebnis); // Falsch, nicht Int
Delphi-Quellcode:
FloatToStr(Ergebnis); // Richtig, ist doch Real, nicht Integer

mkinzler 1. Nov 2007 21:48

Re: Wurzel ziehen
 
FloatToStr()

DJA 1. Nov 2007 21:56

Re: Wurzel ziehen
 
ja, dass mit FloatToStr habe ich doch oben schon geschrieben, dass ich das auch geändert habe!
aber das Ergebnis ist immer noch null :(

Tommy1988 1. Nov 2007 21:57

Re: Wurzel ziehen
 
Pack am besten mal alle relevanten Dateien in ein Archiv und lade es als Anhang hoch.

DJA 1. Nov 2007 22:01

Re: Wurzel ziehen
 
naja sind ja keine Dateien,
der Quellcode tuts auch denk ich:

Zitat:

wegeditiert

Tommy1988 1. Nov 2007 22:06

Re: Wurzel ziehen
 
Wa der Fehler hier?
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
Zahl1:=StrToFloat(Edit1.Text);
Zahl2:=StrToFloat(Edit2.Text);
Ergebnis:=Zahl1-Zahl2;
Label4.Caption:=FloatToStr(Ergebnis);
end;
Wenn ja, was sollte da nochmal berechnet werden`?

DJA 1. Nov 2007 22:08

Re: Wurzel ziehen
 
Nun gibt es ja keinen Fehler mehr - nur mein Ziel war es
die Wurzel zu ziehen, allerdings kommt als Ergebnis immer Null raus.

Tommy1988 1. Nov 2007 22:09

Re: Wurzel ziehen
 
Du hast meine Frage nicht richtig beantwortet..

Sag mir mal genau was du vorhast?

Die Wurzel aus einer zahl ziehen? was haben die beiden edit damit zu tun?

Edit:
Das schreibst du in das Edit, in welches die Zahl aus der die Wurzel gezogen werden soll stehen soll:
Delphi-Quellcode:
Zahl1 := StrToFloat(Edit1.Text);
Das kommt in die Button-Methode:
Delphi-Quellcode:
Caption := FloatToStr(sqrt(Zahl1));
Das wars..

DJA 1. Nov 2007 22:16

Re: Wurzel ziehen
 
Also das Programm ist ein Taschenrechner mit bisher 5 Funktionen:
Addieren, Subtrahieren, Multiplizieren, Dividieren und Quadrieren.
Daher auch die beiden Editfenster.
Dort gibt man bei Edit1 z.B. 10 ein, bei Edit2 5.
Dann erhält man je nach Funktion,
bei addieren 15
bei subtrahieren 5
bei multiplizieren 50
bei dividieren 2
als Ergebnis.

Quadriert wird was is Edit1 steht. Also erhält man im Beispiel 100.

Nun möchte ich eine Funktion die die Wurzel aus Edit1 (als Label Zahl1) zieht.
Dafür brauch man Edit2 als nicht.



EDIT:
Dankeschön, jetzt geht es!!! :kiss: Vielen Dank!!

Tommy1988 1. Nov 2007 22:19

Re: Wurzel ziehen
 
Ok, also brauchst du das hier, dann ist das fertig:

Das schreibst du in das Edit, in welches die Zahl aus der die Wurzel gezogen werden soll stehen soll:
Delphi-Quellcode:
Zahl1 := StrToFloat(Edit1.Text);
Das kommt in die Button-Methode:
Delphi-Quellcode:
Caption := FloatToStr(sqrt(Zahl1));

DJA 1. Nov 2007 22:22

Re: Wurzel ziehen
 
Dankeschön, hattest du ja oben auch schon reineditiert, trotzdem noch ma thx :)

Sani2003 15. Nov 2007 13:07

Re: Wurzel ziehen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

hab mir das Thema mal durchgelesen aber für mein Problem noch keine Antwort gefunden....

Das Programm soll die ach so schöne Mitternachtsformel lösen.

Hier der Quellcode:

Delphi-Quellcode:
unit sqrt;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Math;

type
  TForm1 = class(TForm)
    Edit_a: TEdit;
    Edit_b: TEdit;
    Edit_c: TEdit;
    Edit_x1: TEdit;
    Edit_x2: TEdit;
    Button_solve: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Button_clear: TButton;
    Button_exit: TButton;
    procedure Edit_bExit(Sender: TObject);
    procedure Edit_cExit(Sender: TObject);
    procedure Button_solveClick(Sender: TObject);
    procedure Button_exitClick(Sender: TObject);
    procedure Button_clearClick(Sender: TObject);
    procedure Edit_bEnter(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  a,b,c,d,e,x1,x2  :real;


implementation

{$R *.DFM}


procedure TForm1.Edit_bExit(Sender: TObject);
begin
     b:=strtofloat(edit_b.text);
end;

procedure TForm1.Edit_cExit(Sender: TObject);
begin
     c:=strtofloat(edit_c.text);
end;

procedure TForm1.Button_solveClick(Sender: TObject);
begin

  if a <> 0 then
  begin
     d:=(sqr(b))-(4*a*c);
     if d > 0 then
     begin
       e:=sqrt(d);                       //[u][b]<--------  Fehlerstelle !![/b][/u]
       x1:=(-b+e)/(2*a);
       x2:=(-b-e)/(2*a);
       edit_x1.Text:=floattostr(x1);
       edit_x2.text:=floattostr(x2);
     end
     else
       showmessage('Aus negativen Zahlen kann keine Wurzel gezogen werden!');
     end
  else
     showmessage('Division durch 0 ist unzulässig!');
end;



procedure TForm1.Button_exitClick(Sender: TObject);
begin
  close;
end;

procedure TForm1.Button_clearClick(Sender: TObject);
begin
  edit_a.Clear;
  edit_b.Clear;
  edit_c.Clear;
  edit_x1.Clear;
  edit_x2.Clear;
end;

procedure TForm1.Edit_bEnter(Sender: TObject);
begin
  a:=strtofloat(edit_a.text);
end;

end.
Als Fehler kommt beim kompilieren:

'.' erwartet aber '(' gefunden.

Ich hab erst angefangen mit Programmieren also verezeiht wenn ich den Wald vor lauter Bäumen nicht sehe...

Danke für die Hilfe.

Sani2003

jakobwenzel 15. Nov 2007 13:10

Re: Wurzel ziehen
 
Versuch mal, deine Unit nicht so wie eine Funktion, die du benutzt, zu nennen.

Sani2003 15. Nov 2007 13:16

Re: Wurzel ziehen
 
Danke für die schnelle Antwort.
Geht das denn ohne weiteres? also einfach umbenenenn ist ja nicht so prikelnd...
Gibts da nen Trick das alle Verknüpfungen automatisch geändert werden?

[EDIT]
DANKE DAS WARS !!!!
Jetzt gehts, Prima :-D
[/EDIT]

jakobwenzel 15. Nov 2007 14:22

Re: Wurzel ziehen
 
Die Alternative wär gewesen, System.sqrt beim Aufruf zu schreiben, um Delphi klar zu sagen, das du die Funktion sqrt aus der Unit System willst und nicht die Unit sqrt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz