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 = 1 ;
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 = 0 ;
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,<br> et <p>" ;
00025 $idr++; $tableauDesRubriques[$idr] = "Combien de tests ?" ;
00026 $idr++; $tableauDesRubriques[$idr] = "Affichage XHTML de milles terrestres " ;
00027 $idr++; $tableauDesRubriques[$idr] = "Affectations multiples " ;
00028 $idr++; $tableauDesRubriques[$idr] = "Une fonction pour <h1> " ;
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 être transférés sur le serveur ".b("forge")." dans votre répertoire " ;
00048 echo s_span("forge_html","gbleuf")." avant d'être utilisés. Vous pouvez les éditer sous Windows ou sous Linux, mais au final ";
00049 echo " ils doivent ê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 êtes dans une des salles locales de TP." ;
00053 finp() ;
00054 finSection() ;
00055
00056 debutSection() ;
00057 $numExo = 0 ;
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()")." ?" ;
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ê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 :" ;
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 cm." ;
00123 echo " Voici un exemple de ce qu'on voudrait comme fonctionnement :" ;
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 ?" ;
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")." :" ;
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ême, si on ne fournit pas un nombre mais une chaine, il devrait y avoir une erreur mais PHP renvoie 0, tout simplement :" ;
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 :" ;
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 «quasi uppérisation» d'une chaine de caractères. ";
00198 echo " Avez-vous besoin d'écrire un programme php pour tester ce que fait cette fonction ?" ;
00199 finp() ;
00200
00201 finblockquote() ;
00202
00203 solution($numExo,$numTp) ;
00204
00205 p("texte") ;
00206 echo "Non, bien sûr car on peut utiliser le mode interactif avec ".b("php -a").". Démonstration :" ;
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,<br> et <p>"
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")." ? 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 !) via :" ;
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 <br>, <p>, <li>... 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 ! " ;
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 :" ;
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'ê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 «tout prévu» ?" ;
00296 finp() ;
00297
00298 p("texte") ;
00299 echo "Au passage, quelle est la différence entre développer et programmer ?" ;
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 :" ;
00307 finp() ;
00308
00309 ol() ;
00310 li("un cas sans aucun paramètre ;") ;
00311 li("un cas avec tous les paramètres corrects en nom et en valeur ;") ;
00312 li("un cas avec le paramètre ".b("val")." absent ;") ;
00313 li("un cas avec le paramètre ".b("unit")." absent ;") ;
00314 li("un cas avec la valeur du paramètre ".b("val")." mal typée ;") ;
00315 li("un cas avec la valeur du paramètre ".b("unit")." mal typée ;") ;
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 «vrai» 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-être " ;
00331 echo " d'utiliser aussi l'initiale ".b("i")." pour inch(es), voire mê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 «jolie»." ;
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 «php conceptuel», 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 ?" ;
00385 echo " A quoi cela peut-il servir ?" ;
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 :" ;
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 <h1>. Ecrire une fonction ".b("achin()") ;
00415 echo " qui correspond au comportement suivant :" ;
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 ? Et d'id ?" ;
00422 finp() ;
00423
00424 finblockquote() ;
00425
00426 solution($numExo,$numTp) ;
00427
00428 p("texte") ;
00429 echo "Voici un exemple possible de fonction :" ;
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 :" ;
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û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ê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 Go ! --" ;
00494 echo " doit ê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 ; avec une seule boucle, la durée d'exécution est plutô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 :" ;
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 ? Et empiler ? Et dépiler ? Y a-t-il des fonctions PHP prévues pour cela ?" ;
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 :" ;
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 stack").", " ;
00543 echo "dépiler ou désempiler ".b("to 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 :" ;
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 «petites classes», 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 à la page principale de (gH)