Announcement

Collapse
No announcement yet.

Fehler...

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Fehler...

    finde den fehler leider nicht
    bitte helt mir

    procedure TForm1.Button_BerechneClick(Sender: TObject);
    var Tag1, tag2, monat1, monat2, jahr1, jahr2:integer; alter:real;
    begin
    Tag1:=strtoint(Edit_tag1.text);
    Tag2:=strtoint(Edit_Tag2.text);
    Monat1:=strtoint(Edit_Monat1.text);
    Monat2:=strtoint(Edit_Monat2.text);
    Jahr1:=strtoint(Edit_Jahr1.text);
    Jahr2:=strtoint(Edit_Jahr2.text);
    if tag1>tag2 and if monat1>monat2
    then alter:=Jahr2-jahr1
    else
    if Tag1<Tag2 and if monat1>monat2
    then Alter:=Jahr2-jahr1
    else
    if tag1<tag2 and if monat1<monat2
    then Alter:=Jahr2-jahr1-1
    else
    if Tag1>tag2 and if monat1<monat2
    then Alter:=Jahr2-Jahr1-1


    Edit_Ausgabe.text:=floattostr(Alter)


    end;

    mir wird bei Edit_Ausgabe... dass der operator nicht auf den operandentyp anwendbar ist

  • #2
    Hallo,

    Dein Problem liegt in der if-Anweisung: nimmt man mehrere Bedingungen gekoppelt mit and, so kommt nach dem end kein if mehr. Die Bedingungen müssen geklammert werden. Also ungefähr so:

    procedure TForm1.Button2Click(Sender: TObject);
    var Tag1,tag2,monat1,monat2,jahr1,jahr2 : Integer;
    Alter : Integer;
    begin
    Alter:=0;
    Tag1:=strtoint(Edit_tag1.text);
    Tag2:=strtoint(Edit_Tag2.text);
    Monat1:=strtoint(Edit_Monat1.text);
    Monat2:=strtoint(Edit_Monat2.text);
    Jahr1:=strtoint(Edit_Jahr1.text);
    Jahr2:=strtoint(Edit_Jahr2.text);
    if (tag1>tag2) and (monat1>monat2) then
    alter:=Jahr2-jahr1-1
    else if (Tag1<Tag2) and (monat1>monat2) then
    Alter:=Jahr2-jahr1
    else if (tag1<tag2) and (monat1<monat2) then
    Alter:=Jahr2-jahr1
    else if (Tag1>tag2) and (monat1<monat2) then
    Alter:=Jahr2-Jahr1;
    Edit_Ausgabe.Text:=IntToStr(Alter);
    end;

    Allerdings würde ich zur Eingabe 2 DateTimePicker (Toolpalette Win32) nehmen. Dann brauchst Du keine Fehleingaben abfangen. Die Anzahl Tage zwischen den zwei Daten bekommst Du mit DaySpan aus der Unit DateUtils.
    Das Ganze sähe bei mir so aus:

    procedure TForm1.Button1Click(Sender: TObject);
    var Datum1,Datum2 : TDateTime;
    span : Integer;
    begin
    Datum1:=DateTimePicker1.Date;
    Datum2:=DateTimePicker2.Date;
    Span:=trunc(DaySpan(Datum1,Datum2));
    Edit_Ausgabe.text:=IntToStr(Span);
    Edit_jahr.Text:=IntToStr(trunc(Span/365));
    end;

    Viele Grüße

    Roland

    Comment


    • #3
      erstmal danke
      werde das mal testen

      Comment


      • #4
        Der Quelltext sollte ein wenig gegliedert sein, dann sieht man eher, was da läuft. Das Original könnte dann z.B. so aussehen:

        procedure TForm1.Button_BerechneClick(Sender: TObject);
        var
        Tag1, Tag2, Monat1, Monat2, Jahr1, Jahr2 : Integer;
        Alter : Real;
        begin
        Tag1 := StrToInt(Edit_Tag1.Text);
        Tag2 := StrToInt(Edit_Tag2.Text);
        Monat1 := StrToInt(Edit_Monat1.Text);
        Monat2 := StrToInt(Edit_Monat2.Text);
        Jahr1 := StrToInt(Edit_Jahr1.Text);
        Jahr2 := StrToInt(Edit_Jahr2.Text);
        if (Tag1 > Tag2) and (Monat1 > Monat2)
        then Alter := Jahr2 - Jahr1
        else if (Tag1 < Tag2) and (Monat1 > Monat2)
        then Alter := Jahr2 - Jahr1
        else if (Tag1 < Tag2) and (Monat1 < Monat2)
        then Alter := Jahr2 - Jahr1 - 1
        else if (Tag1 > Tag2) and (Monat1 < Monat2)
        then Alter := Jahr2 - Jahr1 - 1;
        Edit_Ausgabe.Text := FloatToStr(Alter);
        end;

        Das Ergebnis ist sicher ubefriedigend, aber der Quelltext ist lesbar.

        Comment


        • #5
          Da ich Neuling bin, wusste ich nicht, dass hier der Text bei der Einspielung EXTREM verhunzt wird - Sorry, aber das was da jetzt steht ist nicht der Sinn meiner Einspielung!!!!!

          Comment

          Working...
          X