Valid XHTML     Valid CSS2    


        //    (gH)   -_-  solution2012.js  ;  TimeStamp (unix) : 28 Mai 2012 vers 10:49
        
        // voici ce qui sera exécuté quand la page est chargée :
        
        addEvent(window, 'load', q1);
        addEvent(window, 'load', demotableau1);
        addEvent(window, 'load', demotableau2);
        addEvent(window, 'load', democej);
        addEvent(window, 'load', democejs);
        addEvent(window, 'load', democejs2);
        addEvent(window, 'load', democejs3);
        addEvent(window, 'load', democejs4);
        
        // ######################################################
        
        function q1() {
        
          window.document.getElementById("txt1").innerHTML = "é".toUpperCase() ;
        
        } // fin de fonction q1
        
        // ----------------------------------------------------------------------------
        
        function demotableau1() {
        
        tablo1 = "un petit  chat".split(" ") ;
        table1 = array2table(tablo1,"tab1") ;
        document.getElementById("divtableau1").appendChild(table1) ;
        
        } // fin de fonction demotableau1
        
        // ----------------------------------------------------------------------------
        
        function demotableau2() {
        
        tablo2 = "un petit  chat".split(/\s+/) ;
        table2 = array2table(tablo2,"tab2") ;
        document.getElementById("divtableau2").appendChild(table2) ;
        
        // on aurait pu écrire
        //
        // document.getElementById("divtableau2").appendChild(
        //    array2table( "un petit  chat".split(/\s+/) ,"tab2")
        // ) ;
        //
        // ou meme
        //   document.getElementById("divtableau2").appendChild(   array2table( "un petit  chat".split(/\s+/) ,"tab2") )
        //
        // mais je préfére décomposer
        
        } // fin de fonction demotableau2
        
        // ----------------------------------------------------------------------------
        
        function tableauDecalage() {
        
        // pour savoir combien de jours sont écoulés pour une date donnée,
        // on utilise un tableau qui comptabilise les durées écoulées en fin de mois
        //
        // mois              J  F  M   A   M   J   J   A   S   0   N   D
        // jours par mois   31 28 31  30  31  30  31  31  30  31  30  31
        // cumul            31 59 90 120 151 182 212 243 273 304 334 365
        // on met 0 comme premier décalage, cela permet d'utiliser directement
        // le numéro du mois comme indice
        
        return( new Array(0,31,59,90,120,151,182,212,243,273,304,334,365) )
        
        } // fin de fonction tableauDecalage
        
        // ----------------------------------------------------------------------------
        
        function cej(jour,mois) {
        
        // au lieu de tout faire en une ligne avec
        //   return( jour - 1 + tableauDecalage[mois-1] )
        // on détaille le calcul
        
        tabDec =  tableauDecalage()
        duree  =  (jour-1) + tabDec[mois-1]
        return(duree)
        
        } // fin de fonction cej
        
        // ----------------------------------------------------------------------------
        
        function democej() {
        
        laDuree = cej(1,2) ;
        document.getElementById("cejxmp1").innerHTML = laDuree ;
        
        document.getElementById("cejxmp2").innerHTML = cej(2,3) ;
        
        } // fin de fonction democej
        
        // ----------------------------------------------------------------------------
        
        function cejs(jour,mois,unite) {
        
        duree  =  cej(jour,mois)
        
        // on a une durée en jour pour "j" ;
        // si unite="s" il faut convertir en semaines complètes (division entière par 7)
        // sinon, on renvoie -1
        
        if (unite=="j") {
           return(duree)
        } // fin si
        
        if (unite=="s") {
           return( Math.floor(duree/7) )
        } // fin si
        
        return(-1)
        
        } // fin de fonction cejs
        
        // ----------------------------------------------------------------------------
        
        function democejs() {
        
        document.getElementById("cejsxmp1").innerHTML = cejs(1,2,"j") ;
        document.getElementById("cejsxmp2").innerHTML = cejs(1,2,"s") ;
        document.getElementById("cejsxmp3").innerHTML = cejs(2,3,"s") ;
        document.getElementById("cejsxmp4").innerHTML = cejs(2,3,"autre chose") ;
        
        } // fin de fonction democejs
        
        // ----------------------------------------------------------------------------
        
        function cejs2() {
        
        // valeurs par défaut
        
        j = 1   //  premier
        m = 1   //  janvier
        u = "j" //  durée en jours
        
        // s'il n'y a qu'un argument, c'est une unité de durée
        // jour et mois doivent correspondre à la date courante
        
        // s'il y en a trois, c'est jour, mois, unite
        
        if (arguments.length==1) {
          u   = arguments[0]
          auj = new Date()
          j   = auj.getDate()
          m   = auj.getMonth() + 1
        } // fin de si
        
        if (arguments.length==3) {
            j = arguments[0]
            m = arguments[1]
            u = arguments[2]
        } // fin de si
        
        // pour debug
        
        if (console.debug) {
          console.debug(" j = "+j+" m = "+m+" u = "+u)
        } // fin si
        
        // on utilise comme codes d'ereur
        //   -1   si erreur sur le jour
        //   -20  si erreur sur le mois
        //   -300 si erreur sur l'unité de durée
        //  et on cumule ensuite, en cas d'erreurs multiples
        
        errJour = 0
        errMois = 0
        errUnit = 0
        
        // pour tester si j est un entier, une expression régulière, c'est bien
        // attention : on ne vérifie pas si on est bien dans un jour possible du mois,
        // comme le  30 février (voir cejs3 pour cela)
        
        reInt = new RegExp("^[0-9]+$") // cette expression régulière renvoie vrai pour un entier positif ou nul
        
        cnd1 = reInt.test(j)
        cnd2 = j>0
        cnd3 = j<32
        if (!( cnd1 && cnd2 && cnd3 )) {
          errJour = -1
        } // fin si
        
        cnd1 = reInt.test(m)
        cnd2 = m>0
        cnd3 = m<13
        if (!(cnd1&&cnd2&&cnd3)) {
          errMois = -20
        } // fin si
        
        if (!((u=="j")||(u=="s"))) { errUnit = -300 }
        
        erreur = errJour + errMois + errUnit
        
        // s'il n'y a pas d'erreur, on peut utiliser cejs
        
        if (erreur<0) {
          return(erreur)
        } else {
          return(cejs(j,m,u))
        } // fin de si
        
        } // fin de fonction cejs2
        
        // ----------------------------------------------------------------------------
        
        function democejs2() {
        
        document.getElementById("cejs2xmp1").innerHTML = cejs2(2,3,"j")  ;
        document.getElementById("cejs2xmp2").innerHTML = cejs2("j")      ;
        document.getElementById("cejs2xmp3").innerHTML = cejs2(40,3,"t") ;
        document.getElementById("cejs2xmp4").innerHTML = cejs2(30,2,"j") ;
        
        } // fin de fonction democejs2
        
        // ----------------------------------------------------------------------------
        
        function cejs3() {
        
        // valeurs par défaut
        
        j = 1   //  premier
        m = 1   //  janvier
        u = "j" //  durée en jours
        
        // s'il n'y a qu'un argument, c'est une unité de durée
        // jour et mois doivent correspondre à la date courante
        
        // s'il y en a trois, c'est jour, mois, unite
        
        if (arguments.length==1) {
          u   = arguments[0]
          auj = new Date()
          j   = auj.getDate()
          m   = auj.getMonth() + 1
        } // fin de si
        
        if (arguments.length==3) {
            j = arguments[0]
            m = arguments[1]
            u = arguments[2]
        } // fin de si
        
        // pour debug
        
        if (console.debug) {
          console.debug(" j = "+j+" m = "+m+" u = "+u)
        } // fin si
        
        // on utilise comme codes d'ereur
        //   -1   si erreur sur le jour
        //   -20  si erreur sur le mois
        //   -300 si erreur sur l'unité de durée
        //  et on cumule ensuite, en cas d'erreurs multiples
        
        errJour = 0
        errMois = 0
        errUnit = 0
        
        // pour tester si j est un entier, une expression régulière, c'est bien
        
        reInt = new RegExp("^[0-9]+$") // cette expression régulière renvoie vrai pour un entier positif ou nul
        
        cnd1 = reInt.test(j)
        cnd2 = j>0
        cnd3 = j<32
        if (!(cnd1&&cnd2&&cnd3)) {
          errJour = -1
        } // fin si
        
        cnd1 = reInt.test(m)
        cnd2 = m>0
        cnd3 = m<13
        if (!(cnd1&&cnd2&&cnd3)) {
          errMois = -20
        } // fin si
        
        if (errMois==0) {
        
             // pour bien tester la correspondance entre numéro de mois et nombre de jours,
             // on peut utiliser un tableau de numéros et de mois et de nombre de jours
        
             numMois = new Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12)
             jrpMois = new Array(0,30,28,31,30,31,30,31,31,30,31,30,31)
        
             if (j>jrpMois[m]) { errMois = -30 }
        
        } // fin si
        
        if (!((u=="j")||(u=="s"))) { errUnit = -300 }
        
        erreur = errJour + errMois + errUnit
        
        // s'il n'y a pas d'erreur  on peut utiliser cejs
        
        if (erreur<0) {
          return(erreur)
        } else {
          return(cejs(j,m,u))
        } // fin de si
        
        } // fin de fonction cejs3
        
        // ----------------------------------------------------------------------------
        
        function democejs3() {
        
        document.getElementById("cejs3xmp1").innerHTML = cejs3(2,3,"j")  ;
        document.getElementById("cejs3xmp2").innerHTML = cejs3("j")      ;
        document.getElementById("cejs3xmp3").innerHTML = cejs3(40,3,"t") ;
        document.getElementById("cejs3xmp4").innerHTML = cejs3(30,2,"j") ;
        
        } // fin de fonction democejs3
        
        // ----------------------------------------------------------------------------
        
        function cejs4(jour,mois) {
        
        duree  =  cej(jour,mois)
        
        // on renvoie un tableau :
        //  indice 0, durée en jours
        //  indice 1, durée en semaines
        
        tabDuree = new Array( duree, Math.floor(duree/7) )
        
        return( tabDuree)
        
        } // fin de fonction cejs4
        
        // ----------------------------------------------------------------------------
        
        function democejs4() {
        
        document.getElementById("cejs4xmp1").innerHTML = cejs4(2,3)[0] ;
        document.getElementById("cejs4xmp2").innerHTML = cejs4(2,3)[1] ;
        
        } // fin de fonction democejs4
        
        // ######################################################################
        
        // fonctions annexes utilsiées :
        
        // ######################################################################
        
        function addEvent(obj, evType, fn){
         if (obj.addEventListener){
           obj.addEventListener(evType, fn, false);
           return true;
         } else if (obj.attachEvent){
           var r = obj.attachEvent("on"+evType, fn);
           return r;
         } else {
           return false;
         }
        } // # fin de function addEvent
        
        // ######################################################
        
        function array2table(tableau,idt) {
        
        // ######################################################
        
        // on passe d'un tableau Javascript (array)
        // à un tableau XHTML (<table>)
        // habillage du tableau : bordeau en mode collapse, colonne 1 centrée
        // l'élément table est créé en mémoire puis renvoyé,
        // on peut l'insérer ensuite avec appendChild()
        
        tab = document.createElement("table") ;
        tab.setAttribute("id",idt) ;
        tab.setAttribute("cellpadding",5) ;
        tab.setAttribute("cellspacing",5) ;
        tab.setAttribute("border",1) ;
        tab.setAttribute("class","collapse") ;
        
        nblig = tableau.length
        
        etr  = document.createElement("tr") ;
        eth1 = document.createElement("th") ;
        txt1 = document.createTextNode("num") ;
        eth1.setAttribute("align","center") ;
        eth1.appendChild(txt1) ;
        etr.appendChild(eth1) ;
        eth2 = document.createElement("th") ;
        txt2 = document.createTextNode("mot") ;
        eth2.appendChild(txt2) ;
        etr.appendChild(eth2) ;
        tab.appendChild(etr) ;
        
        for (var ilig=0 ; ilig < nblig ; ilig++) {
          etr   = document.createElement("tr") ;
          etd1  = document.createElement("td") ;
          etd1.setAttribute("align","center") ;
          txt1  = document.createTextNode(ilig+1)
          etd1.appendChild(txt1) ;
          etr.appendChild(etd1) ;
          etd2  = document.createElement("td") ;
          txt2  = document.createTextNode(tableau[ilig])
          etd2.appendChild(txt2) ;
          etr.appendChild(etd2) ;
          tab.appendChild(etr) ;
        } ; // fin pour ilig
        
        return(tab)
        
        } ; // fin de fonction array2table
        
        // ######################################################
        

 

 

retour gH    Retour à la page principale de   (gH)