Codice: Seleziona tutto
se il giorno è sbagliato
ritorna 0
se il mese è sbagliato
ritorna 0
se l'anno è sbagliato
ritorna 0
ritorna 1
Emanuele
Moderatore: Staff
Codice: Seleziona tutto
se il giorno è sbagliato
ritorna 0
se il mese è sbagliato
ritorna 0
se l'anno è sbagliato
ritorna 0
ritorna 1
Codice: Seleziona tutto
condizione ? X : Y ;
Codice: Seleziona tutto
if ( condizione )
X
else
Y
Codice: Seleziona tutto
public class VerificaData {
/**
* Verifica che la data fornita in input rispetti i criteri di validità
* imposti
*
* @param mese
* il mese da verificare
* @param giorno
* il giorno da verificare
* @param anno
* l'anno da verificare
* @return true se la data è valida, false altrimenti
*/
public static boolean verificaData(int mese, int giorno, int anno) {
return verificaAnno(anno) && verificaMese(mese)
&& verificaGiorno(mese, giorno, anno);
}
/**
* Wrapper per verificaData: converte i valori boolean ritornati (true o
* false) in 1 o 0 (int)
*
* @param mese
* il mese da controllare
* @param giorno
* il giorno da controllare
* @param anno
* l'anno da controllare
* @return 0 se la data è sbagliata, 1 altrimenti
*/
public static int verificaDataInt(int mese, int giorno, int anno) {
return verificaData(mese, giorno, anno) ? 1 : 0;
}
/**
* Wrapper per verificaData: converte i valori boolean ritornati (true o
* false) in 'v' o 'f' (char)
*
* @param mese
* il mese da controllare
* @param giorno
* il giorno da controllare
* @param anno
* l'anno da controllare
* @return 0 se la data è sbagliata, 1 altrimenti
*/
public static char verificaDataChar(int mese, int giorno, int anno) {
return verificaData(mese, giorno, anno) ? 'v' : 'f';
}
/**
* Metodo per il controllo della validità del giorno
*
* @param mese
* il mese della data da verificare
* @param giorno
* il giorno della data da verificare
* @param anno
* l'anno della data da verificare
* @return vero se il giorno rispetta tutti i parametri, falso altrimenti
*/
private static boolean verificaGiorno(int mese, int giorno, int anno) {
if (giorno > 0 && giorno < 31 && mese != 2)
/*
* giorno compreso tra 1 e 30 e mese diverso da Febbraio: il giorno
* va bene per forza
*/
return true;
if (giorno == 29 && mese == 2 && ((anno % 4 == 0 && anno % 100 != 0)
|| anno % 400 == 0))
/*
* mese = febbraio, giorno = 29, anno bisestile: ok
*/
return true;
if (giorno == 31)
if ((mese == 1) || (mese == 3) || (mese == 5) || (mese == 7)
|| (mese == 8) || (mese == 10) || (mese == 12))
/*
* giorno = 31 e mese con 31 giorni: ok
*/
return true;
/*
* Al di fuori di uno qualsiasi degli if precedenti: false
*/
System.err.println("Giorno sbagliato e/o fuori contesto (" + giorno
+ "/" + mese + "/" + anno + ")");
return false;
}
/**
* Metodo per il controllo della validità del mese
*
* @param mese
* il mese da controllare
* @return vero se il mese è compreso tra ]0,12], falso altrimenti
*/
private static boolean verificaMese(int mese) {
if (mese > 0 && mese <= 12)
return true;
System.err.println("Mese al di fuori dei valori di riferimento ("
+ mese + ")");
return false;
}
/**
* Metodo per il controllo della validità dell'anno
*
* @param anno
* l'anno da testare
* @return vero se l'anno è compreso in [0,10000[, false altrimenti
*/
private static boolean verificaAnno(int anno) {
if (anno >= 0 && anno < 10000)
return true;
System.err.println("Anno al di fuori dei valori di riferimento ("
+ anno + ")");
return false;
}
public static void main(String[] va) {
System.out.println("Data 1/10/2000: " + verificaData(1, 10, 2000));
System.out.println("Data 6/31/2001: " + verificaData(6, 31, 2001));
System.out.println("Data 2/29/1900: " + verificaData(2, 29, 1900));
System.out.println("Data 2/29/1600: " + verificaData(2, 29, 1600));
System.out.println("Data 2/29/2008: " + verificaData(2, 29, 2008));
System.out.println("Data 10/36/1990: " + verificaData(10, 36, 1990));
System.out.println("Data 13/10/2011: " + verificaData(13, 10, 2011));
System.out.println("Data 2/30/2011: " + verificaData(2, 30, 2001));
System.out.println("Data 12/31/2012: " + verificaData(12, 31, 2012));
}
}
Codice: Seleziona tutto
if(giorno > 0 && giorno <= 31){
...
else if(giorno == 30) {
...
Codice: Seleziona tutto
public class verificaData
{
public static int verificaData(int giorno, int mese, int anno)
{
// controllo che l'anno sia valido
if ( anno < 0 || anno > 10000 )
return 0;
// controllo che il mese sia valido
if ( mese < 0 || mese > 12 )
return 0;
// controllo che il giorno sia valido
if ( giorno < 0 || giorno > 31 )
return 0;
// febbraio
if ( mese == 2 )
// anno bisestile
if ( ( anno % 4 == 0 && anno % 100 != 0 ) || anno % 400 == 0 )
if ( giorno > 29 )
return 0;
else
return 1;
else
// anno non bisestile
if ( giorno > 28 )
return 0;
if ( giorno == 31 )
// mesi di 30 giorni (febbraio e' gia' stato analizzato)
if ( ( mese == 4 ) || ( mese == 6 ) ||
( mese == 9 ) || ( mese == 11 ) )
return 0;
// Tutto ok, la data è corretta!!!
return 1;
}
public static void main(String[] va)
{
System.out.println(verificaData( 10 ,1 ,2000 )); // 1
System.out.println(verificaData( 31 ,6 ,2001 )); // 0
System.out.println(verificaData( 29 ,2 ,1900 )); // 0
System.out.println(verificaData( 29 ,2 ,1600 )); // 1
System.out.println(verificaData( 29 ,2 ,2008 )); // 1
System.out.println(verificaData( 36 ,10 ,1990)); // 0
System.out.println(verificaData( 10 ,13 ,2011)); // 0
System.out.println(verificaData( 31 ,8 , 2010)); // 1
System.out.println(verificaData( 30 ,2 , 2001)); // 0
System.out.println(verificaData( 31 ,12 ,2012)); // 1
}
}
Ho capito, mi metto al lavoroo! :Pspina ha scritto:Guarda, non ti impappinare il cervello. Ti posto quello che intendevo io, tutto scritto in modo che tu possa tranquillamente capire. Applicati un po', cerca di capire e vedrai che è molto semplice:EmanueleCodice: Seleziona tutto
public class verificaData { public static int verificaData(int giorno, int mese, int anno) { // controllo che l'anno sia valido if ( anno < 0 || anno > 10000 ) return 0; // controllo che il mese sia valido if ( mese < 0 || mese > 12 ) return 0; // controllo che il giorno sia valido if ( giorno < 0 || giorno > 31 ) return 0; // febbraio if ( mese == 2 ) // anno bisestile if ( ( anno % 4 == 0 && anno % 100 != 0 ) || anno % 400 == 0 ) if ( giorno > 29 ) return 0; else return 1; else // anno non bisestile if ( giorno > 28 ) return 0; if ( giorno == 31 ) // mesi di 30 giorni (febbraio e' gia' stato analizzato) if ( ( mese == 4 ) || ( mese == 6 ) || ( mese == 9 ) || ( mese == 11 ) ) return 0; // Tutto ok, la data è corretta!!! return 1; } public static void main(String[] va) { System.out.println(verificaData( 10 ,1 ,2000 )); // 1 System.out.println(verificaData( 31 ,6 ,2001 )); // 0 System.out.println(verificaData( 29 ,2 ,1900 )); // 0 System.out.println(verificaData( 29 ,2 ,1600 )); // 1 System.out.println(verificaData( 29 ,2 ,2008 )); // 1 System.out.println(verificaData( 36 ,10 ,1990)); // 0 System.out.println(verificaData( 10 ,13 ,2011)); // 0 System.out.println(verificaData( 31 ,8 , 2010)); // 1 System.out.println(verificaData( 30 ,2 , 2001)); // 0 System.out.println(verificaData( 31 ,12 ,2012)); // 1 } }
Codice: Seleziona tutto
public class verificaData
{
public static int verificaData(int giorno, int mese, int anno)
{
// dichiaro le variabili
int testData;
// inizializzo le variabili
testData = 0;
// controllo che l'anno sia valido
if(anno > 0 && anno <= 10000)
{
// controllo che il mese sia valido
if(mese > 0 && mese <= 12)
{
// controllo che il giorno sia valido
if(giorno > 0 && giorno <= 31)
{
// febbraio
if( mese == 2 )
{
// anno bisestile
if(( anno % 4 == 0 && anno % 100 != 0 ) || anno % 400 == 0 )
{
if(giorno < 29 )
{
testData = 1;
}
}
}
}
if( giorno == 31)
{
if ( (mese == 1) || (mese == 3) || ( mese == 5 ) || ( mese == 7 ) || ( mese == 8 ) || ( mese == 10 ) || ( mese == 12) )
{ testData = 1;
}
}
}
}
return testData;
}
public static void main(String[] va)
{
// dichiaro la variabile e la inizializzo
System.out.println(verificaData( 10 ,1 ,2000 ));
System.out.println(verificaData( 31 ,6 ,2001 ));
System.out.println(verificaData( 29 ,2 ,1900 ));
System.out.println(verificaData( 29 ,2 ,1600 ));
System.out.println(verificaData( 29 ,2 ,2008 ));
System.out.println(verificaData( 36 ,10 ,1990));
System.out.println(verificaData( 10 ,13 ,2011));
System.out.println(verificaData( 31 ,8 , 2010));
System.out.println(verificaData( 30 ,2 , 2001));
System.out.println(verificaData( 31 ,12 ,2012));
}
}
Codice: Seleziona tutto
public class verificaData
{
public static int verificaData(int giorno, int mese, int anno)
{
// dichiaro le variabili
int testData;
// inizializzo le variabili
testData = 0;
// controllo che l'anno sia valido
if(anno > 0 && anno <= 10000)
{ // controllo che il mese sia valido
if(mese > 0 && mese <= 12)
{ // controllo che il giorno sia valido
if( giorno > 0 && giorno <= 31)
{ // controllo
if( ( giorno == 31) && (mese == 4) || (mese == 6) || (mese == 9) || (mese == 11))
{ testData = 1;
}
else
{
if( (giorno == 30) && (mese == 1) || (mese == 3) || (mese == 5) || (mese == 7) || (mese == 8) || (mese == 10) || (mese == 12) )
{ testData = 1;
}
else
{
if ( mese == 2 )
{
if ( giorno < 29 && giorno >= 1 )
{ testData = 1;
}
else
{
if( giorno == 29 )
{
if ( ( anno % 4 == 0 && anno % 100 != 0 ) || anno % 400 == 0 )
{
testData = 1;
}
}
}
}
else
{
testData = 1;
}
}
}
}
}
}
return testData;
}
public static void main(String[] va)
{
// dichiaro la variabile e la inizializzo
System.out.println(verificaData( 10 ,1 ,2000 ));
System.out.println(verificaData( 31 ,6 ,2001 ));
System.out.println(verificaData( 29 ,2 ,1900 ));
System.out.println(verificaData( 29 ,2 ,1600 ));
System.out.println(verificaData( 29 ,2 ,2008 ));
System.out.println(verificaData( 36 ,10 ,1990));
System.out.println(verificaData( 10 ,13 ,2011));
System.out.println(verificaData( 31 ,8 , 2010));
System.out.println(verificaData( 30 ,2 , 2001));
System.out.println(verificaData( 31 ,12 ,2012));
}
}
Codice: Seleziona tutto
public class verificaData
{
public static int verificaData(int giorno, int mese, int anno)
{
// dichiaro le variabili
int testData;
// inizializzo le variabili
testData = 0;
// controllo che l'anno sia valido
if(anno > 0 && anno <= 10000)
{ // controllo che il mese sia valido
if(mese > 0 && mese <= 12)
{ // controllo che il giorno sia valido
if( giorno > 0 && giorno <= 31)
{ // controllo
if( ( giorno <= 30) && ((mese == 4) || (mese == 6) || (mese == 9) || (mese == 11)) )
{ testData = 1;
}
else
{
if( (giorno <= 31) && ((mese == 1) || (mese == 3) || (mese == 5) || (mese == 7) || (mese == 8) || (mese == 10) || (mese == 12)) )
{ testData = 1;
}
else
{
if ( mese == 2 )
{
if ( giorno < 29 && giorno >= 1 )
{ testData = 1;
}
else
{
if( giorno == 29 )
{
if ( ( anno % 4 == 0 && anno % 100 != 0 ) || anno % 400 == 0 )
{ testData = 1;
}
}
}
}
}
}
}
}
}
return testData;
}
public static void main(String[] va)
{
// dichiaro la variabile e la inizializzo
System.out.println(verificaData( 10 ,1 ,2000 ));
System.out.println(verificaData( 31 ,6 ,2001 ));
System.out.println(verificaData( 29 ,2 ,1900 ));
System.out.println(verificaData( 29 ,2 ,1600 ));
System.out.println(verificaData( 29 ,2 ,2008 ));
System.out.println(verificaData( 36 ,10 ,1990));
System.out.println(verificaData( 10 ,13 ,2011));
System.out.println(verificaData( 31 ,8 , 2010));
System.out.println(verificaData( 30 ,2 , 2001));
System.out.println(verificaData( 31 ,12 ,2012));
}
}
Codice: Seleziona tutto
print verificaData( 10 ,1 ,2000 );
print "\n";
print verificaData( 31 ,6 ,2001 );
print "\n";
print verificaData( 29 ,2 ,1900 );
print "\n";
print verificaData( 29 ,2 ,1600 );
print "\n";
print verificaData( 29 ,2 ,2008 );
print "\n";
print verificaData( 36 ,10 ,1990);
print "\n";
print verificaData( 10 ,13 ,2011);
print "\n";
print verificaData( 31 ,8 , 2010);
print "\n";
print verificaData( 30 ,2 , 2001);
print "\n";
print verificaData( 31 ,12 ,2012);
print "\n";
sub verificaData(int giorno, int mese, int anno)
{
$testData = 0;
## controllo che l'anno sia valido
if(anno > 0 && anno <= 10000)
{
## controllo che il mese sia valido
if(mese > 0 && mese <= 12)
{ ## controllo che il giorno sia valido
if( giorno > 0 && giorno <= 31)
{ ## controllo il giorno 30
if( ( giorno <= 30) && ((mese == 4) || (mese == 6) || (mese == 9) || (mese == 11)) )
{ $testData = 1;
}
else
{ ## controllo il giorno 31
if( (giorno <= 31) && ((mese == 1) || (mese == 3) || (mese == 5) || (mese == 7) || (mese == 8) || (mese == 10) || (mese == 12)) )
{ $testData = 1;
}
else
{ ## controllo se è febbraio
if ( mese == 2 )
{
if ( giorno < 29 && giorno >= 1 )
{ $testData = 1;
}
else
{
if( giorno == 29 )
{ ## controllo se l'anno è bisestile
if ( ( anno % 4 == 0 && anno % 100 != 0 ) || anno % 400 == 0 )
{ $testData = 1;
}
}
}
}
}
}
}
}
}
return $testData;
}
Oddio...non è bellissimo come sta scritto questo codice...ma almeno funziona...gabbro ha scritto:CI SONO RIUSCITOOOOO!
FINALMENTE *o* e ora devo farlo anche in cpp, perl e python uffaCodice: Seleziona tutto
public class verificaData { public static int verificaData(int giorno, int mese, int anno) { // dichiaro le variabili int testData; // inizializzo le variabili testData = 0; // controllo che l'anno sia valido if(anno > 0 && anno <= 10000) { // controllo che il mese sia valido if(mese > 0 && mese <= 12) { // controllo che il giorno sia valido if( giorno > 0 && giorno <= 31) { // controllo if( ( giorno <= 30) && ((mese == 4) || (mese == 6) || (mese == 9) || (mese == 11)) ) { testData = 1; } else { if( (giorno <= 31) && ((mese == 1) || (mese == 3) || (mese == 5) || (mese == 7) || (mese == 8) || (mese == 10) || (mese == 12)) ) { testData = 1; } else { if ( mese == 2 ) { if ( giorno < 29 && giorno >= 1 ) { testData = 1; } else { if( giorno == 29 ) { if ( ( anno % 4 == 0 && anno % 100 != 0 ) || anno % 400 == 0 ) { testData = 1; } } } } } } } } } return testData; } public static void main(String[] va) { // dichiaro la variabile e la inizializzo System.out.println(verificaData( 10 ,1 ,2000 )); System.out.println(verificaData( 31 ,6 ,2001 )); System.out.println(verificaData( 29 ,2 ,1900 )); System.out.println(verificaData( 29 ,2 ,1600 )); System.out.println(verificaData( 29 ,2 ,2008 )); System.out.println(verificaData( 36 ,10 ,1990)); System.out.println(verificaData( 10 ,13 ,2011)); System.out.println(verificaData( 31 ,8 , 2010)); System.out.println(verificaData( 30 ,2 , 2001)); System.out.println(verificaData( 31 ,12 ,2012)); } }