# Guide Concepts-Activités à usage des professeurs des écoles qui se lancent dans la pensée informatique

Christophe Reffay

► To cite this version:

Christophe Reffay. Guide Concepts-Activités à usage des professeurs des écoles qui se lancent dans la pensée informatique. Université de Franche Comté. 2021. hal-04540044

HAL Id: hal-04540044

https://hal.science/hal-04540044

Submitted on 10 Apr 2024

HAL is a multi-disciplinary open access
archive for the deposit and dissemination of sci-
entific research documents, whether they are pub-
lished or not. The documents may come from
teaching and research institutions in France or
abroad, or from public or private research centers.

L'archive ouverte pluridisciplinaire HAL, est
destinée au dépôt et à la diffusion de documents
scientifiques de niveau recherche, publiés ou non,
émanant des établissements d'enseignement et de
recherche français ou étrangers, des laboratoires
publics ou privés.

<figure><img src="image_1.png" /></figure>

Distributed under a Creative Commons Attribution 4.0 International License
# Guide Concepts-Activités à usage des professeurs des écoles qui se lancent dans la pensée informatique

Christophe Reffay

► To cite this version:

Christophe Reffay. Guide Concepts-Activités à usage des professeurs des écoles qui se lancent dans la pensée informatique. Université de Franche Comté. 2021. hal-04540044

HAL Id: hal-04540044

https://hal.science/hal-04540044v1

Submitted on 10 Apr 2024

HAL is a multi-disciplinary open access
archive for the deposit and dissemination of sci-
entific research documents, whether they are pub-
lished or not. The documents may come from
teaching and research institutions in France or
abroad, or from public or private research centers.

L'archive ouverte pluridisciplinaire HAL, est
destinée au dépôt et à la diffusion de documents
scientifiques de niveau recherche, publiés ou non,
émanant des établissements d'enseignement et de
recherche français ou étrangers, des laboratoires
publics ou privés.

<figure><img src="image_1.png" /></figure>

Distributed under a Creative Commons Attribution 4.0 International License
# Guide Concepts-Activités à usage des professeurs des écoles
qui se lancent dans la pensée informatique

Christophe Reffay – Janvier 2021

Guide pédagogique - Rapport du laboratoire ELLIADD de l'Université de Franche-Comté.
Produit en 2020, diffusé en 2021 et déposé sur HAL en Avril 2025.

## Table des matières

<table><tr><td>Introduction : pourquoi et pour qui ?</td><td>2</td></tr><tr><td>Partie I : Le lexique</td><td>3</td></tr><tr><td>Instruction</td><td>4</td></tr><tr><td>Séquence</td><td>6</td></tr><tr><td>Algorithme</td><td>8</td></tr><tr><td>Programme informatique</td><td>10</td></tr><tr><td>Langage de programmation</td><td>12</td></tr><tr><td>Boucle</td><td>14</td></tr><tr><td>Variable</td><td>16</td></tr><tr><td>Condition ou Test</td><td>18</td></tr><tr><td>Instruction conditionnelle</td><td>20</td></tr><tr><td>Pensée informatique</td><td>22</td></tr><tr><td>Partie II : Les situations didactiques</td><td>24</td></tr><tr><td>Le jeu du « robot idiot »</td><td>25</td></tr><tr><td>L'application « Collabots »</td><td>27</td></tr><tr><td>Ozobot choisit sa route</td><td>29</td></tr><tr><td>Course chat-bus pouette-pouette</td><td>31</td></tr></table>

Remerciements aux relecteurs des premières versions de ce lexique :

Katell Belgarde, Véronique Lamblin, Nicole Boillin, Anne-Marie Zunzunegui, Brice Poirson, Karine Duquet.
# Guide Concepts-Activités à usage des professeurs des écoles
qui se lancent dans la pensée informatique

Christophe Reffay – Janvier 2021

Guide pédagogique - Rapport du laboratoire ELLIADD de l'Université de Franche-Comté.
Produit en 2020, diffusé en 2021 et déposé sur HAL en Avril 2025.

## Table des matières

<table><tr><td>Introduction : pourquoi et pour qui ?</td><td>2</td></tr><tr><td>Partie I : Le lexique</td><td>3</td></tr><tr><td>Instruction</td><td>4</td></tr><tr><td>Séquence</td><td>6</td></tr><tr><td>Algorithme</td><td>8</td></tr><tr><td>Programme informatique</td><td>10</td></tr><tr><td>Langage de programmation</td><td>12</td></tr><tr><td>Boucle</td><td>14</td></tr><tr><td>Variable</td><td>16</td></tr><tr><td>Condition ou Test</td><td>18</td></tr><tr><td>Instruction conditionnelle</td><td>20</td></tr><tr><td>Pensée informatique</td><td>22</td></tr><tr><td>Partie II : Les situations didactiques</td><td>24</td></tr><tr><td>Le jeu du « robot idiot »</td><td>25</td></tr><tr><td>L'application « Collabots »</td><td>27</td></tr><tr><td>Ozobot choisit sa route</td><td>29</td></tr><tr><td>Course chat-bus pouette-pouette</td><td>31</td></tr></table>

Remerciements aux relecteurs des premières versions de ce lexique :

Katell Belgarde, Véronique Lamblin, Nicole Boillin, Anne-Marie Zunzunegui, Brice Poirson, Karine Duquet.
# Introduction : pourquoi et pour qui ?

Suite à différentes expériences d'accompagnement de Professeurs des Écoles dans le domaine de la pensée informatique, il m'est apparu nécessaire de produire un petit lexique pour donner des repères à la fois accessibles et précis, pour permettre aux PE qui le souhaitent, de s'appuyer sur des définitions correctes, qui leur donneraient plus d'assurance et de légitimité pour accompagner leurs élèves dans la découverte de ce continent étrange et souvent mystérieux que constitue la pensée informatique. Pour compléter ce lexique et donner corps à ces termes, les enseignants du collège numérique de l'INSPE de Franche-Comté ont proposé aux étudiants de Master MEEF PE, dans le cadre de leur évaluation semestrielle de produire des situations pédagogiques d'informatique des 4 types : 1) débranchée, 2) de manipulation de robots pédagogiques, 3) d'utilisation d'applications et 4) de programmation. Ces situations sont présentées dans la deuxième partie de ce guide.

Dans le lexique chaque concept est présenté en une seule page par : une introduction, son origine, une définition précise, des exemples de situations de référence qui mettent en évidence la notion, puis renvoie sur une deuxième page à des propositions de situations didactiques où les élèves pourront découvrir, reconnaître, exercer cette notion, ou la combiner avec d'autres.

Ayant réalisé l'importance d'incarner ces concepts en vivant des expériences variées, ce guide a pour intention de définir proprement les notions pour mieux les désigner, mais surtout pour être capable de les déceler quand elles surgissent dans la classe. Après les avoir identifiées dans des situations variées, grâce à ce guide, en tant qu'expérience intellectuelle, je vous invite au voyage de l'expérience sensible en mettant en œuvre dans votre classe les situations qui vous inspirent, vous motivent et qui sauront inspirer, motiver, voire amuser vos élèves.

Ce guide est une base de données avec 2 entrées : concepts et situations. Chacun des concepts renvoie aux situations et réciproquement. Il ne s'agit donc pas de le lire de façon linéaire, mais plutôt de suivre les liens et faire des allers et retours entre ces deux parties qui se nourrissent l'une l'autre. Les termes du lexique définissent en première partie les concepts qui sont en jeu dans les situations présentées en deuxième partie. Ces situations donnent corps et vie aux concepts et offrent des occasions de les manipuler pour mieux les apprivoiser.
# Introduction : pourquoi et pour qui ?

Suite à différentes expériences d'accompagnement de Professeurs des Écoles dans le domaine de la pensée informatique, il m'est apparu nécessaire de produire un petit lexique pour donner des repères à la fois accessibles et précis, pour permettre aux PE qui le souhaitent, de s'appuyer sur des définitions correctes, qui leur donneraient plus d'assurance et de légitimité pour accompagner leurs élèves dans la découverte de ce continent étrange et souvent mystérieux que constitue la pensée informatique. Pour compléter ce lexique et donner corps à ces termes, les enseignants du collège numérique de l'INSPE de Franche-Comté ont proposé aux étudiants de Master MEEF PE, dans le cadre de leur évaluation semestrielle de produire des situations pédagogiques d'informatique des 4 types : 1) débranchée, 2) de manipulation de robots pédagogiques, 3) d'utilisation d'applications et 4) de programmation. Ces situations sont présentées dans la deuxième partie de ce guide.

Dans le lexique chaque concept est présenté en une seule page par : une introduction, son origine, une définition précise, des exemples de situations de référence qui mettent en évidence la notion, puis renvoie sur une deuxième page à des propositions de situations didactiques où les élèves pourront découvrir, reconnaître, exercer cette notion, ou la combiner avec d'autres.

Ayant réalisé l'importance d'incarner ces concepts en vivant des expériences variées, ce guide a pour intention de définir proprement les notions pour mieux les désigner, mais surtout pour être capable de les déceler quand elles surgissent dans la classe. Après les avoir identifiées dans des situations variées, grâce à ce guide, en tant qu'expérience intellectuelle, je vous invite au voyage de l'expérience sensible en mettant en œuvre dans votre classe les situations qui vous inspirent, vous motivent et qui sauront inspirer, motiver, voire amuser vos élèves.

Ce guide est une base de données avec 2 entrées : concepts et situations. Chacun des concepts renvoie aux situations et réciproquement. Il ne s'agit donc pas de le lire de façon linéaire, mais plutôt de suivre les liens et faire des allers et retours entre ces deux parties qui se nourrissent l'une l'autre. Les termes du lexique définissent en première partie les concepts qui sont en jeu dans les situations présentées en deuxième partie. Ces situations donnent corps et vie aux concepts et offrent des occasions de les manipuler pour mieux les apprivoiser.
Partie I :
Le lexique
Partie I :
Le lexique
# Instruction

## Introduction

En informatique, une instruction correspond à une formulation claire (non ambiguë) de l'action à réaliser. Si l'instruction doit être comprise par une machine, elle doit être exprimée dans un langage informatique que la machine est capable d'interpréter. Si elle figure dans un algorithme destiné à être lu par un Homme, il suffit qu'elle soit claire (univoque) pour ceux qui auront à l'interpréter. C'est pourquoi il est parfois utile de définir une convention définissant clairement ce qu'une formulation (l'instruction) aura pour effet (l'action) lors de son exécution.

## Définition

> Une instruction est une expression univoque décrivant une action à réaliser.

## Situations de référence

Dans une recette de cuisine, on trouve des instructions telles que : mélanger tels ingrédients, faire revenir telle chose, faire dorer telle autre, etc. Dans le jeu d'instructions d'un robot (Beebot ou souris), les flèches (boutons sur le dos du robot) sont des instructions désignant : avancer d'un cran, reculer d'un cran, tourner sur place d'un quart de tour à gauche, tourner sur place d'un quart de tour à droite, d'autres permettent de faire clignoter les yeux ou d'émettre un son. Dans un langage de programmation comme Scratch, les instructions sont appelées « blocs ». Par exemple : « dire "quelque chose" pendant 1 seconde », « montrer » ou « cacher » (le personnage), « avancer de 10 pas », « tourner à gauche de 15° », « attendre 1 seconde », ...

## Relations avec les autres termes du lexique<fnref n="1" />

L'instruction est la brique de base d'un **programme** ou d'un **algorithme**. Elle s'exprime le plus souvent sur une seule ligne. Elle est souvent composée d'un verbe (d'action) parfois complété par des **paramètres** (exemple : « avancer de 250 pas », « dire "Ohé" pendant 3 secondes »). L'instruction particulière (très courante) qui sert à rentrer une valeur dans une **variable** est appelée **affectation** (ex : « A:=25 » ou « Mettre 25 dans A »). Les instructions peuvent être organisées en une **séquence**, ou en alternatives dans le cas d'une **instruction conditionnelle**. Elles peuvent s'exécuter simultanément et en parallèle (par deux personnages différents dans Scratch, par les 2 roues d'un robot par exemple pour faire un tour sur lui-même). Une instruction (ou une séquence d'instructions) peut être répétée plusieurs fois dans une **boucle**.

## Situations didactiques pouvant travailler ce concept

Étant l'élément de base, il est important que le concept d'instruction soit bien acquis par les élèves avant d'élaborer des algorithmes ou programmes complexes. Il faut aussi qu'ils puissent faire la différence entre un jouet télécommandé et un robot programmé. Le jouet télécommandé exécute directement les commandes au fur et à mesure qu'on les invoque et si l'on veut faire refaire les mêmes actions au jouet plusieurs fois, il faut redonner chaque fois les commandes au jouet. En revanche, un robot ou un automate programmable enregistre les instructions et les exécute selon l'ordre défini par le programme, chaque fois qu'on lui demande de « jouer » le programme. Il faut donc faire comprendre les deux temps : édition des instructions à enregistrer dans le programme et exécution du programme enregistré.

<footnote n="1">¹ Il n'est pas indispensable de comprendre chaque terme de ce paragraphe. L'idée est ici de s'imprégner des termes (sans les maîtriser au début), pour les laisser s'enraciner peu à peu au fil de la lecture.</footnote>
# Instruction

## Introduction

En informatique, une instruction correspond à une formulation claire (non ambiguë) de l'action à réaliser. Si l'instruction doit être comprise par une machine, elle doit être exprimée dans un langage informatique que la machine est capable d'interpréter. Si elle figure dans un algorithme destiné à être lu par un Homme, il suffit qu'elle soit claire (univoque) pour ceux qui auront à l'interpréter. C'est pourquoi il est parfois utile de définir une convention définissant clairement ce qu'une formulation (l'instruction) aura pour effet (l'action) lors de son exécution.

## Définition

> Une instruction est une expression univoque décrivant une action à réaliser.

## Situations de référence

Dans une recette de cuisine, on trouve des instructions telles que : mélanger tels ingrédients, faire revenir telle chose, faire dorer telle autre, etc. Dans le jeu d'instructions d'un robot (Beebot ou souris), les flèches (boutons sur le dos du robot) sont des instructions désignant : avancer d'un cran, reculer d'un cran, tourner sur place d'un quart de tour à gauche, tourner sur place d'un quart de tour à droite, d'autres permettent de faire clignoter les yeux ou d'émettre un son. Dans un langage de programmation comme Scratch, les instructions sont appelées « blocs ». Par exemple : « dire "quelque chose" pendant 1 seconde », « montrer » ou « cacher » (le personnage), « avancer de 10 pas », « tourner à gauche de 15° », « attendre 1 seconde », ...

## Relations avec les autres termes du lexique<fnref n="1" />

L'instruction est la brique de base d'un **programme** ou d'un **algorithme**. Elle s'exprime le plus souvent sur une seule ligne. Elle est souvent composée d'un verbe (d'action) parfois complété par des **paramètres** (exemple : « avancer de 250 pas », « dire "Ohé" pendant 3 secondes »). L'instruction particulière (très courante) qui sert à rentrer une valeur dans une **variable** est appelée **affectation** (ex : « A:=25 » ou « Mettre 25 dans A »). Les instructions peuvent être organisées en une **séquence**, ou en alternatives dans le cas d'une **instruction conditionnelle**. Elles peuvent s'exécuter simultanément et en parallèle (par deux personnages différents dans Scratch, par les 2 roues d'un robot par exemple pour faire un tour sur lui-même). Une instruction (ou une séquence d'instructions) peut être répétée plusieurs fois dans une **boucle**.

## Situations didactiques pouvant travailler ce concept

Étant l'élément de base, il est important que le concept d'instruction soit bien acquis par les élèves avant d'élaborer des algorithmes ou programmes complexes. Il faut aussi qu'ils puissent faire la différence entre un jouet télécommandé et un robot programmé. Le jouet télécommandé exécute directement les commandes au fur et à mesure qu'on les invoque et si l'on veut faire refaire les mêmes actions au jouet plusieurs fois, il faut redonner chaque fois les commandes au jouet. En revanche, un robot ou un automate programmable enregistre les instructions et les exécute selon l'ordre défini par le programme, chaque fois qu'on lui demande de « jouer » le programme. Il faut donc faire comprendre les deux temps : édition des instructions à enregistrer dans le programme et exécution du programme enregistré.

<footnote n="1">¹ Il n'est pas indispensable de comprendre chaque terme de ce paragraphe. L'idée est ici de s'imprégner des termes (sans les maîtriser au début), pour les laisser s'enraciner peu à peu au fil de la lecture.</footnote>
## Comprendre (décodeur) une instruction

La meilleure façon de vérifier que les élèves savent décodeur une instruction, c'est de la leur faire exécuter (à la place de la machine). Comprendre une instruction, c'est être capable de faire l'action qui correspond à cette instruction. Si on demande à l'élève de décrire l'action, plutôt que de la réaliser, on prend le risque des implicites qui peuvent masquer les détails non maîtrisés. Par exemple, selon le contexte, « tourner à droite » peut être interprété de différentes façons :

* Faire un pas vers la droite ;

* Pivoter sur place d'un quart de tour à droite ;

* Prendre à droite au prochain croisement.

Le jeu du robot idiot, avec des déplacements sur un pavage, où les élèves ont différents rôles (concepteur du programme-trajet, annonceur des instructions, robot exécutant les instructions, vérificateurs) est un très bon moyen de mettre en œuvre la notion d'instruction et de programme.

## Apprendre à manipuler les paramètres d'une instruction

Proposer un programme simple avec une instruction utilisant un ou plusieurs paramètres et demander aux élèves de corriger les paramètres pour atteindre un objectif.

Par exemple, modifier l'instruction « dire "Bonjour" pendant 2 secondes » pour que le texte "Bonjour" soit traduit en anglais et qu'il ne s'affiche que pendant 1 seconde. Ainsi les élèves devraient comprendre que les paramètres sont modifiables et quels sont leurs effets.

## Définir un jeu d'instructions

On peut demander aux élèves de définir l'ensemble des instructions nécessaires pour construire par exemple des parcours. Cela suppose plusieurs choses :

* Proposer une représentation (conventionnelle) pour désigner chaque instruction : par exemple une expression, un pictogramme, un son, etc. ;

* Définir précisément l'effet de chaque instruction : l'action qui doit être réalisée quand on exécute l'instruction ;

* S'assurer que toutes les constructions (parcours) envisagées sont possibles avec le jeu d'instructions proposé.

De même qu'une idée peut s'exprimer avec différentes phrases, il est important de montrer aux élèves qu'on peut construire plusieurs algorithmes (avec un jeu d'instructions donné), qui aboutissent à un même résultat (même parcours). Par exemple, « faire demi-tour » ou faire 2 fois « tourner d'un quart de tour à gauche » produit le même résultat que de faire 2 fois « tourner d'un quart de tour à droite ». Ainsi, on peut conclure en disant qu'il n'est pas nécessaire de définir « faire demi-tour » quand on a déjà « tourner d'un quart de tour à gauche ». On pourrait même se passer de l'instruction « tourner d'un quart de tour à droite » qui peut se réaliser en faisant 3 fois « tourner d'un quart de tour à gauche ».

## Programmer un parcours

Etant donné un jeu d'instructions (i.e. : les commandes comprises par la machine), programmer revient à trouver un agencement de ces instructions pour résoudre un problème, c'est-à-dire traduire une tâche complexe en une suite d'instructions simples.

On peut par exemple demander de définir une suite d'instructions qui permet de partir d'un point A pour arriver à un point B : 1) sans autre contrainte, 2) avec des passages interdits (rivière) ou des passages obligés (ponts), 3) en donnant précisément le parcours à réaliser ou 4) en montrant l'exécution pour rendre perceptible le temps et toutes les étapes intermédiaires.
## Comprendre (décodeur) une instruction

La meilleure façon de vérifier que les élèves savent décodeur une instruction, c'est de la leur faire exécuter (à la place de la machine). Comprendre une instruction, c'est être capable de faire l'action qui correspond à cette instruction. Si on demande à l'élève de décrire l'action, plutôt que de la réaliser, on prend le risque des implicites qui peuvent masquer les détails non maîtrisés. Par exemple, selon le contexte, « tourner à droite » peut être interprété de différentes façons :

* Faire un pas vers la droite ;

* Pivoter sur place d'un quart de tour à droite ;

* Prendre à droite au prochain croisement.

Le jeu du robot idiot, avec des déplacements sur un pavage, où les élèves ont différents rôles (concepteur du programme-trajet, annonceur des instructions, robot exécutant les instructions, vérificateurs) est un très bon moyen de mettre en œuvre la notion d'instruction et de programme.

## Apprendre à manipuler les paramètres d'une instruction

Proposer un programme simple avec une instruction utilisant un ou plusieurs paramètres et demander aux élèves de corriger les paramètres pour atteindre un objectif.

Par exemple, modifier l'instruction « dire "Bonjour" pendant 2 secondes » pour que le texte "Bonjour" soit traduit en anglais et qu'il ne s'affiche que pendant 1 seconde. Ainsi les élèves devraient comprendre que les paramètres sont modifiables et quels sont leurs effets.

## Définir un jeu d'instructions

On peut demander aux élèves de définir l'ensemble des instructions nécessaires pour construire par exemple des parcours. Cela suppose plusieurs choses :

