Listing du fichier progie4.php
00001 <?php
00002 # # (gH) -_- progie4.php ; TimeStamp (unix) : 16 Février 2015 vers 21: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 = 4 ;
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] = "Equivalent TANT QUE d'une boucle POUR" ;
00025 $idr++; $tableauDesRubriques[$idr] = "Nombre d'occurrences du maximum avec puis sans boucle" ;
00026 $idr++; $tableauDesRubriques[$idr] = "Sommes par colonne" ;
00027 $idr++; $tableauDesRubriques[$idr] = "Des boucles TANT QUE surprenantes " ;
00028 $idr++; $tableauDesRubriques[$idr] = "Calculs complexes sur séries de fichiers" ;
00029 # $idr++; $tableauDesRubriques[$idr] = "Lenteur des boucles POUR" ;
00030
00031 $tdmCRLM = new tdm($tableauDesRubriques) ;
00032 $tdmCRLM->titre() ;
00033 $tdmCRLM->menu("oui","oui","nou") ;
00034
00035 afficherSolutions($numSerie) ;
00036
00037 finSection() ;
00038
00039 debutSection() ;
00040 $numExo = 0 ;
00041
00042 ## -------------------------------------------------------------------------------------------
00043
00044 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Equivalent TANT QUE d'une boucle POUR
00045
00046 ## -------------------------------------------------------------------------------------------
00047
00048 blockquote() ;
00049
00050 blockquote() ;
00051
00052 p("texte") ;
00053 echo "Ecrire en R une boucle TANT QUE équivalente à la boucle POUR suivante" ;
00054 finp() ;
00055
00056 pre_fichier("e4s1.txt","cadre") ;
00057
00058 finblockquote() ;
00059
00060 solution($numExo,$numSerie) ;
00061
00062 p("texte") ;
00063 echo "Voici une solution possible :" ;
00064 finp() ;
00065
00066 pre_fichier("e4s1cor.txt","cadre") ;
00067
00068 p("texte") ;
00069 echo "Ce n'est en général ".b("pas")." une bonne idée que d'utiliser la valeur d'un indice " ;
00070 echo " de boucle en dehors de la boucle. Un indice de boucle doit être une " ;
00071 echo b(" variable locale")." qui ne doit pas exister en dehors de la boucle." ;
00072 finp() ;
00073 finsolution() ;
00074
00075 finblockquote() ;
00076
00077 ## -------------------------------------------------------------------------------------------
00078
00079 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Nombre d'occurrences du maximum avec puis sans boucle
00080
00081 ## -------------------------------------------------------------------------------------------
00082
00083 blockquote() ;
00084
00085 blockquote() ;
00086
00087 p("texte") ;
00088 echo "On veut trouver le maximum du vecteur V et son nombre d'occurrences. " ;
00089 echo " Ecrire une première boucle POUR qui détermine le maximum et une seconde boucle POUR qui calcule le nombre d'occurrences." ;
00090 finp() ;
00091
00092 p("texte") ;
00093 echo " Réécrire ensuite tout cela avec une seule boucle POUR puis enfin donner la \"bonne\" solution $R sans boucle explicite. " ;
00094 finp() ;
00095
00096 p("texte") ;
00097 echo "Serait-ce beaucoup plus compliqué de renvoyer la ou les positions du maximum dans le vecteur ?" ;
00098 finp() ;
00099
00100 finblockquote() ;
00101
00102 solution($numExo,$numSerie) ;
00103
00104 p("texte") ;
00105 echo "Voici la première solution demandée :";
00106 finp() ;
00107
00108 pre_fichier("maxocc1.txt","cadre") ;
00109
00110 p("texte") ;
00111 echo "Puis la seconde :";
00112 finp() ;
00113
00114 pre_fichier("maxocc2.txt","cadre") ;
00115
00116 p("texte") ;
00117 echo "Enfin, voici la \"vraie\" solution qui utilise " ;
00118 echo lafonction("Extremes","","max()")." et le filtrage vectoriel :";
00119 finp() ;
00120
00121 pre_fichier("maxocc3.txt","cadre") ;
00122
00123
00124 p("texte") ;
00125 echo "Vouloir déterminer la ou les positions du maximum est à peine plus compliqué. C'est un peu " ;
00126 echo " délicat parce qu'on ne connait pas à l'avance la taille du vecteur qui contiendra les positions. " ;
00127 echo " Voir l'" ;
00128 echo href("../Programmation_avancee/progr.php?n=2&m=e","exercice 3") ;
00129 echo " de notre cours numéro 2 de " ;
00130 echo href("../Programmation_avancee/","programmation $R avancée") ;
00131 echo " et sa " ;
00132 echo href("../Programmation_avancee/progr.php?n=2&m=s","solution") ;
00133 echo "." ;
00134 finp() ;
00135
00136 p("texte") ;
00137 echo "La solution $R vectorielle tient en une seule instruction :" ;
00138 finp() ;
00139
00140 pre_fichier("occposmax.txt","cadre") ;
00141
00142 finsolution() ;
00143
00144 finblockquote() ;
00145
00146 ## -------------------------------------------------------------------------------------------
00147
00148 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Sommes par colonne
00149
00150 ## -------------------------------------------------------------------------------------------
00151
00152 blockquote() ;
00153
00154 blockquote() ;
00155
00156 p("texte") ;
00157 echo "On dispose d'une matrice de valeurs numériques, comme par exemple celle définie par " ;
00158 finp() ;
00159
00160 pre_fichier("somcol1.txt","cadre") ;
00161
00162 p("texte") ;
00163 echo "Calculer la somme de chaque colonne avec une boucle POUR puis sans boucle POUR à l'aide de ";
00164 echo lafonction("apply").". Quelle est enfin la \"bonne\" solution $R ?" ;
00165 finp() ;
00166
00167 finblockquote() ;
00168
00169 solution($numExo,$numSerie) ;
00170
00171 p("texte") ;
00172 echo "Voici la solution avec une boucle POUR explicite " ;
00173 finp() ;
00174
00175 pre_fichier("somcol2.txt","cadre") ;
00176
00177 p("texte") ;
00178 echo "La solution avec ".hrrr("apply")." utilise une boucle POUR implicite " ;
00179 finp() ;
00180
00181 pre_fichier("somcol3.txt","cadre") ;
00182
00183 p("texte") ;
00184 echo "La \"vraie\" solution fait appel à ".lafonction("colSums")." :" ;
00185 finp() ;
00186
00187 pre_fichier("somcol4.txt","cadre") ;
00188
00189 finsolution() ;
00190
00191 finblockquote() ;
00192
00193 ## -------------------------------------------------------------------------------------------
00194
00195 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Des boucles TANT QUE surprenantes
00196
00197 ## -------------------------------------------------------------------------------------------
00198
00199 blockquote() ;
00200
00201 blockquote() ;
00202
00203 p("texte") ;
00204 echo "Que font les boucles TANT QUE suivantes ?" ;
00205 finp() ;
00206
00207 pre_fichier("boucles.r","cadre") ;
00208
00209 finblockquote() ;
00210
00211 solution($numExo,$numSerie) ;
00212
00213 p("texte") ;
00214 echo "La première boucle permet de voir à quel moment $R confond un très petit nombre avec 0 (puisque 0=0/10)." ;
00215 echo " La seconde montre à quel moment $R confond un très grand nombre avec l'infini." ;
00216 echo " Voici un extrait de l'exécution de ces boucles qui, heureusement, ne durent pas longtemps :" ;
00217 finp() ;
00218
00219 pre_fichier("boucles.sor","cadre") ;
00220
00221 p("texte") ;
00222 echo " On pourra consulter les variables et utiliser les fonctions suivantes pour avoir plus de détails " ;
00223 echo " sur les limitations machines et la version de $R utilisée :" ;
00224 finp() ;
00225
00226 pre_fichier("machine.sor","cadrebleu") ;
00227
00228
00229 finsolution() ;
00230
00231 finblockquote() ;
00232
00233 ## -------------------------------------------------------------------------------------------
00234
00235 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Calculs complexes sur séries de fichiers
00236
00237 ## -------------------------------------------------------------------------------------------
00238
00239 blockquote() ;
00240
00241 blockquote() ;
00242
00243 p("texte") ;
00244 echo "On veut traiter ".b("n")." fichiers, disons " ;
00245 echo href("ficSerie01.txt").", " ;
00246 echo href("ficSerie02.txt").", " ;
00247 echo href("ficSerie03.txt")."... " ;
00248 echo " mais ce pourrait être bien sûr des fichiers Excel." ;
00249 echo " Une fois le traitement de chaque fichier effectué, on veut obtenir un tableau et un fichier .CSV résumé des traitements. " ;
00250 echo " Le traitement consiste à renvoyer le nombre de lignes et le plus petit age et le plus grand age." ;
00251 echo " Peut-on aussi calculer la moyenne des ages et la moyenne générale des ages ainsi ?" ;
00252 finp() ;
00253
00254
00255 finblockquote() ;
00256
00257 solution($numExo,$numSerie) ;
00258
00259 p("texte") ;
00260 echo "Par rapport à l'exemple de la séance 4, il suffit de modifier ce que renvoie la fonction qui traite les fichiers et " ;
00261 echo " d'augmenter le ".em("data frame")." résultat, soit le code " ;
00262 finp() ;
00263
00264 pre_fichier("seriefic05.r","cadre") ;
00265
00266 p("texte") ;
00267 echo " Exemple d'exécution avec les fichiers cités :" ;
00268 finp() ;
00269
00270 pre_fichier("seriefic05.txt","cadre") ;
00271
00272 p("texte") ;
00273 echo " Fichier CSV produit :" ;
00274 finp() ;
00275
00276 pre_fichier("seriefic05.csv","cadre") ;
00277
00278 p("texte") ;
00279 echo " Pour la moyenne de l'age, on ne peut pas procéder de la même manière parce que la moyenne des moyennes " ;
00280 echo " n'est pas la moyenne générale. Il faudrait calculer une ".b("moyenne pondérée")." des moyennes par fichier..." ;
00281 echo " Si le calcul n'est pas associatif, il n'est pas possible de traiter séparément les fichiers, c'est bien le problème " ;
00282 echo " des fameux ".em("map/reduce")." lié au Big Data : la somme et le max sont associatifs, pas la moyenne..." ;
00283 finp() ;
00284
00285 finsolution() ;
00286
00287 finblockquote() ;
00288
00289 ## -------------------------------------------------------------------------------------------
00290
00291 /*
00292 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Lenteur des boucles POUR
00293
00294 ## -------------------------------------------------------------------------------------------
00295
00296 blockquote() ;
00297
00298 blockquote() ;
00299
00300 p("texte") ;
00301 echo "Détailler ce que fait le code R suivant et ajouter des instructions " ;
00302 echo " pour savoir combien de temps dure chaque boucle." ;
00303 finp() ;
00304
00305 pre_fichier("lent.r","cadre") ;
00306
00307 p("texte") ;
00308 echo "On pourra utiliser notre fonction ".b("duree")." :" ;
00309 finp() ;
00310
00311 pre_fichier("duree.r","cadrebleu") ;
00312
00313 finblockquote() ;
00314
00315 solution($numExo,$numSerie) ;
00316
00317 p("texte") ;
00318 echo "Not yet!" ;
00319 finp() ;
00320
00321 finsolution() ;
00322
00323 finblockquote() ;
00324 */
00325
00326 ## -------------------------------------------------------------------------------------------
00327
00328 finPageExercices($numSerie) ; # contient finSection() et finPage() ; la fonction est dans progi.php
00329 ?>
Pour ne pas voir les numéros de ligne, ajoutez &nl=non à la suite du nom du fichier.
Retour à la page principale de (gH)