Table des matières

Sommaire "Bases d'algorithmique et de programmation"

Variables et opérateurs

[Mise à jour le : 6/7/2022]

En cours de rédaction

Mots-clés

programme, donnée, mémoire, variable, déclarer, initialiser, portée, opérateurs, arithmétique, logique, comparaison.

1. Les variables

Pendant l'exécution d'un programme, les données qu'il traite sont stockées en mémoire. Les variables permettent de manipuler ces données sans se préoccuper de leur position. Pour cela, il suffit de leur donner un nom (les déclarer).


1.1 Nommage

Une variable doit respecter quelques règles de syntaxe.
En Python, le nom d'une variable ne peut être composé que de lettres, de chiffres et de “_”. Le nom d'une variable ne peut pas commencer par un chiffre. Python est sensible à la casse (position =/= Position). L'usage veut qu'on se limite à des caractères minuscules underscore case !
En C, C++ (Arduino), le nom d'une variable ne peut être composé que de lettres, de chiffres et de “_”. Le nom d'une variable doit commencer par une lettre. C, C++ (Arduino) sont sensibles à la casse (position =/= Position).
En JavaScript le nom d'une variable commence par une lettre ou par $. JavaScript est sensible à la casse (position =/= Position).
En PHP un nom de variable doit commencer par une lettre (majuscule ou minuscule) ou un “_” (pas par un chiffre). Un nom de variable peut comporter des lettres, des chiffres et le caractère _ (les espaces ne sont pas autorisés!). PHP est sensible à la casse (position =/= Position)
A faire


1.2 Déclaration et initialisation

Pour exister, une variable doit être déclarée.
var
variable1 : type // Déclaration de variable1, variable2 et variable 3
variable2, variable3 : type
variable4 ← valeur // Initialisation de variable4 avec valeur
En Python, la simple déclaration d'une variable ne suffit pas à la créer. Après avoir choisi son nom, il est nécessaire de lui affecter une valeur initiale (initialisation). Dans ce langage l'affectation s'effectue avec le symbole “=”.

Exemple

.py
position_x = 10 # variable de type entier nommée selon la convention inderscore case
pi = 1.14159 # variable de type réel
hello = "Hello world !" # variable de type chaîne de caractère
position_x, pi, hello = 10,1.14159,"Hello world !" # C'est possible !
En C, C++ (Arduino), on déclare une variable en précisant son type, suivi d'un espace puis son nom. La déclaration se termine par un point-virgule.
.cpp
int noteDeMaths;
double sommeArgentRecue; 
unsigned int nombreDeLecteursEnTrainDeLireUnNomDeVariableUnPeuLong;
En JavaScript, une variable est déclarée explicitement par les mot-clés var et let (la portée est celle du bloc). Il est possible, mais pas obligatoire d’initialiser une variable (lui attribuer une valeur) lors de sa déclaration.
.js
var i ; // variable non initialisée
var etat = true : // type booléen
var $Somme = 400; // type entier
var maMoyenneEnTsin = 12.5 ; // type nombre réel
var monPrenom = "Lucas" ; // type chaine de caractères
if (true) {
  let y = 5; // y est seulement connu dans le bloc if
}
A faire
A faire


1.3 Types

Le type d'une variable identifie la nature de son contenu : nombre entier, nombre décimal, texte, etc.. Ces différents types d'information peuvent être placés dans une variable.
En Python, il n'est pas nécessaire de préciser le type d'une variable. Python est dit : “typé dynamiquement”.
  • Les principaux types sont :
    • Les entiers (int)
    • Les décimaux (float)
    • Les nombres complexes (complex)
    • Les booléens (bool), sous-ensemble des entiers
    • Les chaînes de caractères (str)
    • Les listes (list)
Les entiers sont donnés sans perte de précision.
  • Connaître le type d'une variable avec type() et isinstance().

Exemple

exvar2a.py
nom_variable = 15
type(nom_variable) # renvoie <class 'int'> dans la console
isinstance(nom_variable,int) # renvoie true 
type(4+5j) # renvoie <class 'complex'>
  • Convertir une chaîne de caractères en un entier avec int()

