En rédaction...
Ce cours est destiné pour tout le monde, plus précisément les personnes de 7 ans et plus. Si vous êtes un adulte, et que vous voulez apprendre, ce cours vous fera apprendre la programmation très facilement. Si vous êtes un adulte, vous pouvez apprendre à vos enfants la programmation.
Il vaut mieux éviter qu'un enfant trop jeune lise ce cours lui-même. Il faut plutôt qu'un adulte le fasse, avec des gestes, lentement, en lui demandant souvent de répéter, s'il a compris, et en le faisant écrire tous les exemples de code. Aussi, ne lui lisez pas les titres, ils contiennent des termes "techniques" qui perdraient l'enfant.
N'utilisez pas trop de termes comme "fonctions", "opérateur", et même programmation trop tôt dans le cours. Il faut présenter chacune des notions avec des mots simples, qui se basent sur ce que l'enfant connaît déj&agra;ve, et on ne peut en donner le nom que lorsque la notion lui est familière. Présentez la programmation comme une activité amusante, qui permet de faire des trucs intéressants avec un ordinateur, autre que le jeu, sinon, il ne sera pas motivé pour essayer
Dans ce cours, on parle très simplement, pour que les enfants comprennent, et on répète beaucoup de fois les mêmes choses pour bien apprendre.
Il ne faut pas savoir grand-chose pour le comprendre :
Vous devez vous demander : c'est quoi la programmation ? Ca veut dire quoi programmer ? En fait, ca permet de créer plein de choses sur un ordinateur : des jeux vidéo, des sites internet, et tout ce qui existe dans un ordinateur, et mê sur Wii, PS3, XBox, DS, PSP, etc.
On va donc apprendre à programmer en commençant par des trucs très faciles et petit à petit on ce sera plus intéressant et un peu plus compliqué. À la fin, vous pourrez faire des jeux vidéo, et d'autres choses géniales ! Vous allez voir que c'est facile.
C'est très amusant, tellement amusant que certaines personnes passent des journées et des nutis entières à en faire !
En plus, vous allez devenir plus intelligent. C'est normal : quand on apprend des nouvelles choses, on devient plus intelligent.
Pour finir, comme c'est une activité très nouvelle, on trouve beaucoup de métiers de programmation quand on est adulte.
Pour programmer, on va aller sur [url=http://tryhaskell.org/]un site spécial[/url]. Sur ce site, il faut taper les nombres, les signes, et tout le reste au clavier dans le gros cadre au milieu.
On va d'abord utiliser l'ordinateur pour faire des mathématiques ! Comme une calculatrice.
Ecrivons des nombres :
5 => 5 10 => 10
Quand on écrit quelque-chose, ça affiche le résultat en-dessous, après une flèche "=>". Si on écrit simplement un nombre, le nombre est réécrit en-dessous.
On va faire une addition : on met deux nombres ensemble, et ça en fait un plus grand. Regardez :
1 + 2 => 3
On peut faire plusieurs additions sur une seule ligne :
10 + 3 + 2 => 15C'est pareil que de faire
10 + 5 => 15ou
13 + 2 => 15
Vous voyez ? Quand on écrit une ligne longue et compliquée, après, elle devient plus petite au fur et à mesure, et à la fin ça devient le résultat, qui est le plus petit.
Maintenant, faisons une soustraction. On fait un nombre plus petit avec deux nombres.
5 - 3 => 2
On peut utiliser les deux ensemble.
5 + 6 - 1 => 10C'est pareil que de faire :
5 + 5 => 10ou
11 - 1 => 10
La multiplication : c'est comme faire plusieurs fois des additions.
2 * 2 => 4 2 + 2 => 4 2 * 3 => 6 2 + 2 +2 => 6 6 * 1 => 6 1 + 1 + 1 + 1 + 1 + 1 => 6 10 * 10 => 100 10 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 10 => 100C'est super pratique, la multiplication.
Vous connaissez la division ? C'est très simple.
10 / 2 => 5 4 / 1 => 4 4 / 4 => 1 6 / 2 => 3 6 / 3 => 2En fait, diviser, c'est comme "couper" le premier nombre avec le deuxième. Quand on coupe 10 en 2, on a bien 5 et 5. Quand on coupe 4 en 1, ça veut dire qu'on le coupe pas, donc on a toujours 4. Et quand on coupe 4 en 4 morceaux, on a des 1 !
On peut faire tout ces calculs de tête, mais on peut aussi écrire des calculs très compliqués que seul l'ordinateur peut faire : 1 + 3 + 584754 * 38383498 / 3434234 - 324249 => 6211391.182476791
Maintenant, on va faire des choses plus intéressantes ! On a vu l'addition, la soustraction, etc. et maintenant on va voir une nouvelle chose : la racine carrée :
sqrt 100 => 10.0Donc on écrit "sqrt", puis un nombre, et on a un résultat. Vous vous souvenez de la multiplication ? Quand on fait 10 * 10, ça fait 100. Quand on fait 2 * 2, ça fait 4. Quand on fait 3 * 3, ça fait 9. En fait, quand on multiplie le même nombre, le résultat s'appelle le carré de ce nombre. Le carré de 10, c'est 100, parce-que 10 * 10 = 100. Vous avez compris ? Donc dans 10 * 10 = 100, 100 s'appelle le carré, et 100 s'appelle la racine carrée.
10 * 10 => 100 sqrt 100 => 10En fait, c'est comme aller à l'envers. Essayez de trouver la racine carrée de ces nombres : 1, 4, 9, 16, 25, 36, 49, 64, 81, 100 dans votre tête, et après vérifiez sur l'ordinateur avec sqrt. Un indice : vous avez les réponses dans vos tables de multiplication.
sqrt 1 => 1 1 * 1 => 1 sqrt 4 => 2 2 * 2 => 4 sqrt 9 => 3 3 * 3 => 9 sqrt 16 => 4 4 * 4 => 16 sqrt 25 => 5 5 * 5 => 25 sqrt 36 => 6 6 * 6 => 36 sqrt 49 => 7 7 * 7 => 49 sqrt 64 => 8 8 * 8 => 64 sqrt 81 => 9 9 * 9 => 81Ouf ! On a tout vérifié.
Syntaxe de base des opérateurs et des fonctions Donc, on a vu que :
nombreAvant + nombreApres => résultat par exemple 4 + 6 =>10
sqrt nombreApres => résultat
"bonjour" => "bonjour" "hello" => "hello"En fait, j'appelle ça des mots, mais on peut écrire n'importe-quoi dedans :
"dshfbdhbhdfg" => "dshfbdhbhdfg" même des chiffres et d'autres trucs : "abifgr132435:;;++)sfdf" => "abifgr132435:;;++)sfdf"mais on va quand-même dire que c'est des mots pour faire simple. Les mots, il faut les écrire entre guillemets : ". Sinon, l'ordinateur les mélange avec les trucs comme + et sqrt Ecrire "+" et +, ce n'est pas la même chose !
Vous vous souvenez de sqrt ? Il faut écrire un nombre après, et après on a un autre nombre comme résultat.
sqrt 100 => 10Eh bien, il existe aussi des trucs comme sqrt, mais qui marchent sur les mots. On écrit un mot après, et on a un mot comme résultat !
trucCommeSqrt motApres => motRésultatOn va utiliser quelque-chose qui met un mot à l'envers, et qui s'appelle reverse (ça veut dire "retourner" en français) :
reverse "bonjour" => "ruojnob" reverse "azerty" => "ytreza" reverse "gnocchi" => "ikcong"reverse met la première lettre du mot à la fin, la dernière lettre au début, etc. essayez quelque-chose d'amusant : mettez votre prénom à l'envers :
reverse "romain" => "niamor"
reverse est très amusant, et il n'est pas tout seul. il y a encore plein d'autres trucs ou il faut écrire un mot à côté pour avoir un autre mot en résultat. Par exemple, sort (qui veut dire "ranger" en anglais). Essayons-le, et essayez de deviner ce qu'il fait en regardant les résultats !
sort "ballon" => "abolln" sort "abeille" => "abeeill" sort "zyx" => "xyz" sort "abc" => "abc"Vous avez deviné ? sort range les lettres du mot écrit à droite dans l'ordre alphabétique. C'est pour ça que "abc", qui est déjà dans l'ordre alphabétique, reste "abc" dans le résultat. Pour rappel, voici l'alphabet : abcdeghijklmnopqrstuvwxyz Essayez d'utiliser sort sur votre prénom ! Pour moi, ça donne
sort "romain" => "aimnor"
Donc, on a vu que sort et reverse pour les mots, c'est un peu comme sqrt pour les nombres ! On va en découvrir encore plein d'autres plus tard.
[1, 2, 3] => [1, 2, 3] > [1,2,10,30,1000] => [1,2,10,30,1000] > map (+1) [1,2,10,30,1000] => [2,3,11,31,1001] > map (*10) [1, 2, 3, 4, 50] => [10,20,30,40,500] > map (*150) [345,128,3456,1234567890] => [51750,19200,518400,185185183500] > map (/2) [123,46454,5767676,354434,1234567890] => [61.5,23227.0,2883838.0,177217.0,6.17283945e8] > ["Anna", "Jeanne", "Edouard", "Romain"] => ["Anna", "Jeanne", "Edouard", "Romain"] > map reverse ["Anna", "Jeanne", "Edouard", "Romain"] => ["annA","ennaeJ","drauodE","mianoR"] > sort "Jeanne" => "aeennJ" > sort "reptiles" => "eeilprst" > map sort ["Anna", "Jeanne", "Edouard", "Romain"] => ["annA", "aeennJ", "addoruE", "aimnoR"] Fonctions elles prennent des ingrédients : elles font un plat avec elles prennent des matériaux (briques, ciment) : et font une maison avec elle prennent des trucs : les utilisent ensemble, et créent une nouvelle chose avec par exemple sqrt combiner des fonctions sort trie dans l'ordre alphabétique : abcdefg mais comment on fait si on veut dans le sens contraire ? zyx... il n'y a pas de fonction sortinverse, mais on peut quand même le faire reverse (sort "bazyx") exercice : donner les types des fonctions après les avoir utilisées, dire quels genres de trucs elles prennent créer ses fonctions double 2 "double" prend 2, fait un truc avec, et crée 4 faire que ce soit amusant la fonction "reverse" amuse les enfants. lire son nom à l'envers à chaque fois, montrer les étapes avec la substitution > reverse "Jeanne" => "ennaeJ" > sort "zab" => "abz" > reverse "abz" => "zba" > reverse (sort "zab") => "zba" > reverse (sort "wcg") => "wgc" > --anagramme not an expression: `--anagramme' > 5 == 4 => False > 5 == 5 => True > "CACA" == "CACA" => True > "caca" == "prout" => False > "Romain" == "Rom" => False > sort "manoir" == sort "romain" => True > sort "abc" == sort "acb" => True > sort "abc" == sort "Romain" => False > sort "abc" == sort "acb" => True > 1 * 2 => 2 > 2 * 2 => 4 > 5 *:1:5: parse error (possibly incorrect indentation) > 5 * 2 => 10 > 10 * 2 => 20 > 100 * 2 => 200 > 19327847834 * 2 => 38655695668 > 1.243487 * 2 => 2.486974 > 0.1 * 2 => 0.2 les fonctions • Monsieur Anagramme, dites-moi si ce mot : "romain" et celui-là : "manoir", sont des anagrammes * donne à mr anagramme * • attendez, je vais vérifier et je reviens tout de suite. *...* Oui, tenez, voilà le résultat. * donne à utilisateur * • Ah, True, merci. anagramme "romain" "manoir" True anagramme "OLOLILALA" "a" False en fait, monsieur anagramme, quand il est parti faire son calcul, est allé demander aux jumeaux messieurs sort de donner le résultat de leurs mots à monsieur ==, qui a donné son résultat à monsieur anagramme, qui est venu nous le donner. Plus sur les listes on a déjà vu des listes [1, 2, 3, 10] ["Bonjour", "Hello", "Konichiwa"] on a utilisé des listes de nombres, des listes de mots, maintenant on va faire des listes de caractères. un caractère, c'est quoi ? c'est une lettre, un chiffre, un signe de ponctuation. mais c'est juste un seul truc, c'est pas comme les mots entre guillements 'a' 'z' '?' '5' eux, on les écrit entre guillemets simples et les mots sont écrits comme ça "ofkdgjfig2'34/" entre guillemets doubles en fait, vous savez ce que sont les "mots" entre guillemets ? Haskell fait la différence entre les majuscules et les minuscules. 'a' == 'a' => True 'a' == 'A' => False il y a donc un problème dans notre fonction anagramme jusqu'à là, on a écrit le prénom "romain" en minuscule, mais si on l'écrit comme il faut, avec une majuscule, on a : anagramme "Romain" "manoir" => False à la place de anagramme "romain" "manoir" => True on fait donc des listes avec eux ['b', 'o', '5', '?', 'z'] vous vous souvenez quand on rangeait les nombres du plus petit au plus grand ou les mots dans l'ordre alphabétique ? sort [4, 1, 10] => [1, 4, 10] sort "azyxo" => "aoxyz" on peut aussi ranger des listes de caractères sort ['z', 'a', 'b', 'x', 'y'] => ['a', 'b', 'x', 'y', 'z'] ça marche ! on a rangé des caractères dans l'ordre alphabétique ? vous ne remarquez pas quelque chose ? regardez : sort "zabxy" => "abxyz" sort ['z', 'a', 'b', 'x', 'y'] => ['a', 'b', 'x', 'y', 'z'] vous voyez ? les mots et les listes de caractères se ressemblent beaucoup. quand on les range, ils sont tous les deux dans l'ordre alphabétique. en fait, ils sont pareils. les mots sont juste des listes de lettres, de chiffres, de caractère. c'est logique, non ? donc faire ['a', 'b', 'c'] c'est pareil que d'écrire "abc" en fait, "abc" est plus rapide à écrire. on met juste des guillemets au lieu de mettre des crochets et des virgules vous vous souvenez au début, quand on faisait map sqrt [100, 16, 25, 2] => [10, 4, 5, 1...] si on a utilisé map sur des listes de nombres, ça veut dire qu'on peut aussi l'utiliser sur des listes de caractères, sur des mots ! regardez : map toUpper ['a', 'b', 'z'] => ['A', 'B', 'Z'] ça a marché ! toUpper a mis toutes les lettres en majuscule on peut aussi faire map toUpper "abz" => "ABZ" puisque utiliser des guillemets ou des crochets et des virgules c'est pareil pour les listes de caractères on vient d'apprendre que les mots sont aussi des listes capitalize x = toUpper (head x) : (tail x) exercice intéressant : regarder quelqu'un en train de programmer lire le code source en mode "r" sur un autre écran pour naviguer à souhait on voit comment il navigue, se corrige, dans quel ordre tape les expressions, ... faire un reverse reverseOrder "caca pourri" => "acac irruop" et non pas reverse "caca pourri" => "irruop acac" reverseOrdrer x = map reverse (words x) avec les exemples du début, ou on retourne son prénom, ou on le sort, remettre la majuscule à sa place et l'enlever au début