![]() |
Problem beim berechnen von vergangenen Tagen
Hallo allerseits!
In der Schule schreiben wir zur Zeit ein Programm mit Delphi, dass uns den Wochentag eines eigegebenen Datums nennt, vornehmlich soll es dazu dienen, den Wochentag des eigenen Geburtstages zu erfahren/errechnen. Dazu haben wir eine Funktion geschrieben, die uns die Anzahl der bisher vergangenen Tage des eingegebenen Jahres errechnet. Heute habe ich aber gemerkt, dass sich das Programm verrechnet und ich daher einen Fehler im Quellcode haben muss. z.B. wenn man den 30.12. eingibt werden 368(369 im Schaltjahr) vergangene Tage angezeigt, wobei es nur 364 bzw. 365 im Schaltjahr sind.
Delphi-Quellcode:
Das ist der Quellcode. Könnte mir einer von euch helfen, den Fehler zu finden?
function TKalender.CalcDays (pTag:integer; pMonat:integer; pSchalt:boolean) : integer;
var I,Days :integer; begin Days := 0; for I := 1 to pMonat - 1 do begin if I=2 then if pSchalt then Days := Days + 29 else Days := Days + 28 else if (I=4 or 6 or 9 or 11) then Days := Days + 30 else Days := Days + 31; end; Days := Days + pTag; result := Days; end; |
AW: Problem beim berechnen von vergangenen Tagen
Delphi-Quellcode:
und bau ab und zu mal eine begin .. end ein
// falsch: else if (I=4 or 6 or 9 or 11) then
// richtig: else if ((I=4) or (I=6) or (i=9) or (i=11)) then // besser else if i in [4,6,9,11] then
Delphi-Quellcode:
if I=2 then
begin if pSchalt then Days := Days + 29 else Days := Days + 28 end |
AW: Problem beim berechnen von vergangenen Tagen
Danke für die schnelle Antwort !
Das mit dem begin und end war ne Anweisung des Lehrers, er wollte, dass der Code mal kürzer wird als sonst ^^ Und Danke für die Berichtigung !:thumb: |
AW: Problem beim berechnen von vergangenen Tagen
Zitat:
Delphi-Quellcode:
Abgesehen davon finde ich die Formatierung des OP auch so übersichtlich.
if I=2 then
begin if pSchalt then Days := Days + 29 else Days := Days + 28; end; |
AW: Problem beim berechnen von vergangenen Tagen
Schreibe dir eine Funktion, die die Anzahl der Tage für einen bestimmten Monat liefert:
Delphi-Quellcode:
Danach ist deine Funktion CalcDays viel einfacher und klarer zu lesen.
function TageProMonat(pMonat:integer; pSchalt:boolean):integer;
begin // deine Lösung hier end; Diese Funktion gibt es mehr oder weniger in der Unit SysUtils. Aber erst kucken, wenn du die Funktion selbst hingekriegt hast! :warn: Du (und vielleicht auch manche Mitleser) wirst überrascht sein, wie elegant und schnell Borland das umgesetzt hat. Tip: es ist nicht wirklich eine Funktion... |
AW: Problem beim berechnen von vergangenen Tagen
Die Einrückung geht eigentlich noch.
- es ist wenigstens Eine vorhanden (besser als völliges Chaos) - und sie scheint (soviel man sieht) halbwegs konsequent zu sein Und nochmal zur Erklärung: OR hat Vorrang vor = Im Endefekt sieht es also so
Delphi-Quellcode:
aus, welchen dann
(I = (4 or 6 or 9 or 11))
Delphi-Quellcode:
ergibt und so die Fehlberechnung erklärt.
(I = 15)
PS: Dieser Fehler wäre aber auch beim Debuggen sofort aufgefallen, wenn man gesehn hätte, wie der
Delphi-Quellcode:
-Zweig nie verwendet würde.
Days := Days + 30
> Haltepunkt in Zeile
Delphi-Quellcode:
(z.B. mit F5)
Days := 0;
> und dann über F7 Befehl für Befehl durchsteppen > dabei eventuell noch
Delphi-Quellcode:
und
I
Delphi-Quellcode:
in den "Überwachten Ausdrücken" (Strg+Alt+W) kann auch nicht schaden
Days
PSS: Statt der "vielen" IFs würde sich auch ein CASE eignen und ich persönlich würde das FOR und die IFs durch eine Array-Konstante ersetzen. Aber das lernt ihr eventuell noch irgendwann. PS³: Dieser Sprachmischmasch (englisch/deutsch) ist auch eher unschön. Es macht sich gut, wenn man sich für eine Sprache entscheidet. |
AW: Problem beim berechnen von vergangenen Tagen
Guten Morgen!
Danke auch noch an alle anderen Antworten, das mit der Übersichtlichkeit werd ich nochmal verbesern ^^ Natürlich machen wir das ganze auch noch mit Arrays, aber vor den Ferien haben wir das nicht mehr geschafft und richtig gelernt haben wir das auch nicht. Unser Lehrer hat aber von Anfang an gesagt, dass er das eigentlich mit Arrays machen will ^^ |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:36 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-2025 by Thomas Breitkreuz