Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Boolean in Integer umwandeln (https://www.delphipraxis.net/83576-boolean-integer-umwandeln.html)

k-weddige 5. Jan 2007 00:47

Re: Boolean in Integer umwandeln
 
Beides Falsch!
Delphi-Quellcode:
var
  Bool: Boolean;

const
  BoolToStr: array [Boolean] of String = ('Falsch', 'Richtig');

procedure TForm1.FormCreate(Sender: TObject);
begin
  Bool := False;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Memo1.Lines.Add(BoolToStr[Bool]);
 Inc(Bool);
end;
Und jetzt klick bitte 3x auf den Button. :angel:

Jetzt mit Ord(Bool):
Delphi-Quellcode:
var
  Bool: Boolean;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Bool := False;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Lines.Add(IntToStr(ord(Bool)));
  Inc(Bool);
end;
Ord(Bool) macht das gleiche, wie Integer(Bool).

Konstantin :wall:

Popov 5. Jan 2007 02:27

Re: Boolean in Integer umwandeln
 
Zitat:

Und jetzt klick bitte 3x auf den Button. :angel:
Nicht bevor du mir drei Gründe nennst wieso ich drei mal auf den Button klicken soll und zu False die Zahl 3 dazuaddieren soll?

Und noch was! Wer

Delphi-Quellcode:
var
  Bool: Boolean;

const
  BoolToStr: array [Boolean] of String = ('Falsch', 'Richtig');
eingibt und dann das

Delphi-Quellcode:
  Inc(Bool);
der hat entweder den falschen Job / falsches Hobby, oder er klugscheißt.

Nicht falsch verstehen, ohne jetzt deinem Wunsch nachgekommen zu sein weiß ich was passieren wird, aber Boolean ist Boolean. Und wer Boolean addiert, der hat entweder die Übersicht verloren was er macht oder hat keine Ahnung was er macht. Da kannst du auch kommen, eine Byte Variable deklarieren, ihr den Wert 255 geben und dann um eins erhöhen. Einen Byte Variable um 1 erhöhen ist nicht falsch, wird aber falsch wenn sie bereits den Wert 255 hat, denn dann wundert sich der Wirt wieso er 256 Bier ausgegeben hat, aber keines auf der Rechnung steht. Also, entweder ich weiß nicht was ich tue, oder ich addiere nicht zu Boolean.

Also, dir gelingt wahrscheinlich eine Fehlermeldung, aber was sagt uns das? Das du nicht programmieren kannst und mit Boolean addiert hast. Da kannst du auch gleich anfangen durch Null zu dividieren oder du weißt was du machst ;)

xaromz 5. Jan 2007 11:40

Re: Boolean in Integer umwandeln
 
Hallo,
Zitat:

Zitat von Popov
der hat entweder den falschen Job / falsches Hobby, oder er klugscheißt.

Nicht falsch verstehen, ohne jetzt deinem Wunsch nachgekommen zu sein weiß ich was passieren wird, aber Boolean ist Boolean. Und wer Boolean addiert, der hat entweder die Übersicht verloren was er macht oder hat keine Ahnung was er macht. Da kannst du auch kommen, eine Byte Variable deklarieren, ihr den Wert 255 geben und dann um eins erhöhen. Einen Byte Variable um 1 erhöhen ist nicht falsch, wird aber falsch wenn sie bereits den Wert 255 hat, denn dann wundert sich der Wirt wieso er 256 Bier ausgegeben hat, aber keines auf der Rechnung steht. Also, entweder ich weiß nicht was ich tue, oder ich addiere nicht zu Boolean.

Also, dir gelingt wahrscheinlich eine Fehlermeldung, aber was sagt uns das? Das du nicht programmieren kannst und mit Boolean addiert hast. Da kannst du auch gleich anfangen durch Null zu dividieren oder du weißt was du machst ;)

Dann will ich auch mal klugscheißen. Boolean ist nicht, ich wiederhole, nicht definiert als Null und Eins. Das mag für die Werte True und False unter Delphi gelten, aber damit hat sich das Ganze schon wieder. Der einzige Wert, der bei Boolean definiert ist, ist Null, was als False interpretiert wird. Folglich ist auch Zwei nicht False, also als True zu interpretieren. Die einzig richtige Lösung für das Problem ist demnach in Beitrag #4 von mkinzler zu finden (Das gilt natürlich nur, wenn als Ergebnis nur Null und Eins herauskommen darf).
klugscheiß Ende.

xaromz

Popov 5. Jan 2007 19:29

Re: Boolean in Integer umwandeln
 
Bevor jetzt etwas ausbricht was nicht geplant was - meine Variante war nur Spaß. Das war so weit von richtig (richtig im Sinne von Umrechnungsfunktion für BoolToInt), daß mich die Reaktion geradezu gewundert hat. Es sollte nur die Möglichkeiten zeigen was so alles möglich ist. Dabei kommt zwar was interessantes raus, ist aber keine Umrechnungsfunktion.

Zitat:

Zitat von xaromz
Dann will ich auch mal klugscheißen. Boolean ist nicht, ich wiederhole, nicht definiert als Null und Eins. Das mag für die Werte True und False unter Delphi gelten, aber damit hat sich das Ganze schon wieder.

