Listing du fichier tp1.php
00001<?php
00002 # # (gH) -_- tp1.php ; TimeStamp (unix) : 13 Juillet 2018 vers 10:10
00003 error_reporting(E_ALL | E_NOTICE | E_STRICT ) ;
00004 header('Content-Type "text/html; charset=iso-8859-1"') ;
00005 ini_set( 'default_charset', 'ISO-8859-1' );
00006 include("decra-inc.php") ;
00007
00008 $numSerie = 1 ;
00009 debutTP($numSerie,"Gestion de noms et de prénoms, prototypes") ;
00010 ghAtAngers() ;
00011
00012 $R = ghRouge("R") ;
00013 $XML = ghRouge("XML") ;
00014 $Awk = ghRouge("AWK") ;
00015 $Php = ghVert("PHP") ;
00016 $Php7 = ghVert("PHP 7") ;
00017 $Python = ghBleu("Python") ;
00018
00019 ## -------------------------------------------------------------------------------------------
00020
00021 sdl(3) ; echo cmt(' pour afficher toutes les solutions : tp1.php?solutions=1') ; sdl(3) ;
00022
00023 ## -------------------------------------------------------------------------------------------
00024
00025 p("texte") ;
00026 echo "" ;
00027 finp() ;
00028 debutSection() ;
00029
00030 $tableauDesRubriques = array() ;
00031 $idr = 0 ;
00032 $idr++; $tableauDesRubriques[$idr] = "Trier des noms et des prénoms avec $Awk et $Php" ;
00033 $idr++; $tableauDesRubriques[$idr] = "Conception : maquettes et prototypes pour le calcul de co-occurrences" ;
00034 $tdmCRLM = new tdm($tableauDesRubriques) ;
00035 $tdmCRLM->titre() ;
00036 $tdmCRLM->menu("oui","oui","nou") ;
00037
00038 direAfficherSolutionsTP($numSerie) ;
00039
00040 pvide() ;
00041
00042 p("texte") ;
00043 echo ghRouge("Rappel :") ;
00044 echo " pour utiliser $Php7 avec une \"bonne configuration\" dans les locaux du département informatique, " ;
00045 echo " vous devez dans un terminal lancer la commande ".b("_php7")." c'est-à-dire ".ghBleu("php7")." précédé du souligné ".ghBleu("_")."." ;
00046 echo " Comme cet alias lance un \"docker\" il est conseillé d'utiliser, dans ces salles, deux terminaux pour la ligne de commandes et deux " ;
00047 echo " explorateurs de fichiers, de façon à pouvoir échanger facilement des fichiers entre le conteneur et votre répertoire usuel de stockage. " ;
00048 echo " Attention : ".b("gawk")." et ".b("wget")." ne doivent pas être exécutés dans le terminal du conteneur, mais bien dans l'autre " ;
00049 echo " terminal. De plus seul le conteneur dispose de ".b("phpunit").". " ;
00050 finp() ;
00051
00052 p("texte") ;
00053 echo " Dans le même genre d'idées, utiliser un répertoire pour tous vos développements de ce T.P., par exemple nommé " ;
00054 echo b("tp1/")." ou ".b("DCRA-tp1/")." est une pratique conseillée. Le chemin absolu pour vos fichiers du conteneur est, " ;
00055 echo " quant à lui, ".b("/home/php_dev/Mes_projets_web/").". " ;
00056 finp() ;
00057
00058 # http://wiki.info.univ-angers.fr/aide:docker_etudiants?s[]=php7#utilisation_d_un_serveur_apache_php_mysql_avec_phpmyadmin
00059
00060 finSection() ;
00061
00062 $numExo = 0 ;
00063
00064 ## -------------------------------------------------------------------------------------------
00065
00066 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Noms et prénoms avec Awk et Php
00067
00068 ## -------------------------------------------------------------------------------------------
00069
00070 blockquote() ; # tp
00071
00072 blockquote() ; # énoncé
00073
00074 p("texte") ;
00075 echo "On dispose des deux fichiers de données, nommés ".href("nomsprenoms1.txt")." et ".href("nomsprenoms2.txt")."." ;
00076 echo " On voudrait afficher rapidement et \"proprement\" ces fichiers par ordre croissant de nom ou de prénom." ;
00077 echo " Trouver une solution en ligne de commande avec $Awk et $Php (prototypes) puis fournir une solution Web en $Php avec " ;
00078 echo " choix du fichier et choix du critère de tri. On écrira des classes d'objets Chaines et Personnes " ;
00079 echo " qu'on viendra tester avec ".b("phpunit")."." ;
00080 finp() ;
00081
00082 p("texte") ;
00083 echo "Voici le fichier ".href("nomsprenoms1.txt")." :" ;
00084 finp() ;
00085
00086 pre_fichier("nomsprenoms1.txt","cadrebleu") ;
00087
00088 p("texte") ;
00089 echo "Et le fichier ".href("nomsprenoms2.txt")." :" ;
00090 finp() ;
00091
00092 pre_fichier("nomsprenoms2.txt","cadrebleu") ;
00093
00094 p("texte") ;
00095 echo "Voici un exemple de fichier \"propre\" issu de ".href("nomsprenoms2.txt").". " ;
00096 echo " On a trié par ordre croissant de nom et on a aligné les noms convertis en majuscules. " ;
00097 finp() ;
00098
00099 pre_fichier("nomsprenoms2_sor.txt","cadrejaune") ;
00100
00101 p("texte") ;
00102 echo " Pour les plus fort(e)s, on produira aussi un fichier Word, Excel et PDF des listes de noms. " ;
00103 finp() ;
00104
00105 p("texte") ;
00106 echo " On réfléchira aux extensions et généralisations possibles." ;
00107 finp() ;
00108
00109 p("texte") ;
00110 echo b("Remarque :") ;
00111 echo " pour éviter de perdre du temps, on rapatriera en local les fichiers-texte des noms et prénoms via ".b("wget").". " ;
00112 finp() ;
00113
00114 finblockquote() ; # énoncé
00115
00116 solutionTP($numExo,$numSerie) ;
00117
00118 p("texte") ;
00119 echo "Avant de commencer à programmer quoi que ce soit, comme d'habitude, il faut bien réfléchir au problème. " ;
00120 echo " Il est clair qu'à moins de connaitre tous les prénoms possibles -- et encore, en novembre 2017 le premier " ;
00121 echo " ministre se nomme ".href("https://fr.wikipedia.org/wiki/%C3%89douard_Philippe","Edouard Philippe")." -- " ;
00122 echo " il est difficile de savoir où se situe la partie ".b("nom")." et la partie ".b("prénom").", même " ;
00123 echo " à l'aide du ".href("https://www.insee.fr/fr/statistiques/2540004#dictionnaire","fichier national français des prénoms").". " ;
00124 echo " Sauf à disposer d'un fichier de données avec seulement deux mots, le prénom puis le nom comme dans ".href("nomsprenoms1.txt").", " ;
00125 echo " il faut certainement choisir un séparateur entre ces deux parties. " ;
00126 echo " On trouvera dans la page ".href("tp1exo1.php")." un plan de développement possible pour cet exercice." ;
00127 finp() ;
00128
00129 $rub = 0 ; $sous = 0 ;
00130
00131 ############################################################################################################
00132
00133 $rub++ ; h2($rub.". Développement $Awk (maquette)") ; $sous = 0 ;
00134
00135 ###########################################################################################################
00136
00137 blockquote() ;
00138
00139 $sous++ ; h3($rub.".".$sous." Script $Awk simple, fichiers avec deux mots") ;
00140
00141 p("texte") ;
00142 echo " Utiliser dans un premier temps le fichier ".href("nomsprenoms1.txt")." est toutefois un bon choix car cela permet de traiter «les bons cas»." ;
00143 echo " Un simple script ".href("https://fr.wikipedia.org/wiki/GNU_Awk","Gawk") ;
00144 echo " suffit pour convertir le nom en majuscules, comme par exemple " ;
00145 echo " le fichier ".href("tripnv1.awk")." :" ;
00146 finp() ;
00147
00148 pre_fichier("tripnv1.awk","cadrebleu") ;
00149
00150 p("texte") ;
00151 echo "On notera que le tri n'est pas effectué par le script et que seules les lignes non vides sont utilisées. " ;
00152 echo " Voici des exemples d'utilisation pour vérifier cela et voir comment trier sur le nom ou sur le prénom :" ;
00153 finp() ;
00154
00155 pre_fichier("tripnv1_sor.txt","cadrejaune") ;
00156
00157 $sous++ ; h3($rub.".".$sous." Script $Awk avancé, fichiers avec plusieurs mots et séparateur") ;
00158
00159 p("texte") ;
00160 echo "Pour traiter proprement les deux parties noms et prénoms, nous allons utiliser le point-virgule comme séparateur, comme dans le fichier suivant, " ;
00161 echo " nommé ".href("nomsprenoms3.txt") ;
00162 finp() ;
00163
00164 pre_fichier("nomsprenoms3.txt","cadre") ;
00165
00166 p("texte") ;
00167 echo "Au passage, nous avons mis des «pièges» pour couvrir tous les cas possibles : plusieurs prénoms, un prénom multiple " ;
00168 echo " avec un tiret. Le script ".href("https://www.gnu.org/software/gawk/manual/gawk.html","Awk")." doit être adapté en conséquence. " ;
00169 echo " Dans la mesure où il est possible d'avoir à passer plusieurs mots avec l'initiale en majucule et le reste en minuscules, il est " ;
00170 echo " judicieux d'écrire ici une fonction. Voici donc le code du nouveau script :" ;
00171 finp() ;
00172
00173 p("texte") ;
00174 echo b("Fichier ").href("tripnv2.awk")." :" ;
00175 finp() ;
00176
00177 pre_fichier("tripnv2.awk","cadrebleu") ;
00178
00179 p("texte") ;
00180 echo "Résultats :" ;
00181 finp() ;
00182
00183 pre_fichier("tripnv2_sor.txt","cadrebleu") ;
00184
00185
00186 finblockquote() ;
00187
00188 ############################################################################################################
00189
00190 $rub++ ; h2($rub.". Développement $Php") ; $sous = 0 ;
00191
00192 ############################################################################################################
00193
00194 blockquote() ;
00195
00196 $sous++ ; h3($rub.".".$sous." Script $Php cli simple") ;
00197
00198 p("texte") ;
00199 echo "On peut désormais considérer que la maquette en AWK est terminée. On passe désormais à une première implémentation en PHP cli (ligne de commandes) " ;
00200 echo " avec une fonction ".b("initialeMajuscule()")." codée directement dans le code-source PHP." ;
00201 #donc on en profite pour écrire une méthode objet éponyme qu'on teste avec " ;
00202 #echo href("https://www.startutorial.com/articles/view/phpunit-beginner-part-1-get-started","PHPUnit")."." ;
00203 echo " Dans la mesure où on écrira ensuite une page Web pour la même action, on sépare bien la lecture des noms/prénoms et leur traitement." ;
00204 finp() ;
00205
00206 p("texte") ;
00207 echo "Voici la première version du code PHP, fichier ".href("tripnv1.php")." :" ;
00208 finp() ;
00209
00210 pre_fichier("tripnv1.php","cadrebleu") ;
00211
00212 p("texte") ;
00213 echo "Voici le résultat des tests élémentaires (on ne s'est pas occupé du tri, pour l'instant) :" ;
00214 finp() ;
00215
00216 pre_fichier("tripnv1_sor2.txt","cadrejaune") ;
00217
00218 $sous++ ; h3($rub.".".$sous." Script $Php cli avancé") ;
00219
00220 p("texte") ;
00221 echo "Il faut maintenant passer à une version cli plus conséquente. Voici ce qu'il manque :" ;
00222 finp() ;
00223
00224 ul() ;
00225
00226 debutli() ; p() ;
00227 echo " Il faut prendre en compte les lignes à deux mots sans séparateur car c'est un cas usuel. " ;
00228 echo " On invente au passage une classe Chaine, les méthodes ".b("nbmots()")." et ".b("mot()")."." ;
00229 echo " On décide aussi qu'une ligne à un mot correspond à un nom seulement.";
00230 echo " On utilisera désormais ".href("nomsprenoms4.txt")." comme jeu d'essai. " ;
00231 finp() ; finli() ;
00232
00233 debutli() ; p() ;
00234 echo " Les champs noms prénoms ne sont pas vraiment liés pour l'instant. " ;
00235 echo " Une implémentation objet de nom/prénom doit faire référence à une classe Personne. " ;
00236 finp() ; finli() ;
00237
00238 debutli() ; p() ;
00239 echo " Le tri n'est pas réalisé, supposer qu'il sera fait en ligne de commande ne se généralisera pas à une page Web." ;
00240 finp() ; finli() ;
00241
00242 debutli() ; p() ;
00243 echo " La fonction ".b("initialeMajuscule()")." n'est qu'un début, le code pour la gestion des prénoms multiples doit " ;
00244 echo " être intégré à une méthode ".b("initialeMajusculePrenom()")." de la classe Chaine." ;
00245 finp() ; finli() ;
00246
00247 finul() ;
00248
00249 p("texte") ;
00250 echo "Commençons par la partie objet :" ;
00251 echo " on définit une classe ".b("Chaine")." et une classe ".b("Personne")." dans deux fichiers séparés." ;
00252 finp() ;
00253
00254 p("texte") ;
00255 echo "Fichier ".href("montresource.php?nomfic=tripn-chaines.php","tripn-chaines.php")." :" ;
00256 finp() ;
00257
00258 pre_fichier("tripn-chaines.php","cadrebleu") ;
00259
00260 p("texte") ;
00261 echo "Fichier ".href("montresource.php?nomfic=tripn-personnes.php","tripn-personnes.php")." :" ;
00262 finp() ;
00263
00264 pre_fichier("tripn-personnes.php","cadrebleu") ;
00265
00266 ## ----------------------------------------------------------------------------------
00267
00268 p("texte") ;
00269 echo "On trouvera ci-dessous le code en ".b("PHPunit")." pour tester les méthodes intéressantes des classes d'objets que nous venons de définir :" ;
00270 finp() ;
00271
00272 p("texte") ;
00273 echo "Fichier ".href("montresource.php?nomfic=chainesTest.php","chainesTest.php")." :" ;
00274 finp() ;
00275
00276 pre_fichier("chainesTest.php","cadrejaune") ;
00277
00278 p("texte") ;
00279 echo "Fichier ".href("montresource.php?nomfic=personnesTest.php","personnesTest.php")." :" ;
00280 finp() ;
00281
00282 pre_fichier("personnesTest.php","cadrejaune") ;
00283
00284 p("texte") ;
00285 echo "Comme le montre l'encadré suivant, " ;
00286 echo " les 14 tests (23 assertions) pour les chaines et " ;
00287 echo " les 5 tests (6 assertions) pour les personnes sont tous validés." ;
00288 finp() ;
00289
00290 pre_fichier("tripn-tests.txt","cadre") ;
00291
00292 p() ;
00293 echo b("Remarque :") ;
00294 echo " suivant la version de phpunit utilisée, le code PHP est légèrement différent, comme suit :" ;
00295 finp() ;
00296
00297 blockquote() ;
00298 pre_fichier("phpunit2018.txt","cadre") ;
00299 pre_fichier("phpunit2019.txt","cadre") ;
00300 finblockquote() ;
00301
00302 ## ----------------------------------------------------------------------------------
00303
00304 p("texte") ;
00305 echo "On s'intéresse maintenant à la gestion fine des lignes, soit avec deux champs sans séparateur, soit avec séparateur " ;
00306 echo " à l'aide des classes ".b("Chaine")." et ".b("Personne")."." ;
00307 finp() ;
00308
00309 p("texte") ;
00310 echo "Fichier ".href("montresource.php?nomfic=tripnv2.php","tripnv2.php")." :" ;
00311 finp() ;
00312
00313 pre_fichier("tripnv2.php","cadrebleu") ;
00314
00315 p("texte") ;
00316 echo "Il reste enfin à écrire la partie de code pour trier les personnes (partie 4 du code précédent)." ;
00317 finp() ;
00318
00319 p("texte") ;
00320 echo "Voici ce qu'on doit trouver :" ;
00321 finp() ;
00322
00323 pre_fichier("tripnv2-php.sor.txt","cadrejaune") ;
00324
00325
00326 $sous++ ; h3($rub.".".$sous." Script $Php web simple") ;
00327
00328 p("texte") ;
00329 echo " Pour passer à la première version Web, aucune difficulté, sauf à bien vérifier que l'on transmet bien les noms et prénoms... " ;
00330 echo " Voici un exemple de formulaire possible nommé ".href("tripnv3_f.php")." qui peut servir de point d'entrée pour la version Web, " ;
00331 echo " où l'utilisateur doit copier/coller ses prénoms/noms dans cet ordre. " ;
00332 echo " On laisse au lecteur le soin de compléter le formulaire pour fournir une version :" ;
00333 finp() ;
00334
00335 ul() ;
00336
00337 debutli() ; p() ;
00338 echo " qui permet de télécharger un fichier des noms et prénoms, " ;
00339 finp() ; finli() ;
00340 debutli() ; p() ;
00341 echo " où la gestion Javascript des boutons est externalisée, " ;
00342 finp() ; finli() ;
00343 debutli() ; p() ;
00344 echo " qui utilise une technologie AJAX pour afficher les résultats, " ;
00345 finp() ; finli() ;
00346 debutli() ; p() ;
00347 echo " qui dispose d'un ".em("switch")." si les données sont dans l'ordre " ;
00348 echo " noms, prénoms plutôt que prénoms, noms,etc." ;
00349 finp() ; finli() ;
00350 finul() ;
00351
00352 pre_fichier("tripnv3_f.php","cadrebleu") ;
00353
00354 p("texte") ;
00355 echo "Dans la mesure où la version cli avancée a permis de définir de nombreux fichiers inclus, la page Web de gestion " ;
00356 echo " peut réutiliser de nombreux composants. " ;
00357 echo " Voici le code $Php qui correspond au formulaire présenté précédemment." ;
00358 finp() ;
00359
00360 p("texte") ;
00361 echo "Fichier ".href("montresource.php?nomfic=tripnv3.php","tripnv3.php")." :" ;
00362 finp() ;
00363
00364 pre_fichier("tripnv3.php","cadrebleu") ;
00365
00366
00367 p("texte") ;
00368 echo " Pour disposer des fonctionnalités du ".href("../internet/php_conceptuel.php","php conceptuel")." utilisé dans les pages ci-dessus, et pour disposer aussi " ;
00369 echo " de la feuille de style et autres éléments associés, on pourra télécharger puis décompresser l'archive ".href("std7.zip")."." ;
00370 finp() ;
00371
00372 $sous++ ; h3($rub.".".$sous." Script $Php web avancé") ;
00373
00374 p("texte") ;
00375 echo "Il est clair que, sauf à utiliser en maitrisant totalement un framework de développement en $Php " ;
00376 echo " comme " ;
00377 echo href("https://www.joomla.fr/","Joomla").", " ;
00378 echo href("https://symfony.com/","Symphony").", ou " ;
00379 echo href("https://laravel.com/","Laravel") .", " ;
00380 echo " il n'est pas possible en un temps aussi court de développer les fonctionnalités demandées." ;
00381 finp() ;
00382
00383 $sous++ ; h3($rub.".".$sous." Script $Php web consolidé") ;
00384
00385 p("texte") ;
00386 echo "Là encore, le niveau de technicité demandé dépasse largement le cadre du T.P." ;
00387 finp() ;
00388
00389 p("texte") ;
00390 echo " A titre d'exemple de page web qui produit un fichier PDF à propos d'informations similaires, " ;
00391 echo " on pourra consulter la page ".href("../affichette.php","affichettes de présentation") ;
00392 echo " dont le code-source est disponible." ;
00393 finp() ;
00394
00395 finblockquote() ; # rubrique
00396
00397 finsolution() ; # contient un blockquote
00398
00399 finblockquote() ; # tp
00400
00401 ## -------------------------------------------------------------------------------------------
00402
00403 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Co-occurrences avec R (et XML)
00404
00405 ## -------------------------------------------------------------------------------------------
00406
00407 blockquote() ; # tp
00408
00409 blockquote() ; # énoncé
00410
00411 p("texte") ;
00412 echo " Faut-il toujours écrire des prototypes ?" ;
00413 echo " Dans quel(s) langage(s) ?" ;
00414 echo " Comment utiliser la méthode Agile pour le problème ci-dessous, de calcul de co-occurrences ?" ;
00415 finp() ;
00416
00417 p("texte") ;
00418 echo "On s'intéresse ici à la production d'un tableau dit \"tri croisé amélioré\" qui comptabilise les croisements de deux variables qualitatives " ;
00419 echo " avec des marges correspondant aux pourcentages globaux. " ;
00420 finp() ;
00421
00422 p("texte") ;
00423 echo "Voici un exemple de fichier de données nommé ".href("elf1.txt")." :" ;
00424 finp() ;
00425
00426 p() ;
00427 textarea_fichier("elf1","cadrebleu",8,45,"elf1","elf1.txt") ;
00428 finp() ;
00429
00430 p("texte") ;
00431 echo "Et le fichier de résultats recherché ".href("elf2.txt")." sachant qu'on s'intéresse aux champs SEXE et ETUD :" ;
00432 finp() ;
00433
00434 pre_fichier("elf2.txt","cadrejaune") ;
00435
00436 p("texte") ;
00437 echo "On trouvera la description des données à l'adresse ".href("../Datasets/elf.htm","ELF")."." ;
00438 finp() ;
00439
00440 p("texte") ;
00441 echo "Comment produire une solution qui fonctionne quelque soit le tableau de données en entrée ?" ;
00442 echo " Pour les plus fort(e)s, on produira aussi les histogrammes de fréquences associés, à savoir :" ;
00443 finp() ;
00444
00445 p() ;
00446 nbsp(15) ;
00447 $img = "sexeEtudes.png" ;
00448 echo href($img,img($img,"",400)) ;
00449 finp() ;
00450
00451 p("texte") ;
00452 echo " On réfléchira aux extensions et généralisations possibles. Nous fournissons à ce titre, deux fichiers de configuration possibles, " ;
00453 echo " nommés ".href("elf2Data.xml")." et ".href("autreCfg.xml").". " ;
00454 finp() ;
00455
00456 p() ;
00457 echo b("Fichier ".href("elf2Data.xml")) ;
00458 finp() ;
00459
00460 pre_fichier("elf2Data.xml","cadrebleu") ;
00461
00462 p() ;
00463 echo b("Fichier ".href("autreCfg.xml")) ;
00464 finp() ;
00465
00466 pre_fichier("autreCfg.xml","cadrebleu") ;
00467
00468 p("texte") ;
00469 echo ghRouge("Remarque :") ;
00470 echo " comme pour la partie $Php, pour éviter de perdre du temps, on rapatriera en local les fichiers-texte des noms et prénoms via ".b("wget").". " ;
00471 finp() ;
00472
00473 finblockquote() ; # énoncé
00474
00475 solutionTP($numExo,$numSerie) ; # contient un blockquote
00476
00477 p("texte") ;
00478 echo " Il n'y a pas de réponse unique à la question " ;
00479 echo em("« Faut-il toujours écrire des prototypes ? »") ;
00480 echo " car cela dépend de la taille du projet, du temps qu'on a pour le réaliser, de sa durée dans le temps..." ;
00481 finp() ;
00482
00483 p("texte") ;
00484 echo " Utiliser la méthode Agile reviendrait sans doute, une fois qu'on a bien compris le sujet, à développer " ;
00485 echo " pas à pas les fonctionnalités de l'application." ;
00486 finp() ;
00487
00488 p("texte") ;
00489 echo "Il n'est sans doute pas difficile de comprendre ce qu'il faut calculer et tracer. " ;
00490 echo " Par contre, savoir quel langage utiliser pour résoudre simplement et rapidement ce problème " ;
00491 echo " (il s'agit d'une petite application) n'est pas si simple car calculer des sommes et des pourcentages " ;
00492 echo " est à la portée de tout langage de scripts. " ;
00493 echo "À nos yeux, un choix raisonnable semble être " ;
00494 echo " celui du langage $R car il comporte pour chaque action à exécuter dans ces calculs et mises en forme une fonction " ;
00495 echo " prête à l'emploi. A nouveau, il faut penser à écrire un plan de développement, comme par exemple " ;
00496 echo " celui défini dans ".href("tp1exo2.php")."." ;
00497 finp() ;
00498
00499 p("texte") ;
00500 echo "Si l'on veut généraliser un script pour gérer plus généralement ce type de calcul, la partie facile consiste à rajouter un paramètre correspondant " ;
00501 echo " au nom du fichier à traiter. Une partie plus délicate concerne le nom des deux variables, les valeurs numériques " ;
00502 echo " et les labels de leurs modalités. Comme cela peut faire beaucoup d'informations à gérer, le mieux est sans doute de " ;
00503 echo " mettre ces informations dans un fichier structuré, disons au format $XML ou ".ghBleu("JSON")." comme ci-dessous. " ;
00504 finp() ;
00505
00506 pre_fichier("autreCfg.xml","cadrebleu") ;
00507
00508 p("texte") ;
00509 echo " Pour les graphiques à produire, à savoir des histogrammes de fréquences (et non pas des histogrammes de classes), " ;
00510 echo " on pourra s'inspirer de notre " ;
00511 echo href("http://forge.info.univ-angers.fr/~gh/wstat/Introduction_R/","introduction à $R").", " ;
00512 echo href("http://forge.info.univ-angers.fr/~gh/wstat/Introduction_R/intror3.php?solutions=0","séance 3").", " ;
00513 echo href("http://forge.info.univ-angers.fr/~gh/wstat/Introduction_R/intror3.php?solutions=1#tdm5","exercice 5",". ")."." ;
00514 finp() ;
00515
00516 finsolution() ; # contient un blockquote
00517
00518 finblockquote() ; # tp
00519
00520 #############################################################################
00521
00522 finTP($numSerie) ;
00523 ?>
Pour ne pas voir les numéros de ligne, ajoutez &nl=non à la suite du nom du fichier.
Retour à la page principale de (gH)