Les fondamentaux de la programmation
13/06/2025
Ce diaporama de formation a été rédigé dans le but d’être le support visuel des formations dispensées au MASA.
Cette formation s’adresse à des agents souhaitant découvrir l’écriture de syntaxe avec R sans toutefois avoir déjà écrit des programmes dans d’autres langages.
La formation est donnée en distancielle sur une durée d’une journée.
Objectifs par cette formation
Ce support permet de :
Connaître les principes fondamentaux de la programmation
Avoir les pré-requis nécessaires à la formation « Initiation à la programmation R »
Pour information, les thêmes abordés sont:
Algorithmes et programmes
Les variables : nommage et typage
Les différentes instructions : affectation, lecture, écriture ….
Les tests de conditionnalité
Les fonctions : utilité, arguments, résultats
Ils sont orientés pour être utile aux agents du SSM Agriculture et se concentrent sur une utilisation de R via RStudio qui est mise à disposition des agents sur la plateforme interne Cerise basée sur RStudio Workbench.
ANALYSER Comprendre les besoins du client.
Dossier d’analyse
Cahier des charges
CONCEVOIR Identifier tout ce qui va être utile pour répondre au besoin du client. => Algorithmique
REALISER Implémenter la solution choisie pour répondre au besoin du client. => Programmation
Analogie avec la littérature dans le cadre d’un livre traduit en plusieurs langues
L’écrivain réalise l’algorithme (imagination du récit, choix des personnages, découpage en chapitres….) et écrit le programme dans une langue donnée
Les traducteurs transposent l’œuvre de l’écrivain dans d’autres langues en essayant d’être le plus fidèles possibles à l’histoire et aux émotions qu’il a voulu transmettre.
Choix du nom de l’algorithme
Déclaration des variables manipulées
Initialisation des variables et liste des instructions
Plusieurs variantes correctes du bloc d’instructions existent.
Le choix des instructions tient compte de plusieurs facteurs :
optimisation,
lisibilité et compréhension,
possibilité de traduction dans plusieurs langages différents ….
Le pool d’instructions disponibles peut être lié au langage de programmation mais aussi à la communauté de développeurs (librairies mises à disposition….).
Exercices 1 à 3 (manipulation des instructions)
Si la valeur de la variable n’est pas modifiable dans le temps, le terme de constante peut être utilisé.
<nom_variable> : <nom_type>
Initialisation : donner une valeur initiale à une variable
Affectation/assignation : donner une valeur à une variable à tout moment. La nouvelle valeur affectée à une variable écrase l’ancienne valeur.
<nom_variable> <- <valeur>
Exercices 4 (manipulation d’une variable)
Il est possible de ventiler la catégorie « Numérique » en 2 catégories distinctes :
Les entiers
Les réels
La famille des « dates » peut également être considérée comme un type de base pour les variables.
Pour les numériques : toutes les opérations mathématiques classiques
+ : addition
- : soustraction
* : multiplication
/ : division
Pour les chaînes de caractères :
Chaque langage de programmation décline ces types de base en plus ou moins de types de données propres. Le type choisi au moment de l’écriture du programme aura un impact sur l’allocation mémoire qui sera faite pour le stockage de la variable mais aussi sur la liste des fonctions utilisables.
Exercices 5 (manipulation de variables de types différents)
NULL
(1/2)Le mot clé NULL
est utilisé pour indiquer que la valeur d’une variable est inconnue.
Remarque :
Pour des numériques : NULL
est différent de 0
Pour des chaines de caractères : NULL
est différent de « »
Pour des booléens : NULL
est différent de FAUX
Des opérations simples peuvent entraîner des erreurs (plantages) si des variables ne sont pas valorisées.
Exemple : addition de 2 numériques dont l’un a pour valeur NULL
.
NULL
(2/2)Pour éviter ce type d’erreur :
Initialiser le plus souvent possible les variables en début de programme
Si le langage le permet, utiliser la notion de valeur par défaut lors de la déclaration des variables
Si le langage le permet, utiliser une fonction permettant de remplacer toutes les valeurs NULL par une valeur passée en paramètre
Dans certains cas, une valeur vide peut être significative. Un mot clé spécifique au langage est utilisé.
Dans ce cas, la notion de « non applicable » ou « valeur indéfinie » est souvent employée.
Un tableau est une variable qui peut contenir plusieurs valeurs simultanément.
Un tableau se présente comme une structure organisée sous forme de cellules ou cases qui peuvent être identifiées par un indice ou index.
Selon les langages de programmation, certaines règles peuvent différer :
Un tableau peut ne contenir que des variables du même type
La valeur de l’indice débute à 0 ou à 1
Un tableau peut avoir 1 ou plusieurs dimensions.
1 dimension : vecteur ou liste
Plusieurs dimensions : matrice ou tableau multi-dimensionnel
Les tableaux les plus fréquemment exploités au MASA sont des tables de données.
Une colonne ne peut contenir que des valeurs de même type.
Colonne = variable = vecteur
Toutes les colonnes possèdent le même nombre de valeurs. Un nom peut être attribué à chaque colonne. Ce nom de colonne peut être utilisé pour accéder à la valeur de la cellule.
Une ligne contient les valeurs observées pour chaque variable pour un élément donné. Ligne = observation = occurrence = élément
Les indices ou index de lignes et de colonnes débutent à 1.
|
Analogie avec Excel :
La condition exprimée dans un bloc SI peut correspondre à toute expression pouvant être valorisée par VRAI ou FAUX.
Cette expression peut être unitaire ou combinée par des opérateurs logiques (ET et OU). Les parenthèses sont utilisées pour encadrer les différentes conditions et gérer les priorités.
Exemples de conditions courantes :
est égal à , différent de, supérieur, inférieur ….
contient, commence par …
est vide, existe …
Exemples de conditions combinées :
Condition A ou Condition B
(Condition A et Condition B) ou Condition C
La valeur d’une condition combinée dépend des valeurs de chaque condition unitaire utilisée, des opérateurs logiques et des priorités données par les parenthèses.
« Pour que la condition combinée soit vraie, au moins une des 2 conditions doit être vraie ».
« Pour que la condition combinée soit vraie, les 2 conditions doivent être vraies »
En l’absence de parenthèses, l’opérateur ET est prioritaire sur l’opérateur OU.
« Pour que la condition combinée soit vraie, au moins une des 2 conditions mais pas les 2 doit être vraie ».
Illustration fonctionnelle :
Cas d’un menu proposant une formule « Plat + entrée ou dessert » à 20€
Si le client prend un plat et une entrée, il peut bénéficier de la formule
Si le client prend un plat et un dessert, il peut bénéficier de la formule
Si le client prend un plat, une entrée et un dessert, il ne peut pas bénéficier de la formule.
Exercices 6 (valorisation d’une condition)
SELON < valeur de la variable testée > FAIRE
CAS < liste 1 de valeurs > : < liste d’instructions >
CAS < liste 2 de valeurs > : < liste d’instructions > ….
CAS < liste N de valeurs > : < liste d’instructions >
AUTREMENT : < liste d’instructions >
FIN SELON
La liste de valeurs peut contenir une seule valeur, une suite de valeurs séparées par des virgules et/ou un intervalle de valeurs.
Exercices 7 et 8 (utilisation du test SELON)
Une boucle permet de répéter plusieurs fois un bloc d’instructions.
3 types de boucles coexistent :
Boucle « POUR » : elle est utilisée lorsque le nombre de répétitions est connu à l’avance
Boucle « TANT QUE » : elle est utilisée lorsque le nombre de répétitions n’est pas connu à l’avance et permet de répéter l’exécution du bloc d’instructions tant que la condition de bouclage est respectée
Boucle « REPETER » ou « FAIRE TANT QUE » : variante de la boucle « TANT QUE » où le bloc d’instructions est exécuté avant le test de la bouclage.
Il est obligatoire de s’assurer que la condition de bouclage deviendra FAUSSE à un moment donné pour provoquer l’arrêt de l’exécution du bloc d’instructions. Dans le cas contraire, le programme ne s’arrêtera jamais (boucle infinie).
POUR <variable>
ALLANT DE <debut>
A <fin>
FAIRE < liste d’instructions >
FIN POUR
Illustration :
Boucle permettant d’afficher le libellé des 12 mois de l’année.
TANT QUE
FAIRE < liste d’instructions >
FIN TANT QUE
Illustration :
Boucle permettant d’afficher le libellé des 12 mois de l’année.
VARIABLES :
indice_boucle : ENTIER
libelle_mois : CHAINE de CARACTERES
DEBUT
Indice_boucle <- 1
TANT QUE indice_boucle <= 12
FAIRE
libelle_mois <- donne_libelle_du_mois(indice_boucle)
Afficher libelle_mois
indice_boucle <- indice_boucle + 1
FIN TANT QUE
FIN
REPETER
< liste d’instructions >
JUSQU’À
FIN REPETER
Illustration :
Boucle permettant d’afficher le libellé des 12 mois de l’année.
Une fonction correspond à un regroupement d’instructions dans le but de réaliser une action précise et qui a vocation à être réutilisé.
Chaque langage de programmation propose un pool de fonctions de base plus ou moins riche qui peuvent être regroupées ou non dans des librairies.
Tout développeur peut utiliser des fonctions déjà écrites ou créer des fonctions personnalisées pour des traitements répondant à ses besoins.
Une fonction :
Possède un nom
Peut nécessiter des données en entrée (paramètres)
Peut fournir une valeur en retour (paramètre de sortie ou résultat)
Toutes ces informations sont mentionnées dans la 1er ligne du script qui se nomme la signature.
Plusieurs fonctions portant le même nom peuvent coexister. Dans la majorité des cas, elles possèdent des signatures différentes.
Exemple :
La fonction isNull(<variable>
) qui retourne un booléen. Cette fonction a été implémentée dans de nombreux langages pour des paramètres d’entrée de plusieurs types (entier, chaines de caractères ….)
FONCTION <type du résultat> <nom de la fonction> (<type du param1>
<nom du param1, …)
< liste d’instructions >
RETOURNER <valeur du résultat>
FIN
Une fonction est dite récursive lorsqu’elle s’appelle elle-même. Dans ce cas, son code doit forcément comprendre une condition d’arrêt.
L’utilisation de fonctions permet souvent de décomposer un traitement complexe en plusieurs traitements plus simples. La compréhension et la maintenance des programmes sont alors facilitées.
Toute fonction doit être documentée pour permettre sa réutilisation ultérieure. En général, l’espace de développement donne la possibilité d’accéder à la description de la fonction et éventuellement à des exemples d’utilisation. Les sites web de communautés de développeurs sont aussi très riches en informations.
Avant de se lancer dans l’écriture d’une fonction, il faut au préalable rechercher si elle n’existe pas déjà.
Objectif : charger le contenu d’un fichier de données dans un tableau manipulable dans l’environnement de traitement des données.
Exemples :
- charger dans CERISE le contenu d’un fichier CSV
- ouvrir un fichier Excel
Paramètres possibles :
- emplacement et nom du fichier
- encodage du fichier (UTF8, ASCII…)
- présence d’entêtes avec le nom des variables/colonnes
- type de certaines variables/colonnes
- nom de la variable de type tableau initialisée avec les données chargées
Objectif : conserver uniquement certaines variables/colonnes d’un tableau de données afin de se concentrer sur les informations utiles ou pertinentes.
Paramètres nécessaires :
- nom du tableau concerné
- nom ou numéro d’ordre des variables/colonnes sélectionnées
Remarques :
- l’opération de sélection de variables/colonnes n’influence pas le nombre de lignes du tableau
- la réduction du volume des données induite par cette opération améliore la performance des traitements
- certains langages, dont R, permettent de préciser les colonnes à enlever au lieu de celles à conserver (« sélectionner toutes les colonnes sauf»)
Objectif : modifier les noms des variables/colonnes d’un tableau afin de les rendre plus compréhensibles, clairs, homogènes ou adaptés à l’analyse.
Paramètres nécessaires :
- nom du tableau concerné
- nom ou numéro d’ordre de la variable/colonne à modifier
- nouveau nom de la variable/colonne
Remarques :
- certains environnements de traitement des données ou langages peuvent être restrictifs pour les intitulés de variables/colonnes (présence de caractères spéciaux ou d’accents, nombre de caractères, mots-clés interdits …)
- certaines structures adoptent des règles de nommage communes pour faciliter la compréhension et la maintenance de leurs projets ou traitements. Si elles existent, elles doivent être respectées.
Objectif : conserver uniquement certaines lignes d’un tableau de données en fonction d’un critère défini afin de se concentrer sur les informations utiles ou pertinentes.
Paramètres nécessaires :
- nom du tableau concerné
- critère de filtre reposant sur une ou plusieurs variables/colonnes du tableau
Remarques :
- l’opération de filtrage des données n’influence pas le nombre de variables/colonnes du tableau
- la réduction du volume des données induite par cette opération améliore la performance des traitements
Objectif : classer les données d’un tableau selon les valeurs d’une ou plusieurs variables/colonnes.
Paramètres nécessaires :
- nom du tableau concerné
- nom des variables/colonnes utilisées pour le classement
- ordre de tri
Remarques : - si plusieurs variables/colonnes sont impliquées dans un tri, l’ordre de tri peut être différent pour chacune d’elles
- tous les langages ne traitent pas de la même manière les valeurs vides.
Objectif : compléter les informations d’un tableau en ajoutant une variable/colonne nécessaire à l’analyse.
Paramètres nécessaires :
- nom du tableau concerné
- nom de la nouvelle variable/colonne
- type de la nouvelle variable/colonne
- règle d’initialisation des valeurs de la nouvelle variable/colonne
Remarque :
- les règles d’initialisation des valeurs peuvent être simples (une seule valeur pour toutes les lignes) ou plus complexes (calcul à partir des données de plusieurs variables/colonnes, valeurs différentes selon des conditions définies …)
Objectif : compléter les informations d’un tableau en l’associant à un autre par rapprochement des valeurs présentes dans des variables/colonnes communes.
Paramètres nécessaires :
- nom des 2 tableaux concernés
- nom des variables/colonnes utilisées pour le rapprochement
- type de jointure souhaitée
Remarques :
- les types de jointure possibles définissent le devenir des lignes du tableau qui sont présentes dans un tableau mais pas dans l’autre.
Objectif : regrouper des lignes d’un tableau selon une ou plusieurs variables/colonnes afin de calculer des valeurs agrégées pour chacun des groupes.
Paramètres nécessaires :
- nom du tableau concerné
- nom des variables/colonnes utilisées pour le regroupement
- type d’agrégat souhaité (comptage, somme, moyenne, pourcentage, minimum, maximum …)
Exemples :
- à partir d’un tableau de parcelles (département, commune, référence cadastrale, superficie), calculer la superficie moyenne d’une parcelle pour chaque commune
- à partir d’un tableau de personnes (nom, prénom, date de naissance), calculer le nombre de personnes selon leur tranche d’âge
Objectif : identifier les lignes répétées dans un tableau de données et choisir le traitement adéquat pour l’analyse.
Paramètres nécessaires :
- nom du tableau concerné
- nom des variables/colonnes utilisées pour la recherche des doublons
Remarque :
- plusieurs lignes d’un tableau peuvent être qualifiées de doublons même si la totalité des variables/données ne sont pas identiques
Ex : dans une liste de personnes (n°INSEE, nom, prénom, lieu de naissance), plusieurs lignes référençant le même numéro INSEE peuvent être considérées comme doublons car cette variable/colonne est identifiante (1 numéro est attribué à un seul individu) et unique pour une personne (un individu ne possède qu’un seul numéro).
Objectif : assembler plusieurs tableaux de données
- par ajout de lignes (si les tableaux possèdent les même variables/colonnes)
- par ajout de colonnes sans rapprochement des données (si les tableaux possèdent les mêmes objets en ligne)
Paramètres nécessaires :
- nom des tableaux concernés
- type de concaténation (ajout de lignes ou ajout de colonnes)
Remarque :
- la concaténation de tables par ajout de colonnes ne doit pas être confondue avec un appariement. Les données des tableaux ne font pas l’objet de rapprochement selon des variables/colonnes communes.
Objectif : modifier la structure d’un tableau de façon à présenter :
- en lignes des données qui étaient présentes en variables/colonnes
- en variables/colonnes des données qui étaient présentes en lignes
Exemple issu de la formation R du MASA :
Exercice 9 et 10 (manipulation des tableaux)