Formation au Ministère de l’Agriculture

Les fondamentaux de la programmation

SSP/DEMESIS

13/06/2025

Sommaire

  • 1 Algorithmique et Programmation
  • 2 Variables et Types
  • 3 Les Tests
  • 4 Les Boucles
  • 5 Les Fonctions
  • 6 Principales opérations sur les données et/ou tableaux

0.1 Avant-propos


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.

0.2 Avant-propos

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.

1 Algorithmique et Programmation

1.1 Etapes de développement d’un logiciel ou programme

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

  • Documents de spécifications détaillées

REALISER Implémenter la solution choisie pour répondre au besoin du client. => Programmation

  • Programmes prêts à exécuter

1.2 Définitions

  • Représentatif d’une logique
  • Indépendant de tout langage de programmation
  • Inexploitable en l’état par un ordinateur
  • Compréhensible par tous
  • Suite d’instructions ou d’étapes
  • Plusieurs représentations : schémas, texte (pseudo-code)
  • Traduction d’un algorithme dans un langage de programmation spécifique (lignes de code)
  • Exécutable par le système

1.3 Analogie

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.

1.4 Structure d’un algorithme en pseudo-code

  • Choix du nom de l’algorithme

  • Déclaration des variables manipulées

  • Initialisation des variables et liste des instructions

1.5 Structure d’un algorithme en pseudo-code

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)

2 Variables et Types

2.1 Définitions

  • Une variable est un symbole qui porte un nom et qui contient une valeur d’un type donné.

Si la valeur de la variable n’est pas modifiable dans le temps, le terme de constante peut être utilisé.

  • Déclaration : indiquer l’existence d’une variable et préciser son type

<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)

2.2 Principaux types

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.

2.3 Opérations possibles

Pour les numériques : toutes les opérations mathématiques classiques

  • + : addition

  • - : soustraction

  • * : multiplication

  • / : division

Pour les chaînes de caractères :

  • + : concaténation (assembler des caractères à la suite des autres)

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)

2.4 La valeur 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.

2.5 La valeur 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.

2.6 Les tableaux

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

2.7 Les tableaux

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.

3 Les Tests

3.1 La condition - “SI”

  • La condition est une expression booléenne qui ne peut avoir que 2 valeurs possibles : VRAI ou FAUX.

  • Le bloc d’instructions SINON est facultatif.

  • Plusieurs conditions SI peuvent être imbriquées.

Analogie avec Excel :

3.2 La condition - “SI”

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

3.3 Exemples

3.4 Les opérateurs logiques



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.

3.5 L’opérateur “OU”

« Pour que la condition combinée soit vraie, au moins une des 2 conditions doit être vraie ».

3.6 L’opérateur “ET”

«  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.

3.7 L’opérateur “OU EXCLUSIF”

«  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)

3.8 Les Tests - “SELON”

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)

3.9 Exemples

4 Les Boucles

4.1 Définition

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).

4.2 Les boucles POUR

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.

VARIABLES :
    indice_boucle : ENTIER
    libelle_mois : CHAINE de CARACTERES
DEBUT
  POUR indice_boucle ALLANT DE 1 A 12
  FAIRE
      libelle_mois <- donne_libelle_du_mois(indice_boucle)
      Afficher libelle_mois
  FIN POUR
FIN

4.3 Les boucles TANT QUE

TANT QUE = VRAI

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

4.4 Les boucles REPETER

REPETER

< liste d’instructions >

JUSQU’À = VRAI

FIN REPETER

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
  REPETER
      libelle_mois <- donne_libelle_du_mois(indice_boucle)
      Afficher libelle_mois
      indice_boucle <- indice_boucle + 1
      JUSQU’À indice_boucle = 13
  FIN REPETER
FIN

5 Les Fonctions

5.1 Définition (1/2)

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)

5.2 Définition (2/2)

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 ….)

5.3 Syntaxe

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.

5.4 Usage

Avant de se lancer dans l’écriture d’une fonction, il faut au préalable rechercher si elle n’existe pas déjà.

6 Principales opérations sur les données et/ou tableaux

6.1 Importer des données à partir d’un fichier

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

6.2 Sélectionner des variables/colonnes

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»)

6.3 Renommer des variables/colonnes

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.

6.4 Filtrer des donné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

6.5 Trier des données

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.

6.6 Enrichir les données par ajout d’une variable/colonne

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 …)

6.7 Enrichir les données par jointure/appariement

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.

6.8 Agréger les données

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

6.9 Gérer des doublons

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).

6.10 Concaténer des tables

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.

6.11 Transposer une table

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)