# Affectation de variables
> [!video] Vidéo explicative
> <iframe width="560" height="315" src="https://www.youtube.com/embed/OmkAGJT_naE?si=KxK0eyegH1Jt0Lpv" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
## Introduction
En programmation, l'algorithmique est le fondement de la résolution de problèmes. Au cœur de tout algorithme se trouve la manipulation de données. Pour manipuler ces données, nous avons besoin de les stocker temporairement et de les référencer. C'est le rôle des variables et de l'opération d'affectation. Ce chapitre explorera ces concepts fondamentaux, essentiels pour traduire une logique combinatoire et des algorigrammes en instructions concrètes.
## 1. Qu'est-ce qu'une Variable ?
En algorithmique, une variable est un emplacement nommé dans la mémoire de l'ordinateur qui peut stocker une valeur. Imaginez une variable comme une boîte étiquetée : l'étiquette est le nom de la variable, et la boîte contient une valeur qui peut changer au cours de l'exécution de l'algorithme.
> [!definition] Définition : Variable
> Une **variable** est un conteneur symbolique (identifié par un nom) capable de stocker une valeur. Cette valeur peut être modifiée durant l'exécution d'un programme.
Les variables sont typiquement associées à un **type de données** (nombre entier, texte, booléen, etc.), qui détermine la nature des valeurs qu'elles peuvent contenir et les opérations qui peuvent être effectuées sur elles. Bien que certains langages (comme Python) gèrent les types de manière dynamique, la notion de type est fondamentale en algorithmique.
## 2. Le Concept d'Affectation
L'affectation est l'opération qui consiste à attribuer une valeur à une variable. C'est l'une des opérations les plus courantes et les plus fondamentales en programmation.
> [!definition] Définition : Affectation
> L'**affectation** est l'opération qui consiste à stocker une valeur dans une variable. Elle est représentée par un symbole spécifique (souvent `<-` ou `=`) qui indique le transfert de la valeur de droite vers la variable de gauche.
### 2.1. Syntaxe en Pseudo-code
En pseudo-code, l'affectation est généralement représentée par la flèche `<-` ou le signe égal `=`. Il est crucial de comprendre que `variable = valeur` en algorithmique n'est **pas** une égalité mathématique, mais une instruction de modification de l'état de la variable.
```
// Syntaxe courante
variable <- valeur
// Alternative
variable = valeur
```
> [!note] Distinction avec l'égalité mathématique
> L'expression $A = B$ en mathématiques signifie que $A$ et $B$ ont la même valeur. En algorithmique, $A \leftarrow B$ signifie que la valeur de $B$ est copiée dans $A$, écrasant toute valeur précédente de $A$.
### 2.2. Processus d'Affectation
Lors d'une affectation, trois étapes se produisent :
1. **Évaluation de l'expression** : La valeur à droite du symbole d'affectation est calculée. Cela peut être une constante, une autre variable, ou le résultat d'une expression complexe.
2. **Stockage** : La valeur évaluée est stockée dans l'emplacement mémoire associé à la variable de gauche.
3. **Mise à jour** : La variable de gauche prend la nouvelle valeur. L'ancienne valeur est perdue.
## 3. Types de Valeurs Affectables
Une variable peut se voir affecter différents types de valeurs :
### 3.1. Valeurs Littérales (Constantes)
Des valeurs fixes et prédéfinies.
- **Nombres entiers** : `age <- 30`
- **Nombres décimaux** : `prix <- 19.99`
- **Chaînes de caractères** : `nom <- "Alice"`
- **Booléens** : `estConnecte <- VRAI` (ou `TRUE`)
### 3.2. Résultats d'Expressions
Le résultat d'un calcul arithmétique, logique ou d'une autre opération.
- **Expression arithmétique** : `resultat <- (10 + 5) * 2`
- **Expression logique** : `condition <- (age > 18 ET estConnecte)`
### 3.3. Valeur d'une Autre Variable
Le contenu d'une variable peut être copié dans une autre.
- `copieAge <- age`
> [!example] Exemples d'Affectation
> ```
> DEBUT
> // Déclaration de variables (implicite en pseudo-code simple)
> nombre1 <- 10
> nombre2 <- 5
> somme <- 0
> message <- ""
>
> // Affectation du résultat d'une expression arithmétique
> somme <- nombre1 + nombre2 // somme vaut maintenant 15
>
> // Affectation d'une chaîne de caractères combinée
> message <- "La somme est : " + somme // message vaut "La somme est : 15"
>
> // Réaffectation (la valeur précédente est écrasée)
> nombre1 <- 20 // nombre1 vaut maintenant 20 (plus 10)
>
> // Affectation d'une variable à une autre
> nombre2 <- nombre1 // nombre2 vaut maintenant 20 (plus 5)
>
> AFFICHER(message)
> AFFICHER("Nouveau nombre2 : " + nombre2)
> FIN
> ```
## 4. Bonnes Pratiques
> [!tip] Noms de variables significatifs
> Choisissez des noms de variables qui reflètent leur contenu ou leur rôle (ex: `nombreUtilisateur`, `totalPrix`, `estValide`). Cela améliore la lisibilité et la maintenabilité de l'algorithme.
> [!warning] Initialisation des variables
> Dans certains langages, il est crucial d'initialiser une variable (lui donner une première valeur) avant de l'utiliser, pour éviter des erreurs ou des comportements imprévisibles. Bien que le pseudo-code soit plus permissif, c'est une bonne habitude à prendre.
> [!note] Préparation pour Python
> En Python, l'affectation utilise le signe `=` (par exemple `x = 10`). Python est un langage à typage dynamique, ce qui signifie que le type d'une variable est déterminé par la valeur qu'elle contient et peut changer au cours du programme. Cependant, la logique sous-jacente d'affectation reste la même : stocker une valeur dans un nom.
## Résumé
L'affectation de variables est une opération fondamentale en algorithmique. Elle permet de stocker et de manipuler des données en leur attribuant un nom symbolique (la variable). Comprendre que l'affectation n'est pas une égalité mathématique mais une instruction de modification d'état est essentiel. La capacité à affecter des valeurs littérales, des résultats d'expressions ou le contenu d'autres variables constitue la base de toute logique de traitement de données. Maîtriser ce concept est une étape clé pour passer de la conception d'algorigrammes à l'écriture de code fonctionnel.
## 🗓️ Historique
> **Dernière mise à jour :** `26 octobre 2025`
> **Rédigé par :** [[Julien DUQUENNOY]]