AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language [Erledigt ]Logik-Problem mit and/or-Verknüpfung
Thema durchsuchen
Ansicht
Themen-Optionen

[Erledigt ]Logik-Problem mit and/or-Verknüpfung

Ein Thema von Wolfgang Mix · begonnen am 12. Aug 2012 · letzter Beitrag vom 13. Aug 2012
Antwort Antwort
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#1

AW: [Erledigt ]Logik-Problem mit and/or-Verknüpfung

  Alt 12. Aug 2012, 17:56
Wieso sollte es auch nicht, ich habe ja zugegebenermaßen einen Syntaxfehler gemacht. Die 2. Konstante habe ich nur eingeführt, um Magic Values zu vermeiden, man kann natürlich auch auf das Set verzichten und gleich die Konstanten nehmen, aber ich habe so etwas lieber zentral, falls man öfter darauf zugreift (DRY).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Hobby-Programmierer

Registriert seit: 19. Jan 2006
Ort: München
392 Beiträge
 
Delphi XE Starter
 
#2

AW: [Erledigt ]Logik-Problem mit and/or-Verknüpfung

  Alt 12. Aug 2012, 18:09
Auch wenn ich deinen Code immer sehr schätze, muss ich zugeben das mich als Amateur deine Hilfsconstanten eher verwirren.
Aber das des funktioniert war eher darauf fokussiert
in (1,2) hatte ich auch versucht, allerdings mit []
Schönen Abend noch
Mario
'Lesen Sie schnell, denn nichts ist beständiger als der Wandel im Internet!'
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#3

AW: [Erledigt ]Logik-Problem mit and/or-Verknüpfung

  Alt 12. Aug 2012, 19:29
Nochmal wegen der Lesbarkeit und ohne Hilfskrücken
(unnötige Zusatzvariblen) habe ich es jetzt so
und es funktioniert.


Delphi-Quellcode:
if (monat in[1,2]) and isleapyear(jahr) then
  schaltjahrkorrektur:=1
else schaltjahrkorrektur:=0;
Zitat meines Lehrmeisters:
"Geht nicht" gibt es nicht

LG

Wolfgang
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824

Geändert von Wolfgang Mix (12. Aug 2012 um 19:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#4

AW: [Erledigt ]Logik-Problem mit and/or-Verknüpfung

  Alt 12. Aug 2012, 20:55
Das waren aber weder Variablen noch Krücken, sondern einfache Konstanten.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#5

AW: [Erledigt ]Logik-Problem mit and/or-Verknüpfung

  Alt 12. Aug 2012, 23:55
Sorry Detlef,
aber mein Code braucht jetzt weder zusätzliche Variablen,
Konstanten noch externe Funktionen.
Bin eigentlich mit dem jetzigen Code zufrieden
Mein k und Dein CORRECTIONVALUE sind also überflüssig

LG

Wolfgang
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824

Geändert von Wolfgang Mix (13. Aug 2012 um 00:08 Uhr)
  Mit Zitat antworten Zitat
Hobby-Programmierer

Registriert seit: 19. Jan 2006
Ort: München
392 Beiträge
 
Delphi XE Starter
 
#6

AW: [Erledigt ]Logik-Problem mit and/or-Verknüpfung

  Alt 13. Aug 2012, 01:56
... und if / then brauchst du auch nimmer ROFL
schaltjahrkorrektur:= ((Month in [1,2]) and IsLeapYear(Year));
Mario
'Lesen Sie schnell, denn nichts ist beständiger als der Wandel im Internet!'
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#7

AW: [Erledigt ]Logik-Problem mit and/or-Verknüpfung

  Alt 13. Aug 2012, 07:39
Achtung, Klugscheißerkommentar!

Ist kompakter Code strebenswert oder lesbarer? Soll man das noch verstehen, wenn man in ein paar Jahren drüberschaut oder einfach übersehen, weil es ja so herrlich kompakt ist?

Zunächst fällt auf, das Monate durch numerische Werte repräsentiert werden. Das ist ungünstig, denn für welchen Monat steht die 1? Immer für Januar? Was ist, wenn wir mit Fiskaljahren rechnen und der erste Monat des Fiskaljahres ist der Juli? Was bedeutet dann die 1?

Ich würde daher den Monaten eine Enumerationsliste spendieren und den Monat durch seinen Namen repräsentieren. Dann ist das unmißverständlich.

DeddyH ist schon auf dem richtigen Weg, indem er auf magische Konstanten verzichtet, aber stellt sich über seinen 'Correctionvalue' selbst ein Bein: Das macht den Ansatz dann wieder schwerer Lesbar. Wolfgang will doch nur den einfachen Satz ins delphianische übersetzt haben:
"Wenn Januar oder Februar im Schaltjahr vorliegt, soll eine Schaltjahreskorrektur vorgenommen werden (1), andernfalls 0."
In Englisch wäre das
"A correctionvalue should be 1, if and only if the year is a leapyear and the month is a january and 0 otherwise".

Fast am Ziel (Delphi kennt das so ja nicht)
Delphi-Quellcode:
If IsLeapYear() and month in [January, February] Then
  CorrectionValue := 1
else
  CorrectionValue := 0;
Dieser Code liest sich fast so wie Wolfgangs Aufgabenstellung. Fast wortwörtlich, ergo verständlich.

Wenn man nun die Eigenschaft 'Schaltjahr und Januar oder Februar' noch beschreiben möchte (z.B. weil das eine Bedingung ist, die Fred Rembremerdinger in seiner Gleichung aufgestellt hat) dann kann man das noch in eine Funktion auslagern und dieser Funktion einen aussagekräftigen Namen geben. Muss aber nicht.

Das Einzige, was mich noch stören würde, ist der Name dieses Korrekturfaktors. Was korrigiert er? Wenn Wolfgang mehr Code zeigen würde, dann könnte man diesen Faktor noch umbenennen. Aber in dieser Aufgabenstellung reicht diese Bezeichnung aus.

@Hobbyprogrammierer: Ist 1/0 gleichbedeutend mit einem Boolean

Geändert von Furtbichler (13. Aug 2012 um 07:43 Uhr)
  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 08:55 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 by Thomas Breitkreuz