Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Pascal - Differenza date usando Pascal
Forum - Pascal - Differenza date usando Pascal

Avatar
Mr X (Normal User)
Newbie


Messaggi: 5
Iscritto: 19/03/2016

Segnala al moderatore
Postato alle 17:27
Sabato, 19/03/2016
Ciao a tutti, sono nuovo in questo forum volevo chiedervi se mi potevate dare una mano a perfezionare un programma.
ovvero:

program differenza_date;

uses crt;

var
g1,m1,a1:integer;
g2,m2,a2:integer;
giorni:real;

begin
    clrscr;
    g1:=1;
    m1:=1;
    a1:=1970;

repeat    
  writeln('inserisci il giorno tra 1 e 30: ');
readln(g2);
until g2<=30;

  repeat
writeln('inserisci il numero del mese: ');
readln(m2);
until m2<=12;

  writeln('inserisci anno: ');
readln(a2);
  giorni:=((a2-a1)*360+(m2-m1)*30+(g2-g1));

writeln('tra le due date son trascorsi giorni: ',giorni:9:0);
readln;
end.


All'interno di esso mancano diverse cose come ad esempio i mesi (da quanti giorni sono formati) e dovrei aggiungere nel calcolo anche gli anni bisetili.
Aiuto sono disperato

PM Quote
Avatar
osharko (Normal User)
Pro


Messaggi: 124
Iscritto: 16/04/2011

Segnala al moderatore
Postato alle 0:38
Domenica, 20/03/2016
allora per dare i valori ai mesi potresti usare un "trucchetto simile"
crei l'array mesi[12] = {31, 28, .., 31}; (non so se la sintassi va bene, e ovviamente al posto dei puntini devi inserirci i restanti giorni del mese).
Quando sai che devi fare tipo mese 5 - mese 3, fai mesi_da_aggiungere = mese[4] + mese[3];
e così sistema il problema dei mesi.

Per quanto riguarda invece il problema dell'anno bisestile.. gli anni multipli di 4 sono bisestili, quindi dovresti usare un count, e partendo dall'anno a1 di partenza incrementi il contatore ogni 4 anni fino ad arrivare all'anno a2. (ovviamente il count = 1 lo avrai dall'anno 1972).
Devi anche considerare che devi aggiungere l'anno solo se il mese immesso è superiore a 3, altrimenti il giorno bisestile non dovrà essere calcolato.

ah p.s. i giorni dell'anno sono 365 non 360, dovresti sistemare..

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 23:29
Domenica, 20/03/2016
Gli anni che terminano con il doppio 0 potrebbero non essere bisestili anche se sono multipli di 4.

PM Quote
Avatar
Mr X (Normal User)
Newbie


Messaggi: 5
Iscritto: 19/03/2016

Segnala al moderatore
Postato alle 23:25
Lunedì, 21/03/2016
Il raggionamento più o meno l'ho capito, ma la parte difficile appunto è applicarlo nel programma sennò potrei creare altre variabili coi nomi dei mesi (numerandoli) e dichiarando da quanti giorni sono formati.

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 8:26
Martedì, 22/03/2016
In realtà il programma che hai scritto è molto semplice, quindi cambiarlo è molto facile.

Usare i nomi dei mesi come nomi di variabili è orribile perché ti costringe a uno switch quando tutto sarebbe risolvibile molto più semplicemente con un indice incrementabile.


PM Quote