Differenza tra date

di il
7 risposte

Differenza tra date

Ciao a tutti, devo fare un esercizio dove date in input due date (dello stesso anno) il programma deve calcolare la differenza.
Questo è il codice:
#include <iostream>
#include <cstdlib>

using namespace std;

int calcoloDiff(int giorniSTot, int giorniPTot)
{
	int differenzaG;
	if (giorniPTot > giorniSTot)
		differenzaG = giorniPTot - giorniSTot;
	else
		differenzaG = giorniSTot - giorniPTot;
	return differenzaG;
}

int main()
{
	int mese, giorno, giorniMese;
	cout << "Primo giorno e mese: ";
	cin >> giorno >> mese;
#pragma region primoMese
	switch (mese)
	{
	case 1:
		giorniMese = 31;
		break;
	case 2:
		giorniMese = 28;
		break;
	case 3:
		giorniMese = 31;
		break;
	case 4:
		giorniMese = 30;
		break;
	case 5:
		giorniMese = 31;
		break;
	case 6:
		giorniMese = 30;
		break;
	case 7:
		giorniMese = 31;
		break;
	case 8:
		giorniMese = 31;
		break;
	case 9:
		giorniMese = 30;
		break;
	case 10:
		giorniMese = 31;
		break;
	case 11:
		giorniMese = 30;
		break;
	case 12:
		giorniMese = 31;
		break;
	}
#pragma endregion primoMese
	int giorniPTot = giorniMese - giorno;
	cout << "Secondo giorno e mese: ";
	cin >> giorno >> mese;
#pragma region secondoMese
	switch (mese)
	{
	case 1:
		giorniMese = 31;
		break;
	case 2:
		giorniMese = 28;
		break;
	case 3:
		giorniMese = 31;
		break;
	case 4:
		giorniMese = 30;
		break;
	case 5:
		giorniMese = 31;
		break;
	case 6:
		giorniMese = 30;
		break;
	case 7:
		giorniMese = 31;
		break;
	case 8:
		giorniMese = 31;
		break;
	case 9:
		giorniMese = 30;
		break;
	case 10:
		giorniMese = 31;
		break;
	case 11:
		giorniMese = 30;
		break;
	case 12:
		giorniMese = 31;
		break;
	}
#pragma endregion secondoMese
	int giorniSTot = giorniMese - giorno;
	cout << calcoloDiff(giorniSTot, giorniPTot) << endl;
	system("pause");
	return 0;
}
La differenza non è mai corretta, potreste dirmi per piacere cosa c'è di sbagliato? Grazie.

7 Risposte

  • Re: Differenza tra date

    Così, giusto per provare ho provato a fare così:
    #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    
    int calcoloDiff(int giorniSTot, int giorniPTot)
    {
    	int differenzaG;
    	if (giorniPTot > giorniSTot)
    		differenzaG = giorniPTot - giorniSTot;
    	else
    		differenzaG = giorniSTot - giorniPTot;
    	return differenzaG;
    }
    
    int main()
    {
    	int mese, giorno, giorniMese = 0;
    	cout << "Primo giorno e mese: ";
    	cin >> giorno >> mese;
    #pragma region primoMese
    	switch (mese)
    	{
    	case 1:
    		giorniMese = giorniMese + 31;
    	case 2:
    		giorniMese = giorniMese + 28;
    	case 3:
    		giorniMese = giorniMese + 31;
    	case 4:
    		giorniMese = giorniMese + 30;
    	case 5:
    		giorniMese = giorniMese + 31;
    	case 6:
    		giorniMese = giorniMese + 30;
    	case 7:
    		giorniMese = giorniMese + 31;
    	case 8:
    		giorniMese = giorniMese + 31;
    	case 9:
    		giorniMese = giorniMese + 30;
    	case 10:
    		giorniMese = giorniMese + 31;
    	case 11:
    		giorniMese = giorniMese + 30;
    	case 12:
    		giorniMese = giorniMese + 31;
    	}
    #pragma endregion primoMese
    	int giorniPTot = giorniMese - giorno;
    	cout << "Secondo giorno e mese: ";
    	cin >> giorno >> mese;
    	giorniMese = 0;
    #pragma region secondoMese
    	switch (mese)
    	{
    	case 1:
    		giorniMese = giorniMese + 31;
    	case 2:
    		giorniMese = giorniMese + 28;
    	case 3:
    		giorniMese = giorniMese + 31;
    	case 4:
    		giorniMese = giorniMese + 30;
    	case 5:
    		giorniMese = giorniMese + 31;
    	case 6:
    		giorniMese = giorniMese + 30;
    	case 7:
    		giorniMese = giorniMese + 31;
    	case 8:
    		giorniMese = giorniMese + 31;
    	case 9:
    		giorniMese = giorniMese + 30;
    	case 10:
    		giorniMese = giorniMese + 31;
    	case 11:
    		giorniMese = giorniMese + 30;
    	case 12:
    		giorniMese = giorniMese + 31;
    	}
    #pragma endregion secondoMese
    	int giorniSTot = giorniMese - giorno;
    	cout << calcoloDiff(giorniSTot, giorniPTot) << endl;
    	system("pause");
    	return 0;
    }
    Cosa cambia? Se metto per esempio giorniMese = 30, 31 ecc... la differenza non è mai giusta e poi senza break non esegue anche le istruzioni che vengono dopo? Voglio dire, se io metto 1 gennaio e 31 dicembre è giusto che vengano eseguite tutte le istruzioni fino a far arrivare giorniMese a 364, ma se io metto per esempio aprile non arriva sempre a 364?
  • Re: Differenza tra date

    Quello che vuoi calcolare è il numero di giorni trascorsi tra 2 date?
  • Re: Differenza tra date

    Fai un flow-chart del calcolo che vuoi fare, quindi provalo "su carta" per capire se funziona. Poi passi alla codifica in C.
    Andare per tentativi non ti porterà a niente
  • Re: Differenza tra date

    candaluar ha scritto:


    Fai un flow-chart del calcolo che vuoi fare, quindi provalo "su carta" per capire se funziona. Poi passi alla codifica in C.
    Andare per tentativi non ti porterà a niente
    È la prima cosa che faccio, ovviamente, so quello che devo fare il problema è la formula matematica siccome io in questa materia non sono un vero e proprio genio.
  • Re: Differenza tra date

    Grazie
  • Re: Differenza tra date

    E se l'anno e' bisestile e tra le due date c'e febbraio?
  • Re: Differenza tra date

    
    int mth_date_isbise(int year)
    {
        return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
    }
    
Devi accedere o registrarti per scrivere nel forum
7 risposte