Javascript

Masquer apartés
Notions abordées dans cette page
  • Saisir une entrée dans une boîte de dialogue
  • structure conditionelle : if then else
  • conditions multiples
  • boucle for
  • boucle while

Saisir une entrée en javascript par une boîte de dialogue

Pour saisir un entrée dans un programme et stocker l'entrée dans une variable la syntaxte est la suivante :
var x = prompt ("Entrer x");
  • Ecrire un programme ou l'utilisateur entre deux nombres, le programme affiche alors la multiplication de ces deux nombres.
  • Structure conditionelle

    Le code de la strucure conditionelle est donnée ci-dessous :

    if (condition) {
      traitement à réaliser
    }
    

    condition est une expression à valeur booléenne. Attention les parenthèses autour de condition font partie de la syntaxe et sont donc obligatoires.

    Lors du traitement de cette expression, condition est évaluée. Si elle vaut true alors le code de traitement à réaliser est exécutée, sinon rien ne se passe.

  • Ecrire un programme ou l'utilisateur entre un nombre, si le nombre est positif, le programme donne sa racine carrée, sinon rien ne se passe.
  • Expression d'alternatives

    Dans les situations rencontrées ci-dessus un traitement "particulier" est réalisé si une condition est vérifiée et dans le cas contraire on passe à loa suite sans aucun traitement complémentaire. On rencontre cependant fréquemment la situation dans laquelle un autre traitement doit être réalisé lorsque la condition n'est pas vérifiée (càd vaut false). Il est possible de programmer un tel comportement en complétant la structure conditionnelle if par un bloc exprimant l'alternative et identifié par le mot-clé else. La syntaxe est alors :

    if (condition) {
      traitement_vrai (à réaliser si condition vaut true)
    }
    else {
      traitement_faut (à réaliser si condition vaut false)
    }
    

    La sémantique d'une expression est la suivante : lors du traitement de cette expression, condition est évaluée. Si elle vaut true alors le code traitement_vrai est exécutée, sinon, c'est-à-dire si condition est évaluée à false, c'est le code traitement_faux qui est exécutée.

    On retrouve la forme de phrases du langage courant telles que "Si c'est pile je gagne sinon je perds."

  • Ecrire un programme ou l'utilisateur entre un nombre, si le nombre est positif, le programme donne sa racine carrée, sinon le programme affiche un message : "On ne peut calculer que la racine carrée d'un nombre positif ou nul.
  • Ecrivez une page html qui comporte un programme en javascript qui simule un lancer de pièce en provoquant un tirage aléatoire (Math.random) Détail de la fonction random qui correspond à Pile si la valeur inférieure à 0,5 et à face sinon, le texte "le résultat du lancer est pile/face" est affiché dans la page
  • Modifier le programme précédent pour que le texte "GAGNE/PERDU" soit affiché dans une zone résultat selon que le résultat du tirage correspond ou non au choix de l'utilisateur
  • Attention

    Il est important de noter et de prendre conscience que l'expression

    if (condition) {
       traitement_vrai
    }
    else {
       traitement_faux
    }
    

    n'est pas équivalente à la séquence

    if (condition) {
       traitement_vrai
    }; 
    if (! condition) {
       traitement_faux
    }
    

    contrairement à ce que l'on peut peut-être penser dans une première impulsion qui s'avère fausse. On est éventuellement d'autant plus susceptible de commettre cette erreur logique que dans certains cas le comportement de ces deux expressions sont identiques. Ainsi les résultats des deux codes suivants sont équivalents :

    var alea = Math.random();                      var alea = Math.random();
    var resultat;                                  var resultat;
    if (alea < 0.5) {                              if (alea < 0.5) {
      resultat = "pile";                              resultat = "pile";
    }                                              };                   
    else {				    	       if (alea >= 0.5) {
      resultat = "face";		    	          resultat = "face";
    }	               		    	       }	            
    

    Ce n'est cependant pas toujours le cas.

    La fonction de Collatz est à la base d'une conjecture appelée conjecture de Collat ou de Syracuse qui malgré sa simplicité d'énoncé résiste aux mathématiciens depuis près d'un siècle.

    La fonction de Collatz est une fonction qui prend pour paramère un entier n et dont le résultat dépend de la parité de n. Ce résultat est 3*n+1 si n est impair et n/2 si n est pair.

    Ecrivez la spécification de la fonction de Collatz.

    On propose les deux codes suivants pour cette fonction :

    On rappelle que l'opérateur modulo % fournit le reste de la division entière. On peut donc tester la parité d'un entier n par l'expression n%2==0 ou n%2==1.
    var n = parseInt(window.prompt("Fournissez un entier positif"));
    if (n%2 == 1) {
      n = 3*n +1;
    } 
    else {
      n = n/2;
    }
    document.writeln("la valeur de Collatz pour l'entier fourni est "+n);
    
    et
    var n = parseInt(window.prompt("Fournissez un entier positif"));
    if (n%2 == 1) {
      n = 3*n +1;
    } 
    if (n%2 ==0) {
      n = n/2;
    }
    document.writeln("la valeur de Collatz pour l'entier fourni est "+n);
    
    1. Créez deux pages html qui contiennent ces portions de scripts et faites plusieurs tests avec les mêmes valeurs de n pour les deux pages.
    2. Que constatez-vous ?
    3. Expliquez.

    Des conditions en cascade

    Les expressions conditionnelles permettent donc de distinguer deux situations différentes et d'exécuter alors deux traitements différents. La composition de plusieurs expressions conditionnelles permet alors de traiter les situations où il existe plus de deux cas qui diffèrent.

    Ecrivez une page html où :
  • l'utilisateur entre une température en degrés
  • le programme affiche alors dans quel état, l'eau se trouve.
  • Prenons maintenant l'exemple de ce jeu dans lequel un joueur choisit secrètement un nombre que doit deviner un autre joueur. Pour cela ce dernier propose un nombre et le premier lui indiqué s'il a trouvé le nombre secret ou si sa proposition lui est supérieur ou inférieur. On le constate trois cas de figure sont possibles. Si on appelle nombreSecret la variable dont la valeur est le nombre secret choisi et proposition la variable dont la valeur est le nombre proposé, la portion de code suivante permet alors de fixer la valeur d'une variable resultat en fonction de chacune des trois situations :

    if (proposition == nombreSecret) {
       resultat = "trouve";
    } 
    else {                      // proposition n'est pas égale à nombreSecret
      if (proposition < nombreSecret) {
         resultat = "trop petit";
      }
      else {
         resultat = "trop grand";		     
      }
    }
    

    La solution consiste à considérer plusieurs fois des alternatives entre deux situations. Ici, on teste d'abord si la proposition est ou non égale au nombre secret, puis dans le second cas on teste si elle est ou non plus petite. Comme on sait déjà qu'elle n'est pas égale, le cas false correspond nécessairement à une valeur trop grande.

    Nous verrons plus tard comment faire pour que le jeu se répète tant que le nombre secret n'a pas été trouvé.
    Ecrivez une page html qui :
    1. choisit aléatoirement un nombre secret entre 0 et 100,
    2. demande à l'utilisateur de faire une proposition,
    3. affiche les deux nombres et le résultat de la comparaison.
    Il existe différents modèles de machines à sous, aussi appelées bandits manchots. Un modèle simple consiste en 3 rouleaux comportant 5 symboles (représentés ici par les chiffres de 1 à 5) et des espaces entre 2 symboles (représentés ici par le chiffre 0). Pour commencer, nous allons programmer une version simple de ce jeu avec une seule mise. Les combinaisons gagnantes et les gains correspondants sont indiqués ci-dessous.
    • 1 1 1 : 250
    • 2 2 2 : 150
    • 3 3 3 : 80
    • 4 4 4 : 50
    • 5 5 5 : 20
    • deux 1 parmis les 3 rouleaux : 5
    • un seul 1 parmis les 3 rouleaux : 2
    1. Réalisez une fonction qui effectue trois tirages aléatoires de chiffres compris entre 0 et 5 inclus, affiche la combinaison correspondante et a pour résultat les gains selon la combinaison obtenue.
    2. Ecrivez une page html qui permet de jouer à ce jeu et d'afficher les gains.

    Instruction switch...case

    L'instruction switch permet de faire plusieurs tests de valeurs sur le contenu d'une même variable. Ce branchement conditionnel simplifie beaucoup le test de plusieurs valeurs d'une variable, car cette opération aurait été compliquée (mais possible) avec des if imbriqués. Sa syntaxe est la suivante :
    switch (Variable) {
     case Valeur1:
     Liste d'instructions;
     break;
     case Valeur2:
     Liste d'instructions;
     break;
     case ValeurX:
     Liste d'instructions;
     break;
     default: 
     Liste d'instructions;
     break;
    }
    
    Les parenthèses qui suivent le mot clé switch indiquent une expression dont la valeur est testée successivement par chacun des case. Lorsque l'expression testée est égale à une des valeurs suivant un case, la liste d'instruction qui suit celui-ci est exécuté. Le mot clé break indique la sortie de la structure conditionnelle. Le mot clé default précède la liste d'instructions qui sera exécutée si l'expression n'est jamais égale à une des valeurs.
    Exemple :
    var day=new Date().getDay();
    switch (day)
    {
    case 0:
      x="Today it's Sunday";
      break;
    case 1:
      x="Today it's Monday";
      break;
    case 2:
      x="Today it's Tuesday";
      break;
    case 3:
      x="Today it's Wednesday";
      break;
    case 4:
      x="Today it's Thursday";
      break;
    case 5:
      x="Today it's Friday";
      break;
    case 6:
      x="Today it's Saturday";
      break;
    }
    


    Boucle FOR

    Le code de la strucure itérative est donnée ci-dessous :

    for (compteur; condition; modification du compteur) {
     liste d'instructions
    }
    
    Par exemple :
    for (i=1; i<6; i++) {
     Alert(i)
    }
    
    il faudra toujours vérifier que la boucle a bien une condition de sortie (i.e le compteur s'incrémente correctement) une instruction Alert(i); dans votre boucle est un bon moyen pour vérifier la valeur du compteur pas à pas! il faut bien compter le nombre de fois que l'on veut faire exécuter la boucle:
  • for(i=0;i<10;i++) exécute 10 fois la boucle (i de 0 à 9)
  • for(i=0;i<=10;i++) exécute 11 fois la boucle (i de 0 à 10)
  • for(i=1;i<10;i++) exécute 9 fois la boucle (i de 1 à 9)
  • for(i=1;i<=10;i++) exécute 10 fois la boucle (i de 1 à 10)
  • Ecrivez une page html où :
  • l'utilisateur entre un nombre entre 1 et 10
  • le programme affiche la table de multiplication de 1 à 10 pour cette valeur.
  • Ecrivez une page html où :
  • l'utilisateur entre un nombre entier naturel n
  • le programme affiche la somme de n entiers naturels
  • Ecrivez une page html où :
  • l'utilisateur entre un nombre entier naturel n
  • le programme affiche n! (factoriel n : n!=1*2*.....*n)


  • Boucle WHILE

    L'instruction while représente un autre moyen d'exécuter plusieurs fois la même série d'instructions. La syntaxe de cette expression est la suivante :
    while (condition réalisée) {
      liste d'instructions
    }
    
    Cette instruction exécute la liste d'instructions tant que (while est un mot anglais qui signifie tant que) la condition est réalisée. La condition de sortie pouvant être n'importe quelle structure conditionnelle, les risques de boucle infinie (boucle dont la condition est toujours vraie) sont grands, c'est-à-dire qu'elle risque de provoquer un plantage du navigateur!

    Saut inconditionnel

    Il peut être nécessaire de faire sauter à la boucle une ou plusieurs valeurs sans pour autant mettre fin à celle-ci. La syntaxe de cette expression est "continue;" (cette instruction se place dans une boucle!), on l'associe généralement à une structure conditionnelle, sinon les lignes situées entre cette instruction et la fin de la boucle seraient obsolètes. Exemple: Imaginons que l'on veuille imprimer pour x allant de 1 à 10 la valeur de 1/(x-7) ... il est évident que pour x=7 il y aura une erreur. Heureusement, grâce à l'instruction continue il est possible de traiter cette valeur à part puis de continuer la boucle!
    x=1;
    while (x<=10) {
     if (x == 7) {
        Alert('division par 0');
        x++;
        continue;
     }
    a = 1/(x-7);
    Alert(a);
    x++;
    }
    
    Ecrivez une page html où :
  • l'utilisateur saisit des nombres jusqu'à ce qu'il saisisse le nombre 0
  • le programme affiche la moyenne de tous les nombres saisis.
  • Reprendre la manipultation 8.
  • Le joueur 1 choisit un nombre.
  • Le joueur 2 essaye de deviner ce nombre, le programme ne s'arrête que lorsque le nombre est trouvé et affiche le nombre de coups nécessaires pour gagner.
  •  

    Articles

    Vidéos