Partage
  • Partager sur Facebook
  • Partager sur Twitter

Annee Bissextile

déterminer sans utiliser de condition si une année est bissextile

    19 septembre 2020 à 15:37:49

    Mon professeur de programmation nous a proposé un petit exercice que nous n'arrivons pas à résoudre. L'énoncé est le suivant : - Écrire un programme Java permettant de déterminer si une année est bissextile (sans utiliser de condition). Pour rappel, une année est bissextile si : 

    •  Elle est divisible par 400.
    •  Elle est divisible par 4 mais pas par 100.
    la partie sans condition veut dire sans if, while, for, booléen. Seulement des opérations et des round.floor/ceil 

    Je suis parti sur un principe où si après les calculs le programme me sortait 0 c'est que l'année est bissextile sinon elle ne l'est pas. 
    Et je suis partis sur une programme en deux phase :
    • la première où on élimine toutes les années dont le %4 n'était pas égale à zero en faisant: - a = année%4 ce qui ferait 0 si elle est bissextile 
    • la deuxième serait que les années divisible par 4 et par 100 mais dont le %400 n'est pas égale à zero sorte un chiffre et c'est la que mon probleme réside car en éliminant les année type 1900,2100,2200, etc bah j'élimine avec les toutes les années dont le modulo 400 n'est pas égale a 0
    import java.util.Scanner;
    
    public class Ex05 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Scanner scan = new Scanner(System.in);
    		double annee,a,b,bissextile,reste;
    		
    		System.out.println("Veuillez introduire une année afin de vérifier si elle est bissextile");
    		annee = scan.nextDouble();
    		
    	    a = annee%4;
    	    a = a/4;
    	    a = Math.ceil(a);
    	    System.out.println(a);
    	    
    	    b = annee%400;
    	    b = b /100;
    	    System.out.println(b);
    	    reste = b % 1;
    	    System.out.println(reste);
    	    // et de cette deuxieme partie il faudrait que :
    	    // 2140 -> 0
    	    // 2000 -> 0 
    	    // 2300 -> 1
    	    
    	    
    	    
    	    
    	    
    	    System.out.println("Si la réponse du programme est un 1 l'année sera bissextile si c'est un 0 qui sort l'année est non bissextile");
    	    
    	    
    	}
    
    }


    -
    Edité par oliveiranicolas 19 septembre 2020 à 15:38:54

    • Partager sur Facebook
    • Partager sur Twitter
      20 septembre 2020 à 1:54:34

      Bonjour,

      C'est plus un problème de logique mathématiques que de Java.

      Tu peux faire un tableau de vérité des trois conditions, et construire une expression logique en fonction de ce que tu trouves (c'est faisable facilement à la main vu que tu n'as que 4 possibilités). L'idée étant d'utiliser les opérateurs bit à bit.

      On trouve qu'en faisant (annee divisible par 4) AND (NOT ((annee divisible par 100) XOR (annee divisible par 400))) on a bien 1 quand l'année est bissextile et 0 autrement.

      Il suffit ensuite de l'exprimer en Java (j'ai testé ça, ça fonctionne pour des années positives):

        public static int isLeapWithoutCondition(int year) {
          Map<Integer, Integer> mod = new HashMap<Integer, Integer>();
          int[] modValeur = {4, 100, 400};
          for (int val : modValeur) {
            mod.put(val, (int)Math.ceil((double)(year % val) / val));
          }
      
          return -(mod.get(4)-1) & -((mod.get(100) ^ mod.get(400)) -1);
        }

      -
      Edité par KoaTao 20 septembre 2020 à 2:19:53

      • Partager sur Facebook
      • Partager sur Twitter

      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