* Proposer une représentation (conventionnelle) pour désigner chaque instruction : par exemple une expression, un pictogramme, un son, etc. ;

* Définir précisément l'effet de chaque instruction : l'action qui doit être réalisée quand on exécute l'instruction ;

* S'assurer que toutes les constructions (parcours) envisagées sont possibles avec le jeu d'instructions proposé.

De même qu'une idée peut s'exprimer avec différentes phrases, il est important de montrer aux élèves qu'on peut construire plusieurs algorithmes (avec un jeu d'instructions donné), qui aboutissent à un même résultat (même parcours). Par exemple, « faire demi-tour » ou faire 2 fois « tourner d'un quart de tour à gauche » produit le même résultat que de faire 2 fois « tourner d'un quart de tour à droite ». Ainsi, on peut conclure en disant qu'il n'est pas nécessaire de définir « faire demi-tour » quand on a déjà « tourner d'un quart de tour à gauche ». On pourrait même se passer de l'instruction « tourner d'un quart de tour à droite » qui peut se réaliser en faisant 3 fois « tourner d'un quart de tour à gauche ».

## Programmer un parcours

Etant donné un jeu d'instructions (i.e. : les commandes comprises par la machine), programmer revient à trouver un agencement de ces instructions pour résoudre un problème, c'est-à-dire traduire une tâche complexe en une suite d'instructions simples.

On peut par exemple demander de définir une suite d'instructions qui permet de partir d'un point A pour arriver à un point B : 1) sans autre contrainte, 2) avec des passages interdits (rivière) ou des passages obligés (ponts), 3) en donnant précisément le parcours à réaliser ou 4) en montrant l'exécution pour rendre perceptible le temps et toutes les étapes intermédiaires.
# Séquence

## Origine

Selon wikipédia, le terme séquence serait un anglicisme pour « suite » (mathématique).

## Introduction

En informatique, la séquence permet de détailler une tâche complexe en une succession d'actions plus simples. Une suite d'instructions dans un programme sera réalisée dans le même ordre au moment de l'exécution que celui dans lequel elles apparaissent dans le programme.

Exemple : Quel sera le contenu de la variable A après exécution de la séquence suivante ?

Mettre 25 dans A
Mettre 4 dans B
Mettre 8 dans A
Mettre A*B dans A

La valeur de A devient 25
La valeur de B devient 4
La valeur de A devient 8
La nouvelle valeur de A devient $4 * 8 => 32$

Dans cette séquence, le contenu de la variable A est modifié 3 fois. Selon l'ordre dans lequel on exécute ces instructions, le contenu de la variable A pourrait être différent à la fin. La séquence dit tout simplement que les instructions seront exécutées l'une après l'autre dans l'ordre où elles apparaissent dans le programme. On ne peut commencer à exécuter une instruction que quand la précédente a été entièrement réalisée. Ainsi, l'ordre d'exécution de cette séquence ne peut aboutir qu'à un seul état possible : A vaut 32 et B vaut 4.

## Définition

> Dans une séquence, les instructions sont exécutées l'une après l'autre, dans l'ordre où elles apparaissent.

## Situations de référence

Suite d'opérations pour le montage d'un meuble, suite d'indications (GPS) pour effectuer un trajet, le mode opératoire dans une recette de cuisine, une séquence de couleurs (perles sur un fil), une partition en musique, les différentes phases d'une histoire, ...

## Relation avec les autres termes du lexique

La séquence en informatique est la forme la plus simple d'agencement des **instructions** dans un **algorithme** ou un **programme**. Elle définit l'ordre dans lequel seront exécutés les instructions. On peut trouver d'autres modes d'exécution que la séquence comme l'**instruction conditionnelle** : « Si <condition> Alors <Instruction1> Sinon <Instruction2> ». Dans ce cas les 2 instructions ne seront pas exécutées en séquence, mais seule l'une des deux sera exécutée en fonction de la valeur de la **condition**. Si <condition> est vrai c'est <Instruction1> qui sera exécutée. Dans le cas contraire ce sera <Instruction2>.

## Pour les petits génies

Par opposition à la séquence, on peut aussi faire exécuter des **instructions** en parallèle. Par exemple, dans Scratch, s'il y a plusieurs personnages, la première **instruction** de chaque personnage après l'**évènement** « drapeau vert » est exécutée théoriquement en même temps. En réalité, s'il n'y a qu'un seul processeur dans la machine, il ne peut y avoir qu'une seule instruction exécutée à la fois. Le processeur devra partager son temps entre les programmes des différents personnages pour qu'ils exécutent chacun leur tour la prochaine de leurs instructions.
# Séquence

## Origine

Selon wikipédia, le terme séquence serait un anglicisme pour « suite » (mathématique).

## Introduction

En informatique, la séquence permet de détailler une tâche complexe en une succession d'actions plus simples. Une suite d'instructions dans un programme sera réalisée dans le même ordre au moment de l'exécution que celui dans lequel elles apparaissent dans le programme.

Exemple : Quel sera le contenu de la variable A après exécution de la séquence suivante ?

Mettre 25 dans A
Mettre 4 dans B
Mettre 8 dans A
Mettre A*B dans A

La valeur de A devient 25
La valeur de B devient 4
La valeur de A devient 8
La nouvelle valeur de A devient $4 * 8 => 32$

Dans cette séquence, le contenu de la variable A est modifié 3 fois. Selon l'ordre dans lequel on exécute ces instructions, le contenu de la variable A pourrait être différent à la fin. La séquence dit tout simplement que les instructions seront exécutées l'une après l'autre dans l'ordre où elles apparaissent dans le programme. On ne peut commencer à exécuter une instruction que quand la précédente a été entièrement réalisée. Ainsi, l'ordre d'exécution de cette séquence ne peut aboutir qu'à un seul état possible : A vaut 32 et B vaut 4.

## Définition

> Dans une séquence, les instructions sont exécutées l'une après l'autre, dans l'ordre où elles apparaissent.

## Situations de référence

Suite d'opérations pour le montage d'un meuble, suite d'indications (GPS) pour effectuer un trajet, le mode opératoire dans une recette de cuisine, une séquence de couleurs (perles sur un fil), une partition en musique, les différentes phases d'une histoire, ...

## Relation avec les autres termes du lexique

La séquence en informatique est la forme la plus simple d'agencement des **instructions** dans un **algorithme** ou un **programme**. Elle définit l'ordre dans lequel seront exécutés les instructions. On peut trouver d'autres modes d'exécution que la séquence comme l'**instruction conditionnelle** : « Si <condition> Alors <Instruction1> Sinon <Instruction2> ». Dans ce cas les 2 instructions ne seront pas exécutées en séquence, mais seule l'une des deux sera exécutée en fonction de la valeur de la **condition**. Si <condition> est vrai c'est <Instruction1> qui sera exécutée. Dans le cas contraire ce sera <Instruction2>.

## Pour les petits génies

Par opposition à la séquence, on peut aussi faire exécuter des instructions en parallèle. Par exemple, dans Scratch, s'il y a plusieurs personnages, la première instruction de chaque personnage après l'**évènement** « drapeau vert » est exécutée théoriquement en même temps. En réalité, s'il n'y a qu'un seul processeur dans la machine, il ne peut y avoir qu'une seule instruction exécutée à la fois. Le processeur devra partager son temps entre les programmes des différents personnages pour qu'ils exécutent chacun leur tour la prochaine de leurs instructions.
## Situations didactiques mettant en œuvre ce concept

Ce qui est en jeu dans la notion de séquence, c'est le passage d'une instruction à plusieurs. Puisqu'il s'agit de ses premières compositions de programmes, c'est souvent là que l'élève découvre aussi le fait que le programme (ici, la séquence) est mémorisé par la machine (robot ou ordinateur) et que son exécution est différée. En effet, tant qu'il n'a pas été au-delà d'une seule instruction, il peut croire que l'instruction est exécutée directement, comme pour un jouet télécommandé.

Le deuxième aspect important est de bien comprendre que la séquence impose l'ordre d'exécution des instructions. On peut trouver des exemples de séquences qui ne produisent pas le même résultat si l'on modifie (seulement) l'ordre des instructions.

## Programmer un parcours

Demander une séquence qui permet de partir d'un point A pour arriver à un point B : 1) sans autre contrainte, 2) avec des passages interdits (rivière) ou des passages obligés (ponts), 3) en donnant précisément le parcours à réaliser ou 4) en montrant l'exécution du programme attendu (sans montrer le programme) pour faire percevoir le temps et toutes les étapes intermédiaires.

Ce genre d'exercices peut se faire en débranché, par exemple sur une feuille avec une grille et un personnage positionné sur le point A et demander la séquence d'instructions (désignées par des lettres comme A=Avancer, G=pivoter à Gauche, D=pivoter à Droite, R=Reculer), puis mis en scène dans le jeu du robot idiot (au moment de la restitution) ou mis en œuvre avec de vrais robots (Beebot, Bluebot ou Souris sont parfaits pour cet exercice). On peut aussi utiliser la grille comme support pour tracer le parcours correspondant à la séquence programmée.

## Faire jouer une phrase musicale dans Scratch

En ajoutant le module « Musique » dans Scratch, on peut choisir un instrument et jouer des notes. Le paramètre note est un entier (60 et 72 correspondent à un Do), mais quand on cherche à la modifier, on a accès à un clavier sur la gamme. Le deuxième paramètre de la note permet de préciser la durée de la note (1 temps, ½ temps...) par un nombre décimal.

Pour aller plus loin... Quand la séquence du personnage est prête, on peut dupliquer le personnage et changer l'instrument. Ensuite, on teste l'exécution de chaque personnage séparément (en cliquant sur sa séquence), puis on écoute l'orchestre jouer le morceau à plusieurs instruments en cliquant sur le drapeau vert pour le programme scratch global.

<figure><img src="image_2.png" /></figure>

<figure><img src="image_3.png" /></figure>

## Égrener les éléments d'une suite dans scratch

Exemple de suites : une table de multiplication, jours de la semaine, mois de l'année...

Demander aux élèves de choisir une scène et un personnage qui devra avancer un peu après avoir « pensé » successivement les différents éléments de la suite :

* « penser "1 x 7 = 7" pendant 1 seconde »

* Avancer,

* « penser "2 x 7 = 14" pendant 1 seconde »

* Avancer, ...

Pour que le programme puisse être joué plusieurs fois à l'identique, il est bon d'insérer une phase d'initialisation (au début) en positionnant le personnage : "aller à x: (-250) y: (0)"

<figure><img src="image_4.png" /></figure>
## Situations didactiques mettant en œuvre ce concept

Ce qui est en jeu dans la notion de séquence, c'est le passage d'une instruction à plusieurs. Puisqu'il s'agit de ses premières compositions de programmes, c'est souvent là que l'élève découvre aussi le fait que le programme (ici, la séquence) est mémorisé par la machine (robot ou ordinateur) et que son exécution est différée. En effet, tant qu'il n'a pas été au-delà d'une seule instruction, il peut croire que l'instruction est exécutée directement, comme pour un jouet télécommandé.

Le deuxième aspect important est de bien comprendre que la séquence impose l'ordre d'exécution des instructions. On peut trouver des exemples de séquences qui ne produisent pas le même résultat si l'on modifie (seulement) l'ordre des instructions.

## Programmer un parcours

Demander une séquence qui permet de partir d'un point A pour arriver à un point B : 1) sans autre contrainte, 2) avec des passages interdits (rivière) ou des passages obligés (ponts), 3) en donnant précisément le parcours à réaliser ou 4) en montrant l'exécution du programme attendu (sans montrer le programme) pour faire percevoir le temps et toutes les étapes intermédiaires.

Ce genre d'exercices peut se faire en débranché, par exemple sur une feuille avec une grille et un personnage positionné sur le point A et demander la séquence d'instructions (désignées par des lettres comme A=Avancer, G=pivoter à Gauche, D=pivoter à Droite, R=Reculer), puis mis en scène dans le jeu du robot idiot (au moment de la restitution) ou mis en œuvre avec de vrais robots (Beebot, Bluebot ou Souris sont parfaits pour cet exercice). On peut aussi utiliser la grille comme support pour tracer le parcours correspondant à la séquence programmée.

## Faire jouer une phrase musicale dans Scratch

En ajoutant le module « Musique » dans Scratch, on peut choisir un instrument et jouer des notes. Le paramètre note est un entier (60 et 72 correspondent à un Do), mais quand on cherche à la modifier, on a accès à un clavier sur la gamme. Le deuxième paramètre de la note permet de préciser la durée de la note (1 temps, ½ temps...) par un nombre décimal.

Pour aller plus loin... Quand la séquence du personnage est prête, on peut dupliquer le personnage et changer l'instrument. Ensuite, on teste l'exécution de chaque personnage séparément (en cliquant sur sa séquence), puis on écoute l'orchestre jouer le morceau à plusieurs instruments en cliquant sur le drapeau vert pour le programme scratch global.

<figure><img src="image_2.png" /></figure>

<figure><img src="image_3.png" /></figure>

## Égrener les éléments d'une suite dans scratch

Exemple de suites : une table de multiplication, jours de la semaine, mois de l'année...

Demander aux élèves de choisir une scène et un personnage qui devra avancer un peu après avoir « pensé » successivement les différents éléments de la suite :

* « penser "1 x 7 = 7" pendant 1 seconde »

* Avancer,

* « penser "2 x 7 = 14" pendant 1 seconde »

* Avancer, ...

Pour que le programme puisse être joué plusieurs fois à l'identique, il est bon d'insérer une phase d'initialisation (au début) en positionnant le personnage : "aller à x: (-250) y: (0)"

<figure><img src="image_4.png" /></figure>
# Algorithme

## Introduction

Algorithme, Machine, Langage et Information constituent les 4 piliers de la science informatique selon (Doweck, 2011). L'algorithme est au cœur de la pensée informatique car il permet par exemple de décomposer un problème complexe en sous-problèmes plus simples, jusqu'à arriver aux actions élémentaires. L'algorithmique est l'étude des algorithmes. Elle mesure par exemple la complexité des algorithmes pour rechercher le plus efficace.

## Origines

Muhammad Ibn Mūsā al-Khuwārizmī dit Al Quarizmi, est un savant perse (dans la région du Khwarezm) du 8ème siècle qui a classifié les algorithmes existants selon leur terminaison. Mais il est aussi reconnu pour avoir écrit le premier livre d'algèbre (sans un seul chiffre !).

Une autre étymologie possible serait la composition des deux termes grecs : "arithmos" = calcul et "algos" = douleur, pour définir algorithme : un calcul pénible à faire à la main.

