Listing du fichier s1p1.php
00001 <?php
00002 # (gH) -_- s1p1.php ; TimeStamp (unix) : 30 Novembre 2012 vers 08:59
00003
00004 error_reporting(E_ALL | E_NOTICE | E_STRICT) ;
00005 include("std.php") ;
00006 include("../xmlstd.php") ;
00007 include("scripts_inc.php") ;
00008
00009 $numSerie = 1 ;
00010 debutPageExoScr1($numSerie) ;
00011
00012 ## -------------------------------------------------------------------------------------------
00013
00014 sdl(3) ; echo cmt(' pour afficher toutes les solutions : wedrd01.php?solutions=1') ; sdl(3) ;
00015
00016 ## -------------------------------------------------------------------------------------------
00017
00018 debutSection() ;
00019
00020 $tableauDesRubriques = array() ;
00021 $idr = 0 ;
00022 $idr++; $tableauDesRubriques[$idr] = "Comparaison entre \"grands langages\" et langages de scripts" ;
00023 $idr++; $tableauDesRubriques[$idr] = "Autres langages de scripts" ;
00024 $idr++; $tableauDesRubriques[$idr] = "Le langage APL et ses dérivés : J et K" ;
00025 $idr++; $tableauDesRubriques[$idr] = "Le langage SCALA" ;
00026 $idr++; $tableauDesRubriques[$idr] = "Installation des interpréteurs et numéros de version " ;
00027 $idr++; $tableauDesRubriques[$idr] = "Cartes de référence" ;
00028 $tdmCRLM = new tdm($tableauDesRubriques) ;
00029 $tdmCRLM->titre() ;
00030 $tdmCRLM->menu("oui","oui","nou") ;
00031
00032 pvide() ;
00033
00034 p() ;
00035 echo "Il est possible d'afficher toutes les solutions via ".href("s1p$numSerie.php?solutions=1","?solutions=1","bouton_fin jaune_pastel nou").". " ;
00036 finp() ;
00037
00038 finSection() ;
00039
00040 debutSection() ;
00041 $numExo = 0 ;
00042
00043 ## -------------------------------------------------------------------------------------------
00044
00045 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Comparaison \"grands langages\" et langages de scripts
00046
00047 ## -------------------------------------------------------------------------------------------
00048
00049 blockquote() ;
00050
00051 blockquote() ;
00052
00053 p("texte") ;
00054 echo "Y a-t-il vraiment des raisons profondes pour opposer les \"grands langages\" et les langages de scripts ? " ;
00055 echo " Peut-on faire l'impasse de certains grands langages ? et de certains langages de scripts ? " ;
00056 finp() ;
00057
00058 finblockquote() ;
00059
00060 solution($numExo,$numSerie) ;
00061
00062 p("texte") ;
00063 echo "La «guerre des langages de programmation» a existé dès l'apparition du premier langage de haut niveau " ;
00064 echo " puisqu'il entrait en concurrence avec l'assembleur. Historiquement, les premiers langages ne visaient pas les " ;
00065 echo " mêmes buts : Fortran servait à réaliser des calculs scientifiques alors que Cobol était dédié aux " ;
00066 echo " applications de gestion (APL restant peu connu à l'époque). C'est à partir du moment où C et Pascal ont été reconnus " ;
00067 echo " comme langages généraux pouvant tout programmer que la rivalité est apparue. L'opposition avec les langages de scripts " ;
00068 echo " n'a duré qu'une dizaine d'années : on reconnait aujourd'hui la complémentarité des approches, les langages de scripts " ;
00069 echo " servant aux développements rapides, de petite taille ou de prototypage ou lorsque la vitesse d'exécution n'est pas le " ;
00070 echo " critère de choix le plus important. " ;
00071 finp() ;
00072
00073
00074 p("texte") ;
00075 echo "Des langages spécialisés comme Ada, Lisp ou Prolog ont gardé leurs adeptes (fanatiques ? zélotes ?) " ;
00076 echo " alors que certains langages n'ont jamais vraiment " ;
00077 echo " été reconnus, parfois injustement, comme Logo, Forth, Modula, Oberon. Certains, considérés aujourd'hui comme ".em("mythiques et fondateurs") ;
00078 echo " comme le fameux SmallTalk ou PL/1, ne sont plus vraiment utilisés. Enfin, les langages comme Miranda, Haskell, Camel " ;
00079 echo " ou l'incontournable Basic (par exemple de VBA) restent toujours ".em("à part").". " ;
00080 finp() ;
00081
00082 p("texte") ;
00083 echo "Il nous semble qu'il n'est pas raisonnable aujourd'hui de faire l'impasse sur les grands langages que sont C, C++ et Java. " ;
00084 echo " Toutefois, après un apprentissage de base de ces deux langages -- ce qui inclut : la programmation objet, " ;
00085 echo " les expressions régulières, les itérateurs et les tableaux associatifs --, " ;
00086 echo " il est certainement préférable de choisir puis d'approfondir et " ;
00087 echo " de maitriser un seul de ces deux langages, plutôt que de vouloir garder un niveau égal dans les deux langages. " ;
00088 finp() ;
00089
00090 p("texte") ;
00091 echo "On peut certainement appliquer la même stratégie pour les langages de scripts. Il est assez facile d'en apprendre les rudiments " ;
00092 echo " en une heure, quelque soit le langage, quitte à approfondir plus tard, afin de pouvoir revendiquer cela sur un CV, ou pour automatiser " ;
00093 echo " les tâches courantes. Par contre, choisir ensuite entre Perl, Python ou Ruby relève d'un choix personnel, voire d'une embauche " ;
00094 echo " à la clé. Certains projets comme BioConductor fournissent des programmes C avec des interfaces nommées BioPerl, BioR, BioPython... " ;
00095 echo " On voit ici comment la bioinformatique a résolu le problème du choix des langages de scripts : on les prend tous ! ".
00096 finp() ;
00097
00098 p("texte") ;
00099 echo "Par contre on pourra certainement se dispenser d'approfondir Apl ou Rexx et, si on fait l'impasse sur les calculs statistiques (ce qui est " ;
00100 echo " sans doute une grave erreur de culture), de maitriser le langage R -- mais pas d'en connaitre les bases." ;
00101 finp() ;
00102
00103 finsolution() ;
00104
00105 finblockquote() ;
00106
00107 ## -------------------------------------------------------------------------------------------
00108
00109 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Autres langages de scripts
00110
00111 ## -------------------------------------------------------------------------------------------
00112
00113 blockquote() ;
00114
00115 blockquote() ;
00116 p("texte") ;
00117 echo "A part ceux cités sur la ".href("index.php","page principale")." de ce cours, " ;
00118 echo " y a-t-il d'autres langages de scripts ? anciens ? nouveaux ? encore utilisés ? " ;
00119 finp() ;
00120 finblockquote() ;
00121
00122 solution($numExo,$numSerie) ;
00123
00124 p("texte") ;
00125 echo "Il y a eu principalement EXEC (remplacé par REXX), APL, Logo même si ces deux derniers langages ne sont pas toujours " ;
00126 echo " considérés par tous les programmeurs comme des langages de scripts. " ;
00127 echo " Mais surtout, il ne faut pas oublier, bien sûr, les langages de scripts \"de bas niveau\" " ;
00128 echo " dédiés au système d'exploitation, comme celui de Dos, Bash ou équivalents (pour Linux). Si nous ne les présentons pas, c'est " ;
00129 echo " principalement parce qu'ils ne sont pas ".b("interopérables")." comme on dit, ce qui signifie qu'un script pour un OS ".s_span("x","gvert")." ne s'exécutera " ;
00130 echo " pas sur un OS ".s_span("y","gvert")." alors qu'un script PERL, par exemple, n'est pas directement lié à l'OS (c'est l'interpréteur-programme qui est différent, " ;
00131 echo " pas le script). " ;
00132 echo " APL, en tant que produit IBM est toujours " ;
00133 echo " utilisé, de même que les versions pour Windows et Linux, à cause de la puissance d'expression d'APL (voir exercice suivant) " ;
00134 echo " alors que Logo semble avoir à peu près disparu." ;
00135 finp() ;
00136
00137 p("texte") ;
00138 echo " Les langages dédiés, présents en même temps que le système d'exploitation sont forcément encore beaucoup utilisés (qui n'a jamais " ;
00139 echo " écrit un fichier .BAT, .CMD ou .sh pour changer de répertoire avant de lancer une application ?) ne serait-ce que parce qu'on peut " ;
00140 echo " associer à leurs scripts des raccourcis-clavier, des icones... " ;
00141 finp() ;
00142
00143 p("texte") ;
00144 echo "Il serait vain de penser que les langages de scripts sont figés. Certains apparaissent, d'autres disparaissent. Il faut attendre l'usage " ;
00145 echo " et la popularité, bref il faut du temps avant de découvrir si un langage ".b("reste").". Donc, il faut peut-être ne pas jeter " ;
00146 echo " trop vite des langages comme Rebol, Autoit, Lua, Groovy, Squeak..." ;
00147 echo " ou encore ".href("http://www.lemondeinformatique.fr/actualites/lire-10-langages-de-developpement-pour-secouer-la-it-1ere-partie-48206.html","Chapel, Zimbu","gbleuf nou") ;
00148 echo " qui \"datent\" des année 2010-2020..." ;
00149 finp() ;
00150
00151 finsolution() ;
00152
00153 finblockquote() ;
00154
00155 ## -------------------------------------------------------------------------------------------
00156
00157 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Le langage APL et ses dérivés : J et K
00158
00159 ## -------------------------------------------------------------------------------------------
00160
00161 blockquote() ;
00162
00163 blockquote() ;
00164 p("texte") ;
00165 echo "Pourquoi le langage APL est-il encore aujourd'hui (2012) très différent de tous les autres langages ? " ;
00166 echo " Que peut-on faire aujourd'hui avec APL ? " ;
00167 echo " Sans faire référence aux ".em("Men in Black").", que sont J et K ?" ;
00168 finp() ;
00169 finblockquote() ;
00170
00171 solution($numExo,$numSerie) ;
00172
00173 p("texte") ;
00174 echo "En fait, APL n'utilise pas des mots mais des symboles. Par exemple +/V calcule la somme des éléments du vecteur V et " ;
00175 echo " +/,M calcule la somme des éléments d'une matrice (car ,M linéarise la matrice, c'est-à-dire en fait un vecteur). " ;
00176 echo "De même l'expression (ιN °.x ιN<-10) produit les tables de multiplications des nombres de 1 à 10. " ;
00177 echo " C'est ce qui rend APL si cryptique mais aussi très concis car chaque symbole peut s'utiliser avec 0, 1 ou 2 arguments " ;
00178 echo " qui est éventuellement le chainage d'autres symboles avec 0, 1 ou 2 arguments... " ;
00179 echo " On pourra consulter mon ".href("../tuteurs/tutapl.htm","tuteur APL")." pour plus de renseignements." ;
00180 finp() ;
00181
00182 p("texte") ;
00183 echo "Il fallait au départ un clavier spécial pour utiliser APL. Sans doute trop précoce, il a continué à faire des fanatiques " ;
00184 echo " et des adeptes, notamment pour les mathématiques, les statistiques, les études économiques. Avec Windows et X-Window, APL est devenu " ;
00185 echo " plus facile à utiliser et son mode en session interactive permet d'écrire rapidement des interfaces... " ;
00186 echo " Les langages J et K sont les successeurs d'APL, avec des notations qu'on peut écrire avec un clavier \"normal\". " ;
00187 echo " Pour plus de renseignements, voir (dans cet ordre) la " ;
00188 echo href("http://en.wikipedia.org/wiki/APL_%28programming_language%29","page anglaise du wiki sur APL") ;
00189 echo " puis la ".href("http://fr.wikipedia.org/wiki/APL_%28langage%29","page française du wiki sur APL") ;
00190 echo " puis le document ".href("http://www.afapl.asso.fr/AFAPL_2006_v2.pdf","APL vu du ciel","nou") ;
00191 echo " avant de passer au ".href("http://en.wikipedia.org/wiki/J_%28programming_language%29","langage J") ;
00192 echo " et au ".href("http://en.wikipedia.org/wiki/K_%28programming_language%29","langage K")." avec le fameux exemple " ;
00193 echo " suivant : " ;
00194 finp() ;
00195
00196 pre_fichier("demo_j.txt","cadrebleu") ;
00197
00198 p("texte") ;
00199 echo " qui fait ce que vous pensez ! " ;
00200 finp() ;
00201
00202 p("texte") ;
00203 echo "Vous pouvez tester APL sans l'installer via " ;
00204 echo href("http://tryapl.org/","tryapl.org").". " ;
00205 finp() ;
00206
00207
00208 finsolution() ;
00209
00210 finblockquote() ;
00211
00212 ## -------------------------------------------------------------------------------------------
00213
00214 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Le langage SCALA
00215
00216 ## -------------------------------------------------------------------------------------------
00217
00218 blockquote() ;
00219
00220 p("texte") ;
00221 echo "Qu'est-ce que le langage SCALA ? Pourquoi est-il un des rares langages à pouvoir se revendiquer " ;
00222 echo " à la fois langage de scripts et \"grand langage\" ? " ;
00223 finp() ;
00224
00225 solution($numExo,$numSerie) ;
00226
00227 p("texte") ;
00228 echo "SCALA est un langage à la fois objet, fonctionnel et multi-échelle (du prototype à l'application lourde), compatible et incluant " ;
00229 echo " Java VM. " ;
00230 echo " Il est compilable comme un grand langage, utilisable en interactif comme un langage de scripts... " ;
00231 echo " Le site " ;
00232 # echo href("http://www.siteduzero.com/tutoriel-3-320930-fonctionnalites-principales.html","fonctionnalités") ;
00233 echo href("http://openclassrooms.com/courses/apprenez-la-programmation-avec-scala/pourquoi-scala",em("open classrooms")) ;
00234 echo " présente assez bien quelques-unes des particularités de ce langage. " ;
00235 echo " Le ".href("http://www.scala-lang.org/","site officiel")." contient au " ;
00236 echo href("http://www.scala-lang.org/node/25","noeud_25","nou")." un résumé des avantages de Scala. " ;
00237 echo " Enfin, la ".href("http://en.wikipedia.org/wiki/Scala_%28programming_language%29","page anglaise du wiki") ;
00238 echo " (mais pas la page française) est assez explicite sur les styles " ;
00239 echo " de programmation offerts par Scala." ;
00240 finp() ;
00241
00242
00243 finsolution() ;
00244
00245 finblockquote() ;
00246
00247 ## -------------------------------------------------------------------------------------------
00248
00249 $numExo++ ; $tdmCRLM->afficheRubrique("oui") ; # Installation des interpréteurs et numéros de version
00250
00251 ## -------------------------------------------------------------------------------------------
00252
00253 blockquote() ;
00254
00255 p("texte") ;
00256 echo "Vérifiez que vous disposez bien des langages Awk, Rexx/Regina, Perl (version 5), Rhino, Php (au moins 5.3), Python (version 3.1), " ;
00257 echo " Ruby (version 1.9), Tcl et Tk ; " ;
00258 echo " dans le cas contraire, installez les versions demandées. " ;
00259 echo " Pour chaque langage, afficher le numéro de version et pour tous les langages sauf Awk, calculer 2 puissance 8 en mode interactif." ;
00260 finp() ;
00261
00262 solution($numExo,$numSerie) ;
00263
00264 p("texte") ;
00265 echo "L'installation des logiciels sous Linux se fait très simplement avec ".b("sudo apt-get")."." ;
00266 finp() ;
00267
00268 pre_fichier("installations.txt","cadre") ;
00269
00270 p("texte") ;
00271 echo " Sous Windows, il faut recourir à des installeurs (.exe), par exemple sur le site d'Active State " ;
00272 echo " pour Perl, Tcl/Tk et Python. Voici les adresses officielles que nous conseillons pour Windows :" ;
00273 finp() ;
00274
00275 $langs = "Awk Rexx Perl Php Javascript Tcl Python Ruby" ;
00276 $tlang = preg_split("/\s+/",$langs) ;
00277
00278 blockquote() ;
00279 table(1,5,"collapse") ;
00280 tr() ;
00281 th("C","jaune_pastel") ; echo s_nbsp(3)." Langage " .s_nbsp(3) ; finth() ;
00282 th("L","bleu_pastel") ; echo s_nbsp(3)." Site (cliquer) " .s_nbsp(3) ; finth() ;
00283 fintr() ;
00284 foreach ($tlang as $lang) {
00285 tr() ;
00286 td("L","bleu_pastel") ; echo s_nbsp(3).$lang.s_nbsp(3) ; fintd() ;
00287 $site = "???" ;
00288 $adr = "!!!" ;
00289 if ($lang=="Awk") { $site = "gnuwin32" ; $adr = "http://gnuwin32.sourceforge.net/packages/gawk.htm" ; }
00290 if ($lang=="Rexx") { $site = "sourceforge" ; $adr = "http://regina-rexx.sourceforge.net/" ; }
00291 if ($lang=="Perl") { $site = "active state" ; $adr = "http://www.activestate.com/activeperl" ; }
00292 #if ($lang=="Php") { $site = "zmws" ; $adr = "http://www.zmws.com/" ; }
00293 if ($lang=="Php") { $site = "zmws" ; $adr = "http://fr.wikipedia.org/wiki/Zazouminiwebserver" ; }
00294 if ($lang=="Javascript") { $site = "mozilla.org" ; $adr = "https://developer.mozilla.org/en-US/docs/Rhino" ; }
00295 if ($lang=="Tcl") { $site = "active state" ; $adr = "http://www.activestate.com/activetcl" ; }
00296 if ($lang=="Python") { $site = "active state " ; $adr = "http://www.activestate.com/activepython" ; }
00297 if ($lang=="Ruby") { $site = "ruby-lang " ; $adr = "http://www.ruby-lang.org/fr/downloads/" ; }
00298 td("C","jaune_pastel") ; echo s_nbsp(3).href($adr,$site,"nou").s_nbsp(3) ; fintd() ;
00299 fintr() ;
00300 } ; # fin pour
00301 fintable() ;
00302 finblockquote() ;
00303
00304
00305 p("texte") ;
00306 echo "Pour les numéros de version, le paramètre -v ou --version est souvent implémenté :" ;
00307 finp() ;
00308
00309 pre_fichier("versions.txt","cadre") ;
00310
00311 p("texte") ;
00312 echo "Le calcul de 2 puissance 8 se fait soit par simple évaluation, soit par appel d'une fonction ou d'une méthode :" ;
00313 finp() ;
00314
00315 pre_fichier("puissances.txt","cadrebleu") ;
00316
00317 finsolution() ;
00318
00319 finblockquote() ;
00320
00321 ## -------------------------------------------------------------------------------------------
00322
00323 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Cartes de référence
00324
00325 ## -------------------------------------------------------------------------------------------
00326
00327 blockquote() ;
00328
00329 p("texte") ;
00330 echo "Où trouver des cartes de référence pour chacun des langages de scripts cités ? " ;
00331 echo "Et des tableaux synoptiques de commande pour retrouver les syntaxes de base ? " ;
00332 finp() ;
00333
00334 solution($numExo,$numSerie) ;
00335
00336
00337 p("texte") ;
00338 echo "Il y a de nombreux sites qui fournissent des cartes de référence, plus ou moins détaillées. " ;
00339 echo " Une tentative intéressante est " ;
00340 echo href("http://hyperpolyglot.org") ;
00341 echo " par exemple pour sa page ".href("http://hyperpolyglot.org/scripting","scripting").", " ;
00342 echo " mais il faut au moins un écran 27 pouces pour en profiter ! " ;
00343 echo " Pour Perl et Php, il y a la fameuse page " ;
00344 #echo href("http://antigreen.org/vadim/ProgLanguageComparison/perl2php.html","perl2php").". " ;
00345 echo href("http://www.cs.wcupa.edu/rkline/perl2php/","perl2php").". " ;
00346 echo "De nombreuses cartes de références sont aussi nommées " ;
00347 echo href("http://www.addedbytes.com/cheat-sheets/","cheat-sheets").", " ;
00348 echo " d'où le site ".href("http://www.cheatography.com/","cheatography").". " ;
00349 echo "Mais il y a aussi " ; # .href("http://refcards.com/subject/all","refcards.com").", " ;
00350 #echo href("http://devcheatsheet.com/","devcheatsheet.com") ;
00351 echo href("http://rosettacode.org/wiki/Category:Programming_Tasks","rosetta code","gbleuf nou").", " ;
00352 echo href("http://refcardz.dzone.com/","refcardz")." , " ;
00353 echo href("http://webdeveloper.econsultant.com/cheat-sheets/","econsultant cheat-sheets","gbleuf nou").", " ;
00354 echo " et ".href("http://www.dzone.com/links/index.html","dzone")."... " ;
00355
00356 finp() ;
00357
00358 finsolution() ;
00359
00360 finblockquote() ;
00361
00362
00363 ## -------------------------------------------------------------------------------------------
00364
00365 finPageExercices($numSerie) ; # contient finSection() et finPage() ; la fonction est dans scripts_inc.php
00366
00367 ?>
Pour ne pas voir les numéros de ligne, ajoutez &nl=non à la suite du nom du fichier.
Retour à la page principale de (gH)