AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Recursive procedure die nicht macht was sie soll
Thema durchsuchen
Ansicht
Themen-Optionen

Recursive procedure die nicht macht was sie soll

Ein Thema von gangs-taas · begonnen am 26. Jan 2010 · letzter Beitrag vom 26. Jan 2010
Antwort Antwort
gangs-taas

Registriert seit: 24. Mär 2009
364 Beiträge
 
#1

Recursive procedure die nicht macht was sie soll

  Alt 26. Jan 2010, 16:34
hey,
ich hab das hier geschrieben :

Delphi-Quellcode:
  procedure Nur_Wichtige_Termine(Datum : TDateTime; var W_T_Array : Array of TStringlist; Var Termine : TStringlist);

    procedure ErsterTagDerWoche(var Datum : TDateTime);
    var
      i : integer ;
    begin
      I := DayOfTheWeek(Datum);
      If i <> 1 Then
      begin
        IncDay(Datum,-1); // <= hier Fehler
        ErsterTagDerWoche(Datum)
      end;
    end;

  begin
    ErsterTagDerWoche(Datum);
  end;
aber ich bekomme einen Stack-Überlauf ...
wenn ich mit Breakpoints da durch Steppe merke ich auch woran es liegt aber ich versteh nicht wieso :
in der Zeile wo er das Datum um eins reduzieren soll macht er das nicht ... aber ich versteh nicht warum nicht ?
der müsste doch eigl. machen was ich ihm da sag oder nicht ?
warum tut er das nicht...

Die Ursache für den Fehler ist, dass i nie 1 wird... aber ich verstehe nicht waurm nicht ...
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: problem mit rocedure

  Alt 26. Jan 2010, 16:41
Das gesamte Problem lässt sich viel einfacher lösen. Ein TDateTime ist ein Float-Wert, und der Vorkommaanteil gibt die Anzahl der Tage seit einem Datum an (welches genau weiss ich grad nicht, ist auch unwichtig hier für).

Also: DateOfFirstDayOfTheWeek := TestDate - DayOfTheWeek(TestDate) + 1;


Edit: Was ist eigentlich eine "rocedure"?
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: problem mit rocedure

  Alt 26. Jan 2010, 16:46
Hallo gangs-taas,

das Problem liegt in der Rekursion selber. Du veränderst einen var Parameter innerhalb einer Rekursion. Eine Rekursion braucht aber immer ihren eigenen kleinen "Arbeitsbereich". Das ganze lässt sich damit so lösen:
Delphi-Quellcode:
    function ErsterTagDerWoche(Datum : TDateTime): TDateTime;
    var
      i : integer ;
    begin
      i := DayOfTheWeek(Datum);
      If i <> 1 Then
      begin
        result := ErsterTagDerWoche(IncDay(Datum,-1));
      end else
      begin // Rekursionsabbruch vergessen :-(
        result := Datum;
      end;
    end;
Der Beitrag von Medium zeigt, wie man eine Rekursion aber auch einfach auflösen kann

Greez, Chris

[Edit]Rekursionsabbruch vergessen [/Edit]
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
gangs-taas

Registriert seit: 24. Mär 2009
364 Beiträge
 
#4

Re: problem mit rocedure

  Alt 26. Jan 2010, 17:03
vielen dank
das mit dem Arbeitsbereich wusste ich nicht

eine rocedure ist eine viel coolere procedure das sieht man daran, dass sie zu cool ist um alle buchstaben zu benutzen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#5

Re: problem mit rocedure

  Alt 26. Jan 2010, 17:06
Das rocedure kannst'e ja im ersten Post noch editieren
und dabei auch gleich einen "aussagekräftigeren" Titel wählen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  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 02:24 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