AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Kürzung eines bool'schen Ausdruckes

Ein Thema von mirage228 · begonnen am 15. Apr 2004 · letzter Beitrag vom 15. Apr 2004
Antwort Antwort
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#1

Kürzung eines bool'schen Ausdruckes

  Alt 15. Apr 2004, 19:02
Hallo!

Ich habe eine function, die folgender maßen aussieht:
Delphi-Quellcode:
function TMainForm.CanFormat(Document: Integer): Booolean;
begin
  if IsIndexValid(Document) then
  begin
    if Dokumente[Document].EditorMode then
     { SynEdit speichert als TXT! }
      Result := False else
    Result := not Dokumente[Document].PlainText;
  end else Result := True;
end;
Diesen habe ich versucht so zu "kürzen":
Delphi-Quellcode:
function TMainForm.CanFormat(Document: Integer): Booolean;
begin
  Result := not ((not (IsIndexValid(Document)) or ((Dokumente[Document].EditorMode) or (not (not Dokumente[Document].EditorMode) and (not Dokumente[Document].PlainText)))));
end;
Auf den Blick scheint er zu funktionieren, aber ich bin mir nicht sicher, ob der Ausdruck bei allen Konditionen das gleiche Ergebnis, wie der Original Ausdruck hat.

Könnt ihr euch den unteren Ausdruck kurz anschauen und mir sagen, ob ich in korrekt umgeschrieben habe?
Hat es überhaupt Sinn, den obigen Ausdruck soweit zu kürzen?

Danke,
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
XeRo

Registriert seit: 23. Okt 2003
Ort: Warth
461 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Kürzung eines bool'schen Ausdruckes

  Alt 15. Apr 2004, 19:06
Zitat von mirage228:
Hat es überhaupt Sinn, den obigen Ausdruck soweit zu kürzen?
wenn du dich selbst nicht mehr auskennst

Zitat von mirage228:
...aber ich bin mir nicht sicher, ob der Ausdruck bei allen Konditionen das gleiche Ergebnis, wie der Original Ausdruck hat.
dann nicht....
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#3

Re: Kürzung eines bool'schen Ausdruckes

  Alt 15. Apr 2004, 19:14
Hi!

Ich hätte den oberen gelassen wie er war.
Bei Version 2 blickst weder du gewschweige denn ein anderer Programmierer durch.
Außerdem glaube ich nicht, dass du viele Vorteile hast so.

Ciao fkerber
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

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

Re: Kürzung eines bool'schen Ausdruckes

  Alt 15. Apr 2004, 19: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
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Kürzung eines bool'schen Ausdruckes

  Alt 15. Apr 2004, 20:05
Hi,

danke erstmal für eure Antworten!

Wenn ich den Code nachher selbst nicht verstehe, hat es keinen Sinn, einen zu komplizierten Ausdruck hinzuschreiben.

So wie es d3g hier beschrieben hat, ist es wirklich sehr einleuchtend

DieVorgehensweise finde ich sehr gut - da habe ich mal wieder was dazugelernt.
Soweit ich getestet habe, ist der optimierter Ausdruck durchaus korrekt und auch leserlicher als meiner.

Ich denke, ich werde den Ausdruck von dir verwenden.

Vielen Dank nochmal

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:11 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