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
= 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,&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
= 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()")."&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     
?>

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)