code répétitif

code répétitif - C - Programmation

Marsh Posté le 03-02-2015 à 07:12:02    

Bonjour à tous
 
Je suis débutant en c.
 
dans une partie de mon code je fais plusieurs test, avec message d'erreur.
je veux que la date saisie ne sois pas impossible, du genre 32/15/2000
 et du coup j'ai mis plusieurs test.
Est-il possible d’alléger ce code :
 
/**********verification de la validiter du mois************/
if (jour==0 ||mois==0 ||annee==0 || mois>12 || jour>31 )
{
printf ("veuillez saisir une date valide\n" );
return 0;
}
 
/* si les mois de 30 jours sont respecté */
if (mois==4 || mois==6 || mois==9 || mois==11)
    if (jour>30)
    {
        printf("veuillez saisir une date valide\n" );
        return 0;
    }
 
 
/* si la règle des 28 jours de février et du 29eme jours pour les années bissextilles est respecté */
if(annee % 4 == 0 || annee % 400 == 0)
     if (mois==2 && jour>29  )
    {
        printf("veuillez saisir une date valide\n" );
        return 0;
    }
if(annee % 4 != 0 || annee % 400 != 0)
    if (mois==2 && jour>28)
    {
        printf("veuillez saisir une date valide\n" );
        return 0;
    }
 
Merci pour votre aide

Reply

Marsh Posté le 03-02-2015 à 07:12:02   

Reply

Marsh Posté le 03-02-2015 à 09:21:21    

1000 a écrit :

Bonjour à tous
 
Je suis débutant en c.
 
dans une partie de mon code je fais plusieurs test, avec message d'erreur.
je veux que la date saisie ne sois pas impossible, du genre 32/15/2000
 et du coup j'ai mis plusieurs test.
Est-il possible d’alléger ce code :
 
/**********verification de la validiter du mois************/
if (jour==0 ||mois==0 ||annee==0 || mois>12 || jour>31 )
{
printf ("veuillez saisir une date valide\n" );
return 0;
}
 
/* si les mois de 30 jours sont respecté */
if (mois==4 || mois==6 || mois==9 || mois==11)
    if (jour>30)
    {
        printf("veuillez saisir une date valide\n" );
        return 0;
    }
 
 
/* si la règle des 28 jours de février et du 29eme jours pour les années bissextilles est respecté */
if(annee % 4 == 0 || annee % 400 == 0)
     if (mois==2 && jour>29  )
    {
        printf("veuillez saisir une date valide\n" );
        return 0;
    }
if(annee % 4 != 0 || annee % 400 != 0)
    if (mois==2 && jour>28)
    {
        printf("veuillez saisir une date valide\n" );
        return 0;
    }
 
Merci pour votre aide


 
http://stackoverflow.com/questions [...] ation-in-c

Reply

Marsh Posté le 03-02-2015 à 12:38:55    

Merci, mais dans ce cas, je ne vois pas comment je l'inclurais dans le code complet, car je suis trop novice et mon exercice correspond à un calcul se faisant sur 3 chiffres saisie à la suite (le jour, le mois, l'année)
et dans l'immédiat je ne vois pas comment découper l'information d'une date saisie.... je n'en suit qu'a mon 3eme exo en c.
mon code dans l'ensemble est bon, je cherche juste à réduire en me demandant s'il est possible de créer une fonction pour éviter la répétition :
   {
        printf("veuillez saisir une date valide\n" );
        return 0;
    }  
 

Reply

Marsh Posté le 03-02-2015 à 13:25:19    


 
Ok. je pense que ton exercice consiste donc à "additionner les conditions"
 
tu peux donc utiliser des () supplémentaires pour tes conditions.
 
Exemple:
 
if ((blabla == 'oui' || blabla != 'truc') && (bloblo == 'zobi' || bloblo != blabla))
 

Reply

Marsh Posté le 03-02-2015 à 13:28:18    

1000 a écrit :

Merci, mais dans ce cas, je ne vois pas comment je l'inclurais dans le code complet, car je suis trop novice et mon exercice correspond à un calcul se faisant sur 3 chiffres saisie à la suite (le jour, le mois, l'année)
et dans l'immédiat je ne vois pas comment découper l'information d'une date saisie.... je n'en suit qu'a mon 3eme exo en c.
mon code dans l'ensemble est bon, je cherche juste à réduire en me demandant s'il est possible de créer une fonction pour éviter la répétition :
   {
        printf("veuillez saisir une date valide\n" );
        return 0;
    }  
 


 
Et tu peux aussi créer une fonction de validation:
 
int validate(int day, int month, int year) {
     // Validate conditions
     ...
     ... return 1; // si pas bon
     ... return 0; // si bon
}
 
et ensuite tu pourras tester comme cela:
 
if (validate(date) == 0)
{
    // ok
}
else
{
   // pas ok
}


Message édité par Hermes le Messager le 03-02-2015 à 13:30:51
Reply

Marsh Posté le 03-02-2015 à 13:54:41    

Tu pourrais même faire un tableau qui contient pour chaque mois, le nb de jours, sauf pour février où tu mets 0. Dans ce cas, tu calcules si c'est 28 ou 29j. Ainsi, en fonction du n° de mois - 1, t'as direct le nb de jours dans le tableau ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 03-02-2015 à 19:53:24    

Merci pour votre aide, je cherchais justement comment faire sous la forme d'une fonction  
parfait

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed