Les fondamentaux de la programmation
03/03/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
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
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à.
Exercice 9-10-11 (tableaux, boucles, tests et fonctions)