// (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
// ######################################################
|