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

[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
Seite 1 von 2  1 2   
Benutzerbild von Wolfgang Mix
Wolfgang Mix

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

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

  Alt 12. Aug 2012, 15:26
Delphi-Version: 5
Habe gerade einen Blackout.

Problem:
Wenn Januar oder Februar im Schaltjahr vorliegt,
soll eine Schaltjahreskorrektur vorgenommen werden (1),
andernfalls 0.

Wörtlich übersetzt:
Delphi-Quellcode:
  //Logikfehler
{  if (monat=1) or (monat=2) and isleapyear(jahr) then
    schaltjahrkorrektur:=1
   else schaltjahrkorrektur:=0; }
Funktioniert so nicht.

Mit einer Hilfskrücke k Klappt es (Dirty Code).


Delphi-Quellcode:
  if (monat=1) or (monat=2) then k:=1 else k:=0;
  if isleapyear(jahr) and (k=1) then
    schaltjahrkorrektur:=1
  else schaltjahrkorrektur:=0;
Wie "denkt" der Compiler?
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 15:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

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

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

  Alt 12. Aug 2012, 15:29
Hi,

auch wenn ich den Sinn der Sache nicht ganz verstehe, vermut ich dass der Fehler in der Klammerung besteht - and klammert stärker als or.

Es steht also aktuell quasi das da:

Delphi-Quellcode:
if (monat=1) or ((monat=2) and isleapyear(jahr)) then
    schaltjahrkorrektur:=1
   else schaltjahrkorrektur:=0;
aber du willst

Delphi-Quellcode:
if ((monat=1) or (monat=2)) and isleapyear(jahr) then
    schaltjahrkorrektur:=1
   else schaltjahrkorrektur:=0;

LG,
Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#3

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

  Alt 12. Aug 2012, 15:32
if (monat=1) or (monat=2) and isleapyear(jahr) then Ich versuche sowas zu vermeiden, und mache es so
if ((monat=1) or (monat=2)) and isleapyear(jahr) then Ist glaube ich verständlicher zu lesen.
  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
 
#4

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

  Alt 12. Aug 2012, 15:35
Sorry, auch mit deinen Klammern funktioniert 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
  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: Logik-Problem mit and/or-Verknüpfung

  Alt 12. Aug 2012, 15:42
@Popov und @fkerber

Ihr hattet recht, es ist ein Klammerproblem.
Mit Popovs Klammern funzt es:

Danke an Euch

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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
26.842 Beiträge
 
Delphi 10.3 Rio
 
#6

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

  Alt 12. Aug 2012, 15:53
Nur der Vollständigkeit halber:
Delphi-Quellcode:
const
  CORRECTIONVALUE: array[Boolean] of integer = (0, 1);
...
  schaltjahrkorrektur := CORRECTIONVALUE[(monat in (1,2)) and IsLeapYear(jahr)];
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
 
#7

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

  Alt 12. Aug 2012, 16:00
Danke Detlef,

in (1,2) hatte ich auch versucht,
allerdings mit []
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
26.842 Beiträge
 
Delphi 10.3 Rio
 
#8

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

  Alt 12. Aug 2012, 16:21
Du hast natürlich Recht, das kommt davon, wenn man direkt im Editor tippt. Vielleicht wäre das so aber lesbarer:
Delphi-Quellcode:
const
  CORRECTIONVALUE: array[Boolean] of integer = (0, 1);
  POSSIBLYWRONGMONTHS = [MonthJanuary, MonthFebruary];
...
  schaltjahrkorrektur := CORRECTIONVALUE[(monat in POSSIBLYWRONGMONTHS) and IsLeapYear(jahr)];
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
 
#9

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

  Alt 12. Aug 2012, 16:34
Hmm, sollte Result:= ((Month in [1,2]) and IsLeapYear(Year)) nicht ausreichen?

Edit: also mein Delphi führt folgendes korrekt aus
Delphi-Quellcode:
function schaltjahrkorrektur(Month, Year: Integer): Boolean;
begin
  Result:= ((Month in [1,2]) and IsLeapYear(Year));
end;
Mario
'Lesen Sie schnell, denn nichts ist beständiger als der Wandel im Internet!'

Geändert von Hobby-Programmierer (12. Aug 2012 um 16:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
26.842 Beiträge
 
Delphi 10.3 Rio
 
#10

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

  Alt 12. Aug 2012, 16: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
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 07:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf