Autor Beitrag
Judil
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 32



BeitragVerfasst: Do 23.03.06 22:20 
Hab ein Problem und zwar hab ich ein Quelltext von unseren Lehrer versteh auch alles, nur an einer Stelle ist ein Fehler. Versteh das nicht da steht "Inkompatible Typen: "Boolean" und "Integer" und zwar bei der Function
"function TageImMonat(pMonat, pJahr : integer) : boolean;"

Hier mal der ganze Quelltext, der Fehler befindet sich in den Zeilen 15,17,18,19,20

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
function istSchaltjahr(pJahr : integer) : boolean;
begin
     if pJahr mod 4 <> 0
     then result:=false
     else if pJahr mod 100 <> 0
          then result:= true
          else if pJahr mod 400 = 0
               then result:=true
               else result:=false;
end;

function TageImMonat(pMonat, pJahr : integer) : boolean;
begin
     case pMonat of
     1,3,5,7,8,10,12 : result:=31;
     2               : if istSchaltjahr(pJahr)
                       then result:=29
                       else result:=28;
     4,6,9,11        : result:=30;
     else              result:=0;
end;
end;

function istGueltig(pTag, pMonat, pJahr : integer) : boolean;
begin
  if pJahr < 1582
  then result:=false
  else if (pJahr = 1582and (pMonat < 10)
       then result:=false
       else if (pJahr = 1582and (pMonat = 10and (pTag < 15)
            then result:=false
            else if (pTag < 1and (pMonat < 1)
            then result:=false
            else if (pMonat > 12and (pMonat > TageImMonat(pMonat ,pJahr))
                 then result:=false
                 else result:=true;
end;

function Wochentag(pTag, pMonat, pJahr : integer) : integer;
var JH, j, z : integer;
begin
  if pMonat < 3 then begin
                       pMonat:=pMonat + 12;
                       pJahr :=pJahr - 1;
                     end;
  JH:=pJahr div 100;
  j :=pJahr mod 100;
  z :=(pTag + (pMonat+1) * 26 div 10 + 5*j div 4 - 2*JH - 1mod 7;
            if z < 0 then z:=z + 7;
end;


{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var Jahr : integer;
begin
  Jahr:=StrToInt(EdJahr.text);
    if istSchaltjahr(Jahr)
    then EdErgebnis.text:='Schaltjahr'
    else EdErgebnis.text:='Kein Schaltjahr'
end;


Danke, freue mich über schnelle Hilfe...
Alstar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 827



BeitragVerfasst: Do 23.03.06 22:32 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
function TageImMonat(pMonat, pJahr : integer) : boolean;
begin
     case pMonat of
     1,3,5,7,8,10,12 : result:=31;
     2               : if istSchaltjahr(pJahr)
                       then result:=29
                       else result:=28;
     4,6,9,11        : result:=30;
     else              result:=0;
end;


Bei einer Funktion, deren Rückgabewert ein Boolean-Typ ist, kannst du keine Zahlen zurückgeben!

Alstar
Judil Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 32



BeitragVerfasst: Do 23.03.06 22:43 
Hab ich mir schon fast gedacht, unser Lehrer hat das schnell geschrieben, der ist sowieso ein Freak *hehe*
Wenn ich Boolean durch Integer müsste es ja klappen, probier es gleich mal...

Nachher kommen noch 2 Fragen, wegen neuen Function...
1. Wie kann ich das machen 3 Editfenster >Tag< >Monat< >Jahr< und jetzt soll der den nächsten Tag angeben,
mit berücksichtigung von Schaltjahr und allen, dh wenn 31.12.2001 dann soll der 1.1.2002 ausgeben

2. Die zweite Function sollte sein, dass man 6 Editfenster hat 2 mal jeweils >Tag< >Monat< >Jahr<
dann soll die x Tage unterschied ausgeben, also in Tagen (muss nicht mit Tage, Monat,Jahr sein)

Wenn einer Lust hat mir zuhelfen, wär ich sehr Dankbar...


Also immer her mit der Hilfe... :lol:

-----------------------------------------------------------------------------------------------------------
EDIT:
Hier nochmal mein vervollständigter Quelltext, hier kalppt gar nichts mehr
Könnt es ja mal selber testen Ihr braucht 3 Button und 4 Editfenster (mit den Namen "EdTag" , "EdMonat" ,
"EdJahr" , "EdErgebnis")

Danke brauch schnelle Hilfe...

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
implementation

function istSchaltjahr(pJahr : integer) : boolean;
begin
     if pJahr mod 4 <> 0
     then result:=false
     else if pJahr mod 100 <> 0
          then result:= true
          else if pJahr mod 400 = 0
               then result:=true
               else result:=false;
end;

function TageImMonat(pMonat, pJahr : integer) : integer;
begin
     case pMonat of
     1,3,5,7,8,10,12 : result:=31;
     2               : if istSchaltjahr(pJahr)
                       then result:=29
                       else result:=28;
     4,6,9,11        : result:=30;
     else              result:=0;
end;
end;

function istGueltig(pTag, pMonat, pJahr : integer) : boolean;
begin
  if pJahr < 1582
  then result:=false
  else if (pJahr = 1582and (pMonat < 10)
       then result:=false
       else if (pJahr = 1582and (pMonat = 10and (pTag < 15)
            then result:=false
            else if (pTag < 1and (pMonat < 1)
            then result:=false
            else if (pMonat > 12and (pMonat > TageImMonat(pMonat ,pJahr))
                 then result:=false
                 else result:=true;
end;

function Wochentag(pTag, pMonat, pJahr : integer) : integer;
var JH, j, z : integer;
begin
  if pMonat < 3 then begin
                       pMonat:=pMonat + 12;
                       pJahr :=pJahr - 1;
                     end;
  JH:=pJahr div 100;
  j :=pJahr mod 100;
  z :=(pTag + (pMonat+1) * 26 div 10 + 5*j div 4 - 2*JH - 1mod 7;
            if z < 0 then z:=z + 7;
end;


{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var Jahr : integer;
begin
  Jahr:=StrToInt(EdJahr.text);
    if istSchaltjahr(Jahr)
    then EdErgebnis.text:='Schaltjahr'
    else EdErgebnis.text:='Kein Schaltjahr'
end;

procedure TForm1.Button2Click(Sender: TObject);
var Jahr, Monat : integer;
begin
 Jahr :=StrToInt(EdJahr,text);
 Monat:=StrToInt(EdMonat,text);
 EdErgebnis.text:=IntToStr(TageImMonat(Monat, Jahr));
end;

procedure TForm1.Button3Click(Sender: TObject);
var Tag, Monat, Jahr : integer;
begin
Tag  :=StrToInt(EdTag.text);
Monat:=StrToInt(EdMonat.text);
Jahr :=StrToInt(EdJahr.text);
  if istGueltig(Tag, Monat, Jahr)
  then EdErgebnis.text:='Gültig'
  else EdErgebnis.text:='Ungültig'
end;