Valid XHTML     Valid CSS2    

Listing du fichier progie4.php

 

00001     <?php
00002     
# # (gH) -_- progie4.php ; TimeStamp (unix) : 16 F&eacute;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&eacute;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 &eacute;quivalente &agrave; 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&nbsp;:" ;
00064     
finp() ;
00065     
00066     
pre_fichier
("e4s1cor.txt","cadre") ;
00067     
00068     
p
("texte") ;
00069     echo
"Ce n'est en g&eacute;n&eacute;ral "
.b("pas")." une bonne id&eacute;e que d'utiliser la valeur d'un indice " ;
00070     echo
" de boucle en dehors de la boucle. Un indice de boucle doit &ecirc;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&egrave;re boucle POUR qui d&eacute;termine le maximum et une seconde boucle POUR qui calcule le nombre d'occurrences." ;
00090     
finp() ;
00091     
00092     
p
("texte") ;
00093     echo
" R&eacute;&eacute;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&eacute; de renvoyer la ou les positions du maximum dans le vecteur&nbsp;?" ;
00098     
finp() ;
00099     
00100     
finblockquote() ;
00101     
00102     
solution
($numExo,$numSerie) ;
00103     
00104     
p
("texte") ;
00105     echo
"Voici la premi&egrave;re solution demand&eacute;e&nbsp;:";
00106     
finp() ;
00107     
00108     
pre_fichier
("maxocc1.txt","cadre") ;
00109     
00110     
p
("texte") ;
00111     echo
"Puis la seconde&nbsp;:";
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&nbsp;:";
00119     
finp() ;
00120     
00121     
pre_fichier
("maxocc3.txt","cadre") ;
00122     
00123     
00124     
p
("texte") ;
00125     echo
"Vouloir d&eacute;terminer la ou les positions du maximum est &agrave; peine plus compliqu&eacute;. C'est un peu " ;
00126     echo
" d&eacute;licat parce qu'on ne connait pas &agrave; l'avance la taille du vecteur qui contiendra les positions. " ;
00127     echo
" Voir l'" ;
00128     echo
href
("../Programmation_avancee/progr.php?n=2&amp;m=e","exercice 3") ;
00129     echo
" de notre cours num&eacute;ro 2 de " ;
00130     echo
href
("../Programmation_avancee/","programmation $R avanc&eacute;e") ;
00131     echo
" et sa " ;
00132     echo
href
("../Programmation_avancee/progr.php?n=2&amp;m=s","solution") ;
00133     echo
"." ;
00134     
finp() ;
00135     
00136     
p
("texte") ;
00137     echo
"La solution
$R vectorielle tient en une seule instruction&nbsp;:" ;
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&eacute;riques, comme par exemple celle d&eacute;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 &agrave; l'aide de ";
00164     echo
lafonction
("apply").". Quelle est enfin la \"bonne\" solution $R&nbsp;?" ;
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 &agrave; "
.lafonction("colSums")."&nbsp;:" ;
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&nbsp;?" ;
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&egrave;re boucle permet de voir &agrave; quel moment
$R confond un tr&egrave;s petit nombre avec 0 (puisque 0=0/10)." ;
00215     echo
" La seconde montre &agrave; quel moment
$R confond un tr&egrave;s grand nombre avec l'infini." ;
00216     echo
" Voici un extrait de l'ex&eacute;cution de ces boucles qui, heureusement, ne durent pas longtemps&nbsp;:" ;
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&eacute;tails " ;
00223     echo
" sur les limitations machines et la version de
$R utilis&eacute;e&nbsp;:" ;
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&eacute;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 &ecirc;tre bien s&ucirc;r des fichiers Excel." ;
00249     echo
" Une fois le traitement de chaque fichier effectu&eacute;, on veut obtenir un tableau et un fichier .CSV r&eacute;sum&eacute; des traitements. " ;
00250     echo
" Le traitement consiste &agrave; 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&eacute;n&eacute;rale des ages ainsi&nbsp;?" ;
00252     
finp() ;
00253     
00254     
00255     
finblockquote() ;
00256     
00257     
solution
($numExo,$numSerie) ;
00258     
00259     
p
("texte") ;
00260     echo
"Par rapport &agrave; l'exemple de la s&eacute;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&eacute;sultat, soit le code&nbsp;" ;
00262     
finp() ;
00263     
00264     
pre_fichier
("seriefic05.r","cadre") ;
00265     
00266     
p
("texte") ;
00267     echo
" Exemple d'ex&eacute;cution avec les fichiers cit&eacute;s&nbsp;:" ;
00268     
finp() ;
00269     
00270     
pre_fichier
("seriefic05.txt","cadre") ;
00271     
00272     
p
("texte") ;
00273     echo
" Fichier CSV produit&nbsp;:" ;
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&eacute;der de la m&ecirc;me mani&egrave;re parce que la moyenne des moyennes " ;
00280     echo
" n'est pas la moyenne g&eacute;n&eacute;rale. Il faudrait calculer une "
.b("moyenne pond&eacute;r&eacute;e")." des moyennes par fichier..." ;
00281     echo
" Si le calcul n'est pas associatif, il n'est pas possible de traiter s&eacute;par&eacute;ment les fichiers, c'est bien le probl&egrave;me " ;
00282     echo
" des fameux "
.em("map/reduce")." li&eacute; au Big Data&nbsp;: 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&eacute;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")."&nbsp;:" ;
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 gH    Retour à la page principale de   (gH)