Newsgroup: it.comp.lang.pascal
Titolo: Giorni fra due date...

Ho trovato questo programma che dice quanti giorni sono passati fra due date
specificate, ma non riesco a capire come funzioni. C'č qualcuno di voi che
potrebbe spiegarmelo nel dettaglio? Grazie.
program giorni;
type data = record
       giorno,mese,anno : integer;
     end;
var
  d : data;
  i,j : integer;
function elabora (da : data) : integer;
begin
  if (da.mese - 3 >= 0) then da.mese := da.mese + 1
  else begin
    da.mese := da.mese + 13;
    da.anno := da.anno - 1;
  end;
  da.giorno := trunc(365.25*da.anno) + trunc(30.6*da.mese) + da.giorno;
  da.giorno := da.giorno - trunc(da.anno/100) + trunc(da.anno/400) - 306 -
122;
  elabora := da.giorno;
end;
begin
  writeln('Data di partenza GG MM AAAA');
  readln(d.giorno,d.mese,d.anno);
  i := elabora(d);
  writeln('Data di arrivo GG MM AAAA');
  readln(d.giorno,d.mese,d.anno);
  j := elabora(d);
  writeln('Tra la prima e la seconda data sono passati ',j-i,' giorno(i)');
end.

 specificate, ma non riesco a capire come funzioni. C'è qualcuno di voi che


 ha scritto nel messaggio
news:ai2vcf$1100eh$1...@ID-94218.news.dfncis.de...


 !!!
eh beh.. dovrà poi gestire tutti i mesi con 31, 30, 28, e in più gli anni
bisestili no?
però di precizzzo nn so.. ne avevo fatta una che faceva la stessa cosa ma è
diversa..
nn zò..
Cereal

>> 306 - 122;
beh 365.25 e' la lunghezza media di un anno, 30.6 quella di un mese.
poi il /100 + /400 credo sia per gli anni bisestili... 306 e 122... boh :-)
In effetti e' una formula strana :-)  funziona sempre ?
--
Dreadnaut
(Life would be easier if I had the source code)

si,funziona sempre, ma non capisco proprio il /100 il /400 e tutti gli altri
numeri di dopo... per caso conosci un algoritmo diverso, ma più facilmente
comprensibile? grazie CIAO
"Dreadnaut" <Drea...@liberoDALLASPAM.it> ha scritto nel messaggio
news:9al19.16910$lu5.4...@twister1.libero.it...



Salve, finalmente mi rifaccio vivo :P Eh si dovreste sopportarmi di più :P
hihihi.
Dunque, indipendentemente dal codice, il problema è stabilire il numero di
giorni intercorsi fra due date.
Io procederei cosi, fisso una data minima A e calcolo il numero di secondi
trascorsi con una data A1 (in pascal c'è la funzione DATETIME o simile);
parimenti faccio lo stesso per la data finale A2.
A questo punto posto. DIFF = A2-A1, sarà che DIFF contiene il numero di
secondi trascorsi fra le due date.
Tenuto conto che in un giorno ci stanno 86400 secondi, basterà fare: DIFF
div 86400 e si ottengono il numero di giorni.
...il gioco è cosi fatto.
Un'altra alternativa è usare il sistema sessagesimale per gli angoli alle
date...  ^_^
Cooper


wrote:

Bel algoritmo... Lo volevo sugerire io ma non sono sicuro che
funzioni... voglio dire l'hai testato?
il PackTime e UnPackTime da quello che so prende semplicemtente
il record e lo piazza dentro un longint...
cioè fa
Longint := PrimoByteRecord *2^12 +
                   SecondoByteRecord *2^8 +
                   TerzoByteRecord * 2^4 +
                   QuartoByteRecord
Il Razziatore,
The Only Good Windows is an uninstalled Windows
-----------------------------------------------
E-MAILs : IlRazziat...@NOSPAMnetscape.net
WEB     : 
http://www.razziatore.dns2go.com/
ICQ     : 67552596

 ha scritto nel messaggio
news:eg3dlu4hjlldu68un...@4ax.com...



Che intendi per Pascal Standard?


 ha scritto nel messaggio
news:3b4eluce3c3t2bv88...@4ax.com...


(Turbo)
Io conosco solo il set Espanso dalla borland... non conosco quelo ISO
quindo non so quali siano ISO o no
