Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Nächsten Tag berechnen! (https://www.delphipraxis.net/105173-naechsten-tag-berechnen.html)

Nobody0101 17. Dez 2007 14:56


Nächsten Tag berechnen!
 
Hallo.
Ich hab grad ein problem und zwar kriege ich das nicht mit dem Schaltjahr hin.
Wenn mir da jemand helfen könnte wäre super.
Alles andere Funktioniert, aber das mit dem Schaltjahr hakt...(is rot markiert)

Hier der Quellcode:
Code:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var Tag,Monat,Jahr,TagM,MonatM,JahrM:real;
begin
  Tag:=strtofloat(Edit1.text);
  Monat:=strtofloat(Edit2.text);
  Jahr:=strtofloat(Edit3.text);
  if (Monat=4) or (Monat=6) or (Monat=9) or (Monat=11)
  then if Tag=30
       then begin TagM:=1; MonatM:=Monat+1; JahrM:=Jahr; end
       else if (Tag>=1) and (Tag<30)
            then begin TagM:=Tag+1; MonatM:=Monat; JahrM:=Jahr; end
            else if (Tag>30) or (Tag<1)
                 then showmessage ('Unsinn');
  if (Monat=1) or (Monat=3) or (Monat=5) or (Monat=7) or (Monat=8) or (Monat=10)
  then if Tag=31
       then begin TagM:=1; MonatM:=Monat+1; JahrM:=Jahr; end
       else if (Tag>=1) and (Tag<31)
            then begin TagM:=Tag+1; MonatM:=Monat; JahrM:=Jahr; end
            else if (Tag>31) or (Tag<1)
                 then begin TagM:=0; MonatM:=0; JahrM:=0; end;
  if (Monat=12)
  then if Tag=31
       then begin TagM:=1; MonatM:=1; JahrM:=Jahr+1; end
       else if (Tag>=1) and (Tag<=31)
            then begin TagM:=Tag+1; MonatM:=Monat; JahrM:=Jahr; end
            else if (Tag>31) or (Tag<1)
                 then showmessage ('Unsinn!');
 [color=#df0000] if (Monat=2) and (IsLeapYear)
       then if Tag=29
            then begin TagM:=1; MonatM:=Monat+1; jahrM:=Jahr; end
            else if (Tag<29) and (Tag>=1)
                 then begin TagM:=Tag+1; MonatM:=Monat; JahrM:=Jahr; end
                 else if (Tag>29) or (Tag<1)
                      then showmessage ('Unsinn!');
       if Monat=2
       then if Tag=28
            then begin TagM:=1; MonatM:=Monat+1; JahrM:=Jahr; end
            else if (tag>=1) and (Tag<28)
                 then begin TagM:=Tag+1; MonatM:=Monat; jahrM:=Jahr; end
                 else if (Tag>29) or (Tag<1)
                      then showmessage ('Unsinn!');[/color][color=#ff001f][/color]
  Edit4.text:=floattostr(TagM);
  Edit5.text:=floattostr(MonatM);
  Edit6.text:=floattostr(JahrM);

end;

end.
[edit=sakura] Brauche schnelle Hilfe bei Delphi -> aus dem Titel entfernt, [b]->[pre]-Tags. Mfg, sakura[/edit]

STS301 17. Dez 2007 15:00

Re: Brauche schnelle Hilfe bei Delphi -> Nächsten Tag ber
 
Willkommen im Forum

was für ein Fehlercode wird angezeigt?

generic 17. Dez 2007 15:08

Re: Brauche schnelle Hilfe bei Delphi -> Nächsten Tag ber
 
benutze bitte die codetags.

Benutze doch die Delphi Funktionen für die Datumprüfung.
Das ist kürzer und du brauchst dein Grips nicht für sowas banales verschwenden.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  d: TDate;
  t,m,y: word;
begin
  try
    d:=EncodeDate(
      strtoint(edt_jahr.text),
      strtoint(edt_monat.text),
      strtoint(edt_tag.text)
    );
    inc(d);
    DecodeDate(d, y,m,t);
    caption:=Format('%d %d %d',[t,m,y]);
  except
    MessageDlg('Unsinn', mtError, [mbOK], 0);
  end;
end;
edit: inc(d) vergessen

Willkommen in der DP

Gollum 17. Dez 2007 15:09

Re: Nächsten Tag berechnen!
 
Hallo,

die Funktion IsLeapYear(Year: Word) erwartet als Parameter das Jahr, für das das Schaltjahr berechnet werden soll.
Siehe Delphi-Hilfe!!

negaH 17. Dez 2007 15:09

Re: Nächsten Tag berechnen!
 
Delphi-Quellcode:
var
  Tag,Monat,Jahe: Word;
  Datum: TDateTime;
begin
  Tag := StrToInt(Edit1.Text);
  Monat := StrToInt(Edit2.Text);
  Jahr := StrToInt(Edit3.Text);

  Datum := EncodeDate(Jahr, Monat, Tag); // umwandeln in TDateTime
  Datum := Datum +1;                     // +1 Tag drauf addieren
  DecodeDate(Datum, Jahr, Monat, Tag);   // wieder zerlegen in Jahr, Monat, Tag

  Edit1.Text := IntToStr(Tag);
  Edit2.Text := IntToStr(Monat);
  Edit3.Text := IntToStr(Jahr);
end;
Gruß Hagen

angos 17. Dez 2007 15:11

Re: Nächsten Tag berechnen!
 
Hi,

die Ideen von den Vorpostern sind definitiv zu bevorzugen, da diese übersichtlicher sind, aber damit du weisst was bei deinem Code noch gefehlt hat:

Delphi-Quellcode:
  // Februar im Schaltjahr
  if (Monat = 2) and (IsLeapYear) then
  begin //  hier gehört noch ein begin hin
    if Tag = 29 then
    begin
      TagM := 1;
      MonatM := Monat + 1;
      jahrM := Jahr;
    end
    else if (Tag < 29) and (Tag >= 1) then
    begin
      TagM := Tag + 1;
      MonatM := Monat;
      JahrM := Jahr;
    end
    else // Das kannste dir sparen ;) -> if (Tag > 29) or (Tag < 1) then
      showmessage('Unsinn!');
  end //  hier gehört noch ein end hin

  // Februar ohne Schaltjahr
  else if Monat = 2 then
  begin // auch hier ein begin
    if Tag = 28 then
    begin
      TagM := 1;
      MonatM := Monat + 1;
      JahrM := Jahr;
    end
    else if (tag >= 1) and (Tag < 28) then
    begin
      TagM := Tag + 1;
      MonatM := Monat;
      jahrM := Jahr;
    end
    else
      showmessage('Unsinn!');
  end; // und das end nicht vergessen
end;

Gruß
Ansgar

Nobody0101 17. Dez 2007 17:30

Re: Nächsten Tag berechnen!
 
Danke, danke ihr wart ne große Hilfe, und dann auch noch so schnell o.O
wow! :cyclops:

das einzige was er mir sagt was falsch ist ist jetz noch das hier (mit pfeilen markiert):
Delphi-Quellcode:
 if (Monat=2) and >>>(IsLeapYear)<<<
       then begin if Tag=29
            then begin TagM:=1; MonatM:=Monat+1; jahrM:=Jahr; end
            else if (Tag<29) and (Tag>=1)
                 then begin TagM:=Tag+1; MonatM:=Monat; JahrM:=Jahr; end
                 end
Dazu sagt er, dass es nicht genügend wirkliche Parameter habe.
Ich kann damit nicht wirklich was anfangen... habe ich einen falschen Variablenwert genommen? also sollte ich integer anstatt real nehmen...?

oder sollte ich das mit Jahr mod 4=0 ersetzen?
obwohl wenn ich das mache, geht das bei mir auch nicht... dann steht da nämlich: operator ist auf diesen operandentyp nicht anwendbar.

DeddyH 17. Dez 2007 17:34

Re: Nächsten Tag berechnen!
 
Delphi-Quellcode:
IsLeapYear(Jahr)
Du musst das Jahr schon angeben, wurde aber auch bereits erwähnt.

Progman 17. Dez 2007 17:36

Re: Nächsten Tag berechnen!
 
IsLeapYear ist eine function und benötigt als Parameter das Jahr (if IsLeapYear(1999) then...)

Nobody0101 17. Dez 2007 18:38

Re: Nächsten Tag berechnen!
 
achso, hab ich wohl überlesen.. danke nochmal! :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:43 Uhr.
Seite 1 von 2  1 2      

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