Partage
  • Partager sur Facebook
  • Partager sur Twitter

annee bissextile

Sujet résolu
    4 novembre 2008 à 15:45:44

    Bonjour ,
    Voilà c'est pour savoir si ma logique est bonne ...
    #include <stdio.h>
    
    
    int main()
    {
    	int annee;
    
    	printf("Saisir une date entre 1900 et 2100 : ");
    	scanf("%d",&annee);
    	if(annee >= 1900 || annee <= 2100)
    	{
    		if(annee % 4 == 0 || annee % 400 == 0)
    			printf("%d est une annee bissextile\n",annee);
    		else
    		{
    			if(annee % 100 != 0)
    				printf("%d n'est pas une annee bissextile\n",annee);
    		}
    
    	
    	}
    	return 0;
    }
    

    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      4 novembre 2008 à 15:52:28

      Il n'y avait pas d'années bissextiles avant 1900 ?
      • Partager sur Facebook
      • Partager sur Twitter
        4 novembre 2008 à 15:53:35

        d'apres wikipedia l'algo est faux :

        Citation : wikipedia

        Depuis l'instauration du calendrier grégorien, sont bissextiles les années :

        * divisibles par 4 mais non divisibles par 100

        ou

        * divisibles par 400.

        • Partager sur Facebook
        • Partager sur Twitter
          4 novembre 2008 à 15:54:42

          oui mais si j'ai envie de l'intégrer dans une base de donnée ^^, rare celui qui est née avant 1900^^
          bon j'avoue que 2100 , j'ai un peu trop exagéré..
          • Partager sur Facebook
          • Partager sur Twitter
            4 novembre 2008 à 15:58:24

            if(annee % 4 == 0 || annee % 400 == 0)
            

            A quoi sert le deuxième test ? 400 étant un multiple de 4 (4 * 100), je vois pas bien quel nombre multiple de 400 pourrait ne pas être multiple de 4.


            else
            {
            	if(annee % 100 != 0)
            		printf("%d n'est pas une annee bissextile\n",annee);
            }
            

            A quoi sert ce second test ?
            Si on entre dans ce else, c'est qu'on a pas affaire à un multiple de 4. 100 étant multiple de 4 (4 * 25), je vois pas bien quel multiple de 100 pourrait ne pas être multiple de 4.
            • Partager sur Facebook
            • Partager sur Twitter
              4 novembre 2008 à 15:59:31

              Citation : unknown77

              oui mais si j'ai envie de l'intégrer dans une base de donnée ^^, rare celui qui est née avant 1900^^
              bon j'avoue que 2100 , j'ai un peu trop exagéré..



              Oui mais c'est possible que quelqun qui est né avant 1900 soit encore de nos jours.
              • Partager sur Facebook
              • Partager sur Twitter
                4 novembre 2008 à 16:00:44

                je modifierais après ceci

                #include<stdio.h>
                
                int main()
                {
                	int annee;
                
                	printf("Saisir une date entre 1900 et 2100 : ");
                	scanf("%d",&annee);
                	if(annee >= 1900 || annee <= 2100)
                	{
                		if((annee % 4 == 0 && annee % 100 != 0) || annee % 400 == 0)
                			printf("%d est une annee bissextile\n",annee);
                		else
                		{
                			printf("%d n'est pas une annee bissextile\n",annee);
                		}
                
                	
                	}
                	return 0;
                }
                


                edité
                • Partager sur Facebook
                • Partager sur Twitter
                  4 novembre 2008 à 16:02:53

                  if(annee % 4 == 0 && annee % 100 != 0 || annee % 400 == 0)
                  


                  Ca c'est correct... excepté que mon compilateur préconise d'ajouter des parenthèses.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    4 novembre 2008 à 16:04:46

                    Citation : unknown77

                    else
                    		{
                    			printf("%d n'est pas une annee bissextile\n",annee);
                    		}
                    


                    Juste une chose:tu peux enlever les accolades car il n'y a qu'une instruction.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      4 novembre 2008 à 16:06:04

                      #define is_leap_year(y) ((!((y) & 3) && ((y) % 100)) || !((y) % 400))

                      et c'est valide bien avant les annees 1900
                      • Partager sur Facebook
                      • Partager sur Twitter
                        4 novembre 2008 à 16:07:35

                        Citation : chezmaxime

                        Citation : unknown77

                        else
                        		{
                        			printf("%d n'est pas une annee bissextile\n",annee);
                        		}
                        



                        Juste une chose:tu peux enlever les accolades car il n'y a qu'une instruction.



                        en effet merci
                        • Partager sur Facebook
                        • Partager sur Twitter
                          4 novembre 2008 à 16:08:55

                          Citation : chezmaxime

                          Citation : unknown77

                          else
                          		{
                          			printf("%d n'est pas une annee bissextile\n",annee);
                          		}
                          



                          Juste une chose:tu peux enlever les accolades car il n'y a qu'une instruction.


                          Ce que je déconseille formellement, car le fait qu'il n'y ait aujourd'hui qu'un instruction est cas très particulier... De plus, ça ne gêne pas la lecture ni le codage. Je conseille donc au contraire de toujours mettre les {}.

                          Attention, et d'une manière plus générale, le langage C offre des dizaines de façons d'écrire du mauvais code... Ici, on essaye de donner les Bonnes Pratiques...


                          Pour répondre au P.O :

                          http://c-faq.com/misc/leapyear.html
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Music only !
                            4 novembre 2008 à 16:09:11

                            if(annee >= 1900 || annee <= 2100)
                            


                            Par contre, ça ne sert absolument à rien.
                            Quelque soit annee, puisque 1900 < 2100, si annee < 1900, alors annee <= 2100.
                            De la même façon, si annee > 2100, annee >= 1900.

                            La condition est toujours vraie.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              4 novembre 2008 à 16:46:54

                              Citation : -ed-

                              Ce que je déconseille formellement, car le fait qu'il n'y ait aujourd'hui qu'un instruction est cas très particulier... De plus, ça ne gêne pas la lecture ni le codage. Je conseille donc au contraire de toujours mettre les {}.



                              Bah moi dans mes programmes,si il n'y a qu'une instruction dans une condition,ben j'ote mes {},je vois pas où est le mal ^^ ?

                              Sinon,moi j'aurai plutot mis:


                              #include <stdio.h>
                              #include <stdlib.h>
                              
                              int main()
                              {
                              	int annee;
                              
                              	printf("Saisir une annee : ");
                              	scanf("%d",&annee);
                              
                              		if(annee % 4 == 0 && annee % 100 != 0 || annee % 400 == 0)
                                      printf("%d est une annee bissextile\n", annee);
                              
                              		else
                                      printf("%d n'est pas une annee bissextile\n", annee);
                              
                              	return 0;
                              }
                              

                              • Partager sur Facebook
                              • Partager sur Twitter
                                4 novembre 2008 à 17:17:14

                                Citation : chezmaxime

                                Bah moi dans mes programmes,si il n'y a qu'une instruction dans une condition,ben j'ote mes {},je vois pas où est le mal ^^ ?


                                Ca complique la maintenance si tu rajoutes du code dans la branche, qu'il soit de production ou de debug... Ca peut même entrainer des bugs si on met 2 instruction sur la même ligne séparées par un ; ...

                                L'idée est que le code soit prête à évoluer dès le premier jour. C'est tout. C'est la démarche professionnelle. Après, tu fais ce que tu veux, tu es prévenu des risques...
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Music only !

                                annee bissextile

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                • Editeur
                                • Markdown