(Source : wikipedia : [algorithme](https://fr.wikipedia.org/wiki/Algorithme), [Al-Khwârizmî](https://fr.wikipedia.org/wiki/Al-Khwârizmî))

## Définition

> *Un algorithme est un enchainement mécanique d'actions, dans un certain ordre, qui chacune a un effet, et dont l'exécution complète permet de résoudre un problème ou de faire quelque chose.*

(Tchounikine, 2016)

## Situations de référence

Une recette de cuisine, un plan de montage d'un meuble, un itinéraire donné par des instructions type GPS, tout guide pas à pas, technique de calcul explicitée par écrit, programme de construction géométrique, ...

## Relations avec les autres termes du lexique

Un algorithme est écrit dans un certain **langage** pour être compréhensible par l'acteur qui devra exécuter les **actions** décrites dans l'algorithme. Si l'acteur cible est une machine (ordinateur, robot), alors il faut que l'algorithme soit exprimé dans un **langage informatique** compréhensible par la machine. On parle alors d'un type particulier d'algorithmes : le **programme**. Algorithme est donc un terme plus général que **programme**. Les situations de référence proposées ci-dessus désignent des algorithmes écrits en **langage naturel** compréhensible par l'Homme en vue de son exécution par l'Homme.

## Situations didactiques pouvant travailler ce concept

* Débranché : La recette de la pâte à crêpes ou du Quatre quarts ; Le jeu du robot idiot (déplacement, chorégraphie, ...); Le crêpier psychorigide

* Sur ordinateur : programme de construction de figure en géométrie dynamique, programmation scratch (tout programme étant un algorithme)

* Avec les robots, on définit une tâche (plus ou moins complexe) à accomplir pour laquelle il faut préparer l'algorithme sur feuille avant d'entrer le programme.
# Algorithme

## Introduction

Algorithme, Machine, Langage et Information constituent les 4 piliers de la science informatique selon (Doweck, 2011). L'algorithme est au cœur de la pensée informatique car il permet par exemple de décomposer un problème complexe en sous-problèmes plus simples, jusqu'à arriver aux actions élémentaires. L'algorithmique est l'étude des algorithmes. Elle mesure par exemple la complexité des algorithmes pour rechercher le plus efficace.

## Origines

Muhammad Ibn Mūsā al-Khuwārizmī dit Al Quarizmi, est un savant perse (dans la région du Khwarezm) du 8ème siècle qui a classifié les algorithmes existants selon leur terminaison. Mais il est aussi reconnu pour avoir écrit le premier livre d'algèbre (sans un seul chiffre !).

Une autre étymologie possible serait la composition des deux termes grecs : "arithmos" = calcul et "algos" = douleur, pour définir algorithme : un calcul pénible à faire à la main.

(Source : wikipedia : [algorithme](https://fr.wikipedia.org/wiki/Algorithme), [Al-Khwârizmî](https://fr.wikipedia.org/wiki/Al-Khwârizmî))

## Définition

> *Un algorithme est un enchainement mécanique d'actions, dans un certain ordre, qui chacune a un effet, et dont l'exécution complète permet de résoudre un problème ou de faire quelque chose.*

(Tchounikine, 2016)

## Situations de référence

Une recette de cuisine, un plan de montage d'un meuble, un itinéraire donné par des instructions type GPS, tout guide pas à pas, technique de calcul explicitée par écrit, programme de construction géométrique, ...

## Relations avec les autres termes du lexique

Un algorithme est écrit dans un certain **langage** pour être compréhensible par l'acteur qui devra exécuter les **actions** décrites dans l'algorithme. Si l'acteur cible est une machine (ordinateur, robot), alors il faut que l'algorithme soit exprimé dans un **langage informatique** compréhensible par la machine. On parle alors d'un type particulier d'algorithmes : le **programme**. Algorithme est donc un terme plus général que **programme**. Les situations de référence proposées ci-dessus désignent des algorithmes écrits en **langage naturel** compréhensible par l'Homme en vue de son exécution par l'Homme.

## Situations didactiques pouvant travailler ce concept

* Débranché : La recette de la pâte à crêpes ou du Quatre quarts ; Le jeu du robot idiot (déplacement, chorégraphie, ...); Le crêpier psychorigide

* Sur ordinateur : programme de construction de figure en géométrie dynamique, programmation scratch (tout programme étant un algorithme)

* Avec les robots, on définit une tâche (plus ou moins complexe) à accomplir pour laquelle il faut préparer l'algorithme sur feuille avant d'entrer le programme.
La recette de la pâte à crêpes ; quatre quarts... (débranché)

Toute recette de cuisine étant un algorithme, on peut montrer aux élèves comment décomposer la recette en actions (associées à des savoir-faire précis). Quand les élèves ont acquis les différents savoir-faire, montrer qu'avec la recette ils savent faire la pâte à crêpes. On peut réappliquer ces savoir-faire à une autre recette utilisant les mêmes savoir-faire.

Le jeu du robot idiot (débranché) :

* Dans le rôle du concepteur de l'algorithme : définir l'algorithme (séquence d'actions) ;

* Dans le rôle du lecteur : lire/interpréter l'algorithme, verbaliser et transmettre les actions/instructions/ordres au robot ;

* Dans le rôle du robot : interpréter et exécuter les instructions dictées par le lecteur ;

* Dans le rôle du contrôleur : vérifier que le lecteur verbalise correctement (de façon non ambiguë et si possible systématique) les instructions et que le robot les interprète et les exécute correctement (c'est-à-dire comme un idiot sans aucune initiative ni correction).

NB : La séquence d'actions est classiquement un déplacement sur un carrelage, mais ce peut être toute séquence d'actions simples.

Exemples : mouvements (chorégraphie), sons/notes à produire, couleurs à aligner, etc.

Le jeu du crêpier (débranché) :

Le but du jeu est de trouver la méthode, le truc, la manière, donc l'algorithme qui permet de reconstituer la pyramide des crêpes dans le bon ordre avec certaines contraintes. Après avoir réussi, il s'agit de verbaliser (en dictant les instructions à un élève-robot). Il faut ensuite affiner la formulation de ces instructions (définition d'un langage). On peut alors écrire l'algorithme pour qu'il résolve à coup sûr le problème, quel que soit l'ordre des crêpes au départ. À la fin de cette séquence, les élèves auront donc découvert une méthode manipulatoire, défini un langage pour exprimer les instructions et rédigé l'algorithme qui résout le problème !

Le programme de construction en géométrie dynamique (sur ordinateur)

Dans un logiciel de géométrie dynamique, chaque élément (point, droite, cercle, segment, droite perpendiculaire passant par un point, médiatrice d'un segment, etc.) ajouté à la figure en construction est automatiquement inscrit dans le « programme de construction ». Ce texte est une séquence d'actions interprétable par un homme permettant de construire la figure, ce qui répond parfaitement à la définition d'un algorithme. Une version de cet algorithme étant directement exécutable par le logiciel, il peut donc légitimement être appelé aussi programme.

Programmation avec par exemple [Blockly](https://blockly.org), [Scratch Junior (tablette)](https://Scratch.com/education junior) ou [Scratch (ordinateur)](https://Scratch.com/) ou programmation de robots : [Souris](https://www.beebot.com/), [Beebot](https://beebot.org/), [Bluebot](https://bluebot.org/), [Ozobot](https://ozobot.org/) et [Thymio...](https://www.thymio.org)

Différents exercices peuvent être réalisés en relation directe avec la programmation<fnref n="2" /> :

* Montrer l'exécution d'un programme (tout fait) et demander d'en écrire l'algorithme ;

* Définir une tâche (plus ou moins complexe) à réaliser, un problème à résoudre ou un objectif à atteindre et demander aux élèves de concevoir et d'expliquer l'algorithme (décomposer la tâche en actions réalisables) puis d'écrire le programme ;

* Proposer un algorithme (ex : un parcours) et demander à quoi il aboutit avant de le faire programmer aux élèves pour vérifier ;

* Proposer un algorithme incomplet ou erroné pour réaliser une tâche définie, le corriger.

<footnote n="2">² Des exemples d'activités seront présentés dans la partie II de ce document pour illustrer ces propositions.</footnote>
La recette de la pâte à crêpes ; quatre quarts... (débranché)

Toute recette de cuisine étant un algorithme, on peut montrer aux élèves comment décomposer la recette en actions (associées à des savoir-faire précis). Quand les élèves ont acquis les différents savoir-faire, montrer qu'avec la recette ils savent faire la pâte à crêpes. On peut réappliquer ces savoir-faire à une autre recette utilisant les mêmes savoir-faire.

Le jeu du robot idiot (débranché) :

* Dans le rôle du concepteur de l'algorithme : définir l'algorithme (séquence d'actions) ;

* Dans le rôle du lecteur : lire/interpréter l'algorithme, verbaliser et transmettre les actions/instructions/ordres au robot ;

* Dans le rôle du robot : interpréter et exécuter les instructions dictées par le lecteur ;

* Dans le rôle du contrôleur : vérifier que le lecteur verbalise correctement (de façon non ambiguë et si possible systématique) les instructions et que le robot les interprète et les exécute correctement (c'est-à-dire comme un idiot sans aucune initiative ni correction).

NB : La séquence d'actions est classiquement un déplacement sur un carrelage, mais ce peut être toute séquence d'actions simples.

Exemples : mouvements (chorégraphie), sons/notes à produire, couleurs à aligner, etc.

Le jeu du crêpier (débranché) :

Le but du jeu est de trouver la méthode, le truc, la manière, donc l'algorithme qui permet de reconstituer la pyramide des crêpes dans le bon ordre avec certaines contraintes. Après avoir réussi, il s'agit de verbaliser (en dictant les instructions à un élève-robot). Il faut ensuite affiner la formulation de ces instructions (définition d'un langage). On peut alors écrire l'algorithme pour qu'il résolve à coup sûr le problème, quel que soit l'ordre des crêpes au départ. À la fin de cette séquence, les élèves auront donc découvert une méthode manipulatoire, défini un langage pour exprimer les instructions et rédigé l'algorithme qui résout le problème !

Le programme de construction en géométrie dynamique (sur ordinateur)

Dans un logiciel de géométrie dynamique, chaque élément (point, droite, cercle, segment, droite perpendiculaire passant par un point, médiatrice d'un segment, etc.) ajouté à la figure en construction est automatiquement inscrit dans le « programme de construction ». Ce texte est une séquence d'actions interprétable par un homme permettant de construire la figure, ce qui répond parfaitement à la définition d'un algorithme. Une version de cet algorithme étant directement exécutable par le logiciel, il peut donc légitimement être appelé aussi programme.

Programmation avec par exemple [Blockly](https://blockly.org), [Scratch Junior (tablette)](https://Scratch.com/education junior) ou [Scratch (ordinateur)](https://Scratch.com/) ou programmation de robots : [Souris](https://www.beebot.com/), [Beebot](https://beebot.org/), [Bluebot](https://bluebot.org/), [Ozobot](https://ozobot.org/) et [Thymio...](https://www.thymio.org)

Différents exercices peuvent être réalisés en relation directe avec la programmation<fnref n="2" /> :

* Montrer l'exécution d'un programme (tout fait) et demander d'en écrire l'algorithme ;

* Définir une tâche (plus ou moins complexe) à réaliser, un problème à résoudre ou un objectif à atteindre et demander aux élèves de concevoir et d'expliquer l'algorithme (décomposer la tâche en actions réalisables) puis d'écrire le programme ;

* Proposer un algorithme (ex : un parcours) et demander à quoi il aboutit avant de le faire programmer aux élèves pour vérifier ;

* Proposer un algorithme incomplet ou erroné pour réaliser une tâche définie, le corriger.

<footnote n="2">² Des exemples d'activités seront présentés dans la partie II de ce document pour illustrer ces propositions.</footnote>
# Programme informatique

## Origine

Les cartons perforés de Jacquard (1801) pour le tissage sont considérés par certains comme les premiers programmes en langage binaire (carton/trou). Si Charles Babbage (1834) est considéré comme le grand-père des ordinateurs modernes pour avoir conçu la machine analytique en s'inspirant de Jacquard (Kennassiri, 2014), c'est sa collaboratrice Augusta Ada Lovelace qui a jeté les bases des langages de programmation et qui aurait écrit le tout premier programme informatique en 1843 dans un tel langage (Gaymard, 2016).

## Définition

> *Un programme informatique est un ensemble d'instructions destinées à être exécutées par une machine.*

Inspiré de wikipédia : [Programme Informatique](https://fr.wikipedia.org/wiki/Programme_informatique)

## Situations de référence

Toute séquence d'actions mémorisée pouvant être exécutée par une machine (ex : lave-linge) ; le ruban perforé d'un orgue de barbarie ; une macro dans un tableur ; un filtre dans la messagerie ; une playlist de musique ; Un texte écrit dans un langage de programmation ; toute production exprimée dans une forme directement interprétable par une machine ou traduisible dans le langage exécutable par la machine ;

<table><caption>Le même programme (qui affiche « Coucou toi ! ») écrit dans différents langages informatiques</caption><thead><tr><th>Assembleur</th><th>Scratch</th><th>BASIC</th></tr></thead><tbody><tr><td><pre>main proc<br>jmp debut<br>mess db 'Coucou toi !$'<br>debut:<br>mov dx, offset mess<br>mov ah, 9<br>int 21h<br>ret<br>main endp<br>cseg ends<br>end main</pre></td><td><pre>quand P est cliqué<br>dire Coucou toi !</pre><br><pre>Langage C<br>#include &lt;stdio.h&gt;<br>int main() {<br>printf("Coucou toi !\n");<br>return 0;<br>}</pre></td><td><pre>10 PRINT "Coucou toi !"</pre><br><pre>python<br>print("Coucou toi !")</pre></td></tr></tbody></table>

<figure><img src="image_5.png" /></figure>

## Relations avec les autres termes du lexique

Un programme est un **algorithme codé** dans un **langage de programmation**. Il est essentiel de séparer la phase de programmation (édition du programme) de la phase d'exécution du programme. Programmer, c'est concevoir (anticiper), produire, éditer et enregistrer son programme pour pouvoir le corriger et l'exécuter plusieurs fois sans qu'on ait à le réécrire à chaque fois. Différents types d'erreurs peuvent se glisser dans les programmes : *syntaxique* si l'expression est inconnue dans le **langage**, *sémantique* quand le programmeur n'utilise pas correctement une **instruction** du **langage** ou *conceptuelle* quand l'**algorithme** sous-jacent n'a pas été correctement pensé et construit. Pour corriger un programme, il est parfois judicieux de tester son exécution par étapes pour vérifier chacune d'elles avant de les combiner.
# Programme informatique

## Origine

Les cartons perforés de Jacquard (1801) pour le tissage sont considérés par certains comme les premiers programmes en langage binaire (carton/trou). Si Charles Babbage (1834) est considéré comme le grand-père des ordinateurs modernes pour avoir conçu la machine analytique en s'inspirant de Jacquard (Kennassiri, 2014), c'est sa collaboratrice Augusta Ada Lovelace qui a jeté les bases des langages de programmation et qui aurait écrit le tout premier programme informatique en 1843 dans un tel langage (Gaymard, 2016).

## Définition

> *Un programme informatique est un ensemble d'instructions destinées à être exécutées par une machine.*

Inspiré de wikipédia : [Programme Informatique](https://fr.wikipedia.org/wiki/Programme_informatique)

## Situations de référence

Toute séquence d'actions mémorisée pouvant être exécutée par une machine (ex : lavaligne) ; le ruban perforé d'un orgue de barbarie ; une macro dans un tableur ; un filtre dans la messagerie ; une playlist de musique ; Un texte écrit dans un langage de programmation ; toute production exprimée dans une forme directement interprétable par une machine ou traduisible dans le langage exécutable par la machine ;

Le même programme (qui affiche « Coucou toi ! ») écrit dans différents langages informatiques

<table><thead><tr><th>Assembleur</th><th>Scratch</th><th>BASIC</th></tr></thead><tbody><tr><td><pre>main proc<br>jmp debut<br>mess db 'Coucou toi !$'<br>debut:<br>mov dx, offset mess<br>mov ah, 9<br>int 21h<br>ret<br>main endp<br>cseg ends<br>end main</pre></td><td><pre>quand P est cliqué<br>dire Coucou toi !</pre><br><pre>Langage C<br>#include &lt;stdio.h&gt;<br>int main() {<br>printf("Coucou toi !\n");<br>return 0;<br>}</pre></td><td><pre>10 PRINT "Coucou toi !"</pre><br><pre>python<br>print("Coucou toi !")</pre></td></tr></tbody></table>

<figure><img src="image_5.png" /></figure>

## Relations avec les autres termes du lexique

Un programme est un **algorithme codé** dans un **langage de programmation**. Il est essentiel de séparer la phase de programmation (édition du programme) de la phase d'exécution du programme. Programmer, c'est concevoir (anticiper), produire, éditer et enregistrer son programme pour pouvoir le corriger et l'exécuter plusieurs fois sans qu'on ait à le réécrire à chaque fois. Différents types d'erreurs peuvent se glisser dans les programmes : syntaxique si l'expression est inconnue dans le langage, sémantique quand le programmeur n'utilise pas correctement une instruction du langage ou conceptuelle quand l'algorithme sous-jacent n'a pas été correctement pensé et construit. Pour corriger un programme, il est parfois judicieux de tester son exécution par étapes pour vérifier chacune d'elles avant de les combiner.
## Situations didactiques pouvant travailler ce concept

Il est important de prendre conscience que l'on peut exercer les différentes compétences utiles à la programmation dans différentes situations et pas seulement en produisant un programme. Ainsi, on peut apprendre à programmer :

* En tentant de comprendre ce que fait un programme existant en l'exécutant et en le lisant : l'aller et retour entre le programme et les effets de son exécution permet de comprendre le sens des instructions du langage : la relation entre l'instruction dans le langage et l'action réalisée par la machine lors de l'exécution ;

* En corrigeant un programme existant, qui ne fait pas ce qui est attendu ;

* En devinant ce qu'un programme va faire, c'est-à-dire prendre la place de la machine pour exécuter le programme et réaliser ou décrire les actions ;

* Traduire un programme en algorithme (en langage naturel) ou l'inverse ;

## Défis débranchés ou avec robots : interpréter un programme

### Écrit avec des pictogrammes (ex : robots-souris, Beebot, Scratch Junior)

Présenter un programme sous la forme d'une simple séquence de pictogrammes qui réalise un déplacement et des bips sur un damier et faire deviner en fonction de la position et l'orientation de départ : où il termine, dans quelles cases il bipe, ou s'il passe dans telle case. Il est important de montrer l'exécution du programme comme « vérification finale ».

### Écrit en Scratch ou tout autre langage de programmation étudié au préalable

Selon les notions travaillées, présenter un programme plus ou moins complexe et interroger les élèves sur ce que fait le programme et vérifier leur compréhension des instructions et constructions du langage. On peut faire varier les données/conditions initiales pour obtenir un programme identique mais dont le résultat sera différent pour chaque élève. Selon la complexité ou le moment dans la séquence (découverte, application, entraînement, évaluation) on peut donner ce défi à réaliser par petits groupes plutôt qu'individuellement. Il est important de pouvoir montrer l'exécution du programme comme « vérification finale ».

## Programmer avec un ordinateur et un environnement de programmation

### Découvrir l'interface de programmation

Proposer un programme (tout fait) à entrer dans la machine pour l'exécuter pour comprendre les différents espaces et phases d'édition et d'exécution d'un programme.

### Débuguer (corriger) un programme qui doit réaliser une tâche précise

Proposer un programme (comportant des erreurs) déjà enregistré dans la machine pour que les élèves puissent l'exécuter et le modifier pour qu'il effectue correctement la tâche attendue.

### Construire un programme qui doit réaliser une tâche précise

Proposer une tâche précise à réaliser par le programme attendu et demander aux élèves de le produire en leur permettant de tester et corriger leur programme.

### Tester le programme d'un autre

Quand le programme (type jeu, Quizzes, etc.) utilise des données entrées par l'utilisateur ou des interactions, il est souvent utile de faire tester le programme par un utilisateur autre que le programmeur afin qu'il en apprécie les qualités, en décèle les défauts, les limites et propose des améliorations.
## Situations didactiques pouvant travailler ce concept

Il est important de prendre conscience que l'on peut exercer les différentes compétences utiles à la programmation dans différentes situations et pas seulement en produisant un programme. Ainsi, on peut apprendre à programmer :

* En tentant de comprendre ce que fait un programme existant en l'exécutant et en le lisant : l'aller et retour entre le programme et les effets de son exécution permet de comprendre le sens des instructions du langage : la relation entre l'instruction dans le langage et l'action réalisée par la machine lors de l'exécution ;

* En corrigeant un programme existant, qui ne fait pas ce qui est attendu ;

* En devinant ce qu'un programme va faire, c'est-à-dire prendre la place de la machine pour exécuter le programme et réaliser ou décrire les actions ;

* Traduire un programme en algorithme (en langage naturel) ou l'inverse ;

## Défis débranchés ou avec robots : interpréter un programme

### Écrit avec des pictogrammes (ex : robots-souris, Beebot, Scratch Junior)

Présenter un programme sous la forme d'une simple séquence de pictogrammes qui réalise un déplacement et des bips sur un damier et faire deviner en fonction de la position et l'orientation de départ : où il termine, dans quelles cases il bipe, ou s'il passe dans telle case. Il est important de montrer l'exécution du programme comme « vérification finale ».

### Écrit en Scratch ou tout autre langage de programmation étudié au préalable

Selon les notions travaillées, présenter un programme plus ou moins complexe et interroger les élèves sur ce que fait le programme et vérifier leur compréhension des instructions et constructions du langage. On peut faire varier les données/conditions initiales pour obtenir un programme identique mais dont le résultat sera différent pour chaque élève. Selon la complexité ou le moment dans la séquence (découverte, application, entraînement, évaluation) on peut donner ce défi à réaliser par petits groupes plutôt qu'individuellement. Il est important de pouvoir montrer l'exécution du programme comme « vérification finale ».

## Programmer avec un ordinateur et un environnement de programmation

### Découvrir l'interface de programmation

Proposer un programme (tout fait) à entrer dans la machine pour l'exécuter pour comprendre les différents espaces et phases d'édition et d'exécution d'un programme.

### Débuguer (corriger) un programme qui doit réaliser une tâche précise

Proposer un programme (comportant des erreurs) déjà enregistré dans la machine pour que les élèves puissent l'exécuter et le modifier pour qu'il effectue correctement la tâche attendue.

### Construire un programme qui doit réaliser une tâche précise

Proposer une tâche précise à réaliser par le programme attendu et demander aux élèves de le produire en leur permettant de tester et corriger leur programme.

### Tester le programme d'un autre

Quand le programme (type jeu, Quizzes, etc.) utilise des données entrées par l'utilisateur ou des interactions, il est souvent utile de faire tester le programme par un utilisateur autre que le programmeur afin qu'il en apprécie les qualités, en décèle les défauts, les limites et propose des améliorations.
# Langage de programmation

## Origine

Augusta Ada King, comtesse de Lovelace (Angleterre), née Ada Byron, a jeté les bases des premiers langages de programmation en 1843 (Gaymard, 2016). Et c'est en son hommage qu'on a appelé « Ada » le langage de programmation conçu entre 1977 et 1983 par une équipe de CII Honeywell Bull dirigée par le Français Jean Ichbiah.

Source Wikipédia : [Ada Lovelace](https://fr.wikipedia.org/wiki/Ada_Lovelace)

## Définition

> *Un langage de programmation est un moyen pour un humain, d'exprimer un algorithme comme un programme pour qu'il soit in fine exécuté par une machine.*

## Situations de référence

Jeu d'instructions permettant de programmer un robot ; sélection d'éléments dans une liste (ex : playlist), langages visuels/graphiques comme Scratch, Blockly et Snap! ; langage des pages web : HTML ;

## Relations avec les autres termes du lexique

Un langage de programmation est un moyen pour un humain, d'exprimer un **algorithme** comme un **programme informatique** pour qu'il soit *in fine* exécuté par une **machine**. Plus précisément, il permet de décrire les données qui seront manipulées par la **machine** et quelles seront les manipulations. Il offre un ensemble de notions telles que les **instructions**, les **variables**, et les **procédures** ou **fonctions**, qui peuvent être utilisées dans les **programmes**. Programmer permet de passer d'un niveau d'abstraction à un autre : entre le problème à résoudre au niveau le plus global et les niveaux intermédiaires (en résolvant des parties du problème) que l'on peut construire avec le langage de programmation jusqu'au niveau le plus bas de l'instruction. Cette capacité est une pièce maîtresse de la **pensée informatique**.

## Un cran plus loin

Il existe de nombreux langages de programmation qui peuvent être caractérisés par leur niveau d'abstraction (le plus bas : machine ; le plus haut : logique/algébrique/objet), mais aussi par le paradigme qui les structure : procédure, fonction, objet, logique. Il existe ainsi plusieurs familles de langages. Langages à balises : HTML, XML ; Langages machine : Assembleur ; Langages fonctionnels : Lisp, Scheme ; Langages procéduraux ou impératifs : Basic, C, Python ; Langages orientés objets : Scratch, C++ ; Langages logiques : Prolog.

Dans tous les cas, il y a un processus de traduction (automatique) entre les instructions données dans le *code source* (dans le langage de programmation de haut niveau) et le *code binaire* (en langage machine). Selon le cas, un langage peut être :

a. *Interprété* (c'est le cas des langages Scratch, Basic et Python par exemple) par la machine. Cela signifie que la machine lit et traduit simultanément (à la volée) le *code source* en *code binaire* pour l'exécuter.

b. *Compilé* (comme le langage C). Dans ce cas, un compilateur transcrit entièrement le *code source* en *code binaire* avant de pouvoir l'exécuter.

c. Directement exécutable par la machine tel que l'Assembleur. Dans ce cas la traduction se fait mot à mot : mot (en lettres) à mot (en notation binaire).
# Langage de programmation

## Origine

Augusta Ada King, comtesse de Lovelace (Angleterre), née Ada Byron, a jeté les bases des premiers langages de programmation en 1843 (Gaymard, 2016). Et c'est en son hommage qu'on a appelé « Ada » le langage de programmation conçu entre 1977 et 1983 par une équipe de CII Honeywell Bull dirigée par le Français Jean Ichbiah.

Source Wikipédia : [Ada Lovelace](https://fr.wikipedia.org/wiki/Ada_Lovelace)

## Définition

> *Un langage de programmation est un moyen pour un humain, d'exprimer un algorithme comme un programme pour qu'il soit in fine exécuté par une machine.*

## Situations de référence

Jeu d'instructions permettant de programmer un robot ; sélection d'éléments dans une liste (ex : playlist), langages visuels/graphiques comme Scratch, Blockly et Snap! ; langage des pages web : HTML ;

## Relations avec les autres termes du lexique

Un langage de programmation est un moyen pour un humain, d'exprimer un **algorithme** comme un **programme informatique** pour qu'il soit *in fine* exécuté par une **machine**. Plus précisément, il permet de décrire les données qui seront manipulées par la **machine** et quelles seront les manipulations. Il offre un ensemble de notions telles que les **instructions**, les **variables**, et les **procédures** ou **fonctions**, qui peuvent être utilisées dans les **programmes**. Programmer permet de passer d'un niveau d'abstraction à un autre : entre le problème à résoudre au niveau le plus global et les niveaux intermédiaires (en résolvant des parties du problème) que l'on peut construire avec le langage de programmation jusqu'au niveau le plus bas de l'instruction. Cette capacité est une pièce maîtresse de la **pensée informatique**.

## Un cran plus loin

Il existe de nombreux langages de programmation qui peuvent être caractérisés par leur niveau d'abstraction (le plus bas : machine ; le plus haut : logique/algébrique/objet), mais aussi par le paradigme qui les structure : procédure, fonction, objet, logique. Il existe ainsi plusieurs familles de langages. Langages à balises : HTML, XML ; Langages machine : Assembleur ; Langages fonctionnels : Lisp, Scheme ; Langages procéduraux ou impératifs : Basic, C, Python ; Langages orientés objets : Scratch, C++ ; Langages logiques : Prolog.

Dans tous les cas, il y a un processus de traduction (automatique) entre les instructions données dans le *code source* (dans le langage de programmation de haut niveau) et le *code binaire* (en langage machine). Selon le cas, un langage peut être :

a. *Interprété* (c'est le cas des langages Scratch, Basic et Python par exemple) par la machine. Cela signifie que la machine lit et traduit simultanément (à la volée) le *code source* en *code binaire* pour l'exécuter.

b. *Compilé* (comme le langage C). Dans ce cas, un compilateur transcrit entièrement le *code source* en *code binaire* avant de pouvoir l'exécuter.

c. Directement exécutable par la machine tel que l'Assembleur. Dans ce cas la traduction se fait mot à mot : mot (en lettres) à mot (en notation binaire).
## Situations didactiques pouvant travailler ce concept

Ce qui se joue derrière le concept de langage de programmation, c'est évidemment, comme pour le langage naturel, la capacité de comprendre (lire, interpréter) et de s'exprimer (écrire, coder) à l'aide de conventions partagées capables de désigner des données, des objets et des instructions de façon non ambiguë, univoque. Un langage de programmation a pour avantage d'être beaucoup plus limité. Chaque instruction du langage, exécutée dans un contexte donné est traduite par la machine en une action précise. Si la machine ne fait pas exactement ce qu'on voulait qu'elle fasse, c'est parce qu'on n'a pas utilisé les bonnes instructions, ou qu'on n'a pas correctement défini le contexte : les données, les conditions initiales. La machine ne se trompe pas, elle ne fait qu'exécuter le programme qu'on lui a communiqué.

### Inventer ou retrouver un langage de programmation

Dans le jeu du robot idiot, les élèves commencent par donner des instructions qui sont parfois mal interprétées par le « robot idiot » joué par un camarade ou l'enseignant. Il faut donc essayer d'être précis et se mettre d'accord (convention) sur ce que veut dire « aller à droite » : est-ce « pivoter sur soi-même sans changer de place » ou « se déplacer d'un pas vers la droite » ?

Avec un mini-robot de type Beebot (ou souris), on peut demander aux élèves d'explorer l'effet de chaque bouton pour construire la liste des instructions qui constituent le langage.

Avec deux téléphones, demander à un élève d'utiliser un SMS (texte brut avec interdiction d'y adjoindre une image), pour décrire par exemple une pensée, une carte de visite, une carte de vœux, ..., qu'il souhaiterait que l'autre reproduise. C'est une façon de réinventer le langage HTML : décrire la mise en forme avec des codes. Exemple : <début_gras>texte<fin_gras>.

### Décrire un langage de programmation

Donner un ensemble d'instructions d'un langage de programmation et demander aux élèves de trouver un exemple d'utilisation de ces instructions avant de proposer une définition précise.

### Découvrir un langage de programmation

Laisser les élèves explorer le langage et leur demander de créer un programme (sujet libre). Par exemples, avec Scratch (junior), faire déplacer un ou plusieurs personnages, tracer des lignes, puis des figures géométriques, faire des sons, puis reproduire un air connu, ...

### Maîtriser un langage de programmation

Donner plusieurs programmes comportant des erreurs et demander aux élèves (d'écrire sur une feuille) pourquoi ça ne marche pas, où sont les erreurs puis ce qu'il faut faire pour les corriger avant de corriger le programme et de l'exécuter pour vérifier.

### Développer plusieurs niveaux d'abstraction : « diviser pour régner » = la décomposition

Définir un projet (problème, histoire...) complexe qui nécessite d'être décomposé en parties qu'on saurait programmer. Le but pour les élèves étant de trouver une telle décomposition. On peut aussi commencer par leur donner cette décomposition quand ils découvrent le concept « diviser pour régner ». Un programme (simple) est par exemple la décomposition du problème initial en une (simple) séquence d'instructions. Pour aller plus loin, on peut faire chercher des petits programmes (solutions partielles ou motifs répétés) qui pourraient être utilisés par le programme final. Ce sont les premiers pas vers les notions de procédures et fonctions.
## Situations didactiques pouvant travailler ce concept

Ce qui se joue derrière le concept de langage de programmation, c'est évidemment, comme pour le langage naturel, la capacité de comprendre (lire, interpréter) et de s'exprimer (écrire, coder) à l'aide de conventions partagées capables de désigner des données, des objets et des instructions de façon non ambiguë, univoque. Un langage de programmation a pour avantage d'être beaucoup plus limité. Chaque instruction du langage, exécutée dans un contexte donné est traduite par la machine en une action précise. Si la machine ne fait pas exactement ce qu'on voulait qu'elle fasse, c'est parce qu'on n'a pas utilisé les bonnes instructions, ou qu'on n'a pas correctement défini le contexte : les données, les conditions initiales. La machine ne se trompe pas, elle ne fait qu'exécuter le programme qu'on lui a communiqué.

### Inventer ou retrouver un langage de programmation

Dans le jeu du robot idiot, les élèves commencent par donner des instructions qui sont parfois mal interprétées par le « robot idiot » joué par un camarade ou l'enseignant. Il faut donc essayer d'être précis et se mettre d'accord (convention) sur ce que veut dire « aller à droite » : est-ce « pivoter sur soi-même sans changer de place » ou « se déplacer d'un pas vers la droite » ?

Avec un mini-robot de type Beebot (ou souris), on peut demander aux élèves d'explorer l'effet de chaque bouton pour construire la liste des instructions qui constituent le langage.

Avec deux téléphones, demander à un élève d'utiliser un SMS (texte brut avec interdiction d'y adjoindre une image), pour décrire par exemple une pensée, une carte de visite, une carte de vœux, ..., qu'il souhaiterait que l'autre reproduise. C'est une façon de réinventer le langage HTML : décrire la mise en forme avec des codes. Exemple : <début_gras>texte<fin_gras>.

### Décrire un langage de programmation

Donner un ensemble d'instructions d'un langage de programmation et demander aux élèves de trouver un exemple d'utilisation de ces instructions avant de proposer une définition précise.

### Découvrir un langage de programmation

Laisser les élèves explorer le langage et leur demander de créer un programme (sujet libre). Par exemples, avec Scratch (junior), faire déplacer un ou plusieurs personnages, tracer des lignes, puis des figures géométriques, faire des sons, puis reproduire un air connu, ...

### Maîtriser un langage de programmation

Donner plusieurs programmes comportant des erreurs et demander aux élèves (d'écrire sur une feuille) pourquoi ça ne marche pas, où sont les erreurs puis ce qu'il faut faire pour les corriger avant de corriger le programme et de l'exécuter pour vérifier.

### Développer plusieurs niveaux d'abstraction : « diviser pour régner » = la décomposition

Définir un projet (problème, histoire...) complexe qui nécessite d'être décomposé en parties qu'on saurait programmer. Le but pour les élèves étant de trouver une telle décomposition. On peut aussi commencer par leur donner cette décomposition quand ils découvrent le concept « diviser pour régner ». Un programme (simple) est par exemple la décomposition du problème initial en une (simple) séquence d'instructions. Pour aller plus loin, on peut faire chercher des petits programmes (solutions partielles ou motifs répétés) qui pourraient être utilisés par le programme final. Ce sont les premiers pas vers les notions de procédures et fonctions.
# Boucle

## Introduction

Une boucle en informatique est le moyen de répéter une séquence d'instructions. Plutôt que d'écrire ou même de copier-coller 20 fois la même séquence bout à bout pour faire 20 fois la même chose, on utilise une boucle pour que cette séquence soit exécutée 20 fois. Que ce soit pour écrire ou pour corriger le programme, cette façon de faire permet de gagner du temps. Si l'on doit corriger une instruction écrite 20 fois, on risque d'en oublier, ou de se tromper. Tandis que si elle n'est écrite qu'une fois dans le programme, mais exécutée 20 fois, on n'a besoin de la corriger qu'une seule fois dans le programme. De plus, cela rend le programme plus léger et élégant. Enfin, en lien avec la pensée informatique, en isolant précisément la séquence qui doit se répéter, on peut mettre en évidence une sous-partie signifiante du programme.

## Définition

> Une boucle est une structure de contrôle
> qui permet de répéter l'exécution d'une séquence d'instructions.

En Scratch, la boucle est une structure orange en forme de « C » qui enchâsse la séquence à répéter. Il existe 3 types de boucles pour répondre à 3 situations différentes :

* Si l'on connait précisément le nombre (n) de répétitions on utilisera « répéter n fois ». Par exemple pour déplacer le personnage le long d'un carré (de longueur de côté 100 pixels), on peut écrire la boucle ci-contre.
  NB : L'instruction « attendre 1 seconde » sert à ralentir.

* Si l'on veut répéter la séquence indéfiniment, on utilisera « répéter indéfiniment » : dans ce cas, il faudra effectuer un arrêt manuel du programme. Exemple : le programme ci-contre demande ton <nom> puis dit bonjour <nom> et attend 2 secondes avant de recommencer (sans fin).

* Si l'on veut répéter la séquence jusqu'à ce qu'une certaine condition soit vraie, on utilisera « répéter jusqu'à ce que <condition> ». Par exemple, pour donner l'illusion d'une chute, on pourra partir d'en haut de la scène, faire avancer le personnage vers le bas jusqu'à ce qu'il atteigne le sol (la terre marron), ce qui peut se traduire par la boucle ci-contre :

NB : un tour de boucle s'appelle une **itération**.

<figure><img src="image_6.png" /></figure>

<figure><img src="image_7.png" /></figure>

## Situations de référence

On pourra utiliser une boucle chaque fois qu'il s'agit de répéter une **séquence**. Dans l'exemple ci-contre, chacune des itérations exécute strictement la même **séquence**.

Mais on peut introduire des **variables** dans les boucles pour produire des effets légèrement différents à chaque **itération**. Par exemple une boucle qui récite la table de multiplication du 7 avec une variable i. i=1 pour la première **itération**. À chaque **itération** on lui ajoute 1 et on lui fait afficher « <i> fois 7 : <i*7> » . On obtient « 1 fois 7 : 7 », « 2 fois 7 : 14 », ...

<figure><img src="image_8.png" /></figure>
# Boucle

## Introduction

Une boucle en informatique est le moyen de répéter une séquence d'instructions. Plutôt que d'écrire ou même de copier-coller 20 fois la même séquence bout à bout pour faire 20 fois la même chose, on utilise une boucle pour que cette séquence soit exécutée 20 fois. Que ce soit pour écrire ou pour corriger le programme, cette façon de faire permet de gagner du temps. Si l'on doit corriger une instruction écrite 20 fois, on risque d'en oublier, ou de se tromper. Tandis que si elle n'est écrite qu'une fois dans le programme, mais exécutée 20 fois, on n'a besoin de la corriger qu'une seule fois dans le programme. De plus, cela rend le programme plus léger et élégant. Enfin, en lien avec la pensée informatique, en isolant précisément la séquence qui doit se répéter, on peut mettre en évidence une sous-partie signifiante du programme.

## Définition

> Une boucle est une structure de contrôle
> qui permet de répéter l'exécution d'une séquence d'instructions.

En Scratch, la boucle est une structure orange en forme de « C » qui enchâsse la séquence à répéter. Il existe 3 types de boucles pour répondre à 3 situations différentes :

* Si l'on connait précisément le nombre (n) de répétitions on utilisera « répéter n fois ». Par exemple pour déplacer le personnage le long d'un carré (de longueur de côté 100 pixels), on peut écrire la boucle ci-contre.
  NB : L'instruction « attendre 1 seconde » sert à ralentir.

* Si l'on veut répéter la séquence indéfiniment, on utilisera « répéter indéfiniment » : dans ce cas, il faudra effectuer un arrêt manuel du programme. Exemple : le programme ci-contre demande le <nom> puis dit bonjour <nom> et attend 2 secondes avant de recommencer (sans fin).

* Si l'on veut répéter la séquence jusqu'à ce qu'une certaine condition soit vraie, on utilisera « répéter jusqu'à ce que <condition> ». Par exemple, pour donner l'illusion d'une chute, on pourra partir d'en haut de la scène, faire avancer le personnage vers le bas jusqu'à ce qu'il atteigne le sol (la terre marron), ce qui peut se traduire par la boucle ci-contre :

NB : un tour de boucle s'appelle une **itération**.

<figure><img src="image_6.png" /></figure>

<figure><img src="image_7.png" /></figure>

## Situations de référence

On pourra utiliser une boucle chaque fois qu'il s'agit de répéter une **séquence**. Dans l'exemple ci-contre, chacune des itérations exécute strictement la même **séquence**.

Mais on peut introduire des **variables** dans les boucles pour produire des effets légèrement différents à chaque **itération**. Par exemple une boucle qui récite la table de multiplication du 7 avec une variable i. i=1 pour la première **itération**. À chaque **itération** on lui ajoute 1 et on lui fait afficher « <i> fois 7 : <i*7> » . On obtient « 1 fois 7 : 7 », « 2 fois 7 : 14 », ...

<figure><img src="image_8.png" /></figure>
## Situations didactiques pouvant travailler la boucle

Ce qui se joue dans la compréhension puis la maîtrise de la boucle c'est :

* La capacité à mobiliser la répétition, ou la capacité à reconnaître un motif récurrent ;

* Il y a une difficulté à franchir quand on passe de la répétition d'une seule instruction (motif simple) à la répétition d'une séquence d'instructions (motif complexe) ;

* Trouver la bonne boucle à utiliser (on commencera par la boucle « répéter n fois ») ce qui revient à comprendre combien d'itérations doivent être exécutées ;

* Fixer les conditions avant la boucle pour que ça fonctionne bien (position et orientation du personnage par exemple ou valeur des variables) ;

* Comprendre (anticiper) les conditions que l'on aura à l'issue de la boucle.

## Construire un polygone régulier (triangle équilatéral, carré, pentagone, étoile, etc.) dans Scratch

Dans Scratch, on peut ajouter le module « stylo » qui permet au personnage de tracer des traits lors de ses mouvements quand le stylo est en position d'écriture.

**Consigne :** tracer un polygone régulier de périmètre 600 (pas/pixels)

En commençant par le triangle, on peut laisser réfléchir les élèves en leur proposant d'explorer ces deux instructions : « avancer de ... pas » et « pivoter à gauche de ... degrés ». Pour le triangle, on peut les laisser reproduire 3 fois la même séquence sans utiliser de boucle. Puis on passe au carré, puis au pentagone (ce qui doit les obliger à corriger partout la valeur de l'angle de rotation et celle du nombre de pas/pixels). S'ils n'ont pas encore pensé à utiliser la boucle, on passe alors à un polygone régulier à 36 côtés (qui donnera l'illusion d'un cercle).

**Prolongement :** construire une étoile régulière à 6, 12 puis 24 branches.

## Utiliser une boucle pour introduire la notion de variable

Faire réciter une table de multiplication à un personnage dans Scratch.

Proposer aux élèves de créer une variable « A » puis leur faire écrire le programme ci-contre.

Leur demander ensuite de réaliser la table du 12 sur le même modèle, puis de faire réciter la table jusqu'à « 20 x 12 ».

<figure><img src="image_9.png" /></figure>

Enfin, on leur demandera de faire réciter la table du 5 de « 100 x 5 » à « 130 x 5 ».

**Prolongement 1 :** découvrir dans Scratch l'instruction (capteur) « demander ... et attendre » qui demande une valeur à l'utilisateur et enregistre cette valeur dans la variable « réponse ». Faire que le nouveau programme demande au début une valeur à l'utilisateur pour qu'il choisisse la table de multiplication à faire réciter au personnage. Exemple 7 -> table du 7.

**Prolongement 2 :** faire réciter toutes les tables (de 1 à 10) : ce qui permet de découvrir la notion de boucles imbriquées (une boucle à l'intérieur d'une autre boucle).

## Monter une gamme (musicale) dans Scratch.

Définir une variable « note » et la faire varier de 60 (Do) à 71 (Si), en ajoutant 1 à chaque itération après l'avoir fait jouer sur l'instrument de son choix.

## Déplacements aléatoires : comme un lion en cage

Créer une boucle infinie dans laquelle un personnage tourne d'un angle aléatoire (entre 0 et 360, puis avance d'une distance aléatoire entre 10 et 50 avant de faire une pause d'une ½ seconde.

Pour tracer le trajet du personnage, on pourra utiliser le module « Stylo » et mettre le « Stylo en position d'écriture », ce qui devrait permettre de voir le personnage gribouiller...
## Situations didactiques pouvant travailler la boucle

Ce qui se joue dans la compréhension puis la maîtrise de la boucle c'est :

* La capacité à mobiliser la répétition, ou la capacité à reconnaître un motif récurrent ;

* Il y a une difficulté à franchir quand on passe de la répétition d'une seule instruction (motif simple) à la répétition d'une séquence d'instructions (motif complexe) ;

* Trouver la bonne boucle à utiliser (on commencera par la boucle « répéter n fois ») ce qui revient à comprendre combien d'itérations doivent être exécutées ;

* Fixer les conditions avant la boucle pour que ça fonctionne bien (position et orientation du personnage par exemple ou valeur des variables) ;

* Comprendre (anticiper) les conditions que l'on aura à l'issue de la boucle.

## Construire un polygone régulier (triangle équilatéral, carré, pentagone, étoile, etc.) dans Scratch

Dans Scratch, on peut ajouter le module « stylo » qui permet au personnage de tracer des traits lors de ses mouvements quand le stylo est en position d'écriture.

**Consigne :** tracer un polygone régulier de périmètre 600 (pas/pixels)

En commençant par le triangle, on peut laisser réfléchir les élèves en leur proposant d'explorer ces deux instructions : « avancer de ... pas » et « pivoter à gauche de ... degrés ». Pour le triangle, on peut les laisser reproduire 3 fois la même séquence sans utiliser de boucle. Puis on passe au carré, puis au pentagone (ce qui doit les obliger à corriger partout la valeur de l'angle de rotation et celle du nombre de pas/pixels). S'ils n'ont pas encore pensé à utiliser la boucle, on passe alors à un polygone régulier à 36 côtés (qui donnera l'illusion d'un cercle).

**Prolongement :** construire une étoile régulière à 6, 12 puis 24 branches.

## Utiliser une boucle pour introduire la notion de variable

Faire réciter une table de multiplication à un personnage dans Scratch.

Proposer aux élèves de créer une variable « A » puis leur faire écrire le programme ci-contre.

Leur demander ensuite de réaliser la table du 12 sur le même modèle, puis de faire réciter la table jusqu'à « 20 x 12 ».

<figure><img src="image_9.png" /></figure>

Enfin, on leur demandera de faire réciter la table du 5 de « 100 x 5 » à « 130 x 5 ».

**Prolongement 1 :** découvrir dans Scratch l'instruction (capteur) « demander ... et attendre » qui demande une valeur à l'utilisateur et enregistre cette valeur dans la variable « réponse ». Faire que le nouveau programme demande au début une valeur à l'utilisateur pour qu'il choisisse la table de multiplication à faire réciter au personnage. Exemple 7 -> table du 7.

**Prolongement 2 :** faire réciter toutes les tables (de 1 à 10) : ce qui permet de découvrir la notion de boucles imbriquées (une boucle à l'intérieur d'une autre boucle).

## Monter une gamme (musicale) dans Scratch.

Définir une variable « note » et la faire varier de 60 (Do) à 71 (Si), en ajoutant 1 à chaque itération après l'avoir fait jouer sur l'instrument de son choix.

## Déplacements aléatoires : comme un lion en cage

Créer une boucle infinie dans laquelle un personnage tourne d'un angle aléatoire (entre 0 et 360, puis avance d'une distance aléatoire entre 10 et 50 avant de faire une pause d'une 1/2 seconde.

Pour tracer le trajet du personnage, on pourra utiliser le module « Stylo » et mettre le « Stylo en position d'écriture », ce qui devrait permettre de voir le personnage gribouiller...
# Variable

## Introduction

On utilise des variables dans les algorithmes pour mémoriser des données en vue de les réutiliser par la suite. Une variable en programmation est un emplacement mémoire auquel on donne un nom et dans lequel on peut placer une donnée. Au cours de l'algorithme ou du programme, la valeur d'une variable peut être modifiée : incrémentée, décrémentée, remplacée par une autre, etc... On pourrait donc dire qu'une « variable » est une case mémoire que l'on peut manipuler (par un nom) et dont la valeur peut varier.

## Définition

> Une variable est un emplacement mémoire que l'on peut manipuler par son nom et qui peut recevoir une donnée modifiable.

## Exemples d'utilisation

### Premier exemple : convertisseur euros dollars

Pour demander une valeur à l'utilisateur, on a besoin d'un emplacement mémoire pour la stocker : une variable. De cette façon, on peut ensuite exécuter le programme avec la valeur donnée par l'utilisateur (et non pas celle donnée par le programmeur). Par exemple, un programme permettant de convertir des euros en dollars pourrait demander la somme en euros à convertir puis, faire le calcul et donner la conversion en dollars.

TauxChange = 1,10

Demander une valeur et la mettre dans la variable SommeEuros

SommeDollars = SommeEuros * TauxChange

Afficher SommeDollars

Dans cet exemple, il y a 3 variables : TauxChange, SommeEuros et SommeDollars. La première est fixée par le programme, la deuxième par l'utilisateur (à l'exécution) et la troisième est calculée par le programme. Ce programme écrit en Scratch est donné ci-contre. Une vidéo de son exécution est disponible ici : https://youtu.be/elqVu5wM3nM

<figure><img src="image_10.png" /></figure>

### Deuxième exemple : énumérer les entiers de 1 à 100.

Pour énumérer les entiers de 1 à 100, on peut définir une variable N, lui affecter la valeur initiale 1, puis (dans une boucle qui se répète 100 fois), on affiche N, puis on ajoute 1 à N. Ceci peut s'écrire ainsi :

<table><thead><tr><th>Algorithme</th><th>Programme Scratch</th><th>Extrait de programme Python</th></tr></thead><tbody><tr><td>N = 1<br>Répéter 100 fois :<br>| Afficher N<br>| N = N+1<br>Fin_Répéter</td><td></td><td>N = 1<br>for loop in range(100):<br>print(N)<br>N = N+1</td></tr></tbody></table>

<figure><img src="image_11.png" /></figure>

De cette façon, lorsque le programme s'exécute, la variable N reçoit d'abord la valeur 1 (N=1). On entre alors dans la boucle, il affiche 1, ajoute 1 à N (N=2), au deuxième tour : affiche 2, ajoute 1 à N (N=3), au troisième tour : affiche 3, ajoute 1 à N (N=4), ..., au centième tour : affiche 100, ajoute 1 à N (N=101), puis sort de la boucle qui a fait ses 100 tours.
# Variable

## Introduction

On utilise des variables dans les algorithmes pour mémoriser des données en vue de les réutiliser par la suite. Une variable en programmation est un emplacement mémoire auquel on donne un nom et dans lequel on peut placer une donnée. Au cours de l'algorithme ou du programme, la valeur d'une variable peut être modifiée : incrémentée, décrémentée, remplacée par une autre, etc... On pourrait donc dire qu'une « variable » est une case mémoire que l'on peut manipuler (par un nom) et dont la valeur peut varier.

## Définition

> Une variable est un emplacement mémoire que l'on peut manipuler par son nom et qui peut recevoir une donnée modifiable.

## Exemples d'utilisation

### Premier exemple : convertisseur euros dollars

Pour demander une valeur à l'utilisateur, on a besoin d'un emplacement mémoire pour la stocker : une variable. De cette façon, on peut ensuite exécuter le programme avec la valeur donnée par l'utilisateur (et non pas celle donnée par le programmeur). Par exemple, un programme permettant de convertir des euros en dollars pourrait demander la somme en euros à convertir puis, faire le calcul et donner la conversion en dollars.

TauxChange = 1,10

Demander une valeur et la mettre dans la variable SommeEuros

SommeDollars = SommeEuros * TauxChange

Afficher SommeDollars

Dans cet exemple, il y a 3 variables : TauxChange, SommeEuros et SommeDollars. La première est fixée par le programme, la deuxième par l'utilisateur (à l'exécution) et la troisième est calculée par le programme. Ce programme écrit en Scratch est donné ci-contre. Une vidéo de son exécution est disponible ici : https://youtu.be/elqVu5wM3nM

<figure><img src="image_10.png" /></figure>

### Deuxième exemple : énumérer les entiers de 1 à 100.

Pour énumérer les entiers de 1 à 100, on peut définir une variable N, lui affecter la valeur initiale 1, puis (dans une boucle qui se répète 100 fois), on affiche N, puis on ajoute 1 à N. Ceci peut s'écrire ainsi :

<table><thead><tr><th>Algorithme</th><th>Programme Scratch</th><th>Extrait de programme Python</th></tr></thead><tbody><tr><td>N = 1<br>Répéter 100 fois :<br>| Afficher N<br>| N = N+1<br>Fin_Répéter</td><td></td><td>N = 1<br>for loop in range(100):<br>print(N)<br>N = N+1</td></tr></tbody></table>

<figure><img src="image_11.png" /></figure>

De cette façon, lorsque le programme s'exécute, la variable N reçoit d'abord la valeur 1 (N=1). On entre alors dans la boucle, il affiche 1, ajoute 1 à N (N=2), au deuxième tour : affiche 2, ajoute 1 à N (N=3), au troisième tour : affiche 3, ajoute 1 à N (N=4), ..., au centième tour : affiche 100, ajoute 1 à N (N=101), puis sort de la boucle qui a fait ses 100 tours.
## Relation avec les autres termes du lexique

Dans un **algorithme** ou un **programme**, on peut utiliser une variable dans les paramètres d'une **instruction** ou d'une **fonction**, ou dans une **expression** (arithmétique, logique, ...) pour réaliser un calcul ou définir une **condition**. Elle peut aussi servir à compter le nombre de tours (itérations) réalisés par une **boucle**. Une variable peut contenir différents **types de données** : booléen (vrai/faux), nombre, caractère, chaîne de caractères, liste, tableau...

## Situations didactiques pouvant travailler ce concept

### Matérialisation des variables

Matérialiser les variables (boîtes) et les valeurs (fiches) et faire exécuter (robot idiot) une séquence qui modifie les valeurs d'une variable. Le robot doit alors faire les calculs et ranger les valeurs dans les cases mémoires (variables).

Reprenons notre premier exemple en numérotant les 4 instructions de la séquence :

1) TauxChange=1,10

2) Demander une valeur et la mettre dans la variable SommeEuros

3) SommeDollars = SommeEuros * TauxChange

4) Afficher SommeDollars

Au départ, l'état de notre « machine » peut être représentée par 3 boîtes vides :

<table><tr><td>TauxChange</td><td>SommeEuros</td><td>SommeDollars</td></tr><tr><td></td><td></td><td></td></tr></table>

1) Le robot place la valeur 1,10 dans la boîte « TauxChange »,

<table><tr><td>TauxChange</td><td>SommeEuros</td><td>SommeDollars</td></tr><tr><td>1,10</td><td></td><td></td></tr></table>

2) Le robot demande « Une somme en euros » à l'utilisateur (qui propose par exemple 35) et place cette valeur dans la boîte « SommeEuros », l'état devient donc :

<table><tr><td>TauxChange</td><td>SommeEuros</td><td>SommeDollars</td></tr><tr><td>1,10</td><td>35</td><td></td></tr></table>

<figure><img src="image_12.png" /></figure>

3) Le robot copie (lit mais ne retire pas) la valeur qui se trouve dans la boîte « TauxChange » (1,10), et celle de la boîte « SommeEuros » (35), effectue le calcul : 1,10 * 35, trouve le résultat (38,5) et le place dans la boîte « SommeDollars » :

<table><tr><td>TauxChange</td><td>SommeEuros</td><td>SommeDollars</td></tr><tr><td>1,10</td><td>35</td><td>38,5</td></tr></table>

<figure><img src="image_13.png" /></figure>

4) Le robot lit la valeur qui se trouve dans la boîte « SommeDollars » (38,5), et l'affiche.
## Relation avec les autres termes du lexique

Dans un **algorithme** ou un **programme**, on peut utiliser une variable dans les paramètres d'une **instruction** ou d'une **fonction**, ou dans une **expression** (arithmétique, logique, ...) pour réaliser un calcul ou définir une **condition**. Elle peut aussi servir à compter le nombre de tours (itérations) réalisés par une **boucle**. Une variable peut contenir différents **types de données** : booléen (vrai/faux), nombre, caractère, chaîne de caractères, liste, tableau...

## Situations didactiques pouvant travailler ce concept

### Matérialisation des variables

Matérialiser les variables (boîtes) et les valeurs (fiches) et faire exécuter (robot idiot) une séquence qui modifie les valeurs d'une variable. Le robot doit alors faire les calculs et ranger les valeurs dans les cases mémoires (variables).

Reprenons notre premier exemple en numérotant les 4 instructions de la séquence :

1) TauxChange=1,10

2) Demander une valeur et la mettre dans la variable SommeEuros

3) SommeDollars = SommeEuros * TauxChange

4) Afficher SommeDollars

Au départ, l'état de notre « machine » peut être représentée par 3 boîtes vides :

<table><tr><td>TauxChange</td><td>SommeEuros</td><td>SommeDollars</td></tr><tr><td></td><td></td><td></td></tr></table>

1) Le robot place la valeur 1,10 dans la boîte « TauxChange »,

<table><tr><td>TauxChange</td><td>SommeEuros</td><td>SommeDollars</td></tr><tr><td>1,10</td><td></td><td></td></tr></table>

2) Le robot demande « Une somme en euros » à l'utilisateur (qui propose par exemple 35) et place cette valeur dans la boîte « SommeEuros », l'état devient donc :

<table><tr><td>TauxChange</td><td>SommeEuros</td><td>SommeDollars</td></tr><tr><td>1,10</td><td>35</td><td></td></tr></table>

<figure><img src="image_12.png" /></figure>

3) Le robot copie (lit mais ne retire pas) la valeur qui se trouve dans la boîte « TauxChange » (1,10), et celle de la boîte « SommeEuros » (35), effectue le calcul : 1,10 * 35, trouve le résultat (38,5) et le place dans la boîte « SommeDollars » :

<table><tr><td>TauxChange</td><td>SommeEuros</td><td>SommeDollars</td></tr><tr><td>1,10</td><td>35</td><td>38,5</td></tr></table>

<figure><img src="image_13.png" /></figure>

4) Le robot lit la valeur qui se trouve dans la boîte « SommeDollars » (38,5), et l'affiche.
# Condition ou Test

## Introduction

Comme dans le langage courant, un test ou une condition en informatique est une expression qui peut être vraie ou fausse. Par exemple, l'expression « 2+1=4 » renverrait la valeur « faux » tandis que « 3=2+1 » renverrait la valeur « vrai ». Les valeurs « vrai » et « faux », souvent représentées respectivement par « 1 » et « 0 » dans la machine, sont appelées « booléens » en référence à l'algèbre de George Boole (1815-1864). Les deux opérateurs principaux de cette algèbre sont « Et » et « Ou » dont les « tables de vérité » indiquent le résultat de la composition à partir des deux opérandes donnés par un tableau à double entrées. Ainsi :

Par exemple : (Vrai et Faux) renvoie Faux, tandis que : (Faux ou Vrai) renvoie Vrai

<table><thead><tr><th>Et</th><th>Vrai</th><th>Faux</th></tr></thead><tbody><tr><td>Vrai</td><td>Vrai</td><td><strong>Faux</strong></td></tr><tr><td>Faux</td><td>Faux</td><td>Faux</td></tr></tbody></table>

<table><thead><tr><th>Ou</th><th>Vrai</th><th>Faux</th></tr></thead><tbody><tr><td>Vrai</td><td>Vrai</td><td>Vrai</td></tr><tr><td>Faux</td><td><strong>Vrai</strong></td><td>Faux</td></tr></tbody></table>

