Да се създаде модул за работа с дати, който съдържа следните функции:
- четене на дата от клавиатурата
- извеждане на дата на екрана в различен формат (например 31.10.2013, 10/31/2013)
- проверка дали две дати съвпадат
- проверка коя е по-късната от две дати
- преминаване към следваща година
- преминаване към следващ месец
- преминаване към следващ ден
- извеждане на сезона за дадена дата
- ** прибавяне на определен брой дни към дата
Напишете програма, която демонстрира този модул.


Ето началото на модула:
unit dati; interface //четене на дата от клавиатурата procedure ChetiData(out D, M, G: integer); //извеждане на дата на екрана procedure PechatData(D, M, G: integer); //проверка дали две дати съвпадат function SravniDati(d1, m1, g1, d2, m2, g2: integer): boolean; //проверка коя е по-късната от две дати function PoGoliamaData(d1, m1, g1, d2, m2, g2: integer): integer; implementation procedure ChetiData(out D, M, G: integer); begin Write('Den: '); ReadLn(D); Write('Mesec: '); ReadLn(M); Write('Godina: '); ReadLn(G); end; procedure PechatData(D, M, G: integer); begin Write(D, '.', M, '.', G); end; function SravniDati(d1, m1, g1, d2, m2, g2: integer): boolean; begin Result:= (d1=d2) and (m1=m2) and (g1=g2); end; function PoGoliamaData(d1, m1, g1, d2, m2, g2: integer): integer; begin // да се довърши: да връща 1 ако първата дата е по-голяма, // 2 ако втората е по-голяма или 0 ако двете дати са равни end; end.Ето и главната програма, която го ползва:
program project1; uses dati; var d1, m1, g1, d2, m2, g2: integer; begin WriteLn('Vavedete parvata data:'); ChetiData(d1, m1, g1); WriteLn('Parvata data e'); PechatData(d1, m1, g1); WriteLn('Vavedete vtorata data:'); ChetiData(d2, m2, g2); if SravniDati(d1, m1, g1, d2, m2, g2) then WriteLn('Parvata data e ravna na vtorata'); ReadLn; end.Без последната подточка.
Програмата.
program project1; uses unit1; var d1, m1, g1, d2, m2, g2: integer; begin WriteLn('Vavedete parvata data:'); ChetiData(d1, m1, g1); WriteLn('Parvata data e'); PechatData(d1, m1, g1); WriteLn('Vavedete vtorata data:'); ChetiData(d2, m2, g2); if SravniDati(d1, m1, g1, d2, m2, g2) then WriteLn('Parvata data e ravna na vtorata'); PoGoliamaData(d1, m1, g1, d2, m2, g2); Writeln; Godinapokusno(d1, m1, g1, d2, m2, g2); Mesecpokusno(d1, m1, g1, d2, m2, g2); Denpokusno(d1, m1, g1, d2, m2, g2); Sezoni1(d1, m1, g1, d2, m2, g2); Sezoni2(d1, m1, g1, d2, m2, g2); ReadLn; end.И модула
unit unit1; interface //четене на дата от клавиатурата procedure ChetiData(out D, M, G: integer); //извеждане на дата на екрана procedure PechatData(D, M, G: integer); //проверка дали две дати съвпадат function SravniDati(d1, m1, g1, d2, m2, g2: integer): boolean; //проверка коя е по-късната от две дати function PoGoliamaData(d1, m1, g1, d2, m2, g2: integer): integer; Procedure Godinapokusno(d1, m1, g1, d2, m2, g2: integer); Procedure Mesecpokusno(d1, m1, g1, d2, m2, g2: integer); Procedure Denpokusno(d1, m1, g1, d2, m2, g2: integer); Procedure Sezoni1(d1, m1, g1, d2, m2, g2: integer); Procedure Sezoni2(d1, m1, g1, d2, m2, g2: integer); implementation procedure ChetiData(out D, M, G: integer); begin Write('Den: '); ReadLn(D); Write('Mesec: '); ReadLn(M); Write('Godina: '); ReadLn(G); end; procedure PechatData(D, M, G: integer); begin Write(D, '.', M, '.', G); end; function SravniDati(d1, m1, g1, d2, m2, g2: integer): boolean; begin Result:= (d1=d2) and (m1=m2) and (g1=g2); end; function PoGoliamaData(d1, m1, g1, d2, m2, g2: integer): integer; begin // да се довърши: да връща 1 ако първата дата е по-голяма, // 2 ако втората е по-голяма или 0 ако двете дати са равни If g1<g2 then Write('Po-golqmata data e ',d2,'.',m2,'.',g2) else If g1>g2 then Write('Po-golqmata data e ',d1,'.',m1,'.',g1) else If m1<m2 then Write('Po-golqmata data e ',d2,'.',m2,'.',g2) else If m1>m2 then Write ('Po-golqmata data e ',d1,'.',m1,'.',g1) else If m1<m2 then Write('Po-golqmata data e ',d2,'.',m2,'.',g2) else If d1>d2 then Write('Po-golqmata data e ',d1,'.',m1,'.',g1) else If d1<d2 then Write('Po-golqmata data e ',d2,'.',m2,'.',g2) end; procedure Godinapokusno(d1, m1, g1, d2, m2, g2: integer); begin g1:= g1+1; g2:= g2+1; WriteLn('Godinata na purwata data e veche ',g1); WriteLn('Godinata na wtorata data e veche ',g2); end; procedure Mesecpokusno(d1, m1, g1, d2, m2, g2: integer); Const Maxm = 12; begin m1:= m1+1; m2:= m2+1; If m1 > Maxm then Writeln ('error') else If m2 > maxm then Writeln('error') else If m2 <= maxm then WriteLn('Meseca na purwata data e veche ',m1) else If m2 <= maxm then WriteLn('Meseca na wtorata data e veche ',m2) end; procedure Denpokusno(d1, m1, g1, d2, m2, g2: integer); Const Maxd = 31; begin d1:= g1+1; d2:= g2+1; If d1 > Maxd then Write ('error') else If d2 > maxd then Write('error'); WriteLn('Denq na purwata data e veche ',d1); WriteLn('Denq na wtorata data e veche ',d2); end; procedure Sezoni1(d1, m1, g1, d2, m2, g2: integer); begin m1:=m1+1; Case (m1) of 12,1,2:Writeln('Sezona e Zima'); 3,4,5:Writeln('Sezona e Prolet'); 6,7,8:Writeln('Sezona e Lqto'); 9,10,11:Writeln('Sezona e Esen'); else Writeln('Nevaliden mesec'); end; end; procedure Sezoni2(d1, m1, g1, d2, m2, g2: integer); begin m2:= m2+1; Case (m2) of 12,1,2:Writeln('Sezona e Zima'); 3,4,5:Writeln('Sezona e Prolet'); 6,7,8:Writeln('Sezona e Lqto'); 9,10,11:Writeln('Sezona e Esen'); else Writeln('Nevaliden mesec') end; end; end.Ехааа, Любо, колко дълга програма и модул! И как добре си се справил с изследването на вариантите за по-голяма дата. Но повторенията в кода трябва да ти дават знак, че функциите не са съвсем ефективни. Обади ми се да го обсъдим…