Valid XHTML     Valid CSS2    

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&nbsp;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&nbsp;:") ;
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 &ecirc;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&ecirc;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")."&nbsp;:" ;
00084     
finp() ;
00085     
00086     
pre_fichier
("nomsprenoms1.txt","cadrebleu") ;
00087     
00088     
p
("texte") ;
00089     echo
"Et le fichier "
.href("nomsprenoms2.txt")."&nbsp;:" ;
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&nbsp;:") ;
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&ecirc;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 &laquo;les bons cas&raquo;." ;
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")."&nbsp;:" ;
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&nbsp;:" ;
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 &laquo;pièges&raquo; pour couvrir tous les cas possibles&nbsp;: 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 &ecirc;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&nbsp;:" ;
00171     
finp() ;
00172     
00173     
p
("texte") ;
00174     echo
b
("Fichier ").href("tripnv2.awk")."&nbsp;:" ;
00175     
finp() ;
00176     
00177     
pre_fichier
("tripnv2.awk","cadrebleu") ;
00178     
00179     
p
("texte") ;
00180     echo
"Résultats&nbsp;:" ;
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&ecirc;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")."&nbsp;:" ;
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)&nbsp;:" ;
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&nbsp;:" ;
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
" &ecirc;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&nbsp;:" ;
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")."&nbsp;:" ;
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")."&nbsp;:" ;
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&nbsp;:" ;
00270     
finp() ;
00271     
00272     
p
("texte") ;
00273     echo
"Fichier "
.href("montresource.php?nomfic=chainesTest.php","chainesTest.php")."&nbsp;:" ;
00274     
finp() ;
00275     
00276     
pre_fichier
("chainesTest.php","cadrejaune") ;
00277     
00278     
p
("texte") ;
00279     echo
"Fichier "
.href("montresource.php?nomfic=personnesTest.php","personnesTest.php")."&nbsp;:" ;
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&nbsp;:") ;
00294     echo
" suivant la version de phpunit utilisée, le code PHP est légèrement différent, comme suit&nbsp;:" ;
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")."&nbsp;:" ;
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&nbsp;:" ;
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&nbsp;:" ;
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&ocirc;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")."&nbsp;:" ;
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&nbsp;?" ;
00413     echo
" Dans quel(s) langage(s)&nbsp;?" ;
00414     echo
" Comment utiliser la méthode Agile pour le problème ci-dessous, de calcul de co-occurrences&nbsp;?" ;
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")."&nbsp;:" ;
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&nbsp;:" ;
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&nbsp;?" ;
00442     echo
" Pour les plus fort(e)s, on produira aussi les histogrammes de fréquences associés, à savoir&nbsp;:" ;
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&nbsp;:") ;
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
("&laquo; Faut-il toujours écrire des prototypes&nbsp;?&nbsp;&raquo;") ;
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
"&Agrave; nos yeux, un choix raisonnable semble &ecirc;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&ecirc;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 gH    Retour à la page principale de   (gH)