Модул за работа с дати

Да се създаде модул за работа с дати, който съдържа следните функции:

  1. четене на дата от клавиатурата
  2. извеждане на дата на екрана в различен формат (например 31.10.2013, 10/31/2013)
  3. проверка дали две дати съвпадат
  4. проверка коя е по-късната от две дати
  5. преминаване към следваща година
  6. преминаване към следващ месец
  7. преминаване към следващ ден
  8. извеждане на сезона за дадена дата
  9. ** прибавяне на определен брой дни към дата

Напишете програма, която демонстрира този модул.

Публикувано в 10a с етикети . Постоянна връзка.

3 Responses to Модул за работа с дати

  1. Данаил каза:

    Ето началото на модула:

    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.
  2. procsy каза:

    Без последната подточка.
    Програмата.

      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.           
    • Данаил каза:

      Ехааа, Любо, колко дълга програма и модул! И как добре си се справил с изследването на вариантите за по-голяма дата. Но повторенията в кода трябва да ти дават знак, че функциите не са съвсем ефективни. Обади ми се да го обсъдим…

Вашият коментар