![]() |
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 |
Re: Wurzel ziehen
Delphi-Quellcode:
Uses ...,Math;
|
Re: Wurzel ziehen
Zitat:
Delphi-Quellcode:
Edit:
Caption := FloatToStr(sqrt(25)); // Ergebnis natürlich 5
Alles richtig so? |
Re: Wurzel ziehen
Hi,
thx für die schnellen und ausführlichen :freak: Antworten :-D ich habe nun Zitat:
|
Re: Wurzel ziehen
Welchen Wert hat Zahl1?
|
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? |
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:
![]() |
Re: Wurzel ziehen
Delphi-Quellcode:
Da muss Real, nicht integer hin.
Zahl1, Zahl2, Ergebnis: integer;
Un überall wo StrToInt steht, machst du dann StrToFloat draus. |
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:
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!? |
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
|
Re: Wurzel ziehen
FloatToStr()
|
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 :( |
Re: Wurzel ziehen
Pack am besten mal alle relevanten Dateien in ein Archiv und lade es als Anhang hoch.
|
Re: Wurzel ziehen
naja sind ja keine Dateien,
der Quellcode tuts auch denk ich: Zitat:
|
Re: Wurzel ziehen
Wa der Fehler hier?
Delphi-Quellcode:
Wenn ja, was sollte da nochmal berechnet werden`?
procedure TForm1.Button2Click(Sender: TObject);
begin Zahl1:=StrToFloat(Edit1.Text); Zahl2:=StrToFloat(Edit2.Text); Ergebnis:=Zahl1-Zahl2; Label4.Caption:=FloatToStr(Ergebnis); end; |
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. |
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:
Das kommt in die Button-Methode:
Zahl1 := StrToFloat(Edit1.Text);
Delphi-Quellcode:
Das wars..
Caption := FloatToStr(sqrt(Zahl1));
|
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!! |
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:
Das kommt in die Button-Methode:
Zahl1 := StrToFloat(Edit1.Text);
Delphi-Quellcode:
Caption := FloatToStr(sqrt(Zahl1));
|
Re: Wurzel ziehen
Dankeschön, hattest du ja oben auch schon reineditiert, trotzdem noch ma thx :)
|
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:
Als Fehler kommt beim kompilieren:
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. '.' 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 |
Re: Wurzel ziehen
Versuch mal, deine Unit nicht so wie eine Funktion, die du benutzt, zu nennen.
|
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] |
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 22:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz