Valid XHTML     Valid CSS2    

Listing du fichier pagsd1.php

 

00001     <?php
00002     error_reporting(
E_ALL E_NOTICE E_STRICT) ;
00003     include("std7.php"
) ;
00004     include("pagsd_inc.php"
) ;
00005     #   # (gH)   -_-  pagsd1.php  ;  TimeStamp (unix) : 29 Janvier 2019 vers 08:45
00006     
00007     #######################################################################################
00008     
00009     debutPage
("PAGSD 1/5","strict","","pagsd.js") ;
00010     
00011     debutSection
() ;
00012     h1
(s_span("P","gbleu")."roduction ".s_span("A","gbleu")."utomatis&eacute;e de") ;
00013     h1
(s_span("G","gbleu")."raphiques, ".s_span("S","gbleu")."tatistiques et ".s_span("D","gbleu")."ocuments") ;
00014     $gh 
s_nbsp(20)." gilles.hunault \"at\" univ-angers.fr" ;
00015     h2
($gh,"gvert") ;
00016     pvide
() ;
00017     h2
(" -- partie 1 sur 5 : arbres et graphes");
00018     finSection
() ;
00019     
00020     ##############################################################################################
00021     
00022     sdl
(3) ; echo cmt(' pour afficher toutes les solutions : pagsd1.php?solutions=1') ; sdl(3) ;
00023     
00024     ## -------------------------------------------------------------------------------------------
00025     
00026     debutSection
() ;
00027     
00028     $tableauDesRubriques 
= array() ;
00029     $idr 
;
00030     $idr
++; $tableauDesRubriques[$idr] = "Exemple &eacute;l&eacute;mentaire de trac&eacute; d'un arbre avec $dot;
00031     $idr
++; $tableauDesRubriques[$idr] = "Th&eacute;or&egrave;me des quatre carr&eacute;s de Lagrange en $dot via $php;
00032     $idr
++; $tableauDesRubriques[$idr] = "Calcul de la matrice d'adjacence d'un graphe et trac&eacute; via $dot;
00033     $idr
++; $tableauDesRubriques[$idr] = "Trac&eacute;s $dot en ligne" ;
00034     $idr
++; $tableauDesRubriques[$idr] = "Trac&eacute; d'un &eacute;chiquier en $svg via $php " ;
00035     $idr
++; $tableauDesRubriques[$idr] = "Canviz, $js et conversions de formats de graphes" ;
00036     $idr
++; $tableauDesRubriques[$idr] = "Trac&eacute; de l'arbre d'un document $xhtml valide" ;
00037     $idr
++; $tableauDesRubriques[$idr] = "Animation $js d'un graphe d&eacute;fini en $xml;
00038     $idr
++; $tableauDesRubriques[$idr] = "Graphiques en barres" ;
00039     $idr
++; $tableauDesRubriques[$idr] = "M&eacute;thodologie du d&eacute;veloppement" ;
00040     $tdmCRLM 
= new tdm($tableauDesRubriques) ;
00041     $tdmCRLM
->titre() ;
00042     $tdmCRLM
->menu("oui","oui","nou") ;
00043     
00044     pvide
() ;
00045     
00046     p
() ;
00047      echo "Il est possible d'afficher toutes les solutions via " 
;
00048      echo href
("pagsd1.php?solutions=1","?solutions=1","bouton_fin vert_pastel nou") ;
00049      echo " et de toutes les masquer avec " 
;
00050      echo href
("pagsd1.php?solutions=0","?solutions=0","bouton_fin jaune_pastel nou").". " ;
00051     finp
() ;
00052     
00053     finSection
() ;
00054     
00055     debutSection
() ;
00056     $numSerie 
;
00057     $numExo   
;
00058     
00059     ## -------------------------------------------------------------------------------------------
00060     
00061     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Exemple &eacute;l&eacute;mentaire de trac&eacute; d'un arbre
00062     
00063     ## -------------------------------------------------------------------------------------------
00064     
00065     blockquote
() ;
00066     
00067     blockquote
() ;
00068     
00069     p
("texte") ;
00070     echo "Ecrire un graphe en " 
;
00071     echo href
("http://en.wikipedia.org/wiki/DOT_%28graph_description_language%29","langage DOT","grouge nou") ;
00072     echo " pour d&eacute;crire la structure classique de 
$xhtml&nbsp;: ".b('"html, head and body, title est dans le head"').". " ;
00073     echo " On g&eacute;n&eacute;rera un fichier 
$png. Comment le visualiser rapidement &agrave; partir de la ligne de commandes&nbsp;? " ;
00074     echo " On devra obtenir un graphe identique au graphe ci-dessous." 
;
00075     finp
() ;
00076     
00077     p
() ;
00078      nbsp
(15) ;
00079      $img 
"xhtml.png" ;
00080      echo href
($img,img($img,"",200)) ;
00081     finp
() ;
00082     
00083     p
("texte") ;
00084     echo "Reprendre le graphe en utilisant des boites rectangulaires pour chaque noeud comme dans le graphe ci-dessous. " 
;
00085     finp
() ;
00086     
00087     p
() ;
00088      nbsp
(15) ;
00089      $img 
"xhtml2.png" ;
00090      echo href
($img,img($img,"",200)) ;
00091     finp
() ;
00092     
00093     p
() ;
00094     echo " Peut-on faire des cadres emboit&eacute;s avec "
.b("$dot").", comme ci-dessous&nbsp;?" ;
00095     finp
() ;
00096     
00097     p
() ;
00098      nbsp
(15) ;
00099      $img 
"cadres.png" ;
00100      echo href
($img,img($img,"",400)) ;
00101     finp
() ;
00102     
00103     p
() ;
00104     echo " Comment produire le graphe ci-dessous avec "
.b("$dot")."&nbsp;?" ;
00105     echo " Est-ce un arbre&nbsp;?" 
;
00106     finp
() ;
00107     
00108     p
() ;
00109      nbsp
(15) ;
00110      $img 
"carre2.png" ;
00111      echo href
($img,img($img,"",200)) ;
00112     finp
() ;
00113     
00114     
00115     
00116     finblockquote
() ;
00117     
00118     solution
($numExo,$numSerie) ;
00119     
00120     p
("texte") ;
00121     echo "Le langage 
$dot est tr&egrave;s simple&nbsp;: un arc dans un graphe orient&eacute; se d&eacute;finit par les deux caract&egrave;res ".b("-&gt;")." et se termine par la fin de ligne. " ;
00122     echo " Pour d&eacute;crire la structure classique "
.b("html, head and body, title est dans le head").", on peut donc se contenter du" ;
00123     echo " fichier "
.href("xhtml1.dot")." suivant&nbsp;:" ;
00124     finp
() ;
00125     
00126     pre_fichier
("xhtml0.dot","cadre") ;
00127     
00128     p
("texte") ;
00129     echo " Toutefois, la " 
;
00130     #echo href("http://www.graphviz.org/Documentation/dotguide.pdf","documentation de $dot","gbleuf nou") ;
00131     echo 
href("dotguide.pdf","documentation de $dot","gbleuf nou") ;
00132     echo " montre qu'on peut regrouper les arcs issus d'un m&ecirc;me sommet. " 
;
00133     echo " Voici donc une solution un peu plus concise, dans le " 
;
00134     echo " fichier "
.href("xhtml1.dot")." suivant&nbsp;:" ;
00135     finp
() ;
00136     
00137     pre_fichier
("xhtml1.dot","cadre") ;
00138     
00139     p
("texte") ;
00140     echo " Pour produire le fichier 
$png associ&eacute;, il faut ex&eacute;cuter la commande&nbsp;:" ;
00141     finp
() ;
00142     
00143     pre_fichier
("xhtml1.cmd","cadre") ;
00144     
00145     p
("texte") ;
00146     echo " Pour visualiser rapidement ce premier fichier 
$png nomm&eacute; ".href("xhtml1.png").", on peut profiter du fait que Firefox sait afficher les fichiers $png " ;
00147     echo " donc pour visualiser, on peut taper la commande&nbsp;:" 
;
00148     finp
() ;
00149     
00150     pre_fichier
("xhtml2.cmd","cadre") ;
00151     
00152     p
("texte") ;
00153     echo " D'autres logiciels de visualisation d'images sont possibles, dont " 
;
00154     echo href
("http://doc.ubuntu-fr.org/geeqie","Geeqie") ;
00155     echo " pour Linux, on peut donc aussi taper la commande&nbsp;:" 
;
00156     finp
() ;
00157     
00158     pre_fichier
("xhtml3.cmd","cadre") ;
00159     
00160     p
("texte") ;
00161     echo " et profiter du fait que geeqie met ses listes des fichiers &agrave; jour d&egrave;s qu'on cr&eacute;e un fichier." 
;
00162     echo " Mais il y a de nombreuses autres solutions qui sont capables de n'afficher que le fichier demand&eacute; " 
;
00163     echo " dont "
.href("http://doc.ubuntu-fr.org/eog","eog")." (Eye of Gnome), soit la commande " ;
00164     finp
() ;
00165     
00166     pre_fichier
("xhtml4.cmd","cadre") ;
00167     
00168     p
("texte") ;
00169     echo " Voir le lien "
.href("http://doc.ubuntu-fr.org/visionneuse","visionneuses")." pour d'autres solutions  " ;
00170     echo " de visualisations (voir d'&eacute;dition) de graphiques. On peut aussi utiliser la commande " 
;
00171     echo b
("gnome-open xhtml1.png")." pour ouvrir le fichier-image, m&ecirc;me si " ;
00172     echo b
("gnome-open")." a sans doute &eacute;t&eacute; remplac&eacute; par ".href("http://askubuntu.com/questions/68961/what-can-i-use-instead-of-gnome-open","xdg-open")."... " ;
00173     echo " Plus d'infos sur "
.b("xdg-open ").href("https://wiki.archlinux.org/index.php/Xdg-open","ici").". " ;
00174     finp
() ;
00175     
00176     # pour les boites : shape record et struct, page 8 du guide
00177     
00178     p
("texte") ;
00179     echo "Pour produire des boites, la lecture du manuel " 
;
00180     echo href
("http://www.graphviz.org/pdf/dotguide.pdf","dotguide.pdf")." (".href("dotguide.pdf","copie locale").")" ;
00181     echo " fournit la r&eacute;ponse, soit le fichier "
.href("xhtml2.dot")." suivant et le ".href("xhtml2.png","png associ&eacute;")."&nbsp;:" ;
00182     finp
() ;
00183     
00184     pre_fichier
("xhtml2.dot","cadre") ;
00185     
00186     p
("texte") ;
00187     echo "Par contre il n'est pas possible de produire des cadres emboit&eacute;s de fa&ccedil;on simple, sauf &agrave; recourir &agrave; des \"sous-graphes\"." 
;
00188     finp
() ;
00189     
00190     p
("texte") ;
00191     echo " Le dessin du carr&eacute; propos&eacute; parait simple, mais le texte " 
;
00192     finp
() ;
00193     
00194     pre_fichier
("carre.dot","cadre") ;
00195     
00196     p
("texte") ;
00197     echo " ne produit malheureusement pas ce qu'on veut&nbsp;:" 
;
00198     finp
() ;
00199     
00200     p
() ;
00201      nbsp
(15) ;
00202      $img 
"carre1.png" ;
00203      echo href
($img,img($img,"",200)) ;
00204     finp
() ;
00205     
00206     p
("texte") ;
00207     echo " merci &agrave; Nicolas MALCOMBRE d'avoir fourni une solution simple&nbsp;:" 
;
00208     finp
() ;
00209     
00210     pre_fichier
("carre.txt","cadre") ;
00211     
00212     finsolution
() ;
00213     
00214     finblockquote
() ;
00215     
00216     ## -------------------------------------------------------------------------------------------
00217     
00218     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Th&eacute;or&egrave;me des quatre carr&eacute;s de Lagrange
00219     
00220     ## -------------------------------------------------------------------------------------------
00221     
00222     # en SVG sous forme d'un arbre la d&eacute;composition d'un nombre
00223     
00224     blockquote
() ;
00225     
00226     blockquote
() ;
00227     
00228     p
("texte") ;
00229     $url 
"http://fr.wikipedia.org/wiki/Th%C3%A9or%C3%A8me_des_quatre_carr%C3%A9s_de_Lagrange" ;
00230     echo "Le "
.href($url,"th&eacute;or&egrave;me des quatre carr&eacute;s de Lagrange","gbleuf nou")." dit que tout entier positif ou nul peut se d&eacute;composer en au " ;
00231     echo " moins une somme de 4 carr&eacute;s. " 
;
00232     finp
() ;
00233     
00234     p
("cadrejaune") ;
00235      br
() ;
00236      nbsp
(10) ;
00237      echo " &forall;n&ge;0, &exist;a,b,c,d tels que n = a"
.sup("2")." + b".sup("2")." + c".sup("2")." + d".sup("2") ;
00238      br
() ;
00239      nbsp
() ;
00240     finp
() ;
00241     
00242     
00243     p
("texte") ;
00244     echo "Voici quelques exemples de d&eacute;composition&nbsp;: " 
;
00245     finp
() ;
00246     
00247     include("ds4c_inc.php"
) ;
00248     
00249     blockquote
() ;
00250     table
(1,10,"collapse") ;
00251       entetesTableau
("n a b c d") ;
00252       for ($idf
=1;$idf<=8;$idf++) {
00253         $n 
rand(100,1000) ;
00254         if ($idf
==1) { $n 10 ; } ;
00255         if ($idf
==6) { $n 839 ; } ;
00256         if ($idf
==7) { $n 27 ; } ;
00257         list($a
,$b,$c,$d) = ds4c($n) ;
00258         tr
() ;
00259           td
("R") ; echo $n fintd() ;
00260           td
("R") ; echo $a fintd() ;
00261           td
("R") ; echo $b fintd() ;
00262           td
("R") ; echo $c fintd() ;
00263           td
("R") ; echo $d fintd() ;
00264         fintr
() ;
00265       } # fin pour
00266     fintable
() ;
00267     finblockquote
() ;
00268     
00269     p
("texte") ;
00270     echo "Ecrire un programme 
$php qui donne l'arbre des d&eacute;compositions d'un entier ".b("n")." pass&eacute; en param&egrave;tre, arbre " ;
00271     echo " obtenu en d&eacute;composant chacune des d&eacute;compositions &agrave; son tour, comme ci-dessous pour "
.b("n=839").". " ;
00272     finp
() ;
00273     
00274     p
() ;
00275      nbsp
(15) ;
00276      $img 
"839.png" ;
00277      echo href
($img,img($img,"",600)) ;
00278     finp
() ;
00279     
00280     p
("texte") ;
00281     echo "On pourra utiliser le sous-programme suivant " 
;
00282     echo href
("montresource.php?nomfic=quatrecarres.php","quatrecarres.php") ;
00283     echo " --&nbsp;"
.href("ds4c.zip","archive du code php")."&nbsp;--  " ;
00284     echo " pour obtenir une d&eacute;composition&nbsp;:" 
;
00285     finp
() ;
00286     
00287     pre_fichier
("quatrecarres.php","cadre") ;
00288     
00289     finblockquote
() ;
00290     
00291     solution
($numExo,$numSerie) ;
00292     
00293     p
("texte") ;
00294     echo "Consulter la page "
.href("lagrange.php","","gbleuf nou")." qui contient un lien vers son code-source&nbsp;; " ;
00295     echo " la page "
.href("lagrange2.php","","gbleuf nou")." en est une version plus \"user friendly\"." ;
00296     finp
() ;
00297     
00298     p
("texte") ;
00299     echo "Une solution "
.href("../tuteurs/tutajax.php","AJAX")." est mise en oeuvre dans " ;
00300     echo " la page "
.href("lagrange3.php","","gbleuf nou").". Quelles critiques peut-on en faire&nbsp;?" ;
00301     finp
() ;
00302     
00303     p
("texte") ;
00304     echo "Pour "
.b("n=635")." le fichier produit par la page ressemble tr&egrave;s fortement &agrave; ".href("n635.dot.txt").". " ;
00305     finp
() ;
00306     
00307     p
("texte") ;
00308     echo " Merci &agrave; Nicolas JOUSSET " 
;
00309     echo " d'avoir fourni la solution r&eacute;cursive suivante " 
;
00310     echo href
("montresource.php?nomfic=lagrange3rec.php","lagrange3rec.php") ;
00311     finp
() ;
00312     
00313     pre_fichier
("lagrange3rec.php","cadre") ;
00314     
00315     # r&eacute;aliser lagrange4.php : ajax en jquery et sans probl&egrave;me d'accent
00316     
00317     finsolution
() ;
00318     
00319     finblockquote
() ;
00320     
00321     ## -------------------------------------------------------------------------------------------
00322     
00323     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Calcul d'une matrice d'adjacence et trac&eacute; via DOT dans un document LaTeX via php
00324     
00325     ## -------------------------------------------------------------------------------------------
00326     
00327     blockquote
() ;
00328     
00329     blockquote
() ;
00330     
00331     p
("texte") ;
00332     echo "On suppose qu'on dispose des " 
;
00333     echo href
("http://fr.wikipedia.org/wiki/Liste_d%27adjacence","listes d'adjacence","gbleuf nou") ;
00334     echo " d'un graphe dans un fichier texte. Ecrire un programme "
.b("$php")." qui construit la " ;
00335     echo href
("http://fr.wikipedia.org/wiki/Matrice_d%27adjacence","matrice d'adjacence","gbleuf nou")." du graphe" ;
00336     echo " puis qui utilise "
.b("$dot")." pour fournir une visualisation du graphe. " ;
00337     echo " On commencera par &eacute;crire un programme en "
.b("CLI")." (ligne de commandes) " ;
00338     echo " avant de fournir une page Web qui lit les "
.b("listes d'adjacence")  ;
00339     echo " dans un "
.b("&lt;textarea&gt;").". " ;
00340     finp
() ;
00341     
00342     p
("texte") ;
00343     echo "Voici un exemple d'entr&eacute;e (fichier "
.href("listeadj.txt").")&nbsp;:" ;
00344     finp
() ;
00345     
00346     pre_fichier
("listeadj.txt","cadrebleu") ;
00347     
00348     p
("texte") ;
00349     echo "Et de sortie&nbsp;:" 
;
00350     finp
() ;
00351     
00352     pre_fichier
("matadj.txt","cadrejaune") ;
00353     
00354     pre
("cadre") ;
00355      nbsp
(15) ;
00356      $img 
"grapheadj.png" ;
00357      echo href
($img,img($img,"",300)) ;
00358     finpre
() ;
00359     
00360     finblockquote
() ;
00361     
00362     solution
($numExo,$numSerie) ;
00363     
00364     p
("texte") ;
00365     echo "Voici une " 
;
00366     echo href
("montresource.php?nomfic=matadj.php","premi&egrave;re version") ;
00367     echo " pour la ligne de commande "
;
00368     echo " qui correspond &agrave; la sortie fournie&nbsp;:" 
;
00369     finp
() ;
00370     
00371     pre_fichier
("matadj.php","cadrebleu") ;
00372     
00373     p
("texte") ;
00374     echo "Une deuxi&egrave;me version en mode Web avec un sous-programme de calcul et traitement " 
;
00375     echo " est disponible &agrave; l'adresse "
.href("webmatadj.php").". "  ;
00376     finp
() ;
00377     
00378     /*
00379     
00380     # version avec Javascript
00381     
00382     p("texte") ;
00383     echo "Une troisi&egrave;me version en ligne de commandes qui utilise le sous-programme pr&eacute;c&eacute;dent de calcul et traitement " ;
00384     echo " est ".href("montresource.php?nomfic=matadjv2.php","matadjv2.php").". "  ;
00385     finp() ;
00386     
00387     p("texte") ;
00388     echo "Enfin une quatri&egrave;me et derni&egrave;re version en mode Web avec $ajax " ;
00389     echo " est disponible &agrave; l'adresse ".href("webmatadjv2.php").". "  ;
00390     finp() ;
00391     
00392     */
00393     
00394     finsolution
() ;
00395     
00396     finblockquote
() ;
00397     
00398     ## -------------------------------------------------------------------------------------------
00399     
00400     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Trac&eacute;s DOT en ligne
00401     
00402     ## -------------------------------------------------------------------------------------------
00403     
00404     blockquote
() ;
00405     
00406     blockquote
() ;
00407     
00408     p
("texte") ;
00409     echo "A la r&eacute;flexion, &eacute;crire du code 
$dot sous &eacute;diteur, le sauvegarder puis taper une commande " ;
00410     echo b
("dot -T png ...") ;
00411     echo " en ligne de commandes est un peu \"fastidieux\". Y a-t-il des pages Web qui interpr&egrave;tent du code 
$dot&nbsp;?" ;
00412     finp
() ;
00413     
00414     finblockquote
() ;
00415     
00416     solution
($numExo,$numSerie) ;
00417     
00418     p
("texte") ;
00419     echo "Oui, bien s&ucirc;r. Il y a par exemple " 
;
00420     echo href
("http://graphs.grevian.org/graph","graphs.grevian") ;
00421     echo ", " 
;
00422     echo href
("http://ushiroad.com/jsviz/","jsviz") ;
00423     echo ", " 
;
00424     echo href
("http://sandbox.kidstrythisathome.com/erdos/","erdos") ;
00425     echo " et " 
;
00426     echo href
("http://ashitani.jp/gv/","gv") ;
00427     echo "." 
;
00428     finp
() ;
00429     
00430     p
("texte") ;
00431     echo "M&ecirc;me si elle n'est pas XHTML valide, la page " 
;
00432     echo href
("http://sandbox.kidstrythisathome.com/erdos/","erdos") ;
00433     echo " nous parait -- mais c'est bien s&ucirc;r tr&egrave;s subjectif -- la plus aboutie et donc " 
;
00434     echo " c'est celle que nous recommandons." 
;
00435     finp
() ;
00436     
00437     finsolution
() ;
00438     
00439     finblockquote
() ;
00440     
00441     ## -------------------------------------------------------------------------------------------
00442     
00443     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Trac&eacute; d'un &eacute;chiquier en SVG
00444     
00445     ## -------------------------------------------------------------------------------------------
00446     
00447     blockquote
() ;
00448     
00449     blockquote
() ;
00450     
00451     # utiliser doctype html5 et svg natif ?
00452     
00453     p
("texte") ;
00454     echo "Ecrire une page Web avec un programme 
$php qui produit un &eacute;chiquier en $svg de taille ".b("n")."x".b("n")." o&ugrave; ".b("n")." est pass&eacute; en param&egrave;tre." ;
00455     finp
() ;
00456     
00457     p
("texte") ;
00458     echo "Expliquer ce que produit le code 
$svg suivant&nbsp;:" ;
00459     finp
() ;
00460     
00461     pre_fichier
("inc_svg.txt","cadrejaune") ;
00462     
00463     finblockquote
() ;
00464     
00465     solution
($numExo,$numSerie) ;
00466     
00467     p
("texte") ;
00468     echo "Il pourrait &ecirc;tre tentant de se baser sur l'&eacute;chiquier propos&eacute; &agrave; la page "
.href("formats.php").". " ;
00469     echo " Voici donc une premi&egrave;re solution o&ugrave; "
.b("n")." est indiqu&eacute; dans l'URL&nbsp;: " ;
00470     echo href
("chess1.php").". Le code-source est " ;
00471     echo href
("montresource.php?nomfic=chess1.php","ici")."." ;
00472     finp
() ;
00473     
00474     p
("texte") ;
00475     echo "Une solution plus \"propre\" consiste &agrave; proposer &agrave; l'utilisateur de choisir "
.b("n")." dans " ;
00476     echo " une liste de s&eacute;lection. On la trouvera "
.href("chess2.php","ici")." avec un lien vers son code-source." ;
00477     finp
() ;
00478     
00479     p
("texte") ;
00480     echo "Le code 
$svg propos&eacute; montre une autre fa&ccedil;on d'&eacute;crire des cases&nbsp;: les instructions " ;
00481     echo b
("H").", ".b("V").", ".b("v")." etc. r&eacute;alisent " ;
00482     echo " des d&eacute;placements, absolus ou relatifs. Une fois ce code restructur&eacute; en &nbsp;" 
;
00483     finp
() ;
00484     
00485     pre_fichier
("inc2.svg","cadrejaune") ;
00486     
00487     p
("texte") ;
00488     echo "on voit qu'il s'agit aussi d'un "
.href("inc2.svg","&eacute;chiquier 8x8","gvert")." d&eacute;fini &agrave; l'aide de " ;
00489     echo " l'&eacute;l&eacute;ment "
.href("http://tutorials.jenkov.com/svg/path-element.html#path-commands","&lt;path&gt;","gnoir")." de $svg. " ;
00490     finp
() ;
00491     
00492     finsolution
() ;
00493     
00494     finblockquote
() ;
00495     
00496     
00497     ## -------------------------------------------------------------------------------------------
00498     
00499     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Canviz, Javascript et conversions
00500     
00501     ## -------------------------------------------------------------------------------------------
00502     
00503     blockquote
() ;
00504     
00505     blockquote
() ;
00506     
00507     p
("texte") ;
00508     echo "Qu'est-ce que "
.s_span("Canviz","gbleuf")."&nbsp;?" ;
00509     finp
() ;
00510     
00511     p
("texte") ;
00512     echo "Ecrire une page 
$php dont le rendu est ".b("XHTML strict")." valide " ;
00513     echo " avec tout le code 
$js ".b("externalis&eacute;") ;
00514     echo " qui reprend la page "
.href("http://www.ryandesign.com/canviz/","Canviz demo","gbleuf nou").". " ;
00515     echo " On utilisera les fonctions de "
.href("http://www.info.univ-angers.fr/~gh/internet/php_conceptuel.php","std.php","gvertf nou").". " ;
00516     finp
() ;
00517     
00518     /*
00519     p("texte") ;
00520     echo "Pourquoi vaut-il mieux nommer ".b(".gv")." ou ".b(".gv.txt")." plut&ocirc;t que ".b(".dot")." les fichiers &agrave; tracer par " ;
00521     echo href("http://en.wikipedia.org/wiki/DOT_%28graph_description_language%29","langage dot","grouge nou") ;
00522     echo "&nbsp;?" ;
00523     finp() ;
00524     */
00525     
00526     p
("texte") ;
00527     echo "Peut-on convertir facilement des fichiers 
$png de graphes en $svg&nbsp;? Et r&eacute;ciproquement&nbsp;?" ;
00528     finp
() ;
00529     
00530     finblockquote
() ;
00531     
00532     solution
($numExo,$numSerie) ;
00533     
00534     p
("texte") ;
00535     echo b
("Canviz")." est une biblioth&egrave;que $js de rendu pour les fichiers " ;
00536     echo href
("http://www.graphviz.org/doc/info/output.html#d:xdot","XDOT","gvertf nou") ;
00537     echo " qui g&eacute;n&eacute;ralisent les fichiers " 
;
00538     echo href
("http://en.wikipedia.org/wiki/DOT_%28graph_description_language%29","langage DOT","grouge nou")."." ;
00539     finp
() ;
00540     
00541     # http://code.google.com/p/canviz/
00542     # liste des Node, Edge and Graph Attributes
00543     # http://www.graphviz.org/doc/info/attrs.html
00544     
00545     # il manque la partie "view source"
00546     
00547     p
("texte") ;
00548     echo "Voici une page 
$php qui correspond aux contraintes : " ;
00549     echo href
("../js/canviz/canviz.php","ghCanviz")."." ;
00550     echo " Son code source est " 
;
00551     echo href
("../js/canviz/montresource.php?nomfic=canviz.php",b("ici"),"orange_stim nou").". " ;
00552     echo " On laisse le soin &agrave; la lectrice et au lecteur de trouver comment acc&eacute;der aux fichiers 
$js qui sont inclus. " ;
00553     finp
() ;
00554     
00555     # la d&eacute;mo : http://www.ryandesign.com/canviz/
00556     
00557     p
("texte") ;
00558     echo "Si les graphes 
$png sont produits par $dot, rien de plus simple&nbsp;: il suffit de changer de format de " ;
00559     echo " de sortie dans l'ex&eacute;cution de 
$dot. Sinon, cela risque d'&ecirc;tre plus compliqu&eacute;. " ;
00560     finp
() ;
00561     
00562     p
("texte") ;
00563     echo "
$dot g&egrave;re de nombreux formats, comme on peut le voir sur l'image cliquable ci-dessous, " ;
00564     echo " extraite de la page "
.href("http://www.graphviz.org/doc/info/output.html#d:image_fmts","image_fmts")." " ;
00565     echo " disponible sur le site de "
.href("http://www.graphviz.org/documentation/","graphviz").". " ;
00566     finp
() ;
00567     
00568     pre
("cadre") ;
00569      nbsp
(15) ;
00570      # $img = "http://www.graphviz.org/doc/info/plugins.png" ;
00571      $img 
"plugins.png" ;
00572      echo href
($img,img($img,"",600)) ;
00573     finpre
() ;
00574     
00575     finsolution
() ;
00576     
00577     finblockquote
() ;
00578     
00579     ## -------------------------------------------------------------------------------------------
00580     
00581     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Trac&eacute; de l'arbre d'un document xhtml valide
00582     
00583     ## -------------------------------------------------------------------------------------------
00584     
00585     blockquote
() ;
00586     
00587     blockquote
() ;
00588     
00589     # utiliser doctype html5 et svg natif ?
00590     
00591     p
("texte") ;
00592     echo "Ecrire un programme 
$php qui affiche l'arbre des &eacute;l&eacute;ments $xhtml d'une URL donn&eacute;e " ;
00593     echo " mais sans les contenus textuels." 
;
00594     echo " On produira l'arbre en 
$svg." ;
00595     finp
() ;
00596     
00597     p
("texte") ;
00598     echo " Comment afficher aussi les attributs&nbsp;? " 
;
00599     echo " Et le d&eacute;but des contenus textuels&nbsp;? " 
;
00600     finp
() ;
00601     
00602     finblockquote
() ;
00603     
00604     solution
($numExo,$numSerie) ;
00605     
00606     p
("texte") ;
00607     echo "Pas encore&nbsp;! " 
;
00608     echo "A ce jour (2016), aucun &eacute;tudiant ni aucun internaute averti n'a fourni de solution satisfaisante." 
;
00609     finp
() ;
00610     
00611     finsolution
() ;
00612     
00613     finblockquote
() ;
00614     
00615     ## -------------------------------------------------------------------------------------------
00616     
00617     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Animation Javascript d'un graphe d&eacute;fini en XML
00618     
00619     ## -------------------------------------------------------------------------------------------
00620     
00621     blockquote
() ;
00622     
00623     blockquote
() ;
00624     
00625     # utiliser doctype html5 et svg natif ?
00626     
00627     p
("texte") ;
00628     echo "R&eacute;aliser dans une page Web un affichage progressif d'un graphe &agrave; raison d'un arc par seconde " 
;
00629     echo " (dur&eacute;e param&eacute;trable). " 
;
00630     echo " On utilisera 
$svg." ;
00631     echo " Le graphe sera &eacute;crit en 
$xml au format  " ;
00632     echo href
("http://graphml.graphdrawing.org/primer/graphml-primer.html","GraphML")." ou " ;
00633     echo href
("http://martin-loetzsch.de/DOTML/","DOTML").". " ;
00634     echo " On pourra utiliser les fichiers suivants pour tester la page Web&nbsp;: " 
;
00635     echo href
("xhtml.graphml").", ".href("triangle.graphml").", " ;
00636     echo href
("xhtml.dotml")." et ".href("triangle.dotml").". " ;
00637     finp
() ;
00638     
00639     p
("texte") ;
00640     echo "Au passage, comment tester qu'un fichier d&eacute;finissant un graphe est "
.b('"valide"')."&nbsp;?" ;
00641     finp
() ;
00642     
00643     # mettre une liste avec zone pour afficher les graphes comme dans le cours XML
00644     
00645     finblockquote
() ;
00646     
00647     solution
($numExo,$numSerie) ;
00648     
00649     p
("texte") ;
00650     echo "Pas encore&nbsp;! " 
;
00651     echo "A ce jour (2016), aucun &eacute;tudiant ni aucun internaute averti n'a fourni de solution satisfaisante." 
;
00652     finp
() ;
00653     
00654     /*
00655     
00656     utiliser la transformation graphml2svg.xsl pour obtenir le svg
00657     
00658     DOTML est mieux ?
00659     http://martin-loetzsch.de/DOTML/
00660     
00661     */
00662     
00663     finsolution
() ;
00664     
00665     finblockquote
() ;
00666     
00667     ## -------------------------------------------------------------------------------------------
00668     
00669     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Graphiques en barres
00670     
00671     ## -------------------------------------------------------------------------------------------
00672     
00673     blockquote
() ;
00674     $numQue 
;
00675     blockquote
() ;
00676     
00677     $numQue
++ ; h3("Question ".$numExo.".".$numQue) ;
00678     
00679     p
("texte") ;
00680     echo "Quelle est la diff&eacute;rence entre un "
.b("histogramme de classes") ;
00681     echo " et un "
.b("histogramme de fr&eacute;quences") ;
00682     echo "&nbsp;?" 
;
00683     finp
() ;
00684     
00685     p
("texte") ;
00686     echo "Quelle est la m&eacute;thode la plus rapide (moins d'une minute) pour produire un histogramme de fr&eacute;quences en 
$png " ;
00687     echo " si on connait le titre, les modalit&eacute;s et les effectifs correspondant" 
;
00688     echo "&nbsp;?" 
;
00689     finp
() ;
00690     
00691     p
("texte") ;
00692     echo "Comment trace-t-on ces deux types d'histogrammes avec le logiciel 
$R;
00693     echo "&nbsp;?" 
;
00694     echo " On viendra bien s&ucirc;r ajouter le nom des modalit&eacute;s et le titre de la figure " 
;
00695     echo " dans le cas d'un histogramme de fr&eacute;quences. " 
;
00696     finp
() ;
00697     
00698     p
("texte") ;
00699     echo "Quelles pr&eacute;cautions faut-il prendre si on veut pouvoir comparer plusieurs " 
;
00700     echo " histogrammes de fr&eacute;quences" 
;
00701     echo "&nbsp;?" 
;
00702     finp
() ;
00703     
00704     $numQue
++ ; h3("Question ".$numExo.".".$numQue) ;
00705     
00706     
00707     p
("texte") ;
00708     echo "Modifier la page de "
.b("jphistopct")." pour qu'on dispose d'un param&egrave;tre suppl&eacute;mentaire " ;
00709     echo " nomm&eacute; "
.b("couleur")." et r&eacute;diger la documentation associ&eacute;e dans la page Web de pr&eacute;sentation. " ;
00710     finp
() ;
00711     
00712     p
("texte") ;
00713     echo "Ecrire ensuite un formulaire Web pour interfacer la nouvelle page de "
.b("jphistopct")." y compris avec une liste " ;
00714     echo " de s&eacute;lection pour la couleur. On s'arrangera pour g&eacute;rer une liste quelconque de modalit&eacute;s et le titre " 
;
00715     echo " &eacute;ventuellement accentu&eacute;. On affichera le graphique sous le formulaire." 
;
00716     finp
() ;
00717     
00718     $numQue
++ ; h3("Question ".$numExo.".".$numQue) ;
00719     
00720     p
("texte") ;
00721     echo "Ecrire une version 
$php en ligne de commandes qui utilise un seul param&egrave;tre, le nom d'un fichier-texte.  " ;
00722     echo " Ce fichier peut contenir plusieurs s&eacute;ries de donn&eacute;es &agrave; tracer. Chaque s&eacute;rie " 
;
00723     echo " contient un titre, la liste des modalit&eacute;s puis la liste des valeurs. Ce fichier pourra &ecirc;tre au format " 
;
00724     echo 
$csv$json, ou $xml. On fournira un ".em("help")." via les param&egrave;tres ".b("-h")." et ".b("--help").". " ;
00725     echo " On basera le nom du fichier de sortie 
$png sur le nom du fichier d'entr&eacute;e." ;
00726     finp
() ;
00727     
00728     p
() ;
00729       echo "Exemples possibles (mais non impos&eacute;s) de tels fichiers (archive "
.href("hfreq.zip").")&nbsp;:" ;
00730     finp
() ;
00731     
00732     blockquote
() ;
00733     montreListe
("hfreqXmp.xml hfreqXmp.csv hfreqXmp.json","hfreq") ;
00734     finblockquote
() ;
00735     
00736     p
("texte") ;
00737     echo "Que pourrait-on ajouter &agrave; ces fichiers de donn&eacute;es&nbsp;?" 
;
00738     finp
() ;
00739     
00740     p
("texte") ;
00741     echo "On pourra suivre le plan suivant afin d'avoir un programme assez complet et test&eacute;&nbsp;:" 
;
00742     finp
() ;
00743     
00744     pre_fichier
("jphisto_plan.txt","cadrebleu") ;
00745     
00746     finblockquote
() ;
00747     
00748     solution
($numExo,$numSerie) ;
00749     
00750     $numQue 
;
00751     
00752     /*
00753     p("texte") ;
00754     echo "Pas encore&nbsp;! " ;
00755     echo "A ce jour (2016), aucun &eacute;tudiant ni aucun internaute averti n'a fourni de solution compl&egrave;te satisfaisante." ;
00756     finp() ;
00757     
00758     p("texte") ;
00759     echo "Voici toutefois quelques &eacute;l&eacute;ments de r&eacute;ponse." ;
00760     finp() ;
00761     */
00762     
00763     $numQue
++ ; h3("R&eacute;ponse ".$numExo.".".$numQue) ;
00764     
00765     p
("texte") ;
00766     echo "Un "
.b("histogramme de classes")." est la visualisation de la densit&eacute; d'une variable quantitative, " ;
00767     echo " comme par exemple celle de l'age de personnes, exprim&eacute; en ann&eacute;es, ou la longueur de s&eacute;quences " 
;
00768     echo " prot&eacute;iques, exprim&eacute;e en aa (acides amin&eacute;s). Voir par exemple " 
;
00769     echo "l'"
.href("pagsd2.php#tdm1","histogramme")." de l'exercice 1 pour la s&eacute;rie 2 d'exercices de ce cours. ";
00770     echo " Pour un tel histogramme, une fois le probl&egrave;me d&eacute;licat du nombre de classes (ou "
.em("bins")." en anglais)" ;
00771     echo " r&eacute;solu, les boites -- ou rectangles ou encore, les "
.em("barres")." -- doivent &ecirc;tre contigues " ;
00772     echo " pour bien montrer la nature continue de la variable statistique sous-jacente. " 
;
00773     finp
() ;
00774     
00775     p
("texte") ;
00776     echo "A l'oppos&eacute;, un "
.b("histogramme de fr&eacute;quences") ;
00777     echo " sert &agrave; repr&eacute;senter la distribution d'une variable qualitative " 
;
00778     echo " et il doit &ecirc;tre compos&eacute; de rectangles bien s&eacute;par&eacute;s, pour faire ressortir la nature " 
;
00779     echo em
("discr&egrave;te")." (au sens statistique de \"discontinu\") de la variable &eacute;tudi&eacute;e. " ;
00780     finp
() ;
00781     
00782     p
("texte") ;
00783     echo "La m&eacute;thode la plus rapide (moins d'une minute) pour produire un histogramme de fr&eacute;quences en PNG " 
;
00784     echo " si on connait le titre, les modalit&eacute;s et les effectifs correspondant" 
;
00785     echo " consiste &agrave; passer par un programme ou un script d&eacute;di&eacute;, comme par exemple notre page Web " 
;
00786     echo " nomm&eacute;e "
.href("http://www.google.fr/search?q=jphistopct","jphistopct").". " ;
00787     finp
() ;
00788     
00789     p
("texte") ;
00790     echo "Les fonctions 
$R correspondantes sont respectivement nomm&eacute;es " ;
00791     echo hrrr
("hist","graphics") ;
00792     echo " et "  
;
00793     echo hrrr
("barplot","graphics").". " ;
00794     echo "On essaiera les commandes " 
;
00795     finp
() ;
00796     
00797     pre
("cadre") ;
00798     echo "     help(\"hist\")        ; \n" 
;
00799     echo "     example(\"hist\")     ; \n" 
;
00800     echo "     help(\"barplot\")     ; \n" 
;
00801     echo "     example(\"barplot\")  ; \n" 
;
00802     finpre
() ;
00803     
00804     p
("texte") ;
00805     echo " pour comprendre et savoir comment utiliser ces fonctions." 
;
00806     finp
() ;
00807     
00808     p
("texte") ;
00809     echo "Ainsi, pour repr&eacute;senter les effectifs absolus "
.b("x")." et ".b("y")." correspondant " ;
00810     echo " aux nombres de femmes et d'hommes dans un &eacute;chantillon de donn&eacute;es, on peut &eacute;crire, avec 
$R&nbsp;:" ;
00811     finp
() ;
00812     
00813     pre_fichier
("hfreq1.r","cadre") ;  # hfreq1_fig.r pour le png
00814     
00815     p
("texte") ;
00816     echo "On obtient alors l'histogramme de fr&eacute;quences suivant&nbsp;:" 
;
00817     finp
() ;
00818     
00819     pre
("cadrejaune") ;
00820      nbsp
(15) ;
00821      $img 
"hfreq1.png" ;
00822      echo href
($img,img($img,"",600)) ;
00823     finpre
() ;
00824     
00825     p
("texte") ;
00826     echo "Il est &laquo;raisonnable&raquo; d'ajouter un titre et le nom des modalit&eacute;s, soit les codes &nbsp;:" 
;
00827     finp
() ;
00828     
00829     pre_fichier
("hfreq2.r","cadre") ;  # hfreq2_fig.r pour le png
00830     
00831     p
("texte") ;
00832     echo "Voici le nouvel histogramme de fr&eacute;quences obtenu&nbsp;:" 
;
00833     finp
() ;
00834     
00835     pre
("cadrejaune") ;
00836      nbsp
(15) ;
00837      $img 
"hfreq2.png" ;
00838      echo href
($img,img($img,"",600)) ;
00839     finpre
() ;
00840     
00841     
00842     p
("texte") ;
00843     echo "Mais il est en g&eacute;n&eacute;ral conseill&eacute; de calculer, fournir et tracer les "
.b("effectifs relatifs")." (fr&eacute;quences, pourcentages) " ;
00844     echo "plut&ocirc;t que les "
.b("effectifs absolus").", soit" ;
00845     echo "&nbsp;:" 
;
00846     finp
() ;
00847     
00848     pre_fichier
("hfreq3.r","cadre") ;
00849     
00850     pre_fichier
("hfreq3.res","cadrebleu") ;
00851     
00852     pre
("cadrejaune") ;
00853      nbsp
(15) ;
00854      $img 
"hfreq3.png" ;
00855      echo href
($img,img($img,"",600)) ;
00856     finpre
() ;
00857     
00858     p
("texte") ;
00859     echo "Il est alors possible de comparer des histogrammes d'effectifs relatifs (avec une  m&ecirc;me &eacute;chelle), " 
;
00860     echo " ce que ne permettent pas les histogrammes d'effectifs absolus, sauf &agrave; vouloir induire en erreur " 
;
00861     echo " comme on peut le voir ci-dessous" 
;
00862     echo "&nbsp;:" 
;
00863     finp
() ;
00864     
00865     graphiques_R_png
("barplot01.png","barplot02.png") ;
00866     
00867     p
("texte") ;
00868     echo "Le choix des valeurs 15 pour le nombre de femmes et 5 pour le nombre d'hommes " 
;
00869     echo " est "
.em("astucieux")." ou ".em("pratique")." dans la mesure o&ugrave; les pourcentages " ;
00870     echo " correspondants s'obtiennent par une simple multiplication par 5." 
;
00871     finp
() ;
00872     
00873     $numQue
++ ; h3("R&eacute;ponse ".$numExo.".".$numQue) ;
00874     
00875     p
("texte") ;
00876     echo "Consulter "
.href("../jphistopct2.php","jphistopct2")." pour la production d'histogrammes avec couleur. " ;
00877     echo " La page "
.href("../f_jphistopct2.php","f_jphistopct2")." fournit un formulaire pour l'interfacer. " ;
00878     finp
() ;
00879     
00880     p
("texte") ;
00881     echo "Si on donne une couleur non reconnue par " 
;
00882     echo href
("http://jpgraph.net/","jpgraph")." comme ".em("pomme").", l'histogramme n'est pas affich&eacute;. A la place, on obtient une image d'erreur comme" ;
00883     finp
() ;
00884     
00885     pre
("cadrejaune") ;
00886      nbsp
(15) ;
00887      $img 
"jpgraphError.png" ;
00888      echo href
($img,img($img,"",400)) ;
00889     finpre
() ;
00890     
00891     /* on aurait put utiliser le code
00892     
00893     $url         = "http://jpgraph.net/download/manuals/chunkhtml/apd.html" ;
00894     $tabCouleurs = listeDesCouleursJpgraph($url) ;
00895     $nbc         = count($tabCouleurs) ;
00896     
00897     pour obtenir le nombre de couleurs, soit 882
00898     
00899     ###########################################################
00900     
00901     function listeDesCouleursJpgraph($adr) {
00902     
00903     ###########################################################
00904     
00905     $cnt = file_get_contents($adr) ;
00906     preg_match("/<tbody>(.*?)tbody/",$cnt,$tabc1) ;
00907     $tabc2 = preg_split("/<td>/",$tabc1[1]) ;
00908     $nbElt = count($tabc2) ;
00909     
00910     $tabCoul = array() ;
00911     $nbCoul  = -1 ;
00912     
00913     foreach ($tabc1 as $idc => $couleur) {
00914          $tabLigne = preg_split("/<td>/",$couleur) ;
00915          foreach ($tabLigne as $elt) {
00916            $lig = trim($elt) ;
00917            $pc = substr($lig,0,1) ; # premier caract&egrave;re
00918            if (!( ($pc=="<") or ($pc=="(") )) {
00919              $coul = preg_replace("/<(.*)/","",$lig)  ;
00920              #echo $lig."\n" ;
00921              #echo $coul."\n" ;
00922              $nbCoul++ ;
00923              $tabCoul[$nbCoul] = $coul ;
00924            } ; # fin si
00925          } ; # fin pour chaque
00926     } ; # fin pour chaque
00927     
00928     return($tabCoul) ;  # count(tabCoul) renvoie 882
00929     
00930     } ; # fin fonction listeDesCouleurs
00931     
00932     */
00933     
00934     p
("texte") ;
00935     echo "Comme la liste des couleurs (visible " 
;
00936     echo href
("http://jpgraph.net/download/manuals/chunkhtml/apd.html","ici").") " ;
00937     echo " est longue -- environ 880 couleurs, il serait fastidieux de fournir une liste de s&eacute;lection. Nous avons " 
;
00938     echo " pr&eacute;f&eacute;rer laisser l'utilisateur consulter la page des couleurs dans une autre fen&ecirc;tre. " 
;
00939     echo " Pour r&eacute;pondre exactement &agrave; l'&eacute;nonc&eacute; (afficher l'image sous le formulaire et couleur OK), on utilisera le formulaire " 
;
00940     echo " "
.href("../f_jphistopct3.php","f_jphistopct3").". On notera que la v&eacute;rification des couleurs " ;
00941     echo " est dynamique et qu'on met "
.b("navy")." si la couleur n'existe pas." ;
00942     finp
() ;
00943     
00944     $numQue
++ ; h3("R&eacute;ponse ".$numExo.".".$numQue) ;
00945     
00946     p
("texte") ;
00947     echo "Le fichier "
.href("jphisto.zip","jphisto.php")." fournit la solution demand&eacute;e en ligne de commandes. " ;
00948     echo " Voici quelques exemples d'utilisation" 
;
00949     echo "&nbsp;:" 
;
00950     finp
() ;
00951     
00952     pre_fichier
("jphisto_xmps.txt","cadre") ;
00953     
00954     p
("texte") ;
00955     echo "Ce qu'il manque &agrave; ces fichiers, c'est sans doute la valeur de l'effectif total (le nombre de valeurs " 
;
00956     echo " en tout), de fa&ccedil;on &agrave; pouvoir tester la somme des effectifs." 
;
00957     finp
() ;
00958     
00959     p
("texte") ;
00960     echo "Le fait d'avoir &eacute;crit sous forme de commentaires le " 
;
00961     echo href
("jphisto_plan.txt","plan") ;
00962     echo " du programme induit l'organisation physique des fichiers " 
;
00963     echo " dans le cas d'un travail collaboratif&nbsp;: " 
;
00964     finp
() ;
00965     
00966     pre_fichier
("jphisto_plan2.txt","cadrebleu") ;
00967     
00968     
00969     p
("texte") ;
00970     echo "Il va de soi qu'alors une telle organisation doit indiquer quels sous-programmes " 
;
00971     echo " sont utilis&eacute;s, avec le d&eacute;tail des entr&eacute;es et des sorties, comme par exemple&nbsp;:" 
;
00972     finp
() ;
00973     
00974     pre_fichier
("jphisto_plan3.txt","cadrebleu") ;
00975     
00976     p
("texte") ;
00977     echo " Cela permet notamment au d&eacute;veloppeur de la partie 3.3 (production du PNG) " 
;
00978     echo " d'&eacute;crire sa fonction sans attendre la fin de l'&eacute;criture de la partie 3.2 " 
;
00979     echo " (lecture des donn&eacute;es)&nbsp;:" 
;
00980     finp
() ;
00981     
00982     pre_fichier
("jphisto_plan4.txt","cadrebleu") ;
00983     
00984     finsolution
() ;
00985     
00986     finblockquote
() ;
00987     
00988     
00989     ## -------------------------------------------------------------------------------------------
00990     
00991     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # M&eacute;thodologie de d&eacute;veloppement
00992     
00993     ## -------------------------------------------------------------------------------------------
00994     
00995     blockquote
() ;
00996     
00997     blockquote
() ;
00998     
00999     p
("texte") ;
01000     echo "Nous avons vu avec la d&eacute;composition de Lagrange (archive de la solution "
.href("lagrange.zip").") et " ;
01001     echo " avec la matrice d'adjacence d'un graphe (archive de la solution "
.href("matadj.zip").")  " ;
01002     echo " qu'il y a une " 
;
01003     gvert
("m&eacute;thode pour &eacute;crire du $php");
01004     echo " afin d'aboutir " 
;
01005     echo grouge
("progressivement")." &agrave; une page Web compl&eacute;te " ;
01006     echo " utilisable sans rechargement de la page. D&eacute;tailler cette m&eacute;thode. " 
;
01007     finp
() ;
01008     
01009     p
("texte") ;
01010     echo "Quelles sont les contraintes suppl&eacute;mentaires rajout&eacute;es par le fait qu'on utilise " 
;
01011     echo " un ex&eacute;cutable en ligne de commandes qui produit une image&nbsp;?" 
;
01012     finp
() ;
01013     
01014     finblockquote
() ;
01015     
01016     solution
($numExo,$numSerie) ;
01017     
01018     /*
01019     p("texte") ;
01020     echo "Solution pr&eacute;sent&eacute;e en cours mais non encore r&eacute;dig&eacute;e." ;
01021     finp() ;
01022     */
01023     
01024     
01025     p
("texte") ;
01026     echo "Un programme 
$php qui s'ex&eacute;cute en ligne de commandes et une page Web en $php " ;
01027     echo " qui utilise 
$ajax pour afficher des donn&eacute;es sont des programmes dont le " ;
01028     echo "&laquo;coeur&raquo; est le m&ecirc;me mais dont &laquo;l'enrobage&raquo; sont " 
;
01029     echo " diff&eacute;rents. " 
;
01030     sdl
() ;
01031     echo " Il est sans doute raisonnable de commencer avec la ligne de commande " 
;
01032     echo " et d'utiliser "
.rouge("\$ARGV")." pour les param&egrave;tres et d'&eacute;crire et de tester les " ;
01033     echo " sous-programmes de calcul, de lecture et d'&eacute;criture avant de passer " 
;
01034     echo "(un probl&egrave;me &agrave; la fois) &agrave; une page Web classique, sans doute avec l'utilisation du " 
;
01035     echo " du mode "
.rouge("GET")." et de la variable-tableau ".rouge("\$_GET")." pour la gestion des " ;
01036     echo " param&egrave;tres. " 
;
01037     sdl
() ;
01038     echo " Il restera ensuite &agrave; redesigner la page Web avec des sous-programmes "
;
01039     echo " et des param&egrave;tres pour d&eacute;cider d'afficher ou non l'ent&ecirc;te de la page Web " 
;
01040     echo " (partie "
.rouge("&lt;html&gt;")." et ".rouge("&lt;head&gt;").") pour pouvoir r&eacute;cup&eacute;rer la partie &agrave; ins&eacute;rer en $ajax." ;
01041     finp
() ;
01042     
01043     p
("texte") ;
01044     echo "Si le programme 
$php (ou la page Web) utilise " ;
01045     echo " un ex&eacute;cutable en ligne de commandes qui produit une image, " 
;
01046     echo " il faut bien s&ucirc;r d'abord v&eacute;rifier que l'ex&eacute;cutable est accessible sur le serveur. " 
;
01047     echo " Ensuite, il faut se rappeler qu'en ligne de commandes c'est l'utilisateur \"normal\" qui " 
;
01048     echo " ex&eacute;cute le code alors que pour une page Web le browser utilise un autre utilisateur qui " 
;
01049     echo " n'a pas les m&ecirc;mes droits. Par exemple sous "
.b("Linux")." l'utilisateur " ;
01050     echo " associ&eacute; au navigateur est nomm&eacute; " 
;
01051     echo b
("www-data")." et il fait partie du groupe " ;
01052     echo b
("www-data").". Il faut aussi choisir si on &eacute;crit dans la zone temporaire du serveur Web " ;
01053     echo " (r&eacute;pertoire "
.b("/tmp")." du serveur, qui n'est sans doute pas le " ;
01054     echo " r&eacute;pertoire "
.b("/tmp")." du syst&egrave;me d'exploitation sous-jacent) " ;
01055     echo " ou si on &eacute;crit dans un r&eacute;pertoire personnel qui ne sert qu'&agrave; cela (avec sans doute les " 
;
01056     echo " droits d&eacute;finis sous Linux par "
.vert("chmod&nbsp;+777)").") sachant qu'alors " ;
01057     echo " le syst&egrave;me ne fait pas \"le m&eacute;nage\" dans ce r&eacute;pertoire et qu'il faut donc le vider " 
;
01058     echo " manuellement de temps en temps. Et &laquo;naturellement&raquo;, on utilisera " 
;
01059     echo " la fonction de 
$php nomm&eacute;e ".b("tempnam()")." pour &eacute;viter les acc&egrave;s concurrents..." ;
01060     finp
() ;
01061     
01062     
01063     finsolution
() ;
01064     
01065     finblockquote
() ;
01066     
01067     ## -------------------------------------------------------------------------------------------
01068     p
() ;
01069     echo href
("montresource.php?nomfic=pagsd1.php","Code-source de cette page","orange_stim nou")."&nbsp;;&nbsp;" ;
01070     echo " fichiers inclus&nbsp;: "
.href("montresource.php?nomfic=pagsd_inc.php","pagsd_inc.php","orange_stim nou") ;
01071     echo " et "
.href("montresource.php?nomfic=pagsd.js","pagsd.js","orange_stim nou")."." ;
01072     finp
() ;
01073     
01074     finSection
() ;
01075     finPage
() ;
01076     ?>

Pour ne pas voir les numéros de ligne, ajoutez &nl=non à la suite du nom du fichier.

 

 

retour gH    Retour à la page principale de   (gH)