Einzelnen Beitrag anzeigen

Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#4

Re: Kürzung eines bool'schen Ausdruckes

  Alt 15. Apr 2004, 20:37
Wenn du zusammenfassen willst, dann hätte ich es so gemacht:

Code:
p := isIndexValid(Document)
q := Dokumente[Document].EditorMode
r := Dokumente[Document].PlainText

p  q  Result
--------------
f  f  t
f  t  t
t  f  not r
t  t  f

((not p) and (not q)) or ((not p) and q)
= (not p) and ((not q) or q)
= (not p) and t
= (not p)
Folglich:

Delphi-Quellcode:
if (p and (not q)) then
  Result := not r
else
  Result := not p;
// bzw.
if (isIndexValid(Document) and (not Dokumente[Document].EditorMode)) then
  Result := not Dokumente[Document].PlainText
else
  Result := not isIndexValid(Document);
Wenn's dann noch weiter verkürzt werden soll, kann man's auch vollständig machen:

Code:
p  q  r  Result
------------------
f  f  f  t
f  f  t  t
f  t  f  t
f  t  t  t
t  f  f  t
t  f  t  f
t  t  f  f
t  t  t  f
Um's kürzer zu machen, beziehe ich schon mal das Ergebnis von vorher mit ein.

Code:
(not p) or (p and (not q) and (not r))
Das heißt:

Delphi-Quellcode:
Result := (not p) or (p and (not q) and (not r));
// bzw.
Result := (not isIndexValid(Document) or (isIndexValid(Document) and (not Dokumente[Document].EditorMode) and (not Dokumente[Document].PlainText));
Die Sinnhaftigkeit der vollständigen "Optimierung" sei mal dahingestellt. Übrigens könnte es gut sein, dass ich Fehler gemacht habe (auch dumme), ich bin nicht besonders wach im Moment.

[edit]Ein (Tipp-)Fehler weniger.[/edit]
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat