Esercizio C++ Verifica data

di il
7 risposte

Esercizio C++ Verifica data

Salve a tutti!
Scusatemi se pubblico un esercizio di domenica ma martedì ho un esame e mi occorre un vostro parere.
Ho fatto la bozza di questo programma ma non so ancora usare bene i le funzioni.
potreste dirmi come riportare nel main l'errore per stampare a schermo il messaggio di errore?
L'ho testato scrivendo come mese 2 e giorno 31 ma non da la risposta desiderata.
Vi prego è urgente spiegatemi come fare! Grazie infinite!
/*Inserita una data, verifica se essa è valida*/
#include <iostream>

using namespace std;

int valid(int errore);

int main() 
{
	int mese, giorno, anno, errore;
	cout<<"Inserire il mese  : ";
	cin>>mese;
	cout<<"Inserire il giorno : ";
	cin>>giorno;
	cout<<"Inserire anno :";
	cin>>anno;
    
    switch (errore)
    {
    	case 1 : errore==1;
    	cout<<"Errore! Reinserisci il giorno :";
    	break;
    	case 2: errore==2;
    	cout<<"Errore! Reinserisci il giorno :";
    	break;
    	case 3: errore==3;
    	cout<<"Errore! Reinserisci il giorno :";
    	break;
    }
    
    
	
	return 0;
} 

int valid(int errore)
{ 
   int a,b;
	switch(a)
	{
		case 1: if(a==2)
		        {
		        	if(b>28 || b<0)
		        	{
		        	errore==1;	;
		        	}
		            
		        }
		break;
		        
		case 2 :if(a==4 || a==6 || a==9 || a==11)
		         {
		         	if(b>30 || b<0)
		         	{
		         		errore==2;
		         	}
		         }
		break;
		         
		case 3 : if(a==31)
		          {
		          	if(b>31 ||b<0)
		          	{
		          		errore==3;
		          	}
		          }                
	   break;
	}
	   
	return errore;
}

7 Risposte

  • Re: Esercizio C++ Verifica data

    Ciao Saffina,

    Quando scrivi:
    
    switch (errore)
    
    La variabile errore non è mai stata usata e neppure inizializzata per cui contiene un valore casuale e di conseguenza il comportamento del programma è casuale.

    Questo errore si ripete nella funzione 'valid' dove testi 'a' senza averla inizializzata.

    Poi c' è un errore di principio, la funzione 'valid' dovrebbe controllare se la data è valida, quindi dovrebbe ricevere giorno, mese e anno nei suoi parametri di chiamata e restituire un valore che dice se sono ok. ad esempio:
    
    int valid(int mese, int giorno, int anno)
    {
       ...
       return 1 // se giorno sbagliato
       ...
    }
    
  • Re: Esercizio C++ Verifica data

    Grazie mille!!!! Anzi Grazie infinite per aver risposto di domenica
    Sapresti suggerirmi come allenarmi per stringhe,puntatori e inserimento file( C++)?
    /*Inserita una data, verifica se essa è valida*/
    #include <iostream>
    
    using namespace std;
    
    int valid(int mese, int giorno);
    
    int main() 
    {
    	int mese, giorno, anno, errore;
    	cout<<"Inserire il mese  : ";
    	cin>>mese;
    	cout<<"Inserire il giorno : ";
    	cin>>giorno;
    	cout<<"Inserire anno :";
    	cin>>anno;
        errore=valid(mese,giorno);
        if (errore==0)
          {
        	cout<<"La data e' valida!";
          }
        else
        {
        	cout<<"Hai inserito una data non valida!";
        	switch (errore)
        {
        	case 1 : errore==1;
        	cout<<"Errore! Reinserisci il giorno :";
        	break;
        	case 2: errore==2;
        	cout<<"Errore! Reinserisci il giorno :";
        	break;
        	case 3: errore==3;
        	cout<<"Errore! Reinserisci il giorno :";
        	break;
        }
        
        }
        
        
    	
    	return 0;
    } 
    
    int valid(int mese, int giorno)
    { 
       
    	           if(mese==2)
    		         {
    		        	if(giorno>28 || giorno<0)
    		        	{
    		        	 return 1;	;
    		        	}
    		            
    		         }
    		
    		        
    		if(mese==4 || mese==6 || mese==9 || mese==11)
    		         {
    		         	if(giorno>30 || giorno<0)
    		         	{
    		         		return 2;
    		         	}
    		         }
    	
    		         
    		 if(mese==31)
    		          {
    		          	if(giorno>31 ||giorno<0)
    		          	{
    		          		return 3;
    		          	}
    		          }                
    	     else
    	   
    	return 0;
    }
  • Re: Esercizio C++ Verifica data

    Non saprei bene cosa consigliarti, dipende anche a che livello sei, in rete trovi molti siti che propongono esercizi C++.
    Oppure continui a frequentare questo forum e cerchi di aiutare altri studenti.
  • Re: Esercizio C++ Verifica data

    Certo! Mi farebbe piacere aiutare! Bhe come livello non saprei giudicarmi ma sto svolgendo esercizi sulle funzioni ricorsive poi mi toccano le struct e un pò sull'inserimento di file esterni.
  • Re: Esercizio C++ Verifica data

    Sapresti dirmi cout.width() e cout.precision() cosa significano e quando si usano?
  • Re: Esercizio C++ Verifica data

    Saffina ha scritto:


    Grazie mille!!!! Anzi Grazie infinite per aver risposto di domenica
    Sapresti suggerirmi come allenarmi per stringhe,puntatori e inserimento file( C++)?
    /*Inserita una data, verifica se essa è valida*/
    #include <iostream>
    
    using namespace std;
    
    int valid(int mese, int giorno);
    
    int main() 
    {
    	int mese, giorno, anno, errore;
    	cout<<"Inserire il mese  : ";
    	cin>>mese;
    	cout<<"Inserire il giorno : ";
    	cin>>giorno;
    	cout<<"Inserire anno :";
    	cin>>anno;
        errore=valid(mese,giorno);
        if (errore==0)
          {
        	cout<<"La data e' valida!";
          }
        else
        {
        	cout<<"Hai inserito una data non valida!";
        	switch (errore)
        {
        	case 1 : errore==1;
        	cout<<"Errore! Reinserisci il giorno :";
        	break;
        	case 2: errore==2;
        	cout<<"Errore! Reinserisci il giorno :";
        	break;
        	case 3: errore==3;
        	cout<<"Errore! Reinserisci il giorno :";
        	break;
        }
        
        }
        
        
    	
    	return 0;
    } 
    
    int valid(int mese, int giorno)
    { 
       
    	           if(mese==2)
    		         {
    		        	if(giorno>28 || giorno<0)
    		        	{
    		        	 return 1;	;
    		        	}
    		            
    		         }
    		
    		        
    		if(mese==4 || mese==6 || mese==9 || mese==11)
    		         {
    		         	if(giorno>30 || giorno<0)
    		         	{
    		         		return 2;
    		         	}
    		         }
    	
    		         
    		 if(mese==31)
    		          {
    		          	if(giorno>31 ||giorno<0)
    		          	{
    		          		return 3;
    		          	}
    		          }                
    	     else
    	   
    	return 0;
    }
    Questo codice presenta ancora n po' di pasticci:

    1) perche' non si valida anche l'anno?

    2) febbraio puo' anche avere 29 giorni! Esistono anche gli anni bisestili. Quando e' che un anno e' bisestile? C'e' la formuletta .

    3) a che servono gli statement 'errore==1', ..? Sono dei 'predicati'. Ritornano un vaolre booleano, valore di cui non viene fatto nulla. Quindi perche' sono stati messi li?

    4) il mese 31? A meno che non sia cambiato il calendario, un anno ha 12 mesi, almeno nella maggior parte dei calendari del mondo. Ci sarebbero i Maia che hanno calendari con 5 periodi, ed in particolare 20 mesi, ma questo e' un altro discorso .

    5) oltre a febbrario ed ai mesi di 30 giorni, si devono controllare anche i mesi di 31 giorni

    Dai, un piccolo sforzo ed e' fatta!
  • Re: Esercizio C++ Verifica data

    Grazie mille mi adopero subito per farlo al meglio e lo riposterò! Grazie davvero!
Devi accedere o registrarti per scrivere nel forum
7 risposte