Wątek przeniesiony 2015-12-08 23:17 z Delphi i Pascal przez furious programming.

Funkcja zwracająca liczbę dni w zadanym roku

0

Siemka dopiero zaczynam naukę programowania i nie bardzo mogę ogarnąć funkcji i czy mógł by mi to ktoś poprawić? mi za każdym razem wyświetla 366 domyślam sie że problem leży w błędnym zapisie ale szukając w google i na forum nie mogłem znaleźć rozwiązania.

function dniwroku(rok:integer):integer;
begin
  if (rok div 400 = 0) or (rok div 4 = 0) and (rok mod 100 <> 0) then
    Result:=365
  else
    Result:=366;
end;

var
  rok:integer;
begin
  writeln('podaj rok');
  readln(rok);
  writeln(dniwroku(rok));
  readln;
end.
1

Rozwiązanie już istnieje:

Przy okazji zobacz jak wygląda definicja funkcji IsLeapYear (Free Pascal) i porównaj ją ze swoją:

function IsLeapYear(Year: Word): boolean;
begin
  Result := (Year mod 4 = 0) and ((Year mod 100 <> 0) or (Year mod 400 = 0));
end;
0

Oto funkcja ze źródeł VCL SysUtils z Delphi 7:

function IsLeapYear(Year: Word): Boolean;
begin
  Result := (Year mod 4 = 0) and ((Year mod 100 <> 0) or (Year mod 400 = 0));
end;

Także nie wiem jakiej odpowiedzi oczekujesz. Rok przestępny ma 366 dni, a nie 365. Także warunki powinny być raczej takie jak powyżej.

1
function dniwroku(rok:integer):integer;
begin
  Result:=365+Ord(IsLeapYear(rok));
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1