{"id":635,"date":"2014-12-31T21:43:50","date_gmt":"2014-12-31T20:43:50","guid":{"rendered":"http:\/\/www.valcon.it\/pascal\/?p=635"},"modified":"2015-07-03T13:30:36","modified_gmt":"2015-07-03T11:30:36","slug":"unita-date","status":"publish","type":"post","link":"https:\/\/www.valcon.it\/pascal\/unita-date\/","title":{"rendered":"Unit\u00e0 Date"},"content":{"rendered":"<h3>Analisi<\/h3>\n<p>&#8230;<\/p>\n<h3>Unit\u00e0<\/h3>\n<pre class=\"\">Unit LeDate;\r\n\r\nInterface\r\n\r\nType\r\n\u00a0 \u00a0TData = Record\r\n\u00a0 \u00a0 \u00a0 \u00a0Giorno,\r\n\u00a0 \u00a0 \u00a0 \u00a0Mese,\r\n\u00a0 \u00a0 \u00a0 \u00a0Anno: Integer;\r\n\u00a0 \u00a0End;\r\n\u00a0 \u00a0DataErrore = Byte;                         { 0..1 }\r\n\r\nProcedure DataInit (Var \u00a0D: TData;     G, M, A: Integer; Var E: DataErrore);\r\nProcedure DataSplit( \u00a0 \u00a0 D: TData; Var G, M, A: Integer);\r\nProcedure DataInc \u00a0(Var \u00a0D: TData; P: Integer);\r\nProcedure DataDec \u00a0(Var \u00a0D: TData; P: Integer);\r\n\r\nFunction DateLen \u00a0(D1, D2: TData): LongInt;\r\nFunction DateComp (D1, D2: TData): ShortInt; { -1..1 }\r\nFunction DataDay \u00a0( \u00a0 \u00a0 D: TDATA): Byte;     {  0..6 }\r\n\r\nImplementation\r\n\r\nUses  Crt;\r\nConst MaxGiorni: array[1..12, FALSE..TRUE] of Byte = (\r\n\u00a0 \u00a0 \u00a0    (31, 31), (28, 29), (31, 31), (30, 30), (31, 31), (30, 30),\r\n\u00a0 \u00a0 \u00a0    (31, 31), (31, 31), (30, 30), (31, 31), (30, 30), (31, 31));\r\n\r\nFunction AnnoBisestile(Anno: Integer): Boolean;\r\nBegin\r\n\u00a0 \u00a0AnnoBisestile:=(Anno Mod 4 = 0) And (Anno Mod 100 <> 0) Or (Anno Mod 400 = 0);\r\nEnd;\r\n\r\nFunction DataLegale(D: TData): Boolean;\r\nVar\r\n\u00a0 \u00a0G, M, A: Integer;\r\nBegin\r\n\u00a0 \u00a0DataSplit(D, G, M, A);\r\n\u00a0 \u00a0DataLegale:=(M >= 1) And (M <= 12) And (G >=1) And (G <= MaxGiorni[M, AnnoBisestile(A)]);\r\nRnd;\r\n\r\nProcedure DataInit(var D: TData; G, M, A: Integer; var E: Byte);\r\nVar\r\n\u00a0 \u00a0TempData: TDATA;\r\nBegin\r\n\u00a0 \u00a0TempData.Giorno:=G;\r\n\u00a0 \u00a0TempData.Mese:=M;\r\n\u00a0 \u00a0TempData.Anno:=A;\r\n\u00a0 \u00a0If(DataLegale(TempData)) Then\r\n\u00a0 \u00a0 \u00a0 Begin\r\n\u00a0 \u00a0 \u00a0  \u00a0 E:=0;\r\n\u00a0 \u00a0 \u00a0 \u00a0  D:=TempData;\r\n\u00a0 \u00a0 \u00a0 End\r\n\u00a0  Else\r\n\u00a0 \u00a0  \u00a0Begin\r\n\u00a0 \u00a0 \u00a0 \u00a0  E:=1;\r\n\u00a0 \u00a0 \u00a0 End;\r\nEnd;\r\n\r\nProcedure DataSplit(D: TData; var G, M, A: Integer);\r\nBegin\r\n\u00a0 \u00a0G:=D.Giorno;\r\n\u00a0 \u00a0M:=D.Mese;\r\n\u00a0 \u00a0A:=D.Anno;\r\nEnd;\r\n\r\nProcedure DataInc1(var D: TData);\r\nVar\r\n\u00a0 \u00a0G, M, A: Integer;\r\n\u00a0 \u00a0E: DataErrore;\r\nBegin\r\n\u00a0 \u00a0DataSplit(D, G, M, A);\r\n\u00a0 \u00a0Inc(G);\r\n\u00a0 \u00a0If(G > MaxGiorni[M, AnnoBisestile(A)]) Then\r\n\u00a0 \u00a0 \u00a0 Begin\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0G:=1;\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0Inc(M);\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0If(M = 13) Then\r\n\u00a0 \u00a0 \u00a0 \u00a0  \u00a0 \u00a0Eegin\r\n\u00a0 \u00a0 \u00a0 \u00a0    \u00a0 \u00a0 M:=1;\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0  \u00a0 \u00a0 Inc(A);\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 End;\r\n\u00a0 \u00a0 \u00a0 End;\r\n\u00a0 \u00a0DataInit(D, G, M, A, E);\r\nEnd;\r\n\r\nProcedure DataDec1(var D: TData);\r\nVar\r\n\u00a0 \u00a0G, M, A: Integer;\r\n\u00a0 \u00a0E: DataErrore;\r\nBegin\r\n\u00a0 \u00a0DataSplit(D, G, M, A);\r\n\u00a0 \u00a0Dec(G);\r\n\u00a0 \u00a0If(G = 0) Then\r\n\u00a0 \u00a0 \u00a0 Begin\r\n\u00a0 \u00a0 \u00a0 \u00a0  Dec(M);\r\n\u00a0 \u00a0 \u00a0 \u00a0  If(M = 0) Then\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Begin\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  G:=31;\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  M:=12;\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  Dec(A);\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 End\r\n\u00a0 \u00a0 \u00a0 \u00a0  Else\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0  \u00a0G:=MaxGiorni[M, AnnoBisestile(A)];\r\n\u00a0 \u00a0 \u00a0 End;\r\n\u00a0 \u00a0DataInit(D, G, M, A, E);\r\nEnd;\r\n\r\nProcedure DataInc(var D: TData; P: Integer);\r\nVar\r\n\u00a0 \u00a0I: Integer;\r\nBegin\r\n\u00a0 \u00a0For I:=1 To P Do\r\n\u00a0 \u00a0 \u00a0 DataInc1(D);\r\nEnd;\r\n\r\nProcedure DataDec(var D: TData; P: Integer);\r\nVar\r\n\u00a0 \u00a0I: Integer;\r\nBegin\r\n\u00a0 \u00a0For I:=1 To P Do\r\n\u00a0 \u00a0 \u00a0 DataDec1(D);\r\nEnd;\r\n\r\nFunction DateLen(D1, D2: TData): LongInt;\r\nVar\r\n\u00a0 \u00a0R: LongInt;\r\nBegin\r\n\u00a0 \u00a0R:=0;\r\n\u00a0 \u00a0Case DateComp(D1, D2) Of\r\n\u00a0 \u00a0 \u00a0 -1: Repeat\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 DataInc1(D1);\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Inc(R);\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Until(DateComp(D1, D2) = 0);\r\n\u00a0 \u00a0 \u00a0 \u00a00: ;\r\n\u00a0 \u00a0 \u00a0 \u00a01: Repeat\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0DataDec1(D1);\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Dec(R);\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Until(DateComp(D1, D2) = 0);\r\n\u00a0 \u00a0End;\r\n\u00a0 \u00a0DateLen:=R;\r\nEnd;\r\n\r\nFunction DateComp(D1, D2: TData): ShortInt;\r\nVar\r\n\u00a0 \u00a0G1, M1, A1, G2, M2, A2: Integer;\r\nBegin\r\n\u00a0 \u00a0DataSplit(D1, G1, M1, A1);\r\n\u00a0 \u00a0DataSplit(D2, G2, M2, A2);\r\n\u00a0 \u00a0If(A1 < A2) Or (A1 = A2) And (M1 < M2) Or (A1 = A2) And (M1 = M2) And (G1 < G2) Then\r\n\u00a0 \u00a0 \u00a0 DateComp:=-1\r\n\u00a0 \u00a0Else If (A1 = A2) And (M1 = M2) And (G1 = G2) Then\r\n\u00a0 \u00a0 \u00a0 DateComp:=0\r\n\u00a0 \u00a0Else\r\n\u00a0 \u00a0 \u00a0 DateComp:=+1;\r\nEnd;\r\n\r\n{* il 4\/1\/1998 \u00e8 DOMENICA, quindi... *}\r\nFunction DataDay(D: TData): Byte;\r\nConst\r\n\u00a0 \u00a0DataRif: TData = (giorno: 4; mese: 1; anno: 1998);\r\nVar\r\n\u00a0 \u00a0Len: ShortInt;\r\nBegin\r\n\u00a0 \u00a0Len:=DateLen(DataRif, D) Mod 7;\r\n\u00a0 \u00a0If(Len < 0) Then\r\n\u00a0 \u00a0 \u00a0 Len:=Len+7;\r\n\u00a0 \u00a0DataDay:=Len;\r\nEnd;\r\n\r\nBegin\r\n\u00a0 \u00a0writeln('ADT data. Anno 2003');\r\nEnd.<\/pre>\n<h3>Test<\/h3>\n<pre class=\"\">Program DATE_TEST;\r\n\r\nUses Crt, LEDATE;\r\n\r\nProcedure DataLeggi(var D: TData);\r\nVar\r\n\u00a0 \u00a0G, M, A: Integer;\r\n\u00a0 \u00a0E: DataErrore;\r\nBegin\r\n\u00a0 \u00a0Repeat\r\n\u00a0 \u00a0 \u00a0 Readln(G);\r\n\u00a0 \u00a0 \u00a0 Readln(M);\r\n\u00a0 \u00a0 \u00a0 Readln(A);\r\n\u00a0 \u00a0 \u00a0 DataInit(D, G, M, A, E);\r\n\u00a0 \u00a0Until(E = 0);\r\nEnd;\r\n\r\nProcedure DataScrivi(D: TData);\r\nVar\r\n\u00a0 \u00a0G, M, A: Integer;\r\nBegin\r\n\u00a0 \u00a0DataSplit(D, G, M, A);\r\n\u00a0 \u00a0Write(G, '\/', M, '\/', A);\r\nEnd;\r\n\r\nConst\r\n\u00a0 \u00a0GG: Integer = 1;\r\n\u00a0 \u00a0MM: Integer = 1;\r\n\u00a0 \u00a0AA: Integer = 1990;\r\n\u00a0 \u00a0PP: Integer = 10;\r\n\r\nVar\r\n\u00a0 \u00a0D1, D2: TDATA;\r\n\u00a0 \u00a0EE    : DataErrore;\r\n\u00a0 \u00a0SCELTA: Integer;\r\nBegin\r\n\u00a0 \u00a0DataInit(D1, GG, MM, AA, EE);\r\n\u00a0 \u00a0DataInit(D2, GG, MM, AA, EE);\r\n\u00a0 \u00a0Repeat\r\n\u00a0 \u00a0 \u00a0 ClrScr;\r\n\u00a0 \u00a0 \u00a0 Write  ('D1: ');      DataScrivi(D1); Writeln;\r\n\u00a0 \u00a0 \u00a0 Write  ('D2: ');\u00a0     DataScrivi(D2);\u00a0Writeln;\r\n\u00a0 \u00a0 \u00a0 Writeln('EE: ', EE);                 \u00a0Writeln;\r\n\r\n\u00a0 \u00a0 \u00a0 Writeln('   0: Uscita');\r\n\u00a0 \u00a0 \u00a0 Writeln;\r\n\u00a0 \u00a0 \u00a0 Writeln('1\/11: DataInit(D1\/2, GG, MM, AA)');\r\n\u00a0 \u00a0 \u00a0 Writeln('2\/22: DataLeggi(D1\/2) ');\r\n\u00a0 \u00a0 \u00a0 Writeln('3\/33: DataScrivi(D1\/2) ');\r\n\u00a0 \u00a0 \u00a0 Writeln('4\/44: DataIncrementaPeriodo(D1\/2, PP)');\r\n\u00a0 \u00a0 \u00a0 Writeln('5\/55: DataDecrementaPeriodo(D1\/2, PP)');\r\n\u00a0 \u00a0 \u00a0 Writeln;\r\n\u00a0 \u00a0 \u00a0 Writeln('   6: DateDistanza(D1, D2)');\r\n\u00a0 \u00a0 \u00a0 Writeln('   7: DateConfronta(D1, D2) ');\r\n\u00a0 \u00a0 \u00a0 Writeln('  10: DataDay(D1)');\r\n\u00a0 \u00a0 \u00a0 Writeln;\r\n\u00a0 \u00a0 \u00a0 Writeln('  81: GG=', GG, ' 82: MM=', MM, ' 83: AA=', AA, ' 84: PP=', PP);\r\n\u00a0 \u00a0 \u00a0 Writeln;\r\n\u00a0 \u00a0 \u00a0 Write  ('Scegli ');\r\n\u00a0 \u00a0 \u00a0 Readln(SCELTA);\r\n\r\n\u00a0 \u00a0 \u00a0 Case SCELTA Of\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a01: DataInit(D1, GG, MM, AA, EE); 11: DataInit(D2, GG, MM, AA, EE);\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a02: DataLeggi(D1);      \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 22: DataLeggi(D2);\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a03: DataScrivi(D1);     \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 33: DataScrivi(D2);\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a04: DataInc(D1, PP);    \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 44: DataInc(D2, PP);\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a05: DataDec(D1, PP);    \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 55: DataDec(D2, PP);\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a06: write(DateLen(D1, D2)); \u00a0 \u00a0 \u00a0 \u00a07: write(DateComp(D1, D2));\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 10: Case DataDay(D1) of\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a00:   Write('Domenica');\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a01:   Write('Luned\u00ec');\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a02:   Write('Marted\u00ec');\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a03:   Write('Mercoled\u00ec');\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a04:   Write('Gioved\u00ec');\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a05:   Write('Venerd\u00ec');\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a06:   Write('Sabato');\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Else\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Write('Boh!');\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 End;\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 81: Readln(GG); 82: Radln(MM); 83: Readln(AA); 84: Readln(PP);\r\n\u00a0 \u00a0 \u00a0 End;\r\n\u00a0 \u00a0 \u00a0 Gotoxy(25, 25);\r\n\u00a0 \u00a0 \u00a0 Write('Invio...');\r\n\u00a0 \u00a0 \u00a0 Readln;\r\n\u00a0 \u00a0Until(SCELTA = 0);\r\nEnd.<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Analisi &#8230; Unit\u00e0 Unit LeDate; Interface Type \u00a0 \u00a0TData = Record \u00a0 \u00a0 \u00a0 \u00a0Giorno, \u00a0 \u00a0 \u00a0 \u00a0Mese, \u00a0 \u00a0 \u00a0 \u00a0Anno: Integer; \u00a0 \u00a0End; \u00a0 \u00a0DataErrore = Byte; { 0..1 } Procedure DataInit (Var \u00a0D: TData; G, M, A: Integer; Var E: DataErrore); Procedure DataSplit( \u00a0 \u00a0 D: TData; Var G, M, A: &#8230; <a title=\"Unit\u00e0 Date\" class=\"read-more\" href=\"https:\/\/www.valcon.it\/pascal\/unita-date\/\" aria-label=\"Leggi di pi\u00f9 su Unit\u00e0 Date\">Leggi tutto<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[],"_links":{"self":[{"href":"https:\/\/www.valcon.it\/pascal\/wp-json\/wp\/v2\/posts\/635"}],"collection":[{"href":"https:\/\/www.valcon.it\/pascal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.valcon.it\/pascal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.valcon.it\/pascal\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.valcon.it\/pascal\/wp-json\/wp\/v2\/comments?post=635"}],"version-history":[{"count":3,"href":"https:\/\/www.valcon.it\/pascal\/wp-json\/wp\/v2\/posts\/635\/revisions"}],"predecessor-version":[{"id":638,"href":"https:\/\/www.valcon.it\/pascal\/wp-json\/wp\/v2\/posts\/635\/revisions\/638"}],"wp:attachment":[{"href":"https:\/\/www.valcon.it\/pascal\/wp-json\/wp\/v2\/media?parent=635"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.valcon.it\/pascal\/wp-json\/wp\/v2\/categories?post=635"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.valcon.it\/pascal\/wp-json\/wp\/v2\/tags?post=635"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}