Oppure

Loading
19/03/16 16:27
Mr X
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
aaa
19/03/16 23:38
osharko
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..
aaa
20/03/16 22:29
TheDarkJuster
Gli anni che terminano con il doppio 0 potrebbero non essere bisestili anche se sono multipli di 4.
aaa
21/03/16 22:25
Mr X
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.
aaa
22/03/16 7:26
TheDarkJuster
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.

aaa