Valid XHTML     Valid CSS2    

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&nbsp;? " ;
00055     echo
" Peut-on faire l'impasse de certains grands langages&nbsp;? et de certains langages de scripts&nbsp;? " ;
00056     
finp() ;
00057     
00058     
finblockquote() ;
00059     
00060     
solution
($numExo,$numSerie) ;
00061     
00062     
p
("texte") ;
00063     echo
"La &laquo;guerre des langages de programmation&raquo; 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&ecirc;mes buts&nbsp;: 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&nbsp;: 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&nbsp;? zélotes&nbsp;?) " ;
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&ocirc;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&ecirc;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&acirc;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&nbsp;: on les prend tous&nbsp;! ".
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&nbsp;? anciens&nbsp;? nouveaux&nbsp;? encore utilisés&nbsp;? " ;
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&ecirc;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&ucirc;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&ecirc;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&ecirc;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&nbsp;?) 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-&ecirc;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&nbsp;? " ;
00166     echo
" Que peut-on faire aujourd'hui avec APL&nbsp;? " ;
00167     echo
" Sans faire référence aux "
.em("Men in Black").", que sont J et K&nbsp;?" ;
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&ecirc;me l'expression (&iota;N °.x &iota;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&nbsp;? Pourquoi est-il un des rares langages à pouvoir se revendiquer " ;
00222     echo
" à la fois langage de scripts et \"grand langage\"&nbsp;? " ;
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&nbsp;; " ;
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&nbsp;:" ;
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é&nbsp;:" ;
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 &nbsp;:" ;
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&nbsp;? " ;
00331     echo
"Et des tableaux synoptiques de commande pour retrouver les syntaxes de base&nbsp;? " ;
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 gH    Retour à la page principale de   (gH)