Listing du fichier progie1.php
00001 <?php
00002 # # (gH) -_- perf1.php ; TimeStamp (unix) : 17 Septembre 2014 vers 16:26
00003
00004 error_reporting(E_ALL | E_NOTICE | E_STRICT) ;
00005
00006 include_once("std7.php") ;
00007 include_once("progi.php") ;
00008 include_once("statuno7.php") ;
00009
00010 $R = s_span("R","gbleuf") ;
00011 $numSerie = 1 ;
00012 debutPageExercices($numSerie) ;
00013
00014 ## -------------------------------------------------------------------------------------------
00015
00016 p("texte") ;
00017 echo "" ;
00018 finp() ;
00019 debutSection() ;
00020
00021 $tableauDesRubriques = array() ;
00022 $idr = 0 ;
00023
00024 $idr++; $tableauDesRubriques[$idr] = "Programmer en $R avec $rstudio" ;
00025 $idr++; $tableauDesRubriques[$idr] = "Bien programmer en $R" ;
00026 $idr++; $tableauDesRubriques[$idr] = "Occurences du minimum et du maximum" ;
00027 $idr++; $tableauDesRubriques[$idr] = "Plus grande répétition" ;
00028 $idr++; $tableauDesRubriques[$idr] = "Plus grande sous-chaine commune" ;
00029 $idr++; $tableauDesRubriques[$idr] = "Programmation d'un aéroport" ;
00030 $idr++; $tableauDesRubriques[$idr] = "Que faut-il conclure de ces exercices ?" ;
00031
00032 $tdmCRLM = new tdm($tableauDesRubriques) ;
00033 $tdmCRLM->titre() ;
00034 $tdmCRLM->menu("oui","oui","nou") ;
00035
00036 afficherSolutions($numSerie) ;
00037
00038 finSection() ;
00039
00040 debutSection() ;
00041 $numExo = 0 ;
00042
00043 ## -------------------------------------------------------------------------------------------
00044
00045 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Programmer en R avec Rstudio
00046
00047 ## -------------------------------------------------------------------------------------------
00048
00049 blockquote() ;
00050
00051 blockquote() ;
00052
00053 p("texte") ;
00054 echo "Pourquoi vaut-il mieux utiliser ".href($rstudioh,$rstudio,"nou")." que l'interface standard si on veut programmer en $R ?" ;
00055 finp() ;
00056
00057 finblockquote() ;
00058
00059 solution($numExo,$numSerie) ;
00060
00061 p("texte") ;
00062 echo href($rstudioh,$rstudio,"nou")." est un environnement très pratique pour programmer :" ;
00063 echo " on y trouve notamment un panneau qui affiche les variables avec leur valeur, il y a un " ;
00064 echo " \"débuggeur\" qui permet de tester les programmes ligne par ligne, on dispose d'un panneau pour voir et " ;
00065 echo " revoir ou exporter les graphiques, $rstudio sait installer les packages, afficher les \"help\", les données etc." ;
00066 finp() ;
00067
00068 finsolution() ;
00069
00070 finblockquote() ;
00071
00072 ## -------------------------------------------------------------------------------------------
00073
00074 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Bien programmer en R
00075
00076 ## -------------------------------------------------------------------------------------------
00077
00078 blockquote() ;
00079
00080 blockquote() ;
00081
00082 p("texte") ;
00083 echo "Est-ce que tout le monde peut devenir une bonne programmeuse ou un bon programmeur ?" ;
00084 finp() ;
00085
00086 finblockquote() ;
00087
00088 solution($numExo,$numSerie) ;
00089
00090 p("texte") ;
00091 echo "Malheureusement, non. Tout le monde peut apprendre à programmer, à condition d'y passer beaucoup de temps." ;
00092 echo " Mais comme pour la conduite automobile, bien programmer demande un lourd investissement et des capacités " ;
00093 echo " personnelles innées..." ;
00094 finp() ;
00095
00096 finsolution() ;
00097
00098 finblockquote() ;
00099
00100 ## -------------------------------------------------------------------------------------------
00101
00102 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Occurences du minimum et du maximum"
00103
00104 ## -------------------------------------------------------------------------------------------
00105
00106 blockquote() ;
00107
00108 blockquote() ;
00109
00110 p("texte") ;
00111 echo "Montrer comment on peut trouver «".vert("à la main")."» sur la liste de valeurs " ;
00112 echo b("1 8 2 5 8 7 8") ;
00113 echo " le nombre d'occurences du maximum en un seul passage. " ;
00114 finp() ;
00115
00116 finblockquote() ;
00117
00118 solution($numExo,$numSerie) ;
00119
00120 p("texte") ;
00121 echo "Il suffit de remarquer que si on change la valeur courante du maximum il faut remettre le \"compteur\" du nombre " ;
00122 echo " d'occurences à 1 et que, sinon, si on trouve à nouveau le maximum courant, il faut incrémenter (augmenter de un) ce compteur. " ;
00123 echo " Voici un exemple de traitement détaillé de ces idées :" ;
00124 finp() ;
00125
00126 pre_fichier("occmax.txt","cadre") ;
00127
00128 finsolution() ;
00129
00130 finblockquote() ;
00131
00132 ## -------------------------------------------------------------------------------------------
00133
00134 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Plus grande répétition
00135
00136 ## -------------------------------------------------------------------------------------------
00137
00138 blockquote() ;
00139
00140 blockquote() ;
00141
00142 p("texte") ;
00143 echo "Etant donnée une chaine de caractères, expliquer comment trouver la plus grande sous-chaine répétée d'au moins deux caractères, " ;
00144 echo " son nombre de répétitions et ses occurences. " ;
00145 finp() ;
00146
00147 p("texte") ;
00148 echo b("Application 1.") ;
00149 echo " quelle est la plus grande sous-chaine répétée pour \"".vert("MON BEAU BATEAU BLEU")."\" ?" ;
00150 finp() ;
00151
00152 p("texte") ;
00153 echo b("Application 2.") ;
00154 echo " quelle est la plus grande sous-chaine répétée pour de la séquence d'ADN de " ;
00155 echo " ".href("../../../Abdc/Data/putida_gb_1.fasta.zip ","Pseudomonas putida GB-1") ;
00156 echo " qui est un des cinq exemplaires séquencés de " ;
00157 $pseudop = "http://en.wikipedia.org/wiki/Pseudomonas_putida" ;
00158 echo href($pseudop,em("Pseudomonas putida"),"gvertf")." ? ";
00159 echo " Que risque-t-on d'obtenir ?" ;
00160 finp() ;
00161
00162
00163 finblockquote() ;
00164
00165 solution($numExo,$numSerie) ;
00166
00167 p("texte") ;
00168 echo "Mais ce n'est pas un problème facile !" ;
00169 finp() ;
00170
00171 p("texte") ;
00172 echo "Si on s'était contenté de demander la plus grande sous-chaine répétée, c'est-à-dire la lettre ou le caractère " ;
00173 echo " le plus fréquent, cela aurait été simple, puisqu'il aurait suffi de compter combien de fois chaque caractère est " ;
00174 echo " répété et de stocker ces valeurs dans une liste puis de trouver le maximum dans cette liste, ce qu'on sait déjà faire." ;
00175 finp() ;
00176
00177 p("texte") ;
00178 echo "Malheureusement on ne sait pas quelle est la longueur de la chaine et si on devait construire toutes les sous-chaines de " ;
00179 echo " un, deux, trois... caractères, cela prendrait un très grand temps, surtout pour la séquence d'ADN " ;
00180 echo " qui compte environ 6 millions de caractères." ;
00181 finp() ;
00182
00183 p("texte") ;
00184 echo "C'est là où l'informatique théorique peut nous aider. Il est possible de démontrer que la méthode la plus rapide " ;
00185 echo " consiste à utiliser un " ;
00186 echo b("arbre des suffixes").". " ;
00187 echo " On trouve alors (sans surprise) ".vert("EAU")." pour la chaine ".vert("MON BEAU BATEAU BLEU")."." ;
00188 finp() ;
00189
00190 p("texte") ;
00191 echo "Que risque-t-on d'obtenir pour ".b("Pseudomonas putida GB-1")." ?" ;
00192 echo " L'informatique est ici incapable de le prédire. " ;
00193 finp() ;
00194
00195 p("texte") ;
00196 echo "Qu'obtient-on pour ".b("Pseudomonas putida GB-1")." ?" ;
00197 echo " La réponse \"brute\" est une séquence de ".b("4015")." caractères, " ;
00198 echo " répétée ".b("2 fois").", aux positions ".b("183130")." et ".b("542146")."." ;
00199 echo " Comment l'obtient-on et " ;
00200 echo " à quoi correspond-t-elle ?" ;
00201 echo " C'est une autre histoire... qui sera comptée dans un autre exercice." ;
00202 finp() ;
00203
00204 finsolution() ;
00205
00206 finblockquote() ;
00207
00208 ## -------------------------------------------------------------------------------------------
00209
00210 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Plus grande sous-chaine commune
00211
00212 ## -------------------------------------------------------------------------------------------
00213
00214 blockquote() ;
00215
00216 blockquote() ;
00217
00218 p("texte") ;
00219 echo "On voudrait trouver la plus grande sous-chaine de caractères commune d'un ensemble de séquences d'ADN bactérien, " ;
00220 echo " par exemple pour les " ;
00221 echo "les 10 génomes séquencés de ".em("Helicobacter pylori")." " ;
00222 echo href("../../../Abdc/Data/pyloris.fasta.zip","pyloris.fasta.zip").". " ;
00223 echo " Que devrait-t-on trouver ?" ;
00224 finp() ;
00225
00226 finblockquote() ;
00227
00228 solution($numExo,$numSerie) ;
00229
00230 p("texte") ;
00231 echo "Mais ce n'est pas un problème facile, à nouveau !" ;
00232 finp() ;
00233
00234 p("texte") ;
00235 echo "La taille des chaines mises en jeu (plusieurs millions de caractères chaque) et la difficulté inhérente " ;
00236 echo " au problème (car on ne peut pas se contenter de chercher la plus grande sous-chaine de caractères commune " ;
00237 echo " pour chaque paire de séquences) font que pour résoudre ce problème il faut utiliser des méthodes très " ;
00238 echo " sophistiquées qui dépassent le cadre de ce cours. " ;
00239 finp() ;
00240
00241 finsolution() ;
00242
00243 finblockquote() ;
00244
00245 ## -------------------------------------------------------------------------------------------
00246
00247 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Programmation d'un aéroport
00248
00249 ## -------------------------------------------------------------------------------------------
00250
00251 blockquote() ;
00252
00253 blockquote() ;
00254
00255 p("texte") ;
00256 echo "On voudrait programmer la gestion des vols d'un aéroport. " ;
00257 echo " Donner les grandes lignes de la résolution de ce problème." ;
00258 finp() ;
00259
00260 finblockquote() ;
00261
00262 solution($numExo,$numSerie) ;
00263
00264 p("texte") ;
00265 echo "Là encore, c'est un problème dificile, ne serait-ce que par l'ampleur des contraintes à prendre en compte." ;
00266 echo " Il est clair qu'on ne peut répondre à cette question en dix minutes, ni même en dix heures..." ;
00267 finp() ;
00268
00269 finsolution() ;
00270
00271 finblockquote() ;
00272
00273 ## -------------------------------------------------------------------------------------------
00274
00275 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Conclusion
00276
00277 ## -------------------------------------------------------------------------------------------
00278
00279 blockquote() ;
00280
00281 blockquote() ;
00282
00283 p("texte") ;
00284 echo "Que montrent, ".em("in fine")." ces exercices, et surtout les trois derniers ?" ;
00285 echo " Quel impact cela peut-il avoir sur les cours qui suivent et sur la réponse aux deux questions " ;
00286 echo "«".em("combien de temps faut-il pour savoir bien programmer ?")."» et " ;
00287 echo "«".em("peut-on tout programmer ?")."» ?" ;
00288 finp() ;
00289
00290 finblockquote() ;
00291
00292 solution($numExo,$numSerie) ;
00293
00294 p("texte") ;
00295 echo "On peut en déduire que certains problèmes requièrent une grande technicité, ce qui demande de connaitre des " ;
00296 echo b("structures de données")." complexes, de savoir calculer mathématiquement la complexité d'un algorithme " ;
00297 echo " -- ce qui n'est pas toujours facile -- " ;
00298 echo " et d'y consacrer beaucoup de temps." ;
00299 finp() ;
00300
00301 p("texte") ;
00302 echo "En conséquence nos exercices ne pourront pas s'attaquer à des problèmes trop complexes et il ne " ;
00303 echo " pourra s'agir que d'une ".b("initiation à la programmation").". " ;
00304 finp() ;
00305
00306 p("texte") ;
00307 echo "Pour bien programmer, en plus des techniques classiques qu'on apprend souvent en quatre ans progressifs " ;
00308 echo " (du baccalauréat au master d'informatique), il faut compter des années... de pratique. " ;
00309 echo " Heureusement, pour de la programmation classique d'ingénieur " ;
00310 echo " (comme lire des fichiers, automatiser des séries de calculs bien rodés, produire des statistiques et des " ;
00311 echo " graphiques...) quelques dizaines d'heures de pratique suffisent, une fois les concepts maitrisés. Ouf, " ;
00312 echo " cette formation sera quand même utile !" ;
00313 finp() ;
00314
00315 p("texte") ;
00316 echo "Il est clair qu'on ne sait pas aujourd'hui tout programmer. Malgré des décennies d'".em(vert("intelligence artificielle")) ;
00317 echo " nous ne savons toujours pas programmer des machines qui parlent, qui comprennent les humains... " ;
00318 echo " Par contre tout ce qui est automatisable (parce que systématique, calculable) et traçable (parce que connu (statistiquement, " ;
00319 echo " mathématiquement...) est programmable, notamment en $R." ;
00320 finp() ;
00321
00322 finsolution() ;
00323
00324 finblockquote() ;
00325
00326 ## -------------------------------------------------------------------------------------------
00327
00328 finPageExercices($numSerie) ; # contient finSection() et finPage() ; la fonction est dans progi.php
00329
00330 ?>
Pour ne pas voir les numéros de ligne, ajoutez &nl=non à la suite du nom du fichier.
Retour à la page principale de (gH)