Wątek przeniesiony 2015-12-09 02:53 z Delphi i Pascal przez furious programming.

Wyszukiwanie daty z przedziału - pętle while

0

Mam problem :( Chcę napisać prosty programik, który znajdzie datę(D.M.R) z przedziału PD.PM.PR -> DD.DM.DR. Napisałem coś takiego i jednak chyba dla mnie nie jest taki "prosty" :( Będę wdzięczny za pomoc

PS. Na początek założyłem, że PR i DR są równe

program znajdz_date ;

var PD,PM,PR,DD,DM,DR,D,M,R:integer;

function Max_liczba_dni(miesiac:byte;rok:integer):byte;
var rok_przest:boolean;
begin
rok_przest:=false;
if((rok mod 4=0)and(rok mod 100<>0))or(rok mod 400=0) then rok_przest:=true;
case miesiac of
1,3,5,7,8,10,12:Max_liczba_dni:=31;
4,6,9,11:       Max_liczba_dni:=30;
2:             if rok_przest then Max_liczba_dni:=29;
                               else Max_liczba_dni:=28;
end;
end;

begin
PD:=1;
PM:=9;
PR:=2015;
DD:=9;
DM:=12;
DR:=2015;
D:=1;
M:=10;
R:=2015;
If (PR=DR) then 
  begin 
  while (PM<DM) or (PM=DM)do
            begin
            while (PD<Max_liczba_dni(PM,PR)) or (PD=Max_liczba_dni(PM,PR)) or ( PD=DD) do 
                     begin
                     PD:=PD+1;
                     if (PD=D) and (PM=M) and (PR=R) then writeln(' znalazl date ! ' );
                     end;
             PM:=PM+1;
             end;
  end;

readln;
end.
0

Sformatuj kod porządnie to ktoś spojrzy, bo teraz na to się nie bardzo da patrzeć. Wyszedł "lekki potworek". Przede wszystkim określanie dni miesiąca najlepiej zrobić 12 elementową stałą tablicową typu Byte. Gdzie dla drugiego elementu liczba dni wynosi 28, a jeśli rok jest przestepny - co stwierdzisz funkcją IsLeapYear to wtedy liczbę dni zwiększasz o jeden.

0

Troszke poprawiłem :)
Zamiast użycia tej funkcji napisalem osobna ktora wyznacza czy jest przestępny czy nie i ustalajacą licbe dni w poszczególnych miesiacach

1

Nieco uprościłem twój program:

var dt:TDateTime;
begin
  dt:=EncodeDate(2015,10,1);
  if (EncodeDate(2015,9,1)<=dt)and(dt<=EncodeDate(2015,12,9)) then WriteLn(' znalazl date !');
  ReadLn;
end.

robi dokładnie to samo.

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