Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Programm mit vielen "Function" geht nicht... Hilfe!!!


Judil - Do 23.03.06 22:20
Titel: Programm mit vielen "Function" geht nicht... Hilfe!!!
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


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 - Do 23.03.06 22:32


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 - 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...


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;