Real-Zahlen

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
MicSc
Beiträge: 5
Registriert: Di 5. Jun 2012, 13:53

Real-Zahlen

Beitrag von MicSc »

Kann man zwei real zahlen mit einernader vergleichen

z.B.

var Edit1, Edit2 :real;

If Edit1 = Edit2
then....

oder geht das nur bei integer zahlen?

u-boot
Beiträge: 308
Registriert: Do 9. Apr 2009, 10:10
OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 785..

Re: Real-Zahlen

Beitrag von u-boot »

probiers doch aus ....
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Real-Zahlen

Beitrag von MAC »

so:

1) Ja das geht so, und dein Beispiel ist komplett richtig,
ABER
2) Benutze bitte den Highlighter
3) hat der Thread "Real und Integer" nicht die selbe Fragestellung ?
4) Ich vermute mal das du den Text zweier Editfelder miteinander Vergleichen kann.
Dann solltest du wissen Editfelder besitzen mehrere Eigenschaften, zum beipsiel eine Position, eine breite, eine Farbe und den Text.
Den Text fragt man mit Edit1.Text ab.

Code: Alles auswählen

var
a,b:integer;
begin
a := StrtoFloat(Edit1.Text);
b := StrtoFloat(Edit2.Text);
if a = b then { hier steht was, ohne die Komentarklammern :) } ;
end;
// @edit: Dieser Code enthält einen kleinen Fehler, dieser ist aber schnell gefunden ...
5) schau dir mal die Tutorials an:
http://delphi-treff.de/tutorials/grundlagen/" onclick="window.open(this.href);return false;
Zuletzt geändert von MAC am Di 5. Jun 2012, 21:38, insgesamt 1-mal geändert.

Code: Alles auswählen

Signatur := nil;

Heinrich Wolf
Beiträge: 323
Registriert: Di 12. Apr 2011, 13:21
OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
CPU-Target: 1core 1,8GHz 32Bit
Wohnort: Fürth
Kontaktdaten:

Re: Real-Zahlen

Beitrag von Heinrich Wolf »

Hallo MicSc,

ich weiß nicht, warum Du Deine Real Variablen Edit1 und Edit2 genannt hast. Vielleicht hast Du ja etwas verwechselt: Wenn Du zwei Edit Felder auf Dein Formular ziehst, kriegst Du genau diese Namen, aber die sind nicht vom Typ Real, sondern TEdit. Edit1 ist dabei immer verschieden von Edit2. Es handelt sich um Komponenten, u.a. mit einem Feld z.B. Edit1.Text . Da drin steht ein String. Auch Strings lassen sich vergleichen. Aber '01.1' ist im String Vergleich verschieden von '1.1'. Daher hat MAC schon die Umwandlung mit StrToFloat() vorgeschlagen.

Und jetzt kommt die nächste Feinheit: Wenn die Mathematik zweimal dieselbe Kommazahl ausrechnet, dann tut das der Prozessor noch lange nicht. Denn 1.1 ist im Binärsystem ein unendlicher Bruch und es kommt zu Rundungsfehlern. Du solltest also beim Vergleich kleine Rundungen zulassen, z.B.

Code: Alles auswählen

if abs(a - b) < 1e-10 then
  Label1.Caption := 'Das gilt als gleich'
else
  Label1.Caption := 'Das gilt als ungleich';
oder

Code: Alles auswählen

if abs(a/b - 1) < 1e-10 then
  Label1.Caption := 'Das gilt als gleich'
else
  Label1.Caption := 'Das gilt als ungleich';
oder ähnlich. Welcher Vergleich treffender ist, kommt dabei auf die Art Deiner Berechnung an und bei a/b musst Du noch auf Division durch 0 aufpassen.

Gruß
Heiner

MicSc
Beiträge: 5
Registriert: Di 5. Jun 2012, 13:53

Re: Real-Zahlen

Beitrag von MicSc »

Danke für eure Hilfe :)

Aber wenn ich die Variablem mit interger definiere, kann ich nicht FloatToStr oder StrToFloat schreiben.

Cybermonkey342
Beiträge: 109
Registriert: Sa 1. Mär 2008, 15:19
OS, Lazarus, FPC: openSUSE Leap 15.6 (FPC 3.2.2) / Windows 11 Pro (FPC 3.2.2)
CPU-Target: x64
Kontaktdaten:

Re: Real-Zahlen

Beitrag von Cybermonkey342 »

MicSc hat geschrieben:Danke für eure Hilfe :)

Aber wenn ich die Variablem mit interger definiere, kann ich nicht FloatToStr oder StrToFloat schreiben.
Ja, weil dann heißt es

Code: Alles auswählen

StrToInt
oder

Code: Alles auswählen

IntToStr
logisch, oder? :wink:
Mit besten Grüßen,
Cybermonkey

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Real-Zahlen

Beitrag von MAC »

MicSc hat geschrieben:Danke für eure Hilfe :)

Aber wenn ich die Variablem mit interger definiere, kann ich nicht FloatToStr oder StrToFloat schreiben.
Richtig, ich habe ein Fehler gemacht, aber die Lösung hast du doch gerade selbst angesprochen :)
Also versuch am besten selber dieses kleine Problem zu lösen, so lernt man am besten...

Code: Alles auswählen

Signatur := nil;

Antworten