AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Nächsten Tag berechnen!

Ein Thema von Nobody0101 · begonnen am 17. Dez 2007 · letzter Beitrag vom 18. Dez 2007
Antwort Antwort
Seite 1 von 2  1 2      
Nobody0101

Registriert seit: 17. Dez 2007
4 Beiträge
 
#1

Nächsten Tag berechnen!

  Alt 17. Dez 2007, 14:56
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]
  Mit Zitat antworten Zitat
Benutzerbild von STS301
STS301

Registriert seit: 6. Nov 2007
668 Beiträge
 
Delphi 7 Personal
 
#2

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

  Alt 17. Dez 2007, 15:00
Willkommen im Forum

was für ein Fehlercode wird angezeigt?
Sebastian

ölpölp

Linux will rule the universe!!
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#3

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

  Alt 17. Dez 2007, 15:08
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
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

Re: Nächsten Tag berechnen!

  Alt 17. Dez 2007, 15:09
Hallo,

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

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#5

Re: Nächsten Tag berechnen!

  Alt 17. Dez 2007, 15:09
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
  Mit Zitat antworten Zitat
angos

Registriert seit: 26. Mai 2004
Ort: Rheine
549 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Nächsten Tag berechnen!

  Alt 17. Dez 2007, 15:11
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
Ansgar
  Mit Zitat antworten Zitat
Nobody0101

Registriert seit: 17. Dez 2007
4 Beiträge
 
#7

Re: Nächsten Tag berechnen!

  Alt 17. Dez 2007, 17:30
Danke, danke ihr wart ne große Hilfe, und dann auch noch so schnell o.O
wow!

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

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Nächsten Tag berechnen!

  Alt 17. Dez 2007, 17:34
IsLeapYear(Jahr) Du musst das Jahr schon angeben, wurde aber auch bereits erwähnt.
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
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#9

Re: Nächsten Tag berechnen!

  Alt 17. Dez 2007, 17:36
IsLeapYear ist eine function und benötigt als Parameter das Jahr (if IsLeapYear(1999) then...)
Karl-Heinz
Populanten von Domizilen mit fragiler, transparenter Aussenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
(Wer im Glashaus sitzt sollte nicht mit Steinen werfen)
  Mit Zitat antworten Zitat
Nobody0101

Registriert seit: 17. Dez 2007
4 Beiträge
 
#10

Re: Nächsten Tag berechnen!

  Alt 17. Dez 2007, 18:38
achso, hab ich wohl überlesen.. danke nochmal!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 06:27 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