Tables de vérité des opérateurs « Et » et « Ou ».

## Définition

> *En informatique, une condition (aussi appelée test) est une expression qui renvoie une valeur booléenne : « vrai » ou « faux ».*

## Situations de référence

Un test sert à vérifier si une condition est vraie ou fausse. Exemples : « Est-ce qu'il pleut ? », « Est-ce qu'il gèle ? », « Y-a-t-il des nuages ? », « Karine habite-t-elle à Besançon ? », « La température de l'eau est-elle supérieure à 25°C ? », etc. En informatique, le plus souvent, il s'agit de vérifier une propriété pour une variable : T < 0 ? T> = 25 ? T= 5 ? etc. Pouvoir exprimer des conditions est particulièrement utile en programmation dans 2 situations emblématiques :

* Dans l'instruction conditionnelle « Si <condition> Alors... Sinon... » qui permet d'exécuter des instructions différentes selon que la condition est vraie ou fausse (voir lexique « instruction conditionnelle ») ;

* Dans la boucle « répéter ... jusqu'à <condition> » qui répète une séquence d'instructions jusqu'à ce qu'une certaine <condition> soit vraie.

Mais on peut aussi stocker le résultat d'une condition dans une variable. Par exemple, si nous avons un capteur de température qui nous donne la température extérieure, et que sa valeur est disponible dans la variable (numérique) T, on peut créer une variable (booléenne) Gele qui peut recevoir le résultat du test « T<0 » qui renvoie « vrai » ou « faux » en fonction de la valeur effective de T.

Ainsi, plutôt que d'écrire :

« Si T<0 Alors Gele=vrai Sinon Gele=faux »,

on écrit simplement :

« Gele = (T<0) ».
# Condition ou Test

## Introduction

Comme dans le langage courant, un test ou une condition en informatique est une expression qui peut être vraie ou fausse. Par exemple, l'expression « 2+1=4 » renverrait la valeur « faux » tandis que « 3=2+1 » renverrait la valeur « vrai ». Les valeurs « vrai » et « faux », souvent représentées respectivement par « 1 » et « 0 » dans la machine, sont appelées « booléens » en référence à l'algèbre de George Boole (1815-1864). Les deux opérateurs principaux de cette algèbre sont « Et » et « Ou » dont les « tables de vérité » indiquent le résultat de la composition à partir des deux opérandes donnés par un tableau à double entrées. Ainsi :

Par exemple : (Vrai et Faux) renvoie Faux, tandis que : (Faux ou Vrai) renvoie Vrai

<table><thead><tr><th>Et</th><th>Vrai</th><th>Faux</th></tr></thead><tbody><tr><td>Vrai</td><td>Vrai</td><td><strong>Faux</strong></td></tr><tr><td>Faux</td><td>Faux</td><td>Faux</td></tr></tbody></table>

<table><thead><tr><th>Ou</th><th>Vrai</th><th>Faux</th></tr></thead><tbody><tr><td>Vrai</td><td>Vrai</td><td>Vrai</td></tr><tr><td>Faux</td><td><strong>Vrai</strong></td><td>Faux</td></tr></tbody></table>

Tables de vérité des opérateurs « Et » et « Ou ».

## Définition

> *En informatique, une condition (aussi appelée test) est une expression qui renvoie une valeur booléenne : « vrai » ou « faux ».*

## Situations de référence

Un test sert à vérifier si une condition est vraie ou fausse. Exemples : « Est-ce qu'il pleut ? », « Est-ce qu'il gèle ? », « Y-a-t-il des nuages ? », « Karine habite-t-elle à Besançon ? », « La température de l'eau est-elle supérieure à 25°C ? », etc. En informatique, le plus souvent, il s'agit de vérifier une propriété pour une variable : T < 0 ? T> = 25 ? T= 5 ? etc. Pouvoir exprimer des conditions est particulièrement utile en programmation dans 2 situations emblématiques :

* Dans l'instruction conditionnelle « Si <condition> Alors... Sinon... » qui permet d'exécuter des instructions différentes selon que la condition est vraie ou fausse (voir lexique « instruction conditionnelle ») ;

* Dans la boucle « répéter ... jusqu'à <condition> » qui répète une séquence d'instructions jusqu'à ce qu'une certaine <condition> soit vraie.

Mais on peut aussi stocker le résultat d'une condition dans une variable. Par exemple, si nous avons un capteur de température qui nous donne la température extérieure, et que sa valeur est disponible dans la variable (numérique) T, on peut créer une variable (booléenne) Gele qui peut recevoir le résultat du test « T<0 » qui renvoie « vrai » ou « faux » en fonction de la valeur effective de T.

Ainsi, plutôt que d'écrire :

« Si T<0 Alors Gele=vrai Sinon Gele=faux »,

on écrit simplement :

« Gele = (T<0) ».
## Situations didactiques pouvant travailler la condition

En robotique, il faut que les robots utilisés soient munis de capteurs (de distance, de lumière, de couleur, de son, de choc...) comme Thymio, Ozobot et mBot par exemple, mais pas BlueBot ou la souris. On peut alors programmer le robot pour qu'il exécute une certaine action en fonction de la valeur d'un capteur. Exemple « Si je rencontre un obstacle, je tourne à droite ».