Nun, das Problem ist, daß der kleinste Wert den man speichern kann ein Byte ist. Das bedeutet aber nicht, daß es eine Rolle spielt, bzw. spielen sollte. Ein True ist True und False ist False. Hier ist True 1, in einigen anderen Sprachen ist es auch mal -1, und dann gibt es Sprachen mit ganz verrückten Bools wo es sogar ein Nil mit 2 (oder war das -2?) gibt, für den Fall, daß es noch keine Entscheidung gab.

Aber um auf dein Einwand zu kommen

Zitat:

Der einzige Wert, der bei Boolean definiert ist, ist Null, was als False interpretiert wird. Folglich ist auch Zwei nicht False, also als True zu interpretieren.
Das ist nicht richtig im Sinne von Boolean.

Nur weil etwas nicht definiert ist, bedeutet es nicht, daß es eine Wahlmöglichkeit gibt. Ein Boolean hat zwei Zustände, nicht drei und auch nicht vier. Zwei. Ob nun False für 0 steht und True für 1, 2 oder 3 ist egal. Nicht egal ist ob True für 1 und 2 und 3 steht. Tut es nicht. Ein Boolean steht für zwei Zustände. Es kann für 0 und für 7 stehen, aber dann nicht für 1. Also, nur weil es nicht knallt wenn ich Inc(Bool) mache, bedeute es nicht, daß True alles ungleich 0 ist, dann dann wäre die Boolean Definition nicht, daß es eines von zwei Zuständen ist, sondern Null und allem Anderen.

Deshalb kann man Inc(Bool) als Programmierfehler ansehen.

Anders sieht es aus wenn du nicht von Delphi/Pascal sprichst, sondern allgemein. Da könnte False für 12 und True für 27 stehen. Hauptsache zwei Zustände. Aber wir sind hier in einem Programmierforum für Delphi.

xZise 5. Jan 2007 20:27

Re: Boolean in Integer umwandeln
 
:D Also ich finde diese Diskussion sehr interessant, und ich habe das jetzt über case geregelt ;)

Außerdem wollte ich nur überprüfen, ob das erste Zeichen ein bestimmten Wert hat.

xaromz 5. Jan 2007 20:35

Re: Boolean in Integer umwandeln
 
Hallo,
Zitat:

Zitat von Popov
Das ist nicht richtig im Sinne von Boolean.

Nur weil etwas nicht definiert ist, bedeutet es nicht, daß es eine Wahlmöglichkeit gibt. Ein Boolean hat zwei Zustände, nicht drei und auch nicht vier. Zwei. Ob nun False für 0 steht und True für 1, 2 oder 3 ist egal. Nicht egal ist ob True für 1 und 2 und 3 steht. Tut es nicht. Ein Boolean steht für zwei Zustände. Es kann für 0 und für 7 stehen, aber dann nicht für 1. Also, nur weil es nicht knallt wenn ich Inc(Bool) mache, bedeute es nicht, daß True alles ungleich 0 ist, dann dann wäre die Boolean Definition nicht, daß es eines von zwei Zuständen ist, sondern Null und allem Anderen.

...

Anders sieht es aus wenn du nicht von Delphi/Pascal sprichst, sondern allgemein. Da könnte False für 12 und True für 27 stehen. Hauptsache zwei Zustände. Aber wir sind hier in einem Programmierforum für Delphi.

Wir befinden uns zwar in einem Delphi-Forum, müssen uns aber mit einer Umgebung herumplagen, die in C geschrieben ist. Deshalb sollte man keine Funktion schreiben, die nur mit einem Delphi-Boolean zurechtkommt (ich will gar nicht wissen, wie viele verschiedene Boolean-Typen in den Windows-Sourcen definiert sind). Übrigens reden wir auch nicht von einem Boolschen Wert im Sinne der Mathematik (zwei Zustände), sondern über den Wert einer boolschen Variable in Programmiersprachen, und da gilt nun mal: alles außer Null ist True. Deshalb ist zwar Deine Sichtweise "es gibt nur zwei Zustände" prinzipiell richtig, für die Praxis aber nicht brauchbar. Unterschiedliche Programmiersprachen definieren eben True ab und zu anders, ich habe aber noch keine gesehen, die False nicht als Null definiert. Eigentlich sollte die Funktion sogar so aussehen:
Delphi-Quellcode:
function BoolToInt(B: Boolean): Integer;
begin
  if b then
    Result := Integer(True)
  else
    Result := Integer(False);
end;
Damit sind wir auch auf der sicheren Seite, wenn Borland einmal True und False neu definiert :mrgreen: .
Zitat:

Zitat von Popov
Deshalb kann man Inc(Bool) als Programmierfehler ansehen.

Nein, das kann man nicht. Ist vielleicht keine schöne Sache, aber durchaus zulässig und gültiges Pascal. Und genau deshalb muss eine Funktion sowas auch berücksichtigen. Dass derjenige, der sowas macht, ab Besten erschossen werden sollte, ist natürlich selbstverständlich :wink: .

Nix für ungut
xaromz


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:44 Uhr.
Seite 2 von 2     12   

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