Valid XHTML     Valid CSS2    

Listing du fichier l2a_tp1.php

 

00001     <?php
00002     #    (gH)   -_-  l2a_tp1.php  ;  TimeStamp (unix) : 25 Février 2013 vers 11:19
00003     
00004     error_reporting
(E_ALL E_NOTICE E_STRICT) ;
00005     include("std.php"
) ;
00006     include("l2a_inc.php"
) ;
00007     
00008     $numTp 
;
00009     debutPageTp
($numTp) ;
00010     
00011     ## -------------------------------------------------------------------------------------------
00012     
00013     sdl
(3) ; echo cmt(' pour afficher toutes les solutions : l2a_tp'.$numTp.'.php?solutions=1') ; sdl(3) ;
00014     
00015     ## -------------------------------------------------------------------------------------------
00016     
00017     debutSection
() ;
00018     
00019     $tableauDesRubriques 
= array() ;
00020     $idr 
;
00021     $idr
++; $tableauDesRubriques[$idr] = "PHP cli : date, heure et numéro de version" ;
00022     $idr
++; $tableauDesRubriques[$idr] = "PHP cli : conversion pouces/cm" ;
00023     $idr
++; $tableauDesRubriques[$idr] = "PHP -a et test rapide de fonction" ;
00024     $idr
++; $tableauDesRubriques[$idr] = "Gestion Web de l'affichage avec \\n,&lt;br&gt; et &lt;p&gt;" ;
00025     $idr
++; $tableauDesRubriques[$idr] = "Combien de tests&nbsp;?" ;
00026     $idr
++; $tableauDesRubriques[$idr] = "Affichage XHTML de milles terrestres " ;
00027     $idr
++; $tableauDesRubriques[$idr] = "Affectations multiples " ;
00028     $idr
++; $tableauDesRubriques[$idr] = "Une fonction pour &lt;h1&gt; " ;
00029     $idr
++; $tableauDesRubriques[$idr] = "Occurences du maximum d'un tableau " ;
00030     $idr
++; $tableauDesRubriques[$idr] = "La structure de données ".b("\"pile\"")." version 1" ;
00031     $idr
++; $tableauDesRubriques[$idr] = "Polynome quand tu nous tiens" ;
00032     $tdmCRLM 
= new tdm($tableauDesRubriques) ;
00033     $tdmCRLM
->titre() ;
00034     $tdmCRLM
->menu("oui","oui","nou") ;
00035     
00036     pvide
() ;
00037     
00038     p
() ;
00039      echo "Il est possible d'afficher toutes les solutions via "
.href("l2a_tp$numTp.php?solutions=1","?solutions=1","bouton_fin jaune_pastel nou").". " ;
00040     finp
() ;
00041     
00042     finSection
() ;
00043     
00044     debutSection
() ;
00045     p
("texte") ;
00046     echo s_span
("Rappel :","grouge") ;
00047     echo " vos programmes PHP doivent &ecirc;tre transférés sur le serveur "
.b("forge")." dans votre répertoire " ;
00048     echo s_span
("forge_html","gbleuf")." avant d'&ecirc;tre utilisés. Vous pouvez les éditer sous Windows ou sous Linux, mais au final ";
00049     echo " ils doivent &ecirc;tre exécutés sur forge. " 
;
00050     echo " Il faut utiliser "
.s_span("ssh -X -Y login@janus.info.univ-angers.fr","grouge") ;
00051     echo " pour vous connecter ou " 
;
00052     echo "  "
.s_span("ssh -X -Y login@forge","grouge")." si vous &ecirc;tes dans une des salles locales de TP." ;
00053     finp
() ;
00054     finSection
() ;
00055     
00056     debutSection
() ;
00057     $numExo 
;
00058     
00059     ## -------------------------------------------------------------------------------------------
00060     
00061     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # PHP cli : date, heure et numéro de version
00062     
00063     ## -------------------------------------------------------------------------------------------
00064     
00065     blockquote
() ;
00066     
00067     blockquote
() ;
00068     
00069     p
("texte") ;
00070     echo "Ecrire un programme PHP qui fonctionne en mode CLI (ligne de commande) qui affiche la date et l'heure et le " 
;
00071     echo " numéro de la version du PHP utilisé sur le serveur." 
;
00072     finp
() ;
00073     
00074     p
("texte") ;
00075     echo "A quoi sert l'instruction nommée "
.b("phpinfo()")."&nbsp;?" ;
00076     finp
() ;
00077     
00078     
00079     finblockquote
() ;
00080     
00081     solution
($numExo,$numTp) ;
00082     
00083     p
("texte") ;
00084     echo " Pour la date et l'heure, on utilise la m&ecirc;me fonction de PHP nommée "
.href("http://php.net/manual/fr/function.date.php","date")."  " ;
00085     echo " mais avec des paramètres différents." 
;
00086     echo " Il est conseillé de lire au moins une fois le manuel de PHP à l'adresse "
.href("http://php.net/manual/fr/function.date.php")." pour voir " ;
00087     echo " toutes les options possibles. Voici ce qu'on peut écrire pour réaliser l'exercice&nbsp;:" 
;
00088     finp
() ;
00089     
00090     pre_fichier
("dh.php","cadre") ;
00091     
00092     p
("texte") ;
00093     echo " La fonction nommée "
.href("http://php.net/manual/fr/function.phpversion.php","phpversion()")." renvoie, en plus du numéro de version le nom du système " ;
00094     echo " d'exploitation. Par contre l'instuction "
.href("http://php.net/manual/fr/function.phpinfo.php","phpinfo()")." renvoie toute la configuration de PHP." ;
00095     echo " Ainsi, le simple programme " 
;
00096     finp
() ;
00097     
00098     pre_fichier
("phpinfo.php","cadre") ;
00099     
00100     p
("texte") ;
00101     echo "renvoie tout ce que vous pouvez lire à l'URL "
.href("phpinfo.php")."." ;
00102     echo " Cela permet en particulier de savoir comment est configuré le serveur, quel codage il utilise pour les accents, quels modules sont disponibles..." 
;
00103     finp
() ;
00104     
00105     
00106     finsolution
() ;
00107     
00108     finblockquote
() ;
00109     
00110     ## -------------------------------------------------------------------------------------------
00111     
00112     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # PHP cli : conversion pouces/cm
00113     
00114     ## -------------------------------------------------------------------------------------------
00115     
00116     blockquote
() ;
00117     
00118     blockquote
() ;
00119     
00120     p
("texte") ;
00121     echo "Ecrire un programme PHP qui fonctionne en mode CLI qui a besoin de deux paramètres : une valeur numérique et le mot \"pouces\" ou " 
;
00122     echo " le mot \"cm\". On effectuera alors la conversion idoine, sachant qu'un pouce vaut 2,54&nbsp;cm." 
;
00123     echo " Voici un exemple de ce qu'on voudrait comme fonctionnement&nbsp;:" 
;
00124     finp
() ;
00125     
00126     pre_fichier
("convcminch.txt","cadre bleu_pastel") ;
00127     
00128     p
("texte") ;
00129     echo "Volontairement, on n'utilisera aucune fonction et on ne fera aucun test sur la valeur numérique afin de voir commment PHP se comporte " 
;
00130     echo " en cas de donnée mal typée." 
;
00131     finp
() ;
00132     
00133     p
("texte") ;
00134     echo "Y a-t-il une façon standard d'écrire des paramètres sous Linux&nbsp;?" 
;
00135     finp
() ;
00136     
00137     p
("texte") ;
00138     echo "Ecrire un programme similaire qui fonctionne avec les paramètres "
.b("val")." et ".b("unit")." passés en méthode ".b("GET")." dans l'URL. " ;
00139     echo " Voir la page "
.href("convcminch2.php")." comme exemple." ;
00140     echo " On pourra utiliser les fichiers "
.b("debutpage.php")." et ".b("finpage.php")." de " ;
00141     echo " l'archive "
.href("debutfin.zip")." pour générer le début et la fin de la page." ;
00142     finp
() ;
00143     
00144     p
("texte") ;
00145     echo "Ecrire enfin une page XHTML Strict valide  basée sur le \"squelette\" de page "
.href("sqs.htm")." avec un formulaire dont l'attribut ".b("action")." est " ;
00146     echo " "
.href("convcminch2.php")."." ;
00147     finp
() ;
00148     
00149     finblockquote
() ;
00150     
00151     solution
($numExo,$numTp) ;
00152     
00153     p
("texte") ;
00154     echo "Pour tester le nombre d'arguments, on peut utiliser "
.href("http://php.net/manual/fr/reserved.variables.argc.php","argc") ;
00155     echo " et pour leur valeur on utilise "
.href("http://www.php.net/manual/fr/reserved.variables.argv.php","argv")." qui font partie des " ;
00156     echo " variables dites "
.href("http://www.php.net/manual/fr/reserved.variables.php","réservées").". " ;
00157     echo " Un exemple de solution est "
.href("montresource.php?nomfic=convcminch.php","convcminch.php")."&nbsp;:" ;
00158     finp
() ;
00159     
00160     pre_fichier
("convcminch.php","cadre") ;
00161     
00162     p
("texte") ;
00163     echo "Si on se trompe sur l'unité, par exemple en écrivant pomme ou pouce au lieu de pouces (donc sans \"S\"), la variable \$fact n'est pas définie, " 
;
00164     echo " pas plus que \$autreu, d'où deux erreurs. De m&ecirc;me, si on ne fournit pas un nombre mais une chaine, il devrait y avoir une erreur mais PHP renvoie 0, tout simplement&nbsp;:" 
;
00165     finp
() ;
00166     
00167     pre_fichier
("convcminch2.txt","cadre bleu_pastel") ;
00168     
00169     p
("texte") ;
00170     echo "Sous Linux, on écrit des paramètres nommés à l'ancienne mode avec un tiret et un espace, à la nouvelle mode avec deux tirets et un signe égale. " 
;
00171     echo " Voici ce que cela donnerait si on décide de nommer "
.b("unit")." et ".b("val")." les paramètres&nbsp;:" ;
00172     finp
() ;
00173     
00174     pre_fichier
("convcminch3.txt","cadre") ;
00175     
00176     p
("texte") ;
00177     echo "Le code-source PHP de la page nommée "
.href("convcminch2.php","","grouge nou")." qui gère ces paramètres avec la méthode  GET " ;
00178     echo " est "
.href("montresource.php?nomfic=convcminch2.php","ici","gvert nou")." et " ;
00179     echo " un exemple de formulaire basé sur "
.b("sqs.htm")." est ".href("convcminch_form.htm","là","gbleuf nou").". " ;
00180     finp
() ;
00181     
00182     
00183     finsolution
() ;
00184     
00185     finblockquote
() ;
00186     
00187     ## -------------------------------------------------------------------------------------------
00188     
00189     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # PHP -a et test rapide de fonction" ;
00190     
00191     ## -------------------------------------------------------------------------------------------
00192     
00193     blockquote
() ;
00194     
00195     blockquote
() ;
00196     p
("texte") ;
00197     echo "Quelqu'un vous dit que la fonction "
.b("ucfirst()")." fait une &laquo;quasi uppérisation&raquo; d'une chaine de caractères. ";
00198     echo " Avez-vous besoin d'écrire un programme php pour tester ce que fait cette fonction&nbsp;?" 
;
00199     finp
() ;
00200     
00201     finblockquote
() ;
00202     
00203     solution
($numExo,$numTp) ;
00204     
00205     p
("texte") ;
00206     echo "Non, bien s&ucirc;r car on peut utiliser le mode interactif avec "
.b("php -a").". Démonstration&nbsp;:" ;
00207     finp
() ;
00208     
00209     pre_fichier
("ucfirst.txt","cadre bleu_pastel") ;
00210     
00211     finsolution
() ;
00212     
00213     finblockquote
() ;
00214     
00215     ## -------------------------------------------------------------------------------------------
00216     
00217     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Gestion Web de l'affichage avec \\n,&lt;br&gt; et &lt;p&gt;"
00218     
00219     ## -------------------------------------------------------------------------------------------
00220     
00221     blockquote
() ;
00222     
00223     blockquote
() ;
00224     
00225     p
("texte") ;
00226     echo "Téléchargez l'archive "
.href("debutfin.zip")." et reproduisez le programme suivant que vous nommerez ".b("essaipage.php").". " ;
00227     echo " Où seront les sauts à la ligne dans la page Web ? Et dans le code-source généré de la page Web ? Que se passe-t-il s'il y a une erreur, " 
;
00228     echo " par exemple si on écrit "
.b("echi")." au lieu de ".b("echo")."&nbsp;? Au passage, rappelez où on peut trouver une liste des entités XHTML." ;
00229     finp
() ;
00230     
00231     p
("texte") ;
00232      echo "On en profitera pour installer " 
;
00233      echo href
("http://users.skynet.be/mgueury/mozilla/download_090.html","HTML VALIDATOR","bouton_fin jaune_pastel nou") ;
00234      echo " de M. Gueury." 
;
00235     finp
() ;
00236     
00237     pre_fichier
("essaipage.txt","cadre tarose") ;
00238     
00239     p
("texte") ;
00240     echo "Il est possible de rapatrier l'archive et de la décompresser en ligne de commandes (dans le bon répertoire&nbsp;!) via&nbsp;:" 
;
00241     finp
() ;
00242     
00243     pre_fichier
("wgetarch.txt","cadre") ;
00244     
00245     finblockquote
() ;
00246     
00247     solution
($numExo,$numTp) ;
00248     
00249     p
("texte") ;
00250     echo "Les sauts de ligne dans le code source HTML apparaissent uniquement quand on demande à PHP de produire "
.b("\\n").". " ;
00251     echo " Par contre au niveau de la page Web, vous devez vous rappeler que tous les espaces, tabulations et sauts de ligne sont " 
;
00252     echo " remplacés par un seul espace. Donc seules des balises explicites comme &lt;br&gt;, &lt;p&gt;,  &lt;li&gt;... ou des marges induites " 
;
00253     echo " par le CSS permettent de passer à la ligne. Ce qui signifie que le texte "
.b("\"à tous et à toutes.\"")." est sur une seule ligne, " ;
00254     echo " les mots étant séparés par un seul espace." 
;
00255     echo " Vérification : "
.href("essaipage2.php","ici").". " ;
00256     finp
() ;
00257     
00258     p
("texte") ;
00259     echo "En cas d'erreur, par exemple avec "
.b("echi")." au lieu d'".b("echo").",  le serveur réagit en fonction de sa configuration. Ainsi sur forge, une " ;
00260     echo " erreur fait que la page est vide... dommage&nbsp;! " 
;
00261     echo " Avec un serveur configuré autrement, on peut avoir le détail (pas toujours très compréhensible) de l'erreur comme ci-dessous&nbsp;:" 
;
00262     finp
() ;
00263     
00264     p
() ;
00265     $img 
"echi.png" ;
00266     nbsp
(15) ;
00267     echo href
($img,img($img,$img,900)) ;
00268     finp
() ;
00269     
00270     p
("texte") ;
00271     echo "Pour retrouver une liste d'entités XHTML, "
.em("Google est notre ami").", soit le lien français " ;
00272     echo href
("https://www.google.fr/search?q=liste+entit%C3%A9s+XHTML","entités","gvertf nou") ;
00273     echo " ou le lien anglais " 
;
00274     echo href
("https://www.google.fr/search?q=XHTML%20entities%20list","entities","gvertf nou").". " ;
00275     echo " Parmi les listes proposées, nous conseillons celle de la " 
;
00276     echo href
("http://www.w3schools.com/tags/ref_entities.asp","W3 School","grouge nou").", celle de " ;
00277     echo href
("http://www.elizabethcastro.com/html/extras/entities.html","elizabethcastro","grouge nou") ;
00278     echo " et enfin celle du "
.href("http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references","wiki anglais","grouge nou").". " ;
00279     finp
() ;
00280     
00281     finsolution
() ;
00282     
00283     finblockquote
() ;
00284     
00285     ## -------------------------------------------------------------------------------------------
00286     
00287     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Combien de tests ?
00288     
00289     ## -------------------------------------------------------------------------------------------
00290     
00291     blockquote
() ;
00292     
00293     p
("texte") ;
00294     echo "Combien de cas faut-il envisager et tester avant d'&ecirc;tre convaincu que le programme en ligne de commande " 
;
00295     echo href
("montresource.php?nomfic=convcminch.php","convcminch.php","gbleuf nou")." est correct et qu'on a &laquo;tout prévu&raquo;&nbsp;?" ;
00296     finp
() ;
00297     
00298     p
("texte") ;
00299     echo "Au passage, quelle est la différence entre développer et programmer&nbsp;?" 
;
00300     finp
() ;
00301     
00302     solution
($numExo,$numTp) ;
00303     
00304     
00305     p
("texte") ;
00306     echo "Il faut certainement prévoir et tester au moins 7 cas&nbsp;:" 
;
00307     finp
() ;
00308     
00309     ol
() ;
00310     li
("un cas sans aucun paramètre&nbsp;;") ;
00311     li
("un cas avec tous les paramètres corrects en nom et en valeur&nbsp;;") ;
00312     li
("un cas avec le paramètre ".b("val")." absent&nbsp;;") ;
00313     li
("un cas avec le paramètre ".b("unit")." absent&nbsp;;") ;
00314     li
("un cas avec la valeur du paramètre ".b("val")." mal typée&nbsp;;") ;
00315     li
("un cas avec la valeur du paramètre ".b("unit")." mal typée&nbsp;;") ;
00316     li
("un cas avec des valeurs des paramètres avec beaucoup de décimales.") ;
00317     finol
() ;
00318     
00319     
00320     p
("texte") ;
00321     echo "Programmer, c'est juste écrire un programme. " 
;
00322     echo "Développer, c'est réfléchir au problème, l'analyser, choisir des solutions, " 
;
00323     echo " les programmer, les documenter, les tester... " 
;
00324     finp
() ;
00325     
00326     p
("texte") ;
00327     echo "Ainsi, pour l'exemple de conversion, un &laquo;vrai&raquo; développeur " 
;
00328     echo " ajoutera la détection de l'initiale (p pour pouce, c pour cm), viendra certainement " 
;
00329     echo " ajouter un "
.b("s")." à ".b("pouce")." pour obtenir ".b("pouces")." au lieu de reprocher " ;
00330     echo " à l'utilisateur une mauvaise orthographe, il (elle) proposera peut-&ecirc;tre " 
;
00331     echo " d'utiliser aussi l'initiale "
.b("i")." pour inch(es), voire m&ecirc;me d " ;
00332     echo " (pour Daumen en allemand) si la page est beaucoup lue en Allemagne... " 
;
00333     finp
() ;
00334     
00335     finsolution
() ;
00336     
00337     finblockquote
() ;
00338     
00339     
00340     ## -------------------------------------------------------------------------------------------
00341     
00342     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Affichage XHTML de milles terrestres
00343     
00344     ## -------------------------------------------------------------------------------------------
00345     
00346     blockquote
() ;
00347     blockquote
() ;
00348     
00349     p
("texte") ;
00350     echo "Reproduire la page "
.href("mille.php","","gbleuf nou").". On utilisera ".b("debutpage.php")." et ".b("finpage.php")." comme précédemment mais " ;
00351     echo " aussi "
.href("std.css")." afin d'avoir une page XHTML valide et &laquo;jolie&raquo;." ;
00352     echo " On produira le tableau avec une seule boucle "
.rouge("pour")." dont l'indice variera de 1 à 15. " ;
00353     echo " Les valeurs seront arrondies et affichées à droite avec deux décimales." 
;
00354     finp
() ;
00355     
00356     finblockquote
() ;
00357     
00358     solution
($numExo,$numTp) ;
00359     
00360     p
("texte") ;
00361     echo "Voir le code-source de "
.href("montresource.php?nomfic=mille.php","mille.php","gbleuf nou").". " ;
00362     finp
() ;
00363     
00364     p
("texte") ;
00365     echo "En version &laquo;php conceptuel&raquo;, c'est-à-dire sans balise apparente," 
;
00366     echo " consulter le code-source de "
.href("montresource.php?nomfic=mille2.php","mille2.php","gbleuf nou")." dont le rendu est ".href("mille2.php")."."  ;
00367     finp
() ;
00368     
00369     
00370     finsolution
() ;
00371     
00372     finblockquote
() ;
00373     
00374     ## -------------------------------------------------------------------------------------------
00375     
00376     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; #  Affectations multiples
00377     
00378     ## -------------------------------------------------------------------------------------------
00379     
00380     blockquote
() ;
00381     blockquote
() ;
00382     
00383     p
("texte") ;
00384     echo "Il parait qu'il est possible de réaliser en PHP des affectations multiples avec "
.b("list").". Est-ce vrai&nbsp;?" ;
00385     echo " A quoi cela peut-il servir&nbsp;?" 
;
00386     finp
() ;
00387     
00388     finblockquote
() ;
00389     
00390     solution
($numExo,$numTp) ;
00391     
00392     p
("texte") ;
00393     echo "Si on lit la "
.href("http://php.net/manual/fr/function.list.php","documentation")." de ".b("list").", on voit qu'il est " ;
00394     echo " effectivement possible de réaliser plusieurs affectations avec list à gauche et un tableau (array) à droite." 
;
00395     echo " Cela permet par exemple de permuter deux variables en une seule ligne, comme dans l'exemple suivant&nbsp;:" 
;
00396     finp
() ;
00397     
00398     pre_fichier
("affmult.txt","cadre tarose") ;
00399     
00400     finsolution
() ;
00401     
00402     finblockquote
() ;
00403     
00404     ## -------------------------------------------------------------------------------------------
00405     
00406     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; #  Une fonction pour <h1>
00407     
00408     ## -------------------------------------------------------------------------------------------
00409     
00410     blockquote
() ;
00411     blockquote
() ;
00412     
00413     p
("texte") ;
00414     echo "On voudrait implémenter une fonction pour produire des titres de niveau 1 avec &lt;h1&gt;. Ecrire une fonction "
.b("achin()") ;
00415     echo " qui correspond au comportement suivant&nbsp;:" 
;
00416     finp
() ;
00417     
00418     pre_fichier
("achin.txt","cadre bleu_pastel") ;
00419     
00420     p
("texte") ;
00421     echo "Quelle serait la syntaxe pour avoir juste une indication de classe&nbsp;? Et d'id&nbsp;?" 
;
00422     finp
() ;
00423     
00424     finblockquote
() ;
00425     
00426     solution
($numExo,$numTp) ;
00427     
00428     p
("texte") ;
00429     echo "Voici un exemple possible de fonction&nbsp;:" 
;
00430     finp
() ;
00431     
00432     pre_fichier
("achin.php","cadre") ;
00433     
00434     p
("texte") ;
00435     echo "Pour utiliser juste une classe, "
.b("achin(\$txt,\$cla)")." suffit et pour avoir juste un id, il faut écrire " ;
00436     echo "  "
.b("achin(\$txt,\"\",\$id)").". " ;
00437     finp
() ;
00438     finsolution
() ;
00439     
00440     finblockquote
() ;
00441     
00442     ## -------------------------------------------------------------------------------------------
00443     
00444     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Occurences du maximum d'un tableau
00445     
00446     ## -------------------------------------------------------------------------------------------
00447     
00448     blockquote
() ;
00449     blockquote
() ;
00450     
00451     p
("texte") ;
00452     echo " On voudrait trouver la plus grande valeur d'un tableau et le nombre de fois où elle apparait. " 
;
00453     echo " Pour cela, on commencera par écrire une fonction "
.b("valMax(\$leTableau)")." qui calcule la plus grande valeur du tableau " ;
00454     echo " et on utilisera une deuxième boucle pour compter le nombre d'occurences du maximum." 
;
00455     finp
() ;
00456     
00457     p
("texte") ;
00458     echo "Recommencer l'exercice en utilisant cette fois une seule boucle pour déterminer à la fois le maximum et son "
;
00459     echo " nombre d'occurences. " 
;
00460     echo " On utilisera  les valeurs 1 8 2 8 3 6 8 2 comme jeu d'essai dans un premier temps." 
;
00461     echo " Dans un second temps, " 
;
00462     echo ' on utilisera  les valeurs "a", "b", "oui", "c", "oui", "d" comme ' 
;
00463     echo " jeu d'essai." 
;
00464     
00465     echo " On donnera aussi la position de la " 
;
00466     echo " première et de la dernière occurence du maximum. On pourra se contenter d'une version en ligne de commandes." 
;
00467     finp
() ;
00468     
00469     finblockquote
() ;
00470     
00471     solution
($numExo,$numTp) ;
00472     
00473     p
("texte") ;
00474     echo "On trouvera la solution dans "
.href("montresource.php?nomfic=valmax.php","valmax.php")."." ;
00475     echo " Le non-typage explicite de PHP permet d'utiliser les instructions qu'il s'agisse d'un tableau de nombres ou de  chaines de caractères. " 
;
00476     echo " Voici la solution avec les lignes non numérotées&nbsp;:" 
;
00477     finp
() ;
00478     
00479     pre_fichier
("valmax.php","cadre") ;
00480     
00481     p
("texte") ;
00482     echo "Il serait possible de tout déterminer sans utiliser de boucle explicite car PHP dispose de nombreuses fonctions sur tableau. " 
;
00483     echo " Voici par exemple comment trouver le maximum et son nombre d'occurences. Il faut bien s&ucirc;r noter qu'utiliser ces fonctions ne " 
;
00484     echo " garantit pas l'efficacité (et donc la rapidité de la solution)." 
;
00485     finp
() ;
00486     
00487     pre_fichier
("valmaxfn.php","cadrejaune") ;
00488     
00489     p
("texte") ;
00490     echo "Calculer le maximum et son nombre d'occurrences en une seule boucle ne présente pas vraiment d'intér&ecirc;t " 
;
00491     echo " pour un \"petit tableau\" (disons quelques centaines ou quelques milliers d'éléments). Par contre, si on dépasse le " 
;
00492     echo " million d'éléments, c'est non négligeable. Par exemple, si une image comme " 
;
00493     echo href
("http://images.aperio.com/H_E%2040x.svs/view.apml","celle-ci")." -- 7&nbsp;Go&nbsp;! --" ;
00494     echo " doit &ecirc;tre traitée pour trouver le maximum d'intensité des pixels (ce qui correspond à l'intensité maximale de " 
;
00495     echo " la maladie), le parcours de l'image mise dans un tableau dure environ 6 minutes. Avec deux boucles, il faut donc en tout " 
;
00496     echo " 12 minutes&nbsp;; avec une seule boucle, la durée d'exécution est plut&ocirc;t proche de 8 minutes (il y a un \"surcout\" " 
;
00497     echo " de temps à cause des tests dans la boucle)." 
;
00498     finp
() ;
00499     
00500     finsolution
() ;
00501     
00502     finblockquote
() ;
00503     
00504     ## -------------------------------------------------------------------------------------------
00505     
00506     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; #  La structure de données pile (v1)
00507     
00508     ## -------------------------------------------------------------------------------------------
00509     
00510     blockquote
() ;
00511     blockquote
() ;
00512     
00513     p
("texte") ;
00514     echo "On voudrait implémenter en ligne de commandes la notion de pile où on ne peut ajouter qu'en haut de pile. " 
;
00515     echo " Pour cela on utilisera un tableau PHP. Voici un exemple de ce qu'on voudrait pouvoir écrire&nbsp;:" 
;
00516     finp
() ;
00517     
00518     pre_fichier
("pilev1.txt","cadre") ;
00519     
00520     p
("texte") ;
00521     echo "Implémenter les fonctions citées en utilisant seulement " 
;
00522     echo " "
.b("return()").", ".b("array()").", ".b("count()").", l'indexation et ".b("unset()").". " ;
00523     finp
() ;
00524     
00525     p
("texte") ;
00526     echo "Comment dit-on une pile en anglais&nbsp;? Et empiler&nbsp;? Et dépiler&nbsp;? Y a-t-il des fonctions PHP prévues pour cela&nbsp;?" 
;
00527     finp
() ;
00528     
00529     finblockquote
() ;
00530     
00531     solution
($numExo,$numTp) ;
00532     
00533     p
("texte") ;
00534     echo "Consulter "
.href("montresource.php?nomfic=pilev1.php","pilev1.php")." pour un listing numéroté, " ;
00535     echo " mais vous pouvez vous contenter de ce qui suit&nbsp;:" 
;
00536     finp
() ;
00537     
00538     pre_fichier
("pilev1.php","cadrebleu") ;
00539     
00540     p
("texte") ;
00541     echo "Dans le contexte informatique, une pile se dit "
.b("stack")." en anglais, " ;
00542     echo "empiler "
.b("to&nbsp;stack").", " ;
00543     echo "dépiler ou désempiler "
.b("to&nbsp;unstack").". " ;
00544     echo "PHP dispose des fonctions "
;
00545     echo href
("http://www.php.net/manual/en/function.array-push.php","array_push","gbleuf nou")." et " ;
00546     echo href
("http://www.php.net/manual/en/function.array-pop.php","array_pop","gbleuf nou")." ce qui fait " ;
00547     echo " qu'on n'a pas besoin d'inventer de fonction pour résoudre le problème, comme le montre le programme " 
;
00548     echo " ci-dessous&nbsp;:" 
;
00549     finp
() ;
00550     
00551     pre_fichier
("pilev1bis.php","cadrejaune") ;
00552     
00553     p
("texte") ;
00554     echo "On notera au passage le comportement de "
.b("array_pop")." lorsque la pile est vide." ;
00555     finp
() ;
00556     finsolution
() ;
00557     
00558     finblockquote
() ;
00559     
00560     ## -------------------------------------------------------------------------------------------
00561     
00562     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; #  Polynome qaund tu nous tiens
00563     
00564     ## -------------------------------------------------------------------------------------------
00565     
00566     blockquote
() ;
00567     blockquote
() ;
00568     
00569     p
("texte") ;
00570     echo "Contrairement à ce qu'on croit dans les &laquo;petites classes&raquo;, un polynome n'est pas une fonction de x, " 
;
00571     echo " mais un \"objet mathématique\" défini par une liste de coefficients. Par exemple la liste " 
;
00572     finp
() ;
00573     
00574     p
("texte") ;
00575     nbsp
(15) ;
00576     input_text
("coeffs","   1   0   -2   6   ",20,"bleu_pastel") ;
00577     finp
() ;
00578     
00579     p
("texte") ;
00580     echo "correspond à x"
.sup("3")." -2 x + 6 avec les puissances décroissantes, et à " ;
00581     echo " 1 - 2 x"
.sup("2")." + 6  x".sup("3")." avec les puissances croissantes." ;
00582     finp
() ;
00583     
00584     p
("texte") ;
00585     echo "Ecrire un programme PHP qui lit une telle liste et qui affiche le polynome comme ci-dessus." 
;
00586     finp
() ;
00587     
00588     p
("texte") ;
00589     echo "Pour les plus courageuses et les plus courageux, implémenter la saisie d'un deuxième polynome, " 
;
00590     echo " puis calculer et afficher leur somme, leur produit, leur polynome équivalent à leur fonction primitive et celui de leur fonction dérivée. " 
;
00591     finp
() ;
00592     
00593     finblockquote
() ;
00594     
00595     solution
($numExo,$numTp) ;
00596     
00597     vnc
() ;
00598     
00599     finsolution
() ;
00600     
00601     finblockquote
() ;
00602     
00603     ## -------------------------------------------------------------------------------------------
00604     
00605     finPageTp
($numTp) ; # contient finSection() et finPage() ; la fonction est dans l2a_inc.php
00606     
00607     ?>

La coloration syntaxique est réalisée par un enrobage de la function php nommée highlight_file

mais si vous préférez, vous pouvez utiliser celle de SyntaxHighlighter ou même celle de geshi.

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)