En programmation, avec Scratch par exemple, on peut exprimer des conditions sans avoir à utiliser explicitement de variable. Par exemple, si ma scène (fond d'écran dans Scratch) est composée de zones de différentes couleurs (mer bleu, sable jaune, herbe verte), on peut tester si mon personnage est sur le sable. Ce test s'écrit « Couleur <jaune> touché ? ». Ce genre de test est très utile quand on veut faire déplacer un personnage (ex : poisson) dans un espace restreint (ex : étendue d'eau) et l'empêcher d'aller sur le sable (jaune) par exemple.

Dans la plupart des cas cependant, un test utilise une variable. Par exemple, On peut imaginer un programme qui demande un nombre pair à l'utilisateur et affiche « Vrai » si l'utilisateur donne bien un nombre pair et « Faux » dans le cas contraire.
## Situations didactiques pouvant travailler la condition

En robotique, il faut que les robots utilisés soient munis de capteurs (de distance, de lumière, de couleur, de son, de choc...) comme Thymio, Ozobot et mBot par exemple, mais pas BlueBot ou la souris. On peut alors programmer le robot pour qu'il exécute une certaine action en fonction de la valeur d'un capteur. Exemple « Si je rencontre un obstacle, je tourne à droite ».

En programmation, avec Scratch par exemple, on peut exprimer des conditions sans avoir à utiliser explicitement de variable. Par exemple, si ma scène (fond d'écran dans Scratch) est composée de zones de différentes couleurs (mer bleu, sable jaune, herbe verte), on peut tester si mon personnage est sur le sable. Ce test s'écrit « Couleur <jaune> touché ? ». Ce genre de test est très utile quand on veut faire déplacer un personnage (ex : poisson) dans un espace restreint (ex : étendue d'eau) et l'empêcher d'aller sur le sable (jaune) par exemple.

Dans la plupart des cas cependant, un test utilise une variable. Par exemple, On peut imaginer un programme qui demande un nombre pair à l'utilisateur et affiche « Vrai » si l'utilisateur donne bien un nombre pair et « Faux » dans le cas contraire.
# Instruction conditionnelle

## Introduction

En programmation, il est parfois nécessaire de faire un **choix** entre deux instructions en fonction du résultat d'un test. Cela s'exprime en général par quelque chose de la forme : « Si <le Test est Vrai> Alors faire Ceci Sinon faire Cela ». Sur un schéma d'organigramme représentant le fil d'exécution d'un algorithme (du haut vers le bas), on le représentait tel que ci-contre. On ne voit plus tellement de représentation d'algorithmes par des organigrammes de nos jours. Pourtant, cela représente bien un choix à réaliser à un embranchement en fonction d'un test ou d'une condition. Si, au moment où le programme exécute le test, celui-ci est Vrai, alors on empruntera la branche marquée « Vrai » et l'on exécutera « Ceci », sinon, on empruntera la branche marquée « Faux » et l'on exécutera donc « Cela ». Le principe est qu'une seule des deux branches sera exécutée après évaluation du test.

<figure><img src="image_14.png" /></figure>

## Définition

> *En programmation, une instruction conditionnelle permet de choisir en fonction d'une condition, d'exécuter l'une ou l'autre des instructions.*

On peut l'exprimer ainsi :

**Si** `<condition> Alors`

Instruction1

**Sinon**

Instruction2

**FinSi**

Instruction1 ou Instruction2 peuvent être remplacées par un bloc contenant plus d'une instruction. On trouve aussi des formes réduites telles que :

« **Si** `<condition> Alors** Instruction1 **»**

Qui ne contiennent pas de branche « Sinon », et donc pas d'Instruction2. On trouve encore des formes enrichies pour des branches multiples telle que :

« **Si** `<condition1> Alors** Instr1 **Sinon** **Si** `<condition2> Instr2 ...Sinon** InstrN **»`

## Situations de référence

S'il pleut, alors je mets ma capuche, sinon, je mets mon chapeau. Si ce n'est pas assez salé, alors j'ajoute du sel, sinon, je mange. Si c'est trop fort, alors je ne bois pas. Si c'est un polygone à 4 côté égaux et 4 angles droits alors je peux dire que c'est un carré. Si ce nombre entier est divisible par 2, alors je déclare qu'il est pair, sinon, je déclare qu'il est impair. Si c'est « pile », alors je gagne, sinon (c'est « face ») je perds. Etc.
# Instruction conditionnelle

## Introduction

En programmation, il est parfois nécessaire de faire un **choix** entre deux instructions en fonction du résultat d'un test. Cela s'exprime en général par quelque chose de la forme : « Si <le Test est Vrai> Alors faire Ceci Sinon faire Cela ». Sur un schéma d'organigramme représentant le fil d'exécution d'un algorithme (du haut vers le bas), on le représentait tel que ci-contre. On ne voit plus tellement de représentation d'algorithmes par des organigrammes de nos jours. Pourtant, cela représente bien un choix à réaliser à un embranchement en fonction d'un test ou d'une condition. Si, au moment où le programme exécute le test, celui-ci est Vrai, alors on empruntera la branche marquée « Vrai » et l'on exécutera « Ceci », sinon, on empruntera la branche marquée « Faux » et l'on exécutera donc « Cela ». Le principe est qu'une seule des deux branches sera exécutée après évaluation du test.

<figure><img src="image_14.png" /></figure>

## Définition

> *En programmation, une instruction conditionnelle permet de choisir en fonction d'une condition, d'exécuter l'une ou l'autre des instructions.*

On peut l'exprimer ainsi :

**Si** `<condition> Alors`

Instruction1

**Sinon**

Instruction2

**FinSi**

Instruction1 ou Instruction2 peuvent être remplacées par un bloc contenant plus d'une instruction. On trouve aussi des formes réduites telles que :

« **Si** `<condition> Alors** Instruction1 **»**

Qui ne contiennent pas de branche « Sinon », et donc pas d'Instruction2. On trouve encore des formes enrichies pour des branches multiples telle que :

« **Si** `<condition1> Alors** Instr1 **Sinon** **Si** `<condition2> Instr2 ...Sinon** InstrN **»`

## Situations de référence

S'il pleut, alors je mets ma capuche, sinon, je mets mon chapeau. Si ce n'est pas assez salé, alors j'ajoute du sel, sinon, je mange. Si c'est trop fort, alors je ne bois pas. Si c'est un polygone à 4 côté égaux et 4 angles droits alors je peux dire que c'est un carré. Si ce nombre entier est divisible par 2, alors je déclare qu'il est pair, sinon, je déclare qu'il est impair. Si c'est « pile », alors je gagne, sinon (c'est « face ») je perds. Etc.
## Situations didactiques pouvant travailler l'instruction conditionnelle

### Programmer des jeux de hasard

On a très souvent besoin d'une instruction conditionnelle dans les jeux de hasard pour déterminer si le joueur a gagné ou perdu (ex : pile ou face). L'intérêt de programmer ce genre de jeux réside dans la façon de construire (traduire) le test dans un langage de programmation. La plupart des langages de programmation proposent une fonction de tirage aléatoire, ce qui est bien utile pour simuler le hasard dans ce type de jeux.

**Le nombre mystère** : La machine choisit un nombre aléatoire et interroge l'utilisateur pour qu'il devine, par essais successifs, le nombre mystère. Après chaque proposition de l'utilisateur, le programme compare le nombre proposé par l'utilisateur au nombre mystère et répond « Trop grand », « Trop petit » ou « Gagné ! » en fonction du résultat du test.

### Avec les robots (qui possèdent au moins un capteur)

**Ozobot** : Etant donné un parcours (comprenant divers embranchements), choisir un point de départ et une destination. Demander aux élèves de placer les bons codes couleurs aux bons endroits pour que le robot fasse les bons choix pour arriver à la destination (à coup sûr). Avant de placer les codes couleurs sur le circuit, on peut essayer de lancer le robot et voir (constater) que, sans les codes couleurs qu'il choisit les branches par hasard.

**Thymio** : Sans le reprogrammer, faire décrire aux élèves le comportement du Thymio dans un mode donné avec des phrases de la forme « Quand il se passe ... Alors le robot fait ... ».

**Thymio** : Programmer (avec le langage Aseba) un nouveau comportement du Thymio en définissant son comportement par des phrases : « Quand il se passe ... Alors le robot fait ... ». Vérifier un à un que chaque évènement prévu produit bien l'effet programmé, puis voir ce qui se passe si l'on combine certains évènements...

### Activités débranchées

Chaque matin, juste avant d'aller à l'école, Marcel doit choisir entre mettre un manteau ou pas, et prendre un parapluie ou pas. Son choix dépend évidemment de la météo. À l'aide des étiquettes suivantes, reconstituer l'algorithme que suit Marcel pour choisir sa tenue.

<figure><img src="image_15.png" /></figure>

(Travaux Académiques Mutualisés, Académie de Créteil, maths, notion d'algorithme)

Source : http://maths.ac-creteil.fr/IMG/pdf/notion_algorithme.pdf

Tour de magie de Marie Duflot-Kremer : https://www.youtube.com/watch?v=DkWtRzLtADQ
## Situations didactiques pouvant travailler l'instruction conditionnelle

### Programmer des jeux de hasard

On a très souvent besoin d'une instruction conditionnelle dans les jeux de hasard pour déterminer si le joueur a gagné ou perdu (ex : pile ou face). L'intérêt de programmer ce genre de jeux réside dans la façon de construire (traduire) le test dans un langage de programmation. La plupart des langages de programmation proposent une fonction de tirage aléatoire, ce qui est bien utile pour simuler le hasard dans ce type de jeux.

**Le nombre mystère** : La machine choisit un nombre aléatoire et interroge l'utilisateur pour qu'il devine, par essais successifs, le nombre mystère. Après chaque proposition de l'utilisateur, le programme compare le nombre proposé par l'utilisateur au nombre mystère et répond « Trop grand », « Trop petit » ou « Gagné ! » en fonction du résultat du test.

### Avec les robots (qui possèdent au moins un capteur)

**Ozobot** : Etant donné un parcours (comprenant divers embranchements), choisir un point de départ et une destination. Demander aux élèves de placer les bons codes couleurs aux bons endroits pour que le robot fasse les bons choix pour arriver à la destination (à coup sûr). Avant de placer les codes couleurs sur le circuit, on peut essayer de lancer le robot et voir (constater) que, sans les codes couleurs qu'il choisit les branches par hasard.

**Thymio** : Sans le reprogrammer, faire décrire aux élèves le comportement du Thymio dans un mode donné avec des phrases de la forme « Quand il se passe ... Alors le robot fait ... ».

**Thymio** : Programmer (avec le langage Aseba) un nouveau comportement du Thymio en définissant son comportement par des phrases : « Quand il se passe ... Alors le robot fait ... ». Vérifier un à un que chaque évènement prévu produit bien l'effet programmé, puis voir ce qui se passe si l'on combine certains évènements...

### Activités débranchées

Chaque matin, juste avant d'aller à l'école, Marcel doit choisir entre mettre un manteau ou pas, et prendre un parapluie ou pas. Son choix dépend évidemment de la météo. À l'aide des étiquettes suivantes, reconstituer l'algorithme que suit Marcel pour choisir sa tenue.

<figure><img src="image_15.png" /></figure>

(Travaux Académiques Mutualisés, Académie de Créteil, maths, notion d'algorithme)

Source : http://maths.ac-creteil.fr/IMG/pdf/notion_algorithme.pdf

Tour de magie de Marie Duflot-Kremer : https://www.youtube.com/watch?v=DkWtRzLtADQ
# Pensée informatique

## Origine

Au moment où différentes communautés de chercheurs tentent de définir les compétences du 21ème siècle, Jeannette M. Wing définit en 2006 le « computational thinking » ainsi :

> It represents a universally applicable attitude and skill set everyone, not just computer scientists, would be eager to learn and use.

(Wing, 2006)

## Définition

> La pensée informatique est une attitude et des compétences universelles que chacun devrait apprendre et utiliser, et pas seulement les informaticiens.

La pensée informatique... C'est pouvoir reformuler un problème qui semble difficile en un autre qu'on sait résoudre, éventuellement par réduction, inclusion, transformation ou simulation. C'est penser récursivement, faire des traitements en parallèle, interpréter un code comme des données ou des données comme un code. C'est avoir confiance et utiliser et modifier en toute sécurité, un système complexe sans avoir à en comprendre tous les détails. Ce n'est pas simplement savoir programmer un ordinateur, cela suppose de concevoir et penser à différents niveaux d'abstraction. C'est une façon dont les hommes pensent, pas les ordinateurs ! Equipés d'ordinateurs, les hommes peuvent traiter des problèmes qu'ils n'auraient jamais osé attaquer avant l'âge des systèmes dont les fonctionnalités ne sont limitées que par notre imagination ! Basée sur les sciences de l'ingénieur et les mathématiques, l'informatique nous rend libres de concevoir des mondes virtuels qui dépassent les limites du monde physique. Quand tout le monde la partagera comme une part intégrée de la pensée humaine, on n'aura plus besoin de l'expliciter. De cette façon, les informaticiens partageront la joie de maîtriser le pouvoir de l'informatique et feront de la pensée informatique un bien commun.

(Wing, 2006)

## Situations de référence

Avoir la curiosité de « soulever le capot » pour voir comment c'est construit ; Explorer, manipuler, tester, comparer et ramener les observations à un phénomène connu ou un problème résolu ; Être précis comme un mathématicien pour imaginer des constructions stables et créatives ; Avoir les moyens de vérifier les propositions ; Savoir s'appuyer sur ce qui est connu pour alimenter sa créativité : ne pas réinventer la roue ; Définir un problème à différents niveaux d'abstraction, c'est-à-dire : Être capable de définir les étapes, de créer les outils et de trouver les moyens de construire les parties qui formeront le tout...

## Relation avec les autres termes

La pensée informatique s'inspire des compétences acquises par la pratique de la **programmation** et des concepts qui sont proposés dans les différents **langages informatiques**. Mais elle ne se réduit pas à l'aptitude à programmer. Elle concerne plus généralement la **résolution de problèmes**, la capacité à diviser les tâches qui peuvent être réparties dans un groupe coopératif.
# Pensée informatique

## Origine

Au moment où différentes communautés de chercheurs tentent de définir les compétences du 21ème siècle, Jeannette M. Wing définit en 2006 le « computational thinking » ainsi :

> It represents a universally applicable attitude and skill set everyone, not just computer scientists, would be eager to learn and use.

(Wing, 2006)

## Définition

> La pensée informatique est une attitude et des compétences universelles que chacun devrait apprendre et utiliser, et pas seulement les informaticiens.

La pensée informatique... C'est pouvoir reformuler un problème qui semble difficile en un autre qu'on sait résoudre, éventuellement par réduction, inclusion, transformation ou simulation. C'est penser récursivement, faire des traitements en parallèle, interpréter un code comme des données ou des données comme un code. C'est avoir confiance et utiliser et modifier en toute sécurité, un système complexe sans avoir à en comprendre tous les détails. Ce n'est pas simplement savoir programmer un ordinateur, cela suppose de concevoir et penser à différents niveaux d'abstraction. C'est une façon dont les hommes pensent, pas les ordinateurs ! Equipés d'ordinateurs, les hommes peuvent traiter des problèmes qu'ils n'auraient jamais osé attaquer avant l'âge des systèmes dont les fonctionnalités ne sont limitées que par notre imagination ! Basée sur les sciences de l'ingénieur et les mathématiques, l'informatique nous rend libres de concevoir des mondes virtuels qui dépassent les limites du monde physique. Quand tout le monde la partagera comme une part intégrée de la pensée humaine, on n'aura plus besoin de l'expliciter. De cette façon, les informaticiens partageront la joie de maîtriser le pouvoir de l'informatique et feront de la pensée informatique un bien commun.

(Wing, 2006)

## Situations de référence

Avoir la curiosité de « soulever le capot » pour voir comment c'est construit ; Explorer, manipuler, tester, comparer et ramener les observations à un phénomène connu ou un problème résolu ; Être précis comme un mathématicien pour imaginer des constructions stables et créatives ; Avoir les moyens de vérifier les propositions ; Savoir s'appuyer sur ce qui est connu pour alimenter sa créativité : ne pas réinventer la roue ; Définir un problème à différents niveaux d'abstraction, c'est-à-dire : Être capable de définir les étapes, de créer les outils et de trouver les moyens de construire les parties qui formeront le tout...

## Relation avec les autres termes

La pensée informatique s'inspire des compétences acquises par la pratique de la **programmation** et des concepts qui sont proposés dans les différents **langages informatiques**. Mais elle ne se réduit pas à l'aptitude à programmer. Elle concerne plus généralement la **résolution de problèmes**, la capacité à diviser les tâches qui peuvent être réparties dans un groupe coopératif.
## Situations didactiques pouvant travailler ce concept

La pensée informatique n'est pas un concept en tant que tel, mais plutôt un chapeau qui regroupe les compétences d'abstraction, de résolution de problème, de programmation, etc. Ainsi toutes les activités autour de la résolution de problèmes, la conception d'algorithmes, l'écriture de programmes, la maîtrise des langages de programmation sont susceptibles de faire progresser la maîtrise de la pensée informatique.

### Le crêpier psychorigide

Dans cette activité (https://www.youtube.com/watch?v=06-4g4I6mOg), il s'agit d'atteindre un objectif (construction de la pyramide) avec une contrainte : un seul geste licite : placer la spatule où l'on veut dans la pile, puis retourner tout ce qui est au-dessus. Il s'agit donc bien de résoudre un problème avec un ensemble très limité de possibilités. Pour trouver la solution, il faut trouver comment combiner les bonnes opérations, dans le bon ordre. Lorsqu'on a trouvé la technique (l'algorithme) pour placer une crêpe à un endroit voulu, sans modifier l'ordre de celles qui sont en dessous, on n'a plus qu'à répéter ce processus de la plus grande (pile rangée vide, pile en désordre pleine) à la plus petite crêpe (pile rangée pleine, pile en désordre vide).

Si on se limite à faire réussir les élèves dans la manipulation de la pile, ils peuvent réussir sans prendre conscience de la technique qui permet de réussir. Dans ce cas, ils n'exercent pas la pensée informatique. Pour y entrer, il faut qu'ils soient capables de verbaliser de façon précise les actions à effectuer, puis écrire l'algorithme qui va résoudre l'ensemble du problème. Pour les plus grands, on peut essayer de leur faire caractériser les 2 parties de la pile en cours de traitement : partie basse triée / partie haute non triée et leur demander de reprendre la formulation des instructions en utilisant cette formalisation. Ainsi, au lieu de parler de « la 3ème plus grande crêpe », ils peuvent dire « la plus grande crêpe de la pile non triée », puis « retourner l'ensemble de la pile non triée » au lieu de « au-dessus de la 2ème plus grande crêpe ». Ainsi, ils verront comment leur algorithme fait évoluer les piles (triée / non triée) du début (vide / pleine) à la fin (pleine / vide) et montre ainsi que leur algorithme résout bien correctement le problème.

### Construire une étoile à 6 branches parfaite

Ce problème peut être décomposé en plusieurs parties :

1. Tracer un premier triangle équilatéral (règle et compas)

2. Positionner les sommets du deuxième triangle :

a. Construire les médiatrices du premier triangle

b. Tracer le cercle circonscrit au 1er triangle (centre = intersection médiatrices)

c. Les sommets du 2ème triangle apparaissent : intersection médiatrices/cercle

3. Tracer le deuxième triangle à partir des 3 sommets trouvés.

Ce problème peut être posé sur feuille, puis sur un logiciel de géométrie dynamique.

<figure><img src="image_16.png" /></figure>

### Tracer une étoile à 6 branches sur Scratch

On peut aussi demander le programme Scratch qui permet de tracer successivement les 2 triangles avec un côté de longueur 100 points (figure A) ou l'étoile (figure B). Ici, on ne peut pas utiliser les constructions géométriques, mais seulement les longueurs et les angles. On peut s'appuyer sur les angles de 60° et les rapports des côtés (3/3). Pour les plus grands on peut désigner la longueur du côté par une variable C dont la valeur est fixée au début du programme (C=100) ou peut même être demandée à l'utilisateur pour tracer des étoiles de tailles variables. Cette amélioration permet de généraliser un problème et de tester les valeurs limites : jusqu'à quelle longueur de côté votre programme est-il capable de tracer entièrement l'étoile ?

<figure><img src="image_17.png" /></figure>

<figure><img src="image_18.png" /></figure>
## Situations didactiques pouvant travailler ce concept

La pensée informatique n'est pas un concept en tant que tel, mais plutôt un chapeau qui regroupe les compétences d'abstraction, de résolution de problème, de programmation, etc. Ainsi toutes les activités autour de la résolution de problèmes, la conception d'algorithmes, l'écriture de programmes, la maîtrise des langages de programmation sont susceptibles de faire progresser la maîtrise de la pensée informatique.

### Le crêpier psychorigide

Dans cette activité (https://www.youtube.com/watch?v=06-4g4I6mOg), il s'agit d'atteindre un objectif (construction de la pyramide) avec une contrainte : un seul geste licite : placer la spatule où l'on veut dans la pile, puis retourner tout ce qui est au-dessus. Il s'agit donc bien de résoudre un problème avec un ensemble très limité de possibilités. Pour trouver la solution, il faut trouver comment combiner les bonnes opérations, dans le bon ordre. Lorsqu'on a trouvé la technique (l'algorithme) pour placer une crêpe à un endroit voulu, sans modifier l'ordre de celles qui sont en dessous, on n'a plus qu'à répéter ce processus de la plus grande (pile rangée vide, pile en désordre pleine) à la plus petite crêpe (pile rangée pleine, pile en désordre vide).

Si on se limite à faire réussir les élèves dans la manipulation de la pile, ils peuvent réussir sans prendre conscience de la technique qui permet de réussir. Dans ce cas, ils n'exercent pas la pensée informatique. Pour y entrer, il faut qu'ils soient capables de verbaliser de façon précise les actions à effectuer, puis écrire l'algorithme qui va résoudre l'ensemble du problème. Pour les plus grands, on peut essayer de leur faire caractériser les 2 parties de la pile en cours de traitement : partie basse triée / partie haute non triée et leur demander de reprendre la formulation des instructions en utilisant cette formalisation. Ainsi, au lieu de parler de « la 3ème plus grande crêpe », ils peuvent dire « la plus grande crêpe de la pile non triée », puis « retourner l'ensemble de la pile non triée » au lieu de « au-dessus de la 2ème plus grande crêpe ». Ainsi, ils verront comment leur algorithme fait évoluer les piles (triée / non triée) du début (vide / pleine) à la fin (pleine / vide) et montre ainsi que leur algorithme résout bien correctement le problème.

### Construire une étoile à 6 branches parfaite

Ce problème peut être décomposé en plusieurs parties :

1- Tracer un premier triangle équilatéral (règle et compas)

2- Positionner les sommets du deuxième triangle :

a. Construire les médiatrices du premier triangle

b. Tracer le cercle circonscrit au 1er triangle (centre = intersection médiatrices)

c. Les sommets du 2ème triangle apparaissent : intersection médiatrices/cercle

3- Tracer le deuxième triangle à partir des 3 sommets trouvés.

Ce problème peut être posé sur feuille, puis sur un logiciel de géométrie dynamique.

<figure><img src="image_16.png" /></figure>

### Tracer une étoile à 6 branches sur Scratch

On peut aussi demander le programme Scratch qui permet de tracer successivement les 2 triangles avec un côté de longueur 100 points (figure A) ou l'étoile (figure B). Ici, on ne peut pas utiliser les constructions géométriques, mais seulement les longueurs et les angles. On peut s'appuyer sur les angles de 60° et les rapports des côtés (3/3). Pour les plus grands on peut désigner la longueur du côté par une variable C dont la valeur est fixée au début du programme (C=100) ou peut même être demandée à l'utilisateur pour tracer des étoiles de tailles variables. Cette amélioration permet de généraliser un problème et de tester les valeurs limites : jusqu'à quelle longueur de côté votre programme est-il capable de tracer entièrement l'étoile ?

<figure><img src="image_17.png" /></figure>

<figure><img src="image_18.png" /></figure>
## Partie II :
Les situations didactiques
## Partie II :
Les situations didactiques
# Le jeu du « robot idiot »

## Type d'activité

☑ Débranchée

☐ Application

☐ Robot

☐ Programmation

## Public visé

Cycles 1 à 3 : de la Moyenne section de maternelle au CM1

## Compétences travaillées

* Domaine 1 du Socle (les langages pour penser et communiquer : L'élève parle, communique, argumente à l'oral de façon claire et organisée ; Il s'exprime par des activités, physiques, sportives ou artistiques, impliquant le corps. Il apprend ainsi le contrôle et la maîtrise de soi.) : Être capable de s'exprimer publiquement à haute et intelligible voix pour donner des instructions simples, claires et univoques ;

* Domaine 2 du Socle (les méthodes et outils pour apprendre) : Être capable de résoudre un problème seul ou collectivement ; Être capable de se projeter dans le temps, anticiper, planifier ses tâches ; Être capable d'identifier un problème, s'engager dans une démarche de résolution, mobiliser les connaissances nécessaires, analyser et exploiter les erreurs, mettre à l'essai plusieurs solutions, accorder une importance particulière aux corrections.

* Domaine 3 du Socle (la formation de la personne et du citoyen) : Réflexion et discernement : Comprendre les limites du traitement automatique de l'information, apprendre qu'un robot ne fait que traiter des données et exécuter un programme qui a été écrit par un Homme.

* Domaine 4 du Socle (les systèmes naturels et les systèmes techniques) : Démarches scientifiques : Fondées sur l'observation, la manipulation et l'expérimentation, [...] Elles développent chez l'élève la rigueur intellectuelle, l'habileté manuelle et l'esprit critique, l'aptitude à démontrer, à argumenter.

## Objectifs envisageables pour les élèves

* Déconstruire l'idée qu'un robot est magique, tout puissant et intelligent : le robot ne peut faire que ce qui lui est commandé, il n'a pas de libre arbitre ;

* Montrer l'importance de se mettre d'accord sur un langage clair. Exemple : avoir une seule manière de traduire une instruction « tourner à droite » en actes ;

* Notions à découvrir : instruction, séquence, langage, programmer une séquence ;

* Programmer = Anticiper : construire une séquence d'instructions qui permet d'atteindre le but indiqué : ici un déplacement.

* Latéralisation : comprendre la droite et la gauche...

## Matériel

Utiliser un lieu dont le sol est pavé de cases (carrelage) suffisamment grandes pour qu'un enfant puisse faire un demi-tour dessus sans dépasser de la case. Sinon, tracer un parcours ou une grille avec des cases régulières (à la craie, avec des ficelles...) pour chaque groupe d'élèves.

Remarque : en général le défi est un déplacement à réaliser, et c'est donc bien pratique de s'appuyer sur un carrelage, mais on peut tout à fait utiliser ce protocole pour faire faire autre-chose au « robot idiot » !
# Le jeu du « robot idiot »

## Type d'activité

<figure><img src="image_19.png" /></figure>

Débranchée

<figure><img src="image_20.png" /></figure>

Application

<figure><img src="image_21.png" /></figure>

Robot

<figure><img src="image_22.png" /></figure>

Programmation

## Public visé

Cycles 1 à 3 : de la Moyenne section de maternelle au CM1

## Compétences travaillées

* Domaine 1 du Socle (les langages pour penser et communiquer : L'élève parle, communique, argumente à l'oral de façon claire et organisée ; Il s'exprime par des activités, physiques, sportives ou artistiques, impliquant le corps. Il apprend ainsi le contrôle et la maîtrise de soi.) : Être capable de s'exprimer publiquement à haute et intelligible voix pour donner des instructions simples, claires et univoques ;

* Domaine 2 du Socle (les méthodes et outils pour apprendre) : Être capable de résoudre un problème seul ou collectivement ; Être capable de se projeter dans le temps, anticiper, planifier ses tâches ; Être capable d'identifier un problème, s'engager dans une démarche de résolution, mobiliser les connaissances nécessaires, analyser et exploiter les erreurs, mettre à l'essai plusieurs solutions, accorder une importance particulière aux corrections.

* Domaine 3 du Socle (la formation de la personne et du citoyen) : Réflexion et discernement : Comprendre les limites du traitement automatique de l'information, apprendre qu'un robot ne fait que traiter des données et exécuter un programme qui a été écrit par un Homme.

* Domaine 4 du Socle (les systèmes naturels et les systèmes techniques) : Démarches scientifiques : Fondées sur l'observation, la manipulation et l'expérimentation, [...] Elles développent chez l'élève la rigueur intellectuelle, l'habileté manuelle et l'esprit critique, l'aptitude à démontrer, à argumenter.

## Objectifs envisageables pour les élèves

* Déconstruire l'idée qu'un robot est magique, tout puissant et intelligent : le robot ne peut faire que ce qui lui est commandé, il n'a pas de libre arbitre ;

* Montrer l'importance de se mettre d'accord sur un langage clair. Exemple : avoir une seule manière de traduire une instruction « tourner à droite » en actes ;

* Notions à découvrir : instruction, séquence, langage, programmer une séquence ;

* Programmer = Anticiper : construire une séquence d'instructions qui permet d'atteindre le but indiqué : ici un déplacement.

* Latéralisation : comprendre la droite et la gauche...

## Matériel

Utiliser un lieu dont le sol est pavé de cases (carrelage) suffisamment grandes pour qu'un enfant puisse faire un demi-tour dessus sans dépasser de la case. Sinon, tracer un parcours ou une grille avec des cases régulières (à la craie, avec des ficelles...) pour chaque groupe d'élèves.

Remarque : en général le défi est un déplacement à réaliser, et c'est donc bien pratique de s'appuyer sur un carrelage, mais on peut tout à fait utiliser ce protocole pour faire faire autre-chose au « robot idiot » !
## Organisation et déroulement du jeu

Dans chaque groupe on définit des rôles (qui pourront être permutés après chaque problème). Un problème est donné par un défi comme : partir de telle case (avec telle orientation initiale) et arriver dans telle autre case (avec telle orientation).

1. Le programmeur : reçoit les informations du défi à relever (problème à résoudre). Il écrit le programme : la séquence d'instructions (à l'aide de cartes ou de symboles) ;

2. Le lecteur lit le programme et donne les instructions oralement au « robot idiot » ;

3. Le « robot idiot » : écoute et exécute les instructions : s'il ne comprend pas, il « bogue » pour montrer que l'instruction n'a pas été comprise.

4. Le ou les vérificateurs : vérifient que c'est bien ce qui a été écrit par le programmeur qui est lu par le lecteur et que c'est bien ce qui a été ordonné par le lecteur qui est exécuté par le robot.

Avant de passer au problème suivant, on peut essayer de noter ce qui a posé des difficultés. Au problème suivant, on échange les rôles jusqu'à ce que chacun ait fait le robot idiot.

## Points de vigilance

Il faut être très attentif au fait que le robot n'ait aucune initiative. On peut aussi demander aux élèves de définir la liste des commandes/instructions à donner au robot. Il faut aussi insister sur le fait qu'il y a des règles pour parler : les vérificateurs doivent signaler les problèmes quand ils surviennent mais sans couper la parole au lecteur. Le robot ne peut pas parler et le programmeur non plus (sauf si on lui donne aussi le rôle de vérificateur).

## Relations avec le lexique

Cette activité est l'occasion d'apprendre ce qu'est une **instruction**, une **séquence** : un **programme** simple, un **langage de programmation** : jeu d'instructions interprétable par le robot.

## Illustration

Une présentation du jeu du robot par Marie Duflot-Kremer est disponible sur cette vidéo (https://www.youtube.com/watch?v=9AtmJ9mTaB0&t=341s).

## Crédits

Auteur : Christophe Reffay

Date : 8 janvier 2020

Licence : CC-BY-SA

Cette activité est inspirée de :
*Computer Science Unplugged*. (2005). Computer Science Unplugged. http://csunplugged.org/
disponible en français ici : https://classic.csunplugged.org/wp-content/uploads/2014/12/12_fr_Langages_de_programmation.pdf
## Organisation et déroulement du jeu

Dans chaque groupe on définit des rôles (qui pourront être permutés après chaque problème). Un problème est donné par un défi comme : partir de telle case (avec telle orientation initiale) et arriver dans telle autre case (avec telle orientation).

1. Le programmeur : reçoit les informations du défi à relever (problème à résoudre). Il écrit le programme : la séquence d'instructions (à l'aide de cartes ou de symboles) ;

2. Le lecteur lit le programme et donne les instructions oralement au « robot idiot » ;

3. Le « robot idiot » : écoute et exécute les instructions : s'il ne comprend pas, il « bogue » pour montrer que l'instruction n'a pas été comprise.

4. Le ou les vérificateurs : vérifient que c'est bien ce qui a été écrit par le programmeur qui est lu par le lecteur et que c'est bien ce qui a été ordonné par le lecteur qui est exécuté par le robot.

Avant de passer au problème suivant, on peut essayer de noter ce qui a posé des difficultés. Au problème suivant, on échange les rôles jusqu'à ce que chacun ait fait le robot idiot.

## Points de vigilance

Il faut être très attentif au fait que le robot n'ait aucune initiative. On peut aussi demander aux élèves de définir la liste des commandes/instructions à donner au robot. Il faut aussi insister sur le fait qu'il y a des règles pour parler : les vérificateurs doivent signaler les problèmes quand ils surviennent mais sans couper la parole au lecteur. Le robot ne peut pas parler et le programmeur non plus (sauf si on lui donne aussi le rôle de vérificateur).

## Relations avec le lexique

Cette activité est l'occasion d'apprendre ce qu'est une **instruction**, une **séquence** : un **programme** simple, un **langage de programmation** : jeu d'instructions interprétable par le robot.

## Illustration

Une présentation du jeu du robot par Marie Duflot-Kremer est disponible sur cette vidéo (https://www.youtube.com/watch?v=9AtmJ9mTaB0&t=341s).

## Crédits

Auteur : Christophe Reffay

Date : 8 janvier 2020

Licence : CC-BY-SA

Cette activité est inspirée de :
*Computer Science Unplugged*. (2005). Computer Science Unplugged. http://csunplugged.org/
disponible en français ici : https://classic.csunplugged.org/wp-content/uploads/2014/12/12_fr_Langages_de_programmation.pdf
# L'application « Collabots »

## Type d'activité

☐ Débranchée

☑ Application

☐ Robot

☐ Programmation

## Public visé

Cycles 2 et 3 : de la fin du CE1 au début de la sixième

## Compétences travaillées

* Domaine 1 du Socle (les langages pour penser et communiquer) : L'élève parle, communique, argumente à l'oral de façon claire et organisée ; Il s'exprime par des activités, physiques, sportives ou artistiques, impliquant le corps. Il apprend ainsi le contrôle et la maîtrise de soi ; Il est capable d'écouter, de s'exprimer et d'argumenter pour collaborer avec ses pairs dans le cadre d'une activité impliquant le partage et l'entraide ;

* Domaine 2 du Socle (les méthodes et outils pour apprendre) : Être capable de résoudre un problème seul ou collectivement ; Être capable de se projeter dans le temps, anticiper, planifier ses tâches ; Être capable d'identifier un problème, s'engager dans une démarche de résolution, mobiliser les connaissances nécessaires, analyser et exploiter les erreurs, mettre à l'essai plusieurs solutions, accorder une importance particulière aux corrections. L'élève travaille en équipe, partage des tâches, s'engage dans un dialogue constructif, accepte la contradiction tout en défendant son point de vue, fait preuve de diplomatie, négocie et recherche un consensus.

* Domaine 3 du Socle (la formation de la personne et du citoyen) : Réflexion et discernement : Il exploite ses facultés intellectuelles et physiques en ayant confiance en sa capacité à réussir et à progresser. L'élève apprend à résoudre les conflits sans agressivité.

* Domaine 4 du Socle (les systèmes naturels et les systèmes techniques) : Démarches scientifiques : Fondées sur l'observation, la manipulation et l'expérimentation, [...] Elles développent chez l'élève la rigueur intellectuelle, l'habileté manuelle et l'esprit critique, l'aptitude à démontrer, à argumenter. La familiarisation de l'élève avec le monde technique passe par la connaissance du fonctionnement d'un certain nombre d'objets et de systèmes et par sa capacité à en concevoir et en réaliser lui-même. Ce sont des occasions de prendre conscience que la démarche technologique consiste à rechercher l'efficacité dans un milieu contraint.

* Sciences et technologie (Cycle 3) : découvrir la notion d'algorithme

* Sciences et technologie (Cycle 3) : exploiter un objet programmable

## Objectifs envisageables pour les élèves

* Jouer le jeu de la collaboration : aider son partenaire pour qu'ensemble le binôme progresse plus vite dans le jeu ; maître en œuvre des stratégies de collaboration efficaces pour résoudre les objectifs partagés ;

* Découvrir le principe de programmation : écrire un programme avant qu'il soit exécuté par une machine en étant bien conscient des 2 temps différents : la programmation (écriture du programme) et l'exécution ;

* Maîtriser les concepts instruction et séquence ;

* Découverte des notions de synchronisation et d'optimisation.
# L'application « Collabots »

## Type d'activité

☐ Débranchée

☑ Application

☐ Robot

☐ Programmation

## Public visé

Cycles 2 et 3 : de la fin du CE1 au début de la sixième

## Compétences travaillées

* Domaine 1 du Socle (les langages pour penser et communiquer) : L'élève parle, communique, argumente à l'oral de façon claire et organisée ; Il s'exprime par des activités, physiques, sportives ou artistiques, impliquant le corps. Il apprend ainsi le contrôle et la maîtrise de soi ; Il est capable d'écouter, de s'exprimer et d'argumenter pour collaborer avec ses pairs dans le cadre d'une activité impliquant le partage et l'entraide ;

* Domaine 2 du Socle (les méthodes et outils pour apprendre) : Être capable de résoudre un problème seul ou collectivement ; Être capable de se projeter dans le temps, anticiper, planifier ses tâches ; Être capable d'identifier un problème, s'engager dans une démarche de résolution, mobiliser les connaissances nécessaires, analyser et exploiter les erreurs, mettre à l'essai plusieurs solutions, accorder une importance particulière aux corrections. L'élève travaille en équipe, partage des tâches, s'engage dans un dialogue constructif, accepte la contradiction tout en défendant son point de vue, fait preuve de diplomatie, négocie et recherche un consensus.

* Domaine 3 du Socle (la formation de la personne et du citoyen) : Réflexion et discernement : Il exploite ses facultés intellectuelles et physiques en ayant confiance en sa capacité à réussir et à progresser. L'élève apprend à résoudre les conflits sans agressivité.

* Domaine 4 du Socle (les systèmes naturels et les systèmes techniques) : Démarches scientifiques : Fondées sur l'observation, la manipulation et l'expérimentation, [...] Elles développent chez l'élève la rigueur intellectuelle, l'habileté manuelle et l'esprit critique, l'aptitude à démontrer, à argumenter. La familiarisation de l'élève avec le monde technique passe par la connaissance du fonctionnement d'un certain nombre d'objets et de systèmes et par sa capacité à en concevoir et en réaliser lui-même. Ce sont des occasions de prendre conscience que la démarche technologique consiste à rechercher l'efficacité dans un milieu contraint.

* Sciences et technologie (Cycle 3) : découvrir la notion d'algorithme

* Sciences et technologie (Cycle 3) : exploiter un objet programmable

## Objectifs envisageables pour les élèves

* Jouer le jeu de la collaboration : aider son partenaire pour qu'ensemble le binôme progresse plus vite dans le jeu ; maître en œuvre des stratégies de collaboration efficaces pour résoudre les objectifs partagés ;

* Découvrir le principe de programmation : écrire un programme avant qu'il soit exécuté par une machine en étant bien conscient des 2 temps différents : la programmation (écriture du programme) et l'exécution ;

* Maîtriser les concepts instruction et séquence ;

* Découverte des notions de synchronisation et d'optimisation.
## Matériel

* Une tablette ou un ordinateur connecté à Internet pour deux élèves ;

## Organisation et déroulement de l'activité

Avant de commencer à jouer, recueillir les représentations initiales des élèves sur certains concepts : robot, programmation et programme ou séquence. Puis leur annoncer qu'ils vont devoir (à deux) programmer des robots pour leur faire traverser des tableaux de plus en plus difficiles et que pour y arriver, ils devront collaborer et tester leurs propositions.

Rappeler alors les règles de la collaboration :

1. Aider son partenaire en lui expliquant quoi faire et comment faire, sans faire pour lui ;

2. Ecouter les propositions du partenaire, les évaluer et les accepter ou donner des arguments et des propositions alternatives ;

Répartir les enfants par binômes. Au besoin, le PE jouera avec un élève si le nombre d'élèves est impair. Distribuer un ordinateur ou une tablette (connectée) à chaque binôme. Se rendre sur l'URL du jeu et demander aux élèves de valider le maximum de tableaux (il y en a 20). En fonction de leur niveau, de leur habileté avec les outils numériques, chaque tableau peut prendre 3 à 10min. Il est raisonnable de répartir cette activité en 2 séances qui peuvent s'organiser comme suit :

### Séance 1

* Recueil des représentations initiales : : robot, programmation et programme. (5min)

* Mise en œuvre du jeu par binôme (45min)

* Bilan sur ce qu'ils ont appris et difficultés rencontrées (10min)

### Séance 2

* Rappel des apprentissages de la séance 1 et conseils de collaboration (5min)

* Mise en œuvre du jeu par binôme (45min)

* Elaboration d'une trace écrite pour séquence et programme (10min)

## Points de vigilance

S'assurer du respect des règles de collaboration. Indiquer qu'ils peuvent essayer leurs programmes par étapes pour s'assurer que le début est correct. Insister sur l'importance de bien lire les instructions du jeu qui expliquent comment résoudre les difficultés nouvelles.

## Relations avec le lexique

Cette activité est l'occasion d'apprendre ce qu'est une **instruction**, une **séquence** : un **programme** simple, un **langage de programmation** : jeu d'instructions interprétable par le robot.

## Crédits

Auteur de la fiche d'activité : Christophe Reffay

Date : 8 janvier 2020

Licence : [CC-BY-SA](https://creativecommons.org/licenses/by-sa/4.0/)

L'application Collabots a été développée par : Bruno Follet-Locatelli et Paul-Armand Michaud, encadrés par Frédéric Dadeau au département d'informatique de l'Université de Franche-Comté. Graphisme : Nathan Piranda et Anaïs Chevret. Musique : Marie Smolinski.

Présentation de Collabots par Sésamat : http://revue.sesamath.net/spip.php?breve1898

URL de l'application : http://dps.univ-fcomte.fr/collabots/
## Matériel

* Une tablette ou un ordinateur connecté à Internet pour deux élèves ;

## Organisation et déroulement de l'activité

Avant de commencer à jouer, recueillir les représentations initiales des élèves sur certains concepts : robot, programmation et programme ou séquence. Puis leur annoncer qu'ils vont devoir (à deux) programmer des robots pour leur faire traverser des tableaux de plus en plus difficiles et que pour y arriver, ils devront collaborer et tester leurs propositions.

Rappeler alors les règles de la collaboration :

1. Aider son partenaire en lui expliquant quoi faire et comment faire, sans faire pour lui ;

2. Ecouter les propositions du partenaire, les évaluer et les accepter ou donner des arguments et des propositions alternatives ;

Répartir les enfants par binômes. Au besoin, le PE jouera avec un élève si le nombre d'élèves est impair. Distribuer un ordinateur ou une tablette (connectée) à chaque binôme. Se rendre sur l'URL du jeu et demander aux élèves de valider le maximum de tableaux (il y en a 20). En fonction de leur niveau, de leur habileté avec les outils numériques, chaque tableau peut prendre 3 à 10min. Il est raisonnable de répartir cette activité en 2 séances qui peuvent s'organiser comme suit :

### Séance 1

* Recueil des représentations initiales : robot, programmation et programme. (5min)

* Mise en œuvre du jeu par binôme (45min)

* Bilan sur ce qu'ils ont appris et difficultés rencontrées (10min)

### Séance 2

* Rappel des apprentissages de la séance 1 et conseils de collaboration (5min)

* Mise en œuvre du jeu par binôme (45min)

* Elaboration d'une trace écrite pour séquence et programme (10min)

## Points de vigilance

S'assurer du respect des règles de collaboration. Indiquer qu'ils peuvent essayer leurs programmes par étapes pour s'assurer que le début est correct. Insister sur l'importance de bien lire les instructions du jeu qui expliquent comment résoudre les difficultés nouvelles.

## Relations avec le lexique

Cette activité est l'occasion d'apprendre ce qu'est une **instruction**, une **séquence** : un **programme** simple, un **langage de programmation** : jeu d'instructions interprétable par le robot.

## Crédits

Auteur de la fiche d'activité : Christophe Reffay

Date : 8 janvier 2020

Licence : [CC-BY-SA](https://creativecommons.org/licenses/by-sa/4.0/)

L'application Collabots a été développée par : Bruno Follet-Locatelli et Paul-Armand Michaud, encadrés par Frédéric Dadeau au département d'informatique de l'Université de Franche-Comté. Graphisme : Nathan Piranda et Anaïs Chevret. Musique : Marie Smolinski.

Présentation de Collabots par Sésamat : http://revue.sesamath.net/spip.php?breve1898

URL de l'application : http://dps.univ-fcomte.fr/collabots/
# Ozobot choisit sa route

## Type d'activité

☐ Débranchée

☐ Application

☑ Robot

☐ Programmation

## Public visé

Cycle 3 : du CM1 à la Sixième.

## Compétences travaillées

* Domaine 1 du Socle (les langages pour penser et communiquer) : L'élève parle, communique, argumente à l'oral de façon claire et organisée ; Il s'exprime par des activités, physiques, sportives ou artistiques, impliquant le corps. Il apprend ainsi le contrôle et la maîtrise de soi ; Il est capable d'écouter, de s'exprimer et d'argumenter pour collaborer avec ses pairs dans le cadre d'une activité impliquant le partage et l'entraide ;

* Domaine 2 du Socle (les méthodes et outils pour apprendre) : Être capable de résoudre un problème seul ou collectivement ; Être capable de se projeter dans le temps, anticiper, planifier ses tâches ; Être capable d'identifier un problème, s'engager dans une démarche de résolution, mobiliser les connaissances nécessaires, analyser et exploiter les erreurs, mettre à l'essai plusieurs solutions, accorder une importance particulière aux corrections. L'élève travaille en équipe, partage des tâches, s'engage dans un dialogue constructif, accepte la contradiction tout en défendant son point de vue, fait preuve de diplomatie, négocie et recherche un consensus.

* Domaine 3 du Socle (la formation de la personne et du citoyen) : Réflexion et discernement : Il exploite ses facultés intellectuelles et physiques en ayant confiance en sa capacité à réussir et à progresser. Il apprend à résoudre les conflits sans agressivité.

* Domaine 4 du Socle (les systèmes naturels et les systèmes techniques) : Démarches scientifiques : Fondées sur l'observation, la manipulation et l'expérimentation, [...] Elles développent chez l'élève la rigueur intellectuelle, l'habileté manuelle et l'esprit critique, l'aptitude à démontrer, à argumenter. La familiarisation de l'élève avec le monde technique passe par la connaissance du fonctionnement d'un certain nombre d'objets et de systèmes et par sa capacité à en concevoir et en réaliser lui-même. Ce sont des occasions de prendre conscience que la démarche technologique consiste à rechercher l'efficacité dans un milieu contraint.

* Sciences et technologie (Cycle 3) : exploiter un objet programmable

## Objectifs envisageables pour les élèves

* Découvrir les capacités de perception du robot (ici Ozobot) : perception des couleurs.

* Découvrir le principe de codage d'une instruction : à un code (c'est-à-dire une série de couleurs composées de rouge, bleu vert ou noir) correspond une instruction ;

* Résolution d'un problème donné sous la forme d'un défi : placer les bons codes ;

* Composition d'un défi qui devra être relevé par un pair.

## Matériel

* Un robot (Ozobot) par groupe d'élèves ;

* Des marqueurs épais : (Rouge, Bleu, Vert, Noir) ;

* Des feuilles blanches (A3 ou A4).
# Ozobot choisit sa route

## Type d'activité

☐ Débranchée

☐ Application

☑ Robot

☐ Programmation

## Public visé

Cycle 3 : du CM1 à la Sixième.

## Compétences travaillées

* Domaine 1 du Socle (les langages pour penser et communiquer) : L'élève parle, communique, argumente à l'oral de façon claire et organisée ; Il s'exprime par des activités, physiques, sportives ou artistiques, impliquant le corps. Il apprend ainsi le contrôle et la maîtrise de soi ; Il est capable d'écouter, de s'exprimer et d'argumenter pour collaborer avec ses pairs dans le cadre d'une activité impliquant le partage et l'entraide ;

* Domaine 2 du Socle (les méthodes et outils pour apprendre) : Être capable de résoudre un problème seul ou collectivement ; Être capable de se projeter dans le temps, anticiper, planifier ses tâches ; Être capable d'identifier un problème, s'engager dans une démarche de résolution, mobiliser les connaissances nécessaires, analyser et exploiter les erreurs, mettre à l'essai plusieurs solutions, accorder une importance particulière aux corrections. L'élève travaille en équipe, partage des tâches, s'engage dans un dialogue constructif, accepte la contradiction tout en défendant son point de vue, fait preuve de diplomatie, négocie et recherche un consensus.

* Domaine 3 du Socle (la formation de la personne et du citoyen) : Réflexion et discernement : Il exploite ses facultés intellectuelles et physiques en ayant confiance en sa capacité à réussir et à progresser. Il apprend à résoudre les conflits sans agressivité.

* Domaine 4 du Socle (les systèmes naturels et les systèmes techniques) : Démarches scientifiques : Fondées sur l'observation, la manipulation et l'expérimentation, [...] Elles développent chez l'élève la rigueur intellectuelle, l'habileté manuelle et l'esprit critique, l'aptitude à démontrer, à argumenter. La familiarisation de l'élève avec le monde technique passe par la connaissance du fonctionnement d'un certain nombre d'objets et de systèmes et par sa capacité à en concevoir et en réaliser lui-même. Ce sont des occasions de prendre conscience que la démarche technologique consiste à rechercher l'efficacité dans un milieu contraint.

* Sciences et technologie (Cycle 3) : exploiter un objet programmable

## Objectifs envisageables pour les élèves

* Découvrir les capacités de perception du robot (ici Ozobot) : perception des couleurs.

* Découvrir le principe de codage d'une instruction : à un code (c'est-à-dire une série de couleurs composées de rouge, bleu vert ou noir) correspond une instruction ;

* Résolution d'un problème donné sous la forme d'un défi : placer les bons codes ;

* Composition d'un défi qui devra être relevé par un pair.

## Matériel

* Un robot (Ozobot) par groupe d'élèves ;

* Des marqueurs épais : (Rouge, Bleu, Vert, Noir) ;

* Des feuilles blanches (A3 ou A4).
## Organisation et déroulement de l'activité

* Placer le robot sur un circuit contenant au moins une intersection (par exemple en forme de 8) composé par une ligne qui est tantôt Verte, tantôt Bleue, tantôt Noire, tantôt Rouge. Que se passe-t-il ? Quel est le comportement du robot ?

Réponses attendues :

1. Il suit la ligne et change de couleur (lumière) en fonction de la couleur de la ligne qu'il suit. Donc il « voit » en dessous, c'est-à-dire qu'il a un capteur capable de distinguer les couleurs (feuille blanche et traits de couleur) qui lui permet de se diriger sur la ligne et un effecteur (lumière=LED) qui peut produire une lumière.

2. Aux intersections, il change parfois de direction sans règle précise (aléatoire).

* Placer le robot sur un parcours avec un point de départ, un croisement et au moins 3 points d'arrivée possibles (en plus du point de départ). Leur faire deviner où ira le robot. Réitérer l'expérience jusqu'à ce qu'ils soient convaincus que le choix est aléatoire donc non prévisible.

* Introduction des codes-instructions de direction

<figure><img src="image_19.png" /></figure>

Ajouter l'un des code-instructions ci-dessus avant l'intersection et montrer que cette fois, en fonction du code utilisé, le robot « choisit » systématiquement la même direction au franchissement du croisement. Dans ce cas, on peut donc prédire où arrivera le robot.

* Demander aux élèves de déterminer à quoi correspond chacun des 3 codes ci-dessus.

* Leur demander ensuite de

1. Composer un circuit ayant au moins 4 franchissements d'intersections ;

2. Définir un point de départ et un point d'arrivée ;

3. Demander à un pair de placer les bons codes-instructions pour que le robot parcoure correctement le circuit du point de départ au point d'arriver en franchissant au moins 3 intersections.

4. Répondre au défi d'un pair et vérifier que le problème a été correctement résolu.

<figure><img src="image_20.png" /></figure>

## Points de vigilance

Une fois les code-instructions définis, les rendre visibles à toute la classe (sur une affiche). Les feutres doivent être assez épais, le noir doit être bien noir (opaque). On pourra éventuellement préparer des étiquettes autocollantes avec les différentes instructions.

## Relations avec le lexique

Cette activité est l'occasion d'apprendre qu'un robot possède des capteurs et des effecteurs, ce qu'est une **instruction**, une **séquence** : un **langage de programmation** : jeu d'instructions interprétable par le robot : ici des code-couleurs interprétables par le robot.

## Crédits

Auteur de la fiche d'activité : Christophe Reffay, 8 janvier 2020, Licence : [CC-BY-SA](https://creativecommons.org/licenses/by-sa/4.0/)

Manuel du constructeur du robot pour le PE : [https://www.robot-advance.com/lienpdf-ozobot-guide-complet-d-utilisation-du-robot-educatif-en-classe.pdf](https://www.robot-advance.com/lienpdf-ozobot-guide-complet-d-utilisation-du-robot-educatif-en-classe.pdf)
## Organisation et déroulement de l'activité

* Placer le robot sur un circuit contenant au moins une intersection (par exemple en forme de 8) composé par une ligne qui est tantôt Verte, tantôt Bleue, tantôt Noire, tantôt Rouge. Que se passe-t-il ? Quel est le comportement du robot ?

Réponses attendues :

1. Il suit la ligne et change de couleur (lumière) en fonction de la couleur de la ligne qu'il suit. Donc il « voit » en dessous, c'est-à-dire qu'il a un capteur capable de distinguer les couleurs (feuille blanche et traits de couleur) qui lui permet de se diriger sur la ligne et un effecteur (lumière=LED) qui peut produire une lumière.

2. Aux intersections, il change parfois de direction sans règle précise (aléatoire).

* Placer le robot sur un parcours avec un point de départ, un croisement et au moins 3 points d'arrivée possibles (en plus du point de départ). Leur faire deviner où ira le robot. Réitérer l'expérience jusqu'à ce qu'ils soient convaincus que le choix est aléatoire donc non prévisible.

* Introduction des codes-instructions de direction

<figure><img src="image_23.png" /></figure>

Ajouter l'un des code-instructions ci-dessus avant l'intersection et montrer que cette fois, en fonction du code utilisé, le robot « choisit » systématiquement la même direction au franchissement du croisement. Dans ce cas, on peut donc prédire où arrivera le robot.

* Demander aux élèves de déterminer à quoi correspond chacun des 3 codes ci-dessus.

* Leur demander ensuite de

1. Composer un circuit ayant au moins 4 franchissements d'intersections ;

2. Définir un point de départ et un point d'arrivée ;

3. Demander à un pair de placer les bons codes-instructions pour que le robot parcoure correctement le circuit du point de départ au point d'arriver en franchissant au moins 3 intersections.

4. Répondre au défi d'un pair et vérifier que le problème a été correctement résolu.

<figure><img src="image_24.png" /></figure>

## Points de vigilance

Une fois les code-instructions définis, les rendre visibles à toute la classe (sur une affiche). Les feutres doivent être assez épais, le noir doit être bien noir (opaque). On pourra éventuellement préparer des étiquettes autocollantes avec les différentes instructions.

## Relations avec le lexique

Cette activité est l'occasion d'apprendre qu'un robot possède des capteurs et des effecteurs, ce qu'est une **instruction**, une **séquence** : un **langage de programmation** : jeu d'instructions interprétable par le robot : ici des code-couleurs interprétables par le robot.

## Crédits

Auteur de la fiche d'activité : Christophe Reffay, 8 janvier 2020, Licence : [CC-BY-SA](https://creativecommons.org/licenses/by-sa/4.0/)

Manuel du constructeur du robot pour le PE : [https://www.robot-advance.com/lienpdf-ozobot-guide-complet-d-utilisation-du-robot-educatif-en-classe.pdf](https://www.robot-advance.com/lienpdf-ozobot-guide-complet-d-utilisation-du-robot-educatif-en-classe.pdf)
# Course chat-bus pouette-pouette

## Type d'activité

<figure><img src="image_21.png" /></figure>

☐ Débranchée

<figure><img src="image_22.png" /></figure>

☐ Application

<figure><img src="image_23.png" /></figure>

☐ Robot

<figure><img src="image_24.png" /></figure>

☑ Programmation

## Public visé

Cycle 3 : fin de CM2 ou Sixième.

## Compétences travaillées

* Domaine 1 du Socle (les langages pour penser et communiquer) : L'élève parle, communique, argumente à l'oral de façon claire et organisée ; Il s'exprime par des activités, physiques, sportives ou artistiques, impliquant le corps. Il apprend ainsi le contrôle et la maîtrise de soi ; Il est capable d'écouter, de s'exprimer et d'argumenter pour collaborer avec ses pairs dans le cadre d'une activité impliquant le partage et l'entraide ;

* Domaine 2 du Socle (les méthodes et outils pour apprendre) : Être capable de résoudre un problème seul ou collectivement ; Être capable de se projeter dans le temps, anticiper, planifier ses tâches ; Être capable d'identifier un problème, s'engager dans une démarche de résolution, mobiliser les connaissances nécessaires, analyser et exploiter les erreurs, mettre à l'essai plusieurs solutions, accorder une importance particulière aux corrections. L'élève travaille en équipe, partage des tâches, s'engage dans un dialogue constructif, accepte la contradiction tout en défendant son point de vue, fait preuve de diplomatie, négocie et recherche un consensus.

* Domaine 3 du Socle (la formation de la personne et du citoyen) : Réflexion et discernement : Il exploite ses facultés intellectuelles et physiques en ayant confiance en sa capacité à réussir et à progresser. Il apprend à résoudre les conflits sans agressivité.

* Domaine 4 du Socle (les systèmes naturels et les systèmes techniques) : Démarches scientifiques : Fondées sur l'observation, la manipulation et l'expérimentation, [...] Elles développent chez l'élève la rigueur intellectuelle, l'habileté manuelle et l'esprit critique, l'aptitude à démontrer, à argumenter. La familiarisation de l'élève avec le monde technique passe par la connaissance du fonctionnement d'un certain nombre d'objets et de systèmes et par sa capacité à en concevoir et en réaliser lui-même.

* Sciences et technologie (Cycle 3) : découvrir la notion d'algorithme ;

* Sciences et technologie (Cycle 3) : programmer le déplacement d'un personnage.

## Objectifs envisageables pour les élèves

* Découvrir/Maîtriser la notion de personnages, de costumes et se sons dans Scratch ;

* Maîtriser les instructions d'orientation et de déplacement d'un personnage ;

* Découvrir la mesure d'angles pour l'orientation des personnages ;

* Découvrir la notion de boucle (répéter), pour les meilleurs : des boucles imbriquées.

* Utiliser le bloc répéter et les instructions : attendre, avancer, tourner, jouer un son... ;

## Matériel

* Un ordinateur (avec connexion ou scratch installé en local) pour deux élèves : la tâche étant complexe, deux cerveaux seront mieux armés pour relever le défi ;

* Une vidéo présentant le résultat attendu (exécution du programme) ;
# Course chat-bus pouette-pouette

## Type d'activité

☐ Débranchée

☐ Application

☐ Robot

☑ Programmation

## Public visé

Cycle 3 : fin de CM2 ou Sixième.

## Compétences travaillées

* Domaine 1 du Socle (les langages pour penser et communiquer) : L'élève parle, communique, argumente à l'oral de façon claire et organisée ; Il s'exprime par des activités, physiques, sportives ou artistiques, impliquant le corps. Il apprend ainsi le contrôle et la maîtrise de soi ; Il est capable d'écouter, de s'exprimer et d'argumenter pour collaborer avec ses pairs dans le cadre d'une activité impliquant le partage et l'entraide ;

* Domaine 2 du Socle (les méthodes et outils pour apprendre) : Être capable de résoudre un problème seul ou collectivement ; Être capable de se projeter dans le temps, anticiper, planifier ses tâches ; Être capable d'identifier un problème, s'engager dans une démarche de résolution, mobiliser les connaissances nécessaires, analyser et exploiter les erreurs, mettre à l'essai plusieurs solutions, accorder une importance particulière aux corrections. L'élève travaille en équipe, partage des tâches, s'engage dans un dialogue constructif, accepte la contradiction tout en défendant son point de vue, fait preuve de diplomatie, négocie et recherche un consensus.

* Domaine 3 du Socle (la formation de la personne et du citoyen) : Réflexion et discernement : Il exploite ses facultés intellectuelles et physiques en ayant confiance en sa capacité à réussir et à progresser. Il apprend à résoudre les conflits sans agressivité.

* Domaine 4 du Socle (les systèmes naturels et les systèmes techniques) : Démarches scientifiques : Fondées sur l'observation, la manipulation et l'expérimentation, [...] Elles développent chez l'élève la rigueur intellectuelle, l'habileté manuelle et l'esprit critique, l'aptitude à démontrer, à argumenter. La familiarisation de l'élève avec le monde technique passe par la connaissance du fonctionnement d'un certain nombre d'objets et de systèmes et par sa capacité à en concevoir et en réaliser lui-même.

* Sciences et technologie (Cycle 3) : découvrir la notion d'algorithme ;

* Sciences et technologie (Cycle 3) : programmer le déplacement d'un personnage.

## Objectifs envisageables pour les élèves

* Découvrir/Maitriser la notion de personnages, de costumes et se sons dans Scratch ;

* Maîtriser les instructions d'orientation et de déplacement d'un personnage ;

* Découvrir la mesure d'angles pour l'orientation des personnages ;

* Découvrir la notion de boucle (répéter), pour les meilleurs : des boucles imbriquées.

* Utiliser le bloc répéter et les instructions : attendre, avancer, tourner, jouer un son... ;

## Matériel

* Un ordinateur (avec connexion ou scratch installé en local) pour deux élèves : la tâche étant complexe, deux cerveaux seront mieux armés pour relever le défi ;

* Une vidéo présentant le résultat attendu (exécution du programme) ;
## Organisation et déroulement de l'activité

**Prérequis** : les élèves ont déjà utilisé Scratch pour des programmes simples (séquences d'instructions de déplacement d'un ou plusieurs personnages). Ils connaissent l'environnement de programmation Scratch et sa structuration en blocs.

Enoncé du défi à relever :

**Défi** : Faire décrire un looping (octogone) au chat et à un bus qui partent en même temps mais n'arrivent pas en même temps. Le bus fait teuf-teuf et pouette-pouette avant d'avancer.

**Vidéo** montrant le résultat attendu :

**Indices** : Choisir un arrière-plan, trafiquer les costumes du chat (insérer 2 nouveaux costumes intermédiaires, et modifier les positions des pattes ainsi que les couleurs de certaines parties du corps), ajouter un nouveau personnage (ohlpolit) : le bus et enregistrer un nouveau son (teuf-teuf) pour ce personnage bus. Pour les mouvements des 2 personnages : tourner de 45° 8 fois après avoir avancé 10 fois de quelques pas en faisant chaque fois une pause d'une fraction de seconde. Utiliser une boucle "Répéter 10 fois" pour avancer de quelques pas, suivi d'un "tourner de 45°" ; le tout dans une boucle "répéter 8 fois" pour décrire un octogone.

<figure><img src="image_25.png" /></figure>

## Points de vigilance

S'assurer que les personnages sont bien placés au début du programme. L'idéal est de débuter le programme de chaque personnage par un positionnement précis. La trajectoire à parcourir par le bus étant sur un octogone (extérieur) plus grand que celui du chat (intérieur) ; le chat avance à chaque fois d'une plus petite distance que le bus. Les élèves risquent de copier 8 fois la même séquence pour réaliser le programme. C'est là qu'il faut leur suggérer d'utiliser le bloc « répéter 8 fois » avec cette séquence à l'intérieur. S'ils ne font pas la boucle intérieure (qui permet au chat de se déplacer 10 fois sur un côté de l'octogone), ce n'est pas grave. Mais s'ils l'ont faite, alors vérifier que l'alternance des costumes (du chat) se faire dans la boucle la plus interne, c'est-à-dire plusieurs fois avant chaque changement de direction.

## Relations avec le lexique

Cette activité permet d'élargir la palette d'instructions connues dans Scratch, de transformer une suite de séquences identiques en une **boucle** qui répète cette séquence. Pour les plus performants, ils iront jusqu'à découvrir qu'on peut écrire une **boucle** à l'intérieur d'une autre **boucle**.

## Illustration

Vidéo du résultat attendu : https://youtu.be/nT1DjdXakXs

Corrigé sur Scratch : https://scratch.mit.edu/projects/337776058

## Crédits

Auteur de la fiche d'activité : Christophe Reffay, 8 janvier 2020, Licence : [CC-BY-SA](https://creativecommons.org/licenses/by-sa/3.0/)

Environnement de programmation : https://scratch.mit.edu/
## Organisation et déroulement de l'activité

**Prérequis** : les élèves ont déjà utilisé Scratch pour des programmes simples (séquences d'instructions de déplacement d'un ou plusieurs personnages). Ils connaissent l'environnement de programmation Scratch et sa structuration en blocs.

Enoncé du défi à relever :

**Défi** : Faire décrire un looping (octogone) au chat et à un bus qui partent en même temps mais n'arrivent pas en même temps. Le bus fait teuf-teuf et pouette-pouette avant d'avancer.

**Vidéo** montrant le résultat attendu :

**Indices** : Choisir un arrière-plan, trafiquer les costumes du chat (insérer 2 nouveaux costumes intermédiaires, et modifier les positions des pattes ainsi que les couleurs de certaines parties du corps), ajouter un nouveau personnage (Sprite) : le bus et enregistrer un nouveau son (teuf-teuf) pour ce personnage bus. Pour les mouvements des 2 personnages : tourner de 45° 8 fois après avoir avancé 10 fois de quelques pas en faisant chaque fois une pause d'une fraction de seconde. Utiliser une boucle "Répéter 10 fois" pour avancer de quelques pas, suivi d'un "tourner de 45°" ; le tout dans une boucle "répéter 8 fois" pour décrire un octogone.

<figure><img src="image_25.png" /></figure>

## Points de vigilance

S'assurer que les personnages sont bien placés au début du programme. L'idéal est de débuter le programme de chaque personnage par un positionnement précis. La trajectoire à parcourir par le bus étant sur un octogone (extérieur) plus grand que celui du chat (intérieur) ; le chat avance à chaque fois d'une plus petite distance que le bus. Les élèves risquent de copier 8 fois la même séquence pour réaliser le programme. C'est là qu'il faut leur suggérer d'utiliser le bloc « répéter 8 fois » avec cette séquence à l'intérieur. S'ils ne font pas la boucle intérieure (qui permet au chat de se déplacer 10 fois sur un côté de l'octogone), ce n'est pas grave. Mais s'ils l'ont faite, alors vérifier que l'alternance des costumes (du chat) se faire dans la boucle la plus interne, c'est-à-dire plusieurs fois avant chaque changement de direction.

## Relations avec le lexique

Cette activité permet d'élargir la palette d'instructions connues dans Scratch, de transformer une suite de séquences identiques en une **boucle** qui répète cette séquence. Pour les plus performants, ils iront jusqu'à découvrir qu'on peut écrire une **boucle** à l'intérieur d'une autre **boucle**.

## Illustration

Vidéo du résultat attendu : https://youtu.be/nT1DjdXakXs

Corrigé sur Scratch : https://scratch.mit.edu/projects/337776058

## Crédits

Auteur de la fiche d'activité : Christophe Reffay, 8 janvier 2020, Licence : CC-BY-SA

Environnement de programmation : https://scratch.mit.edu/