Exemple

exvar2b.py
annee = "2019" # renvoie la chaîne de caractères '2019' dans la console
annee = int(annee) # renvoie le nombre 2019 dans la console
  • Convertir un entier en une chaîne de caractères str()

Exemple

exvar2c.py
annee = 2019 # renvoie le nombre 2019 dans la console
annee = str(annee) # renvoie la chaîne de caractères '2019'


  • float() : permet la transformation en flottant.


  • long() : transforme une valeur en long.
A faire
Le Javascript dispose actuellement de 7 types de données dont 6 sont dits primitifs:
  • Number (les nombres),
  • String (les chaînes de caractères),
  • Boolean (les booléens), Null (rien),
  • undefined (pas défini) et
  • Symbol (disponible depuis ES6),

plus le type

  • Object (Objet, peut contenir plusieurs variables de type différents).
A faire
A faire


1.4 Copie

Le contenu d'une variable var1 peut être placé dans une variable var2.
Exemple
exvar3.py
var2 = var1
A faire
A faire
A faire
A faire


1.5 Permutation

Une permutation consiste à intervertir les valeurs de deux variables
Python propose un moyen simple pour permuter deux variables (échanger leur valeur).

Exemple

exvar4.py
a = 5
b = 32
a,b = b,a # résultat a = 32, b = 5
A faire
A faire
A faire
A faire


1.6 Variable sans valeur

On peut réinitialiser une variable en l'affectant d'une valeur vide avec le mot None.


1.7 Portée

La portée d'une variable est la portion de code source où elle est accessible.
Pour connaître la portée d'une variable on utilise la règle LEGB :
Localement (variable déclarée dans une fonction)
Englobante (variable déclarée dans une fonction qui contient la fonction où elle est appelée)
Globalement (variable déclarée globalement)
Builtins (est une variable Built-in)
  • Espace local
Les variables définies dans un corps de fonction ou passées en paramètres sont seulement accessibles dans le corps de la fonction.

Exemple

*.py
# Espace local au programme
valext = 5 # variable connue dans et hors de la fonction
 
def func(valint): # ici valint <- valext, valint : variable connue seulement dans la fonction
    # Espace local à la fonction func
    valint = valint * 2
    # valext est connue de func bien que sa déclaration soit à l'extérieure
    print("Dans la fonction func, valext = ", valext)
    # REMARQUES
    # valint = valext * 2 est possible, mais déconseillé par les bonnes pratiques de programmation
    # valext = valext * 2 est INTERDIT, car on ne peut pas modifier une variable extérieure à l'espace local
    print("Dans la fonction func, valint * 2 = ", valint," car valint <- valext lors de l'appel")
    return valint
 
print("Avant l'appel de func, valext = ", valext)
valext = func(valext) # valext est connue de func bien que sa déclaration soit à l'extérieure
print("Après l'appel de func et l'opération valext = func(valext), valext = ", valext)
print(valint) # valint n'est pas connue à l'extérieure de func
 
# Résultat attendu
# Avant l'appel de func, valext =  5
# Dans la fonction func, valext = 5
# Dans la fonction func, valint * 2 =  10
# Après l'appel de func et l'opération valext = func(valext), valext =  10  car valint <- valext lors de l'appel
# Une exception s'est produite : NameError
# name 'valint' is not defined
Une fonction ne peut pas modifier la valeur d'une variable extérieure à son espace local par une affectation.
  • Variable globale
Pour modifier une variable extérieure à une fonction, on la qualifie de globale.

Exemple

*.py
# Espace local au programme
valext = 5 # variable connue dans et hors de la fonction
 
def func(): # ici valint <- valext, valint : variable connue seulement dans la fonction
    # Espace local à la fonction func
    global valext # A éviter sauf cas particulier
    return valext * 2
 
print("Après l'appel de func, valext = ", func())
A faire
A faire
A faire
A faire


2. Les opérateurs et les calculs

2.1 L'affectation

En algorithmique et en programmation informatique, une affectation, aussi appelée assignation (anglicisme), est une structure qui permet d'attribuer une valeur à une variable. Wikipédia

En algorithmique, on utilise le symbole flèche :

Exemple
variable ← 15

Les langages ci-dessous utilisent le signe = pour affecter une valeur à une variable.


2.2 Les opérateurs arithmétiques

Dans un algorithme, on écrira :
addition
+
soustraction
-
multiplication
* ou x
division euclid.
/
division entière
DIV
reste division
% ou mod
x puissance n
xn
etc.
En Python, on utilise :
- * pour la multiplication,
- ** pour la puissance,
- // pour la division entière et
- % pour le reste de la division.
  • Exemple sur des entiers
exvar5a.py
var1 = 5
var2 = 1
var3 = var1 + var2 # résultat var3 = 6


  • Exemple sur des flottants
- exvar5b.py
var1 = 5.2
var2 = 1.4
var3 = var1 + var2 # résultat var3 = 6.6


2.3 Les opérateurs booléens

Les variables booléennes prennent les valeurs VRAI et FAUX ou 1 et 0.
Dans un algorithme, on écrira :
Conjonction
ET
Disjonction
OU
Négation
NON
En Python, and est la conjonction, or la disjonction et not la négation.

Exemples

exvar6a.py
bool1, bool2 = True, False 
bool3, bool4 = 1, 0
bool5 = bool1 and bool2 # résultat : bool5 = False
bool5 = bool1 or bool2  # résultat : bool6 = True
bool7 = not(bool1)      # résultat : bool7 = False
bool8 = bool3 & bool4   # résultat : bool8 = 0


2.4 Les opérateurs de comparaison

Un opérateur de comparaison compare ses deux opérandes et renvoie un valeur booléenne correspondant au résultat de la comparaison (vraie ou fausse). Les opérandes peuvent être des nombres, des chaînes de caractères, des booléens ou des objets.


2.5 Les opérateurs de niveau bit

En logique, une opération bit à bit est un calcul manipulant les données directement au niveau des bits, selon une arithmétique booléenne. Elles sont utiles dès qu'il s'agit de manipuler les données à bas niveau : codages, couches basses du réseau (par exemple TCP/IP), cryptographie,etc. Wikipédia


ET
&
OU
|
NON
~
OU EXCLUSIF
^
Décalage à GAUCHE
«
Décalage à DROITE
»

Exemples

exvar6b.py
# 0b précise que le nombre qui suit est exprimé en binaire
var1 = 0b01010101    # résultat var1 = 85 en base 10
var2 = 0b10101010    # résultat var2 = 170 en base 10
var3 = var1 & var2   # résultat var3 = 0 en base 10, bin(var3) = 0b00000000
var4 = var1 | var2   # résultat var4 = 255 en base 10, bin(var4) = 0b11111111
var5 = ~var1         # résultat var5 = -86 en base 10 car l'ordinateur calcule en complément à 2 
                     # or 2**n + complément à 2 de x = x ici = = 8 donc 256-86 = 170 = 0b10101010 = var2
var6 = var1 ^ bool2  # résultat bin(var6) = 0b11111111
var7 = var1 << 1     # résultat var7 = 170 (décalage à gauche de 1 => multiplication entière par 2)
var8 = var2 >> 1     # résultat var8 = 85 (décalage à droite de 1 => division entière par 2)
  • Base 2, 10, 16

Par défaut, les nombres entiers saisis ou affichés sont en base 10.

Pour manipuler des séquences de bits, de longueur arbitraire on utilise 0b devant la valeur binaire ou 0x devant la valeur hexadécimale.La fonction bin(n) renvoie la valeur de n en binaire. La fonction hex(n) renvoie la valeur de n en hexadécimale. Ces fonctions renvoient des chaînes de caractères.

Exemples

exvar6c.py
bin(43)         # renvoie '0b101011'
bin(0xf4)       #         '0b11110100'
hex(43)         #         '0x2b'
hex(0b11110100) #         '0xf4'


Résumé