0% ont trouvé ce document utile (0 vote)
49 vues122 pages

Algo 24-25

Le cours INF1012 sur l'introduction à l'algorithmique vise à enseigner aux étudiants les bases de la résolution de problèmes à travers l'écriture d'algorithmes. Les compétences visées incluent la spécification de problèmes, la proposition d'algorithmes simples et leur vérification. Le cours couvre divers sujets tels que les variables, les structures conditionnelles, les boucles et la récursivité, avec une évaluation basée sur des contrôles continus, des travaux pratiques et un examen final.

Transféré par

liliantapigue17
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
49 vues122 pages

Algo 24-25

Le cours INF1012 sur l'introduction à l'algorithmique vise à enseigner aux étudiants les bases de la résolution de problèmes à travers l'écriture d'algorithmes. Les compétences visées incluent la spécification de problèmes, la proposition d'algorithmes simples et leur vérification. Le cours couvre divers sujets tels que les variables, les structures conditionnelles, les boucles et la récursivité, avec une évaluation basée sur des contrôles continus, des travaux pratiques et un examen final.

Transféré par

liliantapigue17
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Tél : (+237) 657 07 98 07

(+ 237) 651 36 96 96
B.P : 749 Yaoundé, Cameroun
Email : info@[Link]
[Link]

INF1012 Introduction à l’Algorithmique – INGE 1 FR

IDENTIFICATION
Intitulé : Introduction à l’algorithmique Cycle : ingénieur
Responsable : Branche : Tronc commun
Emmanuel MOUPOJOU [Link]@[Link] : 1
Autre intervenant : Semestre : 2
Cheikh KACFAH Crédits : 5
[Link]@[Link]

PRÉSENTATION GÉNÉRALE DU COURS

Objectifs du cours
Un algorithme est une suite finie d’instructions permettant de résoudre un problème donné.
L’ingénieur est appelé tout au long de sa vie à résoudre des problèmes, autrement dit à proposer
des algorithmes. Dans le cadre de ce cours, on va s’intéresser à des problèmes « simples » pour
lesquelles il faut proposer des algorithmes dans une représentation donnée. Cette représentation
est-elle que, plus tard, les algorithmes seront représentables dans un langage compréhensible par
les ordinateurs. L’objectif de ce cours est de vous donner les bases pour écrire vos premiers
algorithmes et donc des bases pour résoudre des problèmes simples et par conséquent des
fondations pour vos premiers programmes informatiques.

Prérequis nécessaires
Bases mathématiques (Logique, théorie des ensembles, etc.), Rigueur

COMPÉTENCES VISÉES

Au terme de ce cours, l’étudiant doit être capable:


• D’écrire les spécifications d’un problème ;
• De proposer des algorithmes pour la résolution de problèmes « simples » ;
• De dérouler correctement un algorithme « simple », dans le but de vérifier son (bon)
fonctionnement, de comprendre ce qu’il fait et comment il le fait ; et si nécessaire de
proposer un algorithme alternatif ou des corrections.

ORGANISATION DU COURS

Contenu global du cours


• Variables, Lecture et écriture
• Structures conditionnelles et un peu de Logique
• Procédures et Fonctions
• Boucles
Tél : (+237) 657 07 98 07
(+ 237) 651 36 96 96
B.P : 749 Yaoundé, Cameroun
Email : info@[Link]
• Tableaux unidimensionnels [Link]
• Tableaux multidimensionnels
• Algorithmes de Tri et de recherche
• Enregistrements
• Récursivité

Progression du cours

Cours magistral TP/ TD Volume horaire


Section 1 : Introduction - 2h

Section 2 : Problème et spécifications TD spécifications 4h

Section 3 : Variables 2h
Section 4 : Lecture et écriture TD lecture et écriture 4h
-
Section 5 : Structures conditionnelles TD Structures conditionnelles 6h

Section 6 : Boucles TD Boucles 8h


- TD Boucles et structures conditionnelles
Section 7 : Tableaux TD Tableaux, Boucles et structures 8h
conditionnelles
Section 8 : Procédures et fonctions TD Procédures, Fonctions, Tableaux, Boucles 8h
et structures conditionnelles
Révisions TD sur tous les éléments déjà vus en cours 6h

Section 9 : Tableaux multidimensionnels TD Procédures, Fonctions, Tableaux (uni et 6h


multidimensionnels), Boucles et structures
conditionnelles
Section 10 : Enregistrements TD Enregistrements, Procédures, Fonctions, 6h
- Tableaux (uni et multidimensionnels), Boucles
et structures conditionnelles
Révisions TD sur tous les éléments déjà vus en cours 6h
-
Section 11 : Introduction à la récursivité TD récursivité 6h
-
Révisions TD sur tous les éléments déjà vus en cours 6h

ÉVALUATION

Écrit, oral ou pratique Individuel ou en Pourcentage de


groupe l’évaluation globale
CC Écrit Individuel 30%
Participation en classe Oral Individuel 10%
TP Pratique Individuel 20%
Session normale Écrit Individuel 40%
Tél : (+237) 657 07 98 07
(+ 237) 651 36 96 96
B.P : 749 Yaoundé, Cameroun
Email : info@[Link]
MÉTHODOLOGIE DU COURS [Link]

• Le cours magistral se présente sous la forme de slides, avec une mise en forme importante,
plusieurs illustrations bien choisies pour expliciter les concepts présentés
• Les supports de cours sont remis après le cours aux étudiants
• Plusieurs séances d’exercices sont prévus et la participation très active de tous les étudiants
est fortement recommandée

MATÉRIELS DIDACTIQUES
Rien de particulier

LECTURE RECOMMANDÉE

• Sébastien ROHAUT, Algorithmique : Techniques fondamentales de programmation, Eni


édition, 2018.
• Laurent DEBRAUWER et Sébastien ROHAUT. Algorithmique : Maîtrisez les fondamentaux
de la programmation (avec des exemples en Java), Eni édition, 2009.
COURS D’ALGORITHMIQUE -
PREMIÈRE ANNÉE INGÉNIEUR
PROGRAMME
Emmanuel MOUPOJOU
[Link]@[Link]
ORGANISATION DU COURS

• Cours magistrau

• 2 à 4h par semain

• TD/T

• 2 à 4h par semaine
P

ÉVALUATIONS
• 2 Contrôles continus - 30

• Bonus et malus pour le travail quotidien en CM et


TD/TP 10

• Travaux pratiques: 20

• Une note d’examen: 40%


%

PROGRAMME
• Introduction à l’algorithmiqu

• Les Variables, Lecture et écritur

• Les Structures conditionnelles et un peu de Logiqu

• Procédures et Fonction

• Les Boucle

• Les Tableau

• Un peu de tri, Un peu de recherch

• Tableaux Multidimensionnel

• Enregistrements
s

INTRODUCTION À
L’ALGORITHMIQUE
Emmanuel Moupojou
[Link]@[Link]

ALGORITHMIQUE, KESAKO ?
• Algorithmique:

• « Méthode permettant de résoudre un problème de manière systématique

• « Suite d’instructions, qui une fois exécutée correctement, conduit à un résultat donné

• Conséquences

• Si l’algorithme est ‘’juste’’, le résultat est le résultat voul

• La manière étant systématique, un algorithme ne doit demander aucune initiative à celui ou celle qui
l’exécut

• Un algorithme doit donc contenir uniquement des instructions compréhensibles par celui qui devra
l’exécute
✅ Bonne nouvelle: un ordinateur
n’est capable d'aucune initiative
• Aucune ambiguïté n’est permise

2
e

QUELQUES EXEMPLES
D’ALGORITHMES
• Le calcul de la moyenne de n nombre

• Le classement de m élèves en fonction de leurs note

• Le calcul de l’itinéraire entre deux lieux a et b

• Une recette de cuisine pour réaliser un plat de Ndole


crevettes pour x personnes

3
s

NOMBRES, MOTS & ALGO


Les relations entre les trois
• À la base il y a des « briques » qui servent à construire tous les éléments
• nombres: chiffres >>> opération
• mots: lettres (alphabet) >>> text
• algorithme: instructions >>> blocs d’instructions (complexes

En algorithmique on a 4 familles d’instructions


• Affectation de variable
• Lecture / écritur
• Test
• Boucles
4
s

OUTILS POUR BIEN FAIRE


L’ALGORITHMIQUE
La maitrise de l’algorithmique requiert entre autres

• Une certaine intuition: aucun memento ne vous dira comment obtenir le résultat
voulu. Là intervient une forme « d’intelligence » requise pour l’algorithmique…
Cependant, sachez que les ré exes, cela s’acquiert; l’intuition n’est nalement que de
l’expérience tellement répétée que le raisonnement, au départ laborieux, nit par
devenir « spontané

• Méthode et rigueur: chaque série d’instructions (qu’on croit justes), doit être
systématiquement testée en se mettant à la place de la machine qui va les exécuter, de
sorte à véri er si le résultat obtenu est bien celui souhaité. Ceci doit parfois être fait
« bêtement »

5
fi
»

fl
:

fi
fi
ALGORITHMIQUE ET
PROGRAMMATION
• Programmation: processus de conception et de construction d'un ensemble
d’instructions exécutables par un ordinateur pour accomplir un résultat spéci que. Ce
processus se fait à l’aide d’un langage de programmation

• Le langage de programmation est le biais par lequel votre algorithme sera exécutabl

• Dans ce cours nous utiliserons le langage C

• Pourquoi l’algorithme si on peut écrire directement le programme

• L’algorithme exprime les instructions indépendamment (des particularités) des


langages

• L’algorithme permet de se consacrer à la structure logique de la tâche à réaliser;


structure qui sera plus tard traduite dans le langage de son choix

fi
CONVENTION D’ÉCRITURE DES
ALGORITHMES
• Historiquement, on a eu des organigrammes

• Ce n’est pas idéal pour de gros algorithmes et la structure de du


programme n’est pas aisée à ressorti

• Aujourd’hui c’est le « pseudo code » qui est largement répand

• Il ressemble à un langage de programmation mais n’est pas


conventionnel et ne s’embarrasse pas de syntaxe rigoureuse
7
r

RÉFÉRENCES
Ce cours est inspiré des cours suivant

• Pierre-Antoine Champin. Algorithmique. Copyright 2015-2019,


Département Informatique Doua - IUT Lyon 1. https://
[Link]/[Link]/enseignement/algo/
cours/[Link]

• Christophe Darmangeat. Algorithmique et programmation pour


non-matheux. cours est enseigné à l'Université Paris 7, dans
la spécialité PISE du Master MECI. [Link]
s

LA NOTION DE PROBLÈME E
ALGORITHMIQUE
Emmanuel Moupojou
[Link]@[Link]
C’EST QUOI LE PROBLÈME
AVEC « LE PROBLÈME »? 🤔
• Un algorithme décrit sans ambiguïté une méthode de résolution de problèm

• Autrement dit, l’algorithme s’attarde sur le « comment »

• Il convient d'être capable de décrire le problème à résoudre i.e. le « quoi » avec le moins d'ambiguïté possible

• Distinguons déjà deux types de problèmes

Encadrer le logarithme de 23 par deux Encadrer le logarithme d’un réel positif x


entiers consécutifs. par deux entiers consécutifs.

Mispa a dix beignets. Elle en donne trois à Mispa a n beignets. Elle en donne p à Toko.
Toko. Combien reste-t-il de beignets à Combien reste-t-il de beignets à Mispa
Mispa

Trouver un étudiant d’ing 1 qui a la Trouver un étudiant du niveau i qui a la


meilleure note en Algèbre meilleure note dans l’UE u
2
?

ALGORITHME ET PROBLÈMES
GÉNÉRAUX
• Les problèmes de gauche sont à solution unique, il suf t
de trouver la bonne répons

• Les solutions des problèmes de droite dépendent des


paramètres (x, n, p, i et u) dont aucune valeur n’est
fourni

• Un algorithme résolvant chacun de ces problèmes


devra fonctionner quelles que soient les valeurs prises
par les paramètres; en particulier il résoudra le
problème de gauche correspondant
3
e

fi
ALGORITHME ET CLASSES DE
PROBLÈMES
• On dit des problèmes « paramétriques » qu’ils sont plus généraux que les problèmes
de gauche, et que les problèmes de gauche sont plus spéci ques que ceux
paramétriques

• On dit également que les problèmes spéci ques sont des instances des problèmes
paramétriques. Parfois on quali e ces derniers de classes de problèmes (pour bien
faire ressortir le fait que le problème admet plusieurs instances)

• La généralisation d’un problème peut se faire à plusieurs niveaux. Exemple

• Encadrer le logarithme d'un nombre réel positif x par deux nombres distants de δ

• Mispa a n beignets. Elle en donne p à Toko, q à Kobo et en reçoit r de Mota.


Combien de beignets possèdent Mispa

• Pour chaque niveau et pour chaque UE, trouver l’étudiant qui a la meilleure/
pire note

4
.

fi
?

fi
fi
.

SPÉCIFICATIONS D’UN
PROBLÈME
Tout problème peut se décrire par un ensemble d'éléments de ces quatre types

• Paramètre d’entrée: paramètre qui caractérise une instance du problème ; en


d'autres termes, c'est un élément variable de l'énoncé du problème

• Pré-condition: condition que doivent véri er les paramètres d'entrée ; en dehors de


cette condition, le problème n'a pas de sens

• Paramètre de sortie: paramètre qui caractérise la solution à une instance du


problème ; en d'autre termes, c'est un élément de la réponse au problème

• Post-condition: une condition que doivent véri er les paramètres d'entrée et de


sortie ; en dehors de cette condition, la solution apportée au problème n'est pas
correcte.

5
.

fi
fi
.

SPÉCIFICATIONS D’UN
PROBLÈME - NOTATION
Par ailleurs
• On peut décrire toute instance du problème par un ensemble de valeurs pour les
paramètres d'entrée ;

• Toutjeu de valeur données aux paramètres d'entrée et véri ant les pré-conditions doit
correspondre à une instance du problème
On utilisera la notation suivante
• Entrée x: <type_de_x>
• Pré-condition: <expression de la pré-condition>
• Sortie y: <type_de_y>
• Post-condition: <expression de la post-condition>
6
:

fi
SPÉCIFICATIONS D’UN
PROBLÈME - EXEMPLE I
Encadrer le logarithme d’un réel positif x par deux entiers consécutifs
• Entrée x: réel
• Pré-condition: x>0
• Sortie borneInferieure: entier
• Sortie borneSuperieure: entier
• Post-condition: borneInferieure <= ln(x) < borneSuperieure
• Post-condition: borneSuperieure - borneInferieure = 1

7
SPÉCIFICATIONS D’UN
PROBLÈME - EXEMPLE II
Mispa a n beignets. Elle en donne p à Toko. Combien reste-t-il de
beignets à Mispa
• Entrée n: entier
• Entrée p: entier
• Pré-condition: 0 <= p <= n
• Sortie r: entier
• Post-condition: r >= 0
• Post-condition: p + r = n
8
?

SPÉCIFICATIONS D’UN
PROBLÈME - EXEMPLE III
Trouver un étudiant du niveau i qui a la meilleure note dans l’UE u
• Entrée i: entier
• Entrée u: uniteDEnseignement
• Pré-condition: u est une UE du niveau i
⚠ uniteDEnseignement et etudiant
• Sortie e: etudiant sont des types de données inconnus
de l’ordinateur…
• Post-condition: e est un étudiant du niveau i
• Post-condition: Pour tout étudiant e’ (≠ e) du niveau i, la
note de e’ dans l’UE u est inférieure ou égale à celle de e
9
IMPORTANCE ET LIMITES DE
LA SPÉCIFICATION
• La spéci cation est destinée à la personne qui écrira l’algorithme et
non à celui qui l’exécute (ordinateur)

• La spéci cation

• Sert à identi er les paramètres d'entrée et de sortie (indispensables pour un


algorithme

• Force à interpréter l'énoncé du problème et à se poser des questions sur les


ambiguïtés éventuelle

• Est un outil de communication, de négociation et de tests

• Les post-conditions sont cruciales: elles permettent de véri er si l'algorithme fournit des
solutions correctes ou no

• Bien rédigées, elles servent parfois de tremplin direct vers la solution


10
fi
fi
)

fi
:

fi
SPÉCIFICATIONS D’UN
PROBLÈME - EXERCICES
Proposer des spéci cations pour les problèmes suivants
• Trouver la norme d’un vecteur de coordonnées (a,b)
• Trouver le minimum de trois nombres a, b et c
• Trouver l’écart entre 2 températures t1 et t2
• Dire si oui ou non un habitant est concerné par les
perturbations liées aux travaux de la société
d’énergie
11
fi
DOSSIER ALGORITHMIQUE
C’est un document qui résume la démarche utilisée pour
proposer un algorithme. Il comporte 4 éléments
• Énoncé du problème: dire de façon concise en quoi consiste
le problèm
• Principe de résolution: dire comment sera résolu le
problèm
• Environnement: constituer d’éléments à manipuler pour
résoudre le problème pos
• Algorithme proprement dit
12
e

RÉFÉRENCES

Ce cours est inspiré du cour

• Pierre-Antoine Champin. Algorithmique. Copyright


2015-2019, Département Informatique Doua -
IUT Lyon 1. [Link]
[Link]/enseignement/algo/cours/
[Link] s

LES VARIABLES EN
ALGORITHMIQUE
Emmanuel Moupojou
[Link]@[Link]
À QUOI ÇA SERT?
• Dans un programme, on stocke très souvent des valeurs.
Ces dernières peuvent provenir: des lectures des saisies
des utilisateurs, des données stockées sur disque, ou
encore des résultats intermédiaires / dé nitifs des calcul

• Pour tous ces besoins de stockage, on utilise des variables.


C’est une sorte de rangement, référencé par une
étiquette, en quelque sorte, le nom de la variable. L’accès
au (contenu du) rangement se fait pas son étiquette
2

fi
DÉCLARATION DE VARIABLES
• L’utilisation d’une variable est conditionnée par sa déclaration

• Déclarer une variable c’est comme créer un rangement et lui coller une étiquette. La déclaration est
préalable à toutes les autres instructions de l’algorithme

• Le nom d’une variable (étiquette) obéit à quelques impératifs usuels. I

• Commence par une lettre et ne comporte que des lettres, chiffres ou des underscores

• Ne comporte pas d’espace, de signes de ponctuatio

• Ne doit pas être en con it avec un mot clé du langage

• Ne doit pas dépasser un certains nombres de caractères

• Avec le nom de la variable, il faut préciser son type, penser à ce que cela implique, manipulations
comprises

3
fl
n

TYPES DE DONNÉES USUELS


Les types de données usuels en algorithmique sont
• Entier: pour les entiers relatifs
• Réel

• Chaîne de caractères. La valeur d’une chaîne est représentée entre guillemets


(ou quotes). Ceci permet d’éviter des confusions: entre un nombre (ex: 20) et la
concaténation de caractères numériques (ex: ’’20’’) ou encore entre le nom d’une
variable et son conten

• Booléen: stocke uniquement les valeurs logiques VRAI (TRUE) ou FAUX (FALSE

Ces types élémentaires sont très souvent augmentés de types complexes tels que les
tableaux, les listes, les chiers

Par la suite on pourra créer nos propres types en fonction des problèmes à résoudre
4
u

fi
:

TYPES DE DONNÉES USUELS


(SUITE)
A chaque type de données correspond des opérations/
opérateurs de base Que vos opérations soient effectuées
sur des types corrects 🙏
• Entier et Réel: opérations arithmétiques* (addition,
soustraction, multiplication, division, exposant

• Caractère et Chaines de caractère:


concaténation (+

• Booléen: opérations logiques (ET, OU, NON)


5
)

L’AFFECTATION
Deux utilisations sont possibles pour une variabl

• Utiliser son contenu pour effectuer des opération

• Lui affecter (i.e. lui attribuer) une valeur. Ceci se rapproche de mettre un contenu/
objet dans notre emplacement étiquet

Notation

• nomVariable = valeur

• Dans la littérature, la notation nomVariable ← valeur est aussi très répandue

6
:

L’AFFECTATION (SUITE)
ALGORITHME Test_Affectation

VAR n : entier;
📝 Structure d’un algorithm
DEBUT 📝 Exécution d’un algorithme

1. n = 4; //Affecte la valeur 4 à la variable n (n vaut maintenant 4

2. n = 6 + 7 - 1; // Affecte la valeur de l’expression arithmétique 6 + 7 - 1 à la variable


n (n vaut maintenant 12

3. n = n / 2; // Affecte la valeur de l’expression arithmétique n/2 à la variable n (n vaut


maintenant 6). Dans cette instruction, on s’appuie sur la dernière valeur de n pour
calculer sa nouvelle valeu

FIN
7
)

L’AFFECTATION (SUITE)
ALGORITHME Test_Affectation

VAR n : entier;

VAR message: chaîne de caractère ;

DEBUT

1. n = 4; //Affecte la valeur 4 à la variable n (n vaut maintenant 4

2. message = "n vaut 4"; (message contient exactement le texte n vaut 4

3. n = n + 2; // Affecte la valeur de l’expression arithmétique n + 2 à la variable n (n vaut maintenant 6

4. message = "Bonjour à tous" ;

5. message = "Nouveau: n vaut" + n ; // message contient “Nouveau: n vaut6’’

6. message = message / 2 // Ceci ne va pas conserver dans message la moitié du message précédent…

FIN

8
)

L’AFFECTATION (FIN)
ALGORITHME Test_Affectation2

VAR mispa, shanks, message : chaîne de caractère;

VAR b : booléen;

DEBUT

1. mispa = "Dipanda" ;

2. shanks = "Shanks";

3. message = shanks + " est un personnage connu."; // message contient "Shanks est un personnage connu."

4. shanks = "mispa" ; // shanks contient "mispa"

5. message = shanks ; // message contient "mispa"

6. message = mispa ; // message contient ?

7. b = mispa != "mispa" ; // b contient ? Expliquer !!

FIN

9
!

⚠ ALERTE CONFUSION
• Une variable (x par exemple) contient à un moment donné une et une seule
valeur précis

• Lorsqu’on écrit y = x - 3, le matheux qui sommeille en vous ne doit pas


voir une équation (avec une in nité de solutions

• La notion de variable n’est pas synonyme d’inconnue mathématique

• Il ne faut pas confondre affectation et équatio

• En algorithmique, y = x (donner à y la valeur de x) n’est pas synonyme


de x = y (donner à x la valeur de y)

• Toujours garder à l’esprit, le sens de vos instructions ⚠


10
e

fi
n

RÉFÉRENCES

Ce cours est inspiré du cours ci-aprè

• Christophe Darmangeat. Algorithmique et


programmation pour non-matheux. cours est
enseigné à l'Université Paris 7, dans la spécialité
PISE du Master MECI. [Link]
[Link]

LECTURE ET ÉCRITURE
Emmanuel Moupojou
[Link]@[Link]
CONTEXTE
• Au chapitre sur la notion de problème en algorithmique, nous avons présenté la
notion de spéci cations d’un problème. Cela nous a permis d’introduire les
paramètres (d’entrée et de sortie) du problèm

• On peut se poser la question: comment est-ce qu’on fournira au programme


des valeurs de paramètres pour résoudre une instance de problème

• Dans un second temps, les algorithmes effectuent des traitements dont les
résultats sont stockés dans des variable

• Autre question: comment l’utilisateur fait-il pour connaître à un moment


donné les contenus de ces variables?

2
fi
s

LECTURE? ÉCRITURE?
• Le problème posé précédemment est donc celui de la
communication entre le monde extérieur (à l’algorithme) et
l’algorithm

• Il faut d’une part que le monde extérieur soit capable de fournir


des données à l’algorithme 🖥 ⬅; on parle alors de lecture

• Et d’autres part que l’algorithme soit à même de délivrer des


informations au monde extérieur 🖥 ➡; on parle dans ce cas
d’écriture
3
e

QUI LIT / ÉCRIT QUOI? 🤔


• Lecture: qui lit quoi

• Qui: l’algorithme (ou le programme) | Quoi: des données fournies par l'utilisateu

• ⚠ Ce n’est donc pas l’utilisateur qui lit. Le référentiel ici c’est le programme. L’utilisateur
écrit et le programme lit. On parle donc de lecture, sous entendu du programme

• Écriture: qui écrit quoi

• Qui: l’algorithme (ou le programme) | Quoi: un message pour l’utilisateu

• ⚠ Ce n’est donc pas l’utilisateur qui écrit. Le référentiel ici reste le programme. Le
programme écrit et l’utilisateur lit. On parle donc d’écriture, sous entendu du
programme

4
?

NOTATION ET ILLUSTRATION
ALGORITHME Lecture_Ecriture

VAR r, rSquared : réel;

VAR message : chaîne de caractère ;

DEBUT

1. Écrire("Cet algorithme permet de calculer le carré d’un nombre") ;

2. Écrire("Entrer le nombre dont vous voulez le carré: ");

3. Lire(r) ;

4. rSquared = r x r ;

5. message = "Le carré de " + r + " est " + rSquared ;

6. Écrire(message) ; // Et si on avait marqué Écrire("message") ; ?!?

7. Fin

5
RÉFÉRENCES

Ce cours est inspiré du cours ci-aprè

• Christophe Darmangeat. Algorithmique et


programmation pour non-matheux. cours est
enseigné à l'Université Paris 7, dans la spécialité
PISE du Master MECI. [Link]
[Link]

STRUCTURES
CONDITIONNELLES
Emmanuel Moupojou
[Link]@[Link]
CONTEXTE
• Jusqu’ici, tous les algorithmes que nous avons écrits présentent une structure séquentielle simple
dans laquelle on exécute systématiquement toutes les instructions, les unes après les autre

1. ALGORITHME Racine_Carree

2. Var x, squareRoot : réel ;


3. Début
4. Écrire("Entrer le nombre dont vous voulez calculer la racine carrée: ");
5. Lire(x) ;
6. squareRoot = x ^ 0.5 ;
7. Écrire("La racine carrée de " + x + " est " + squareRoot) ;
8. Fin
• Or, il peut arriver que les pré-conditions ou la résolution du problème proprement dite, impose
de devoir exécuter uniquement certaines instructions et/ou en ignorer d’autres

2
CONTEXTE (SUITE)
• Par exemple, dans le cas du problème du calcul de la racine carrée, les
instructions aux lignes 5 et 6 ne sont valables que pour des réels positif

• Pour un problème comme celui de la désignation de la parité d’un entier,


on est obligé de d’exécuter tel groupe d’instructions ou tel autre selon
que l’entier est un multiple de 2 ou no

• Nous remarquons que pour leur bon déroulement, certains problèmes


exigent d’examiner la véracité (ou non) de certaines conditions, et ce
n’est qu’après cet examen qu’on saura quelles sont les instructions
adéquates à exécuter
3
n

SYNTAXE
• On distingue deux formes possibles pour une expression conditionnelle (a.k.a
test ou encore alternative)

Si condition Alors Si condition Alors


BlocInstructions BlocInstructions1
FinSi Sinon
BlocInstructions2
FinSi
• Importan

• Condition désigne une valeur booléenne (atomique) ou une expression complexe combinant
plusieurs booléens à l’aide d’opérateurs logiques (ET, OU, NON). Par dé nition, sa valeur est soit
VRAI, soit FAUX

• Les blocs d’instructions peuvent contenir des expressions conditionnelles. Autrement dit, les
structures conditionnelles peuvent être imbriquées.
4
t

fi
EXEMPLE I
1. ALGORITHME Racine_Carree2

2. VAR x, squareRoot : réel ;

3. DEBUT

4. Écrire("Entrer le nombre dont vous voulez connaître la racine carrée: ");

5. Lire(x) ;

6. SI x >= 0 Alors

7. squareRoot = x ^ 0.5 ;

8. Écrire("La racine carrée de " + x + " est " + squareRoot) ;

9. SINON

10. Écrire("La racine carrée est dé nie uniquement pour les réels positifs") ;

11. FINSI

12. FIN

5
fi
EXEMPLE 2
1. ALGORITHME parite

2. VAR n: entier ;

3. DEBUT

4. Écrire("Entrer le nombre dont vous voulez connaître la parité: ");

5. Lire(n) ;

6. SI (n % 2) == 0 Alors

7. Écrire("Le nombre " + n + " est pair") ;

8. SINON

9. Écrire("Le nombre " + n + " est impair ») ;

10. FINSI

11. FIN

6
CONDITION
• La condition peut être

• Atomiqu

• Dans ce cas c’est soit une valeur (VRAI ou FAUX), soit


une variable de type booléen, soit une comparaison

• Une expression booléenn

• Les termes (et expressions) qui composent une expression


booléenne sont combinés à partir d’opérateurs logiques

7
e

CONDITION / COMPARAISON
• Le schéma d’une comparaison est : valeur1 opérateur valeur2. L’opérateur peut êtr
• égal à… ==
⚠ val1 op1 val2 op2 val3
• différent de… != (parfois <> n’est pas valable…

• strictement plus petit que… <


• strictement plus grand que… >
• plus petit ou égal à… <=
• plus grand ou égal à… >=
• Notons qu
• On ne peut comparer que des éléments de même typ
• On peut comparer les chaînes de caractères entre elles

8
e

CONDITION / EXPRESSIONS COMPOSÉES


• Dans certains cas on ne peut pas exprimer la condition par une simple valeur booléenne ou une
unique comparaison. Exemple comment diriez vous que la variable age doit être comprise entre 25
et 35? Ou encore qu’il faut que la taille soit supérieure à 170 et le poids inférieur à 75

• Dans ces cas vous n’avez pas d’autres choix que de combiner plusieurs expressions. Ces combinaisons
se font à l’aide d’opérateurs logiques (parfois on y ajoute XOR)

• ET (AND). Pour que condition1 ET condition2 soit VRAI, il faut que condition1 = condition2
= VRAI. Si l’une des deux conditions vaut FAUX alors condition1 ET condition2 vaut FAUX

• OU (OR). Pour que condition1 OU condition2 vaille VRAI, il faut qu’au moins l’une des
conditions vaille VRAI. Si les deux conditions valent FAUX alors condition1 OU condition2 vaut
FAUX

• NON (NOT). Contrairement aux opérateurs précédents, cet opérateur ne nécessite qu’un
opérande. Pour que NON condition vaille VRAI, il faut que condition vaille FAUX. Ainsi le NON
« inverse la condition ».

9
.

CONDITION / EXPRESSIONS COMPOSÉES


• Le fonctionnement des opérateurs logiques est souvent résumé dans les
tables de vérité

C1 ET C2 C2 VRAI C2 FAUX C1 OU C2 C2 VRAI C2 FAUX


C1 VRAI VRAI FAUX C1 VRAI VRAI VRAI
C1 FAUX FAUX FAUX C1 FAUX VRAI FAUX

NON C C1 XOR C2 C2 VRAI C2 FAUX


C VRAI FAUX C1 VRAI FAUX VRAI
C FAUX VRAI C1 FAUX VRAI FAUX

10
⚠ PRÉCISIONS INUTILES

• Attention aux conditions

• …Qui sont toujours fausses ou toujours vraies

11

STRUCTURES CONDITIONNELLES IMBRIQUÉES


Il y a des cas où, même à l’intérieur d’une structure conditionnelle on peut encore
avoir besoin de faire des traitements alternatifs. Il faudra ainsi imbriquer les
structures conditionnelles… Ceci est illustré par cet exemple
1. ALGORITHME Decision_UE
2. VAR note : réel ;
3. DEBUT
📝 Prêtez attention à l’indentation
4. Écrire("Quelle est votre moyenne disciplinaire? ");
5. Lire(note) ;
6. SI note >= 9.0 ALORS
📝 Vous pouvez stocker les valeurs des
7. Écrire("Crédits obtenus!!!");
conditions dans des variables booléennes
8. SI note >= 10 ALORS
9. Écrire("La décision est CA") ;
10. SINON
11. Écrire("La décision est CANT. Si vous êtes déterminé, allez au rattrapage.");
12. FINSI
13. SINON
14. Écrire("La décision est NC ou EL. Bref vous allez au rattrapage; à moins que CPC…") ;
15. FINSI
16. FIN
12
STRUCTURES CONDITIONNELLES MULTIPLES
Pour éviter les multiples Si…sinon…si, on peut utiliser les structures
conditionnelles multiples. Ceci n’est possible qu’avec des variables discrètes
1. ALGORITHME Classe_Age
2. VAR âge : entier ; VAR message : chaîne de caractères ;
3. DEBUT
4. Écrire("Quelle est votre âge? ");
5. Lire(âge) ;
6. SELONQUE âge EST
7. CAS 0..20:
8. message = "Enfant" ;
9. CAS 21..52 :
10. message = "Adulte" ;
11. CAS 53..150 :
12. message = "Ancêtre" ;
13. AUTREMENT :
14. message = "Est-ce votre vrai âge?" ;
15. FINSELONQUE
16. Écrire(message);
17. FIN 13
RÉFÉRENCES

Ce cours est inspiré du cours ci-aprè

• Christophe Darmangeat. Algorithmique et


programmation pour non-matheux. cours est
enseigné à l'Université Paris 7, dans la spécialité
PISE du Master MECI. [Link]
[Link]

BOUCLES (STRUCTURES
ITÉRATIVES)
Emmanuel Moupojou
[Link]@[Link]
CONTEXTE
• Jusqu’ici nous avons écrit des algorithmes dans lesquels chaque instruction est
exécutée au plus une fois

1. soit pas du tout si elle est exclue par « l’échec » du test d’une structure
conditionnell

2. soit exactement une fois si elle est en dehors de toute condition ou si elle
est incluse par « la réussite » du test d’une structure conditionnell

• Or, il peut arriver que nous ayons besoin d’exécuter un bloc d’instructions un certain
nombre de fois ou aussi longtemps qu’une condition demeure vraie. C’est dans ce
cas que les structures itératives (ou boucles) prennent toute leur importance

2
e

BOUCLES : DEFINITION
• Une boucle est une séquence d'instructions qui bien que spéci ée une seule
fois, pourra être exécutée plusieurs fois de suite. Le code "à l'intérieur" de la
boucle, c'est-à-dire le corps de la boucle, sera exécuté un certain nombre de
fois, ou une fois pour chaque élément d'une collection, ou aussi longtemps
qu’une certaine condition demeure vraie, ou indé niment

• Note: Une boucle in nie est une suite d’instructions qui s’exécute
continuellement (une fois entrer dans la boucle, on n’en ressort pas

• En général, une boucle in nie résulte d'une erreur de programmation. Les


utilisations intentionnelles des boucles in nies incluent les programmes censés
fonctionner en continu, tels que les démonstrations de produits ou la
programmation de systèmes embarqués.
3
fi
fi
fi
fi
.

fi
)

TYPES DE BOUCLES
• Les deux principales boucles en algorithmique sont:

• Boucle Tant que : permet d’exécuter un même bloc d’instructions 🔁


jusqu’à une condition d’arrêt (ou aussi longtemps qu’un critère est
respecté

• Boucle Pour : permet de d’exécuter une même suite d’instructions 🔁


un certain nombre de fois (qu’on peut déterminer

• Le passage dans une boucle est appelé itération

4
)

BOUCLE TANT QUE


• Tant que (while): structure de contrôle permettant d'exécuter un bloc
d'instructions de façon répétée sur la base d'une condition booléenne.

• Le nombre d’itérations à effectuer n’est pas nécessairement connu,


mais à chaque itération on véri e la véracité de la condition. Dès
qu’elle est fausse, on sort de la boucle

• La boucle tant que peut être considérée comme une répétition


de l'instruction if ⚠ S’assurer que les itérations modi ent la condition de boucl
Si la condition demeure éternellement vraie, la boucle est in nie

• Propriété: À la sortie de la boucle, la condition de boucle est


fausse
5
.

fi
fi
fi
e

BOUCLE TANT QUE: SYNTAXE

Instructions_avant_boucle
TANTQUE condition FAIRE
Instructions_de_boucle
FINTANTQUE
Instructions_après_boucle

6
BOUCLE TANT QUE: EXEMPLE
1. ALGORITHME NombreC
2. VAR n, nombre : entier ;
3. DEBUT
4. Lire(n) ;
5. nombre = 1 ;
6. TANTQUE n >= 10 FAIRE
7. nombre = nombre + 1 ;
8. n = n / 10 ;
9. FINTANTQUE
10. Écrire(nombre);
Que fait cet algorithme? 🤔
11. FIN

7
BOUCLE POUR
• Pour (for): permet de répéter une instruction un nombre donné
de fois

• On connait à l’avance le nombre d’itérations que l’on va


devoir effectue

• Ce type de boucle s’appuie nécessairement sur un ensemble


dénombrable
⚠ S’assurer que l’itérateur varie dans l’intervalle souhaité

• Propriété: A chaque instant, on connait le nombre d’itérations


déjà effectuées (et donc le nombre d’itérations restantes)
8

BOUCLE POUR: SYNTAXE


Instructions_avant_boucle
Pour iterateur allant de initial à nal par pas de valPas faire

Instructions_de_boucle

FinPour
Instructions_après_boucle

⚠ Attention à ne pas modi er la valeur de


l’itérateur dans la boucle

📝 Ceci illustre le cas par défaut, lorsque initial ≥


nal (et donc valPas ≥ 0). Il est possible de se
déplacer « à reculons » avec un pas négatif.

9
fi
fi
fi
BOUCLE POUR: EXEMPLE
1. ALGORITHME SommeDeXXX

2. VAR n, i, s : entier ;

3. DEBUT

4. s = 0;

5. Lire(n) ;

6. POUR i allant de 1 à n par pas de 2 FAIRE

7. s=s+i*i;

8. FINPOUR

9. Écrire(s); Que fait cet algorithme? 🤔


10. FIN

10
POUR VS TANT QUE
• Tant Que est employée dans les situations où l’on doit procéder à un traitement
systématique sur les éléments d’un ensemble dont on ne connaît pas d’avance la
quantité, comme par exemple

• le contrôle d’une saisi

• la gestion des tours d’un jeu (tant que la partie n’est pas nie, on recommence

• la lecture des enregistrements dont le nombre est inconnue, etc

• Pour est utilisée dans les situations où l’on doit procéder à un traitement
systématique sur les éléments d’un ensemble dont on connaît d’avance la quantité

• On peut toujours traduire une boucle Pour en boucle Tant Que. L’inverse est faux

11
e

fi
.

BOUCLES IMBRIQUÉES ET +

De même que nous pouvons imbriquer les structures


conditionnelles, nous pouvons aussi

• Avoir une boucle dans une boucl

• Avoir une structure conditionnelle dans une boucl

• Avoir une boucle dans une structure conditionnelle

Bref tout peut être dans tout… et inversement 😶


12
e

⚠ PRÉCISIONS INUTILES

• Attention aux boucles

• … in nies (on n’en sort jamais

• …inutilisables (on n’y rentre jamais)

13
fi

RÉFÉRENCES

Ce cours est inspiré du cours ci-aprè

• Christophe Darmangeat. Algorithmique et


programmation pour non-matheux. cours est
enseigné à l'Université Paris 7, dans la spécialité
PISE du Master MECI. [Link]
[Link]

TABLEAUX
Emmanuel Moupojou
[Link]@[Link]
CONTEXTE: WHY ARRAYS?
• Rendu à ce stade, toutes les variables que nous manipulons sont (de types)
atomiques: entier, réel, chaîne de caractères, boolée

• Ainsi, si nous savons par exemple que nous allons manipuler 60 notes de
mathématiques et 60 notes de physique, il nous faut déclarer et manipuler 60
variables pour les notes de maths et 60 autres pour celles de physique. Cela est
fastidieux !!

• Pour manipuler ces ensembles de variables de même type, on peut faire appel à
des « collections » qui nous permettront de signi er des éléments tels que:
L’ensemble des notes de mathématiques, la 12ème note de mathématiques ou
encore le nombre de notes de physiques, etc. Tout cela sans avoir à déclarer
(explicitement) des dizaines voire des milliers de variables…
2
!

fi
n

DÉFINITION
• Un tableau est un ensemble de valeurs de même type; chaque valeur
étant repérée par un indice

• Pour la personne qui écrit l’algorithme, le tableau est donc comme une
seule (macro-) variabl

• Mais une variable que l’on peut décomposer en sous variables


atomiques; ces dernières étant manipulables (individuellement)
comme des variables traditionnelles. En effet, chaque élément du
tableau est accessible via son indice (i.e. sa position dans le tableau)

3
e

NOTATION
• Déclaratio

• Var nomVariable : tableau de <taille> <type> ;

• Accès à l’élément d’indice i du tableau monTableau

• monTableau[i]

• En général, la numérotation des éléments dans un tableau à


n éléments va de 1 à n ou de 0 à n-1. Nous adopterons la
convention 0 à n-1.
4
n

INDICE DE TABLEAU
• L’indice d’un tableau à n élément

• A pour valeur minimale 0

• A pour valeur maximale n-1

• Est toujours un entier

• Lorsqu’on déclare un tableau de 9 éléments, leurs indices vont donc de 0 à 8.

Combien d’entiers y a-t-il entre p et q? 🤔

5
s

EXEMPLE 1
1. VAR i : entier ; moy : réel;

2. VAR notes : tableau de 60 réel;

3. DEBUT

4. POUR i allant de 0 à 59 par pas de 1 FAIRE

5. Lire(notes[i]);

6. FINPOUR

7. notes[2] = notes[2] + 1.5; //Le 3e étudiant a un bonus

8. moy = 0.0 ;

9. POUR i allant de 0 à 59 par pas de 1 FAIRE

10. moy = moy + notes[i] ;

11. FINPOUR

12. moy = moy / 60.0 ;

13. Écrire (“La moyenne de la classe en mathématiques est de: “ + moy) ;

14. FIN
6
EXEMPLE 1I
1. VAR compteur, i : entier ;

2. VAR seuil : réel ;

3. VAR notes : tableau de 25 réel ;

4. DEBUT

5. Écrire (“Entrer la note recherchée“) ;

6. Lire (seuil);

7. compteur = 0 ;

8. //Initialisation de notes

9. POUR i allant de 0 à longueur(notes) - 1 par pas de 1 FAIRE

10. SI (notes[i] >= seuil) ALORS


📝 La fonction longueur() renvoie la taille du tableau
11. compteur = compteur + 1 ;

12. FINSI

13. FINPOUR

14. Écrire (“Il y a “ + compteur + “ élève(s) qui ont une note supérieure ou égale à “+ seuil);

15. FIN
7
⚠ PRÉCISIONS INUTILES
• Toujours s’assurer que

• l’indice d’accès à un élément du tableau (lorsqu’il est


une variable ou une expression arithmétique) est
toujours dans l’intervalle [0, n-1] où n** est la
longueur du tablea

• On initialise un tableau avant de l’utiliser (ceci est


valable pour toute variable d’ailleurs)

8
u

RÉFÉRENCES

Ce cours est inspiré du cours ci-aprè

• Christophe Darmangeat. Algorithmique et


programmation pour non-matheux. cours est
enseigné à l'Université Paris 7, dans la spécialité
PISE du Master MECI. [Link]
[Link]

TABLEAUX
MULTIDIMENSIONNELS
Emmanuel Moupojou
[Link]@[Link]
CONTEXTE
Imaginez que vous deviez écrire un programme dans lequel l’ordinateur joue au Songo (a.k.a Awalé)
contre un humain… Vous êtes obligé de savoir à tout moment le nombre de « billes » que contient
chaque trou

Vous pouvez numéroter les trous de 1 à n et donc modéliser le « tableau » de jeu par un tableau de
taille n. Et donc chaque fois que les joueurs font des actions vous devez faire les calculs (i.e. être cohérent
avec votre numérotation - logique) qu’il faut pour savoir dans quel trou ils ont pris ou ajouter des billes

4
2 3
1

1 3
Vous êtes libre de numéroter
comme vous le voulez. De la
façon rouge, ou grise ou …
2 4

2
.

CONTEXTE (SUITE)
Si pour le Songo faire correspondre la numérotation aux possibilités de déplacements des billes est
plutôt aisé, pour le cas du damier (a.k.a jeu de dames) cela est déjà plus dif cile. La gure ci-dessous
nous montre les possibilités de déplacements d’un pion blanc en position (i,j). Elles sont au nombre de
4 et toutes de la forme (i±1, j±1). Il faut donc déjà être capable de retrouver ces 4 positions à partir
de la position du pion en question (ici le pion est en position numéro 17). Imaginer ce qui cela dévient
lorsque le pion est un chef et où les possibilités sont de la forme (i±k, j±k)

Maintenant imaginez ce travail pour le jeu d'échec dont les déplacements sont plus complexes/divers…

1 2 3 4 5
Le pion blanc en position (i, j) peut se
6 déplacer suivant les positions (i-1, j-1), (i-1,
11 13
j+1), (i+1, j-1) et (i+1, j+1).
⚠ Les nombres oranges sont une proposition
i de numérotation
21 23

fi

fi
DÉFINITION
• Les tableaux multidimensionnels ont été introduits pour éviter de faire
des numérotations qui peuvent vite devenir dif cile à gérer

• En effet, ils permettent (entre autres) de représenter les artéfacts qui


sont « naturellement » ou « conceptuellement » sous la forme de matrice
ou de grille par des tableaux à indices multiples

• Autrement dit, grâce aux tableaux multidimensionnels, on pourra


« repérer » un élément par ses « coordonnées » (i, j) et non par
un entier k qui représente le numéro de la cellule (i,j) (dans une
numérotation que vous avez proposé)

⚠ La dimension n’est pas limitée à 2… On peut donc avoir un tableau de dimension n 🤨


4
fi
NOTATION
• Déclaratio

• Var nomVariable : tableau de [<taille1>] [<taille2>] … [<taillen>]


<type> ;

• Accès à l’élément d’indice i1, i2, …, in du tableau monTableau

• monTableau[i1][i2]…[in]

• Suivant chaque dimension du tableau, les indices des éléments vont


respectivement de 0 à taille1-1 , de 0 à taille2-1, …, 0 à taillen-1.

5
n

EXEMPLE 1: MOYENNE I
1. Var nCols, nLignes, i, j : entier ; Var moyenne: réel;
2. Var temperatures : tableau de [50] [100] réel ;
3. Début
4. nLignes = dimension(temperatures, 1) ;
5. nCols = dimension(temperatures, 2) ;
6. moyenne = 0.0;
7. Pour i allant de 0 à nLignes - 1 par pas de 1 faire
8. Pour j allant de 0 à nCols - 1 par pas de 1 faire
9. Écrire(“Entrer la température de la zone (“ + i + “, “ + j + “)“ );
10. Lire(temperatures[i][j]);
11. moyenne = moyenne + temperatures[i][j] ;
12. FinPour // j
13. FinPour // i
14. moyenne = moyenne / (nCols x nLignes) ;
15. Écrire (“La moyenne de vos températures est de: “ + moyenne) ;
16. Fin

6
EXEMPLE 1: MOYENNE II
• dimension(T, d) est une fonction prédé nie qui retourne la taille du tableau T
suivant la dimension d

• Prêtez bien attention aux boucles imbriquées

• Faites bien attention à la façon dont on accède à l’élément en position (i,j) du


tableau → temperatures[i][j]

• Le nombre d’éléments dans un tableau à deux dimensions est le produit de la


taille suivant chaque dimension i.e. nombre de lignes × nombre de colonnes

⚠ « Lignes » et « Colonnes » sont conventionnelles. Généralement, en 2


dimensions, la ligne est la première dimension et la colonne la seconde.
7
fi
EXEMPLE 1I : MINIMUM
1. Fonction temperatureMinimale(températures : tableau de [n][m] réel):réel
2. Var i, j : entier ; Var min : réel;
3. DébutFonction
4. min = +∞;

5. Pour i allant de 0 à n - 1 par pas de 1 faire


6. Pour j allant de 0 à m - 1 par pas de 1 faire
7. Si températures[i][j] < min Alors
8. min = températures[i][j];
9. FinSi
10. FinPour
11. FinPour
12. Retourner min ;
13. FinFonction
8
⚠ PRÉCISIONS INUTILES

• Toujours s’assurer que

• les indices d’accès à un élément sont dans les intervalles


requis et sont utilisés convenablement pour l’accès aux
éléments du tablea

• On initialise un tableau avant de l’utiliser (ceci est


valable pour toute variable d’ailleurs)

9
u

RÉFÉRENCES

Ce cours est inspiré du cours ci-aprè

• Christophe Darmangeat. Algorithmique et


programmation pour non-matheux. cours est
enseigné à l'Université Paris 7, dans la spécialité
PISE du Master MECI. [Link]
[Link]

PROCÉDURES ET FONCTIONS
Emmanuel Moupojou
[Link]@[Link]
CONTEXTE
• Il arrive parfois que l’on ai

• Un bloc d’instructions que l’on a besoin d’exécuter assez souvent et/ou à plusieurs
endroits dans notre programme. Par exemple: le contrôle de saisi, les instructions de
connexion/déconnexion

• Un ensemble d’instructions que l’on aimerait mettre à disposition d’autres


programmeurs où pour soit même dans d’autres programmes. Par exemple des
instructions de tri d’une liste, le calcul de la racine n-ième d’un rée

• Besoin de découper son programme en blocs qui réalisent des tâches bien précise

• Les procédures et fonctions nous aident à atteindre ces buts

2
t

…À PARTIR D’EXEMPLES I…
1. …

2. Écrire( “Avez-vous déjà redoublé?“);

3. redoublement = ““ ;

4. TantQue redoublement != “Oui“ ET redoublement != “Non“ Faire

5. Écrire(“Entrer Oui ou Non“) ;

6. Lire(redoublement);
Que remarquez-vous? 🤔
7. FinTantQue

8. Écrire( “Avez-vous obtenu une note égale à 10.00 au baccalauréat?“);

9. moyenneLimite = ““ ;

10. TantQue moyenneLimite != “Oui“ ET moyenneLimite != “Non“ Faire

11. Écrire(“Entrer Oui ou Non“) ;

12. Lire(moyenneLimite);

13. FinTantQue

14. …
3
…À PARTIR D’EXEMPLES II…
• Il y a répétitio

• En effet, les instructions permettant la véri cation de la validité de la


réponse (qui ne peut prendre que l’une des deux valeurs Oui ou Non et
rien d’autre) quelle que soit la question sont très semblable

• On pourrait donc

• « factoriser » ce programme en mettant dans un même bloc les


instructions de véri catio

• Faire appel à ce bloc d’instructions chaque fois qu’on veut véri er la validité
de la réponse et obtenir après l’exécution de ce bloc d’instructions une
réponse valide (soit Oui, soit Non dans notre exemple)
4
n

fi
n

fi
s

fi
…À PARTIR D’EXEMPLES III…
1. Fonction ReponseParOuiOuNon() : chaîne de caractère
2. Var reponse : chaîne de caractère ;

3. DébutFonction
4. reponse = ““ ;

5. TantQue reponse != “Oui“ ET reponse != “Non“ Faire

6. Écrire(“Entrer Oui ou Non“) ;

7. Lire(reponse);

8. FinTantQue

9. Retourner reponse ;

10. FinFonction

📝La fonction peut être ainsi appelée


1. Écrire( “Avez-vous déjà redoublé?“);

2. redoublement = ReponseParOuiOuNon() ;
3. Écrire( “Avez-vous obtenu une note égale à 10.00 au baccalauréat?“);

4. moyenneLimite = ReponseParOuiOuNon() ;
5
PARAMÈTRES
• Avez-vous remarquez les parenthèses - vides - devant le nom de la fonction

• Elles servent à distinguer une fonction d’autres éléments (variables, mots clés, etc.)

• Elles permettent aussi de signaler que la fonction (de l’exemple) n’a pas de
« paramètres » (aussi appelés arguments)

• Les paramètres sont des données extérieures à la fonction et qui détermineront le


fonctionnement et/ou le résultat de cette fonctio

• Elles sont similaires aux variables des fonctions mathématiques. Exemples log(x), pgcd(a,
b), min(a1, a2, a3, a4), etc

• Les fonctions peuvent donc avoir aucun, un ou plusieurs paramètre

• Un paramètre est déclaré à l’aide de son nom et de son type (même contrainte qu’une
variable algorithmique)
6
.

PARAMÈTRES: EXEMPLES I
1. Fonction ReponseParOuiOuNon(question : chaîne de caractère) : chaîne de caractère
2. Var reponse : chaîne de caractère ;

3. DébutFonction
4. Écrire(question);

5. reponse = ““ ;

6. TantQue reponse != “Oui“ ET reponse != “Non“ Faire

7. Écrire(“Entrer Oui ou Non“) ;

8. Lire(reponse);

9. FinTantQue

10. Retourner reponse ;

11. FinFonction

7
PARAMÈTRES: EXEMPLES II
⚠ Bien observer le passage de paramètres!!! 👀

1. redoublement = ReponseParOuiOuNon(“Avez-vous déjà redoublé?“) ;


2. suivant = “Avez-vous obtenu une note égale à 10.00 au baccalauréat?“ ;

3. moyenneLimite = ReponseParOuiOuNon(suivant) ;

8
PARAMÈTRES: EXEMPLES III
⚠ Bien observer le passage de paramètres!!! 👀

1. Fonction factoriel(n : entier): entier

2. Var i, f : entier;

3. DebutFonction

4. SI (n == 0) ALORS

5. Retourner 1;

6. FINSI
1. ALGORITHME appel_factoriel
7. f = 1;
2. VAR a : entier;
8. POUR i allant de 1 à n par pas de 1 FAIRE
3. DEBUT
9. f = f * i;
4. a = factoriel(4) ;
10. FINPOUR
5. Écrire("result is " + a);
11. Retourner f;
6. Écrire("result is " + factoriel(4));
12. FinFonction
7. FIN
9
RÉSUMÉ: SYNTAXE DES FONCTIONS…
• Commence par le mot clé Fonction

• Comporte un type de retour

• Peuvent avoir 0, 1 ou plusieurs paramètres (ou arguments

• Chacun ayant un nom et un typ

• Comporte une partie déclaratio

• Le corps de la fonction est entre DébutFonction et FinFonction

• Comporte toujours une ou des instructions de retours de valeurs; et au nal la fonction ne retourne
qu’une et une seule valeu

• Le programme appelant la fonction affecte la valeur de retour à une variable

Exemples où une fonction peut comporter plusieurs instructions de retour? 🤔

10
r

fi
…ET DES PROCÉDURES
• Commence par le mot clé Procédure

• Comporte toujours une ou des instructions de retours de valeur

• Comporte un type de retou

• Peuvent avoir 0, 1 ou plusieurs paramètres (ou arguments

• Chacun ayant un nom et un typ

• Comporte une partie déclaratio

• Le corps de la procédure est entre DébutProcédure et FinProcédure

• La procédure est simplement appelée par le programme appelant

📝 Voilà les différences entre procédures et fonctions


😌
11
r

PASSAGE DE PARAMÈTRES
• Dans les exemples actuels:

• le programme appelant appelle les procédures/fonctions en


leur passant des valeur

• Une fonction retourne une (seule) valeur au programme


appelant et une procédure ne peut rien communiquer au
programme appelan

• Or nous pouvons avoir besoin que le travail effectué au sein


d’une procédure ou d’une fonction soit « répercuter » au sein du
programme appelant
12
t

PASSAGE DE PARAMÈTRES : PAR VALEUR


ET PAR ADRESSE
On distingue deux modes de passage de paramètre

• Passage par valeur: Dans ce cas on fournit uniquement des valeurs à la


procédure. Les changements éventuels de ces valeurs à l’intérieur de la
procédure ne sont pas connus du / propagés au programme appelant
#LimitéMaisSécurisé

• Passage par adresse: Dans ce cas on fournit l’adresse (a.k.a référence)


des paramètres à la procédure. La procédure a donc accès à
l’emplacement mémoire et donc aux contenus i.e. aux valeurs de ces
emplacements. Tout changement de ces valeurs à l’intérieur de la
procédure sont répercutés au programme appelant
#PratiqueMaisDélicat
13

PASSAGE DE PARAMÈTRES : EXEMPLES I


1. Fonction Min(a : réel par valeur, b : réel par valeur) : réel

2. DébutFonction
3. Si a <= b Alors
📝 Par défaut, le passage se fait par valeur
4. Retourner a ;

5. Sinon

6. Retourner b ; 1. Procédure Ordre(a : réel par adresse, b : réel par adresse)

7. FinSi 2. Var temp : réel ;

3. DébutProcédure
8. FinFonction
4. Si b < a Alors
5. temp = a ;
6. a=b;
7. b = temp ;
8. FinSi
9. #Sinon, a et b sont dans le bon ordre

10. FinProcédure

14
PASSAGE DE PARAMÈTRES : EXEMPLES II
1. ALGORITHM exemple_paramètres
2. VAR x, d, min: réel;
3. DEBUT
4. c = 11.0;
5. d = 4.0;
6. min = Min(c, d);
7. Écrire(“le minimum de “ + c + “ et “ + d + “ est “ + min);
8. Ordre(c, d);
9. Écrire(“Dans l’ordre croissant on a “ + c + “ puis “ + d);
10. Écrire(“le maximum de “ + c + “ et “ + d + “ est “ + d);
11. FIN
15
PASSAGE DE PARAMÈTRES : EXEMPLES III
1. Fonction fonction_carree(x : réel par valeur) : réel

2. DébutFonction
3. Retourner x * x ;

4. FinFonction

x = 3;
p = fonction_carree(x);

1. Procédure procedure_carree(x : réel par valeur, x_2 : réel par adresse, x_3 : réel par adresse):
2. DébutProcédure
3. x_2 = x * x ;
4. x_3 = x_2 * x ;

5. FinProcédure
x = 3;
p2 = 0; p3 = 0;
procedure_carree(x, p2, p3); //Après cet appel, p2 contient x2 soit 9 et p3 contient x3 soit 27

16
⚠ PRÉCISIONS TRÈS IMPORTANTES
• Lors de l’appel à une procédure ou une fonction, faire attention
à la signature de celle-ci

• Nom exact de la procédure/fonctio

• Nombre, Type, Ordre et Sémantique (sens) des paramètre

• Au type de retour (si c’est une fonction

• N’utilisez pas les instructions de lecture et d’écriture pour


demander à l’utilisateur les valeurs des paramètres de la
procédure ou fonction
17
:

RÉFÉRENCES

Ce cours est inspiré du cours ci-aprè

• Christophe Darmangeat. Algorithmique et


programmation pour non-matheux. cours est
enseigné à l'Université Paris 7, dans la spécialité
PISE du Master MECI. [Link]
[Link]

ENREGISTREMENTS
Emmanuel Moupojou
[Link]@[Link]
CONTEXTE: WHY RECORDS?
• Rendu à ce stade, toutes les variables que nous manipulons sont (de types) atomiques
(entier, réel, chaîne de caractères, booléen) ou des tableaux de données de types
atomique

• Cependant, tous ces types sont prédé nis. Ils existent et nous ne faisons que les
utiliser tels quel

• Ainsi, il n’est pas possible avec ces types de représente

• Un nombre complexe (partie réelle, partie imaginaire, module, etc.

• Un étudiant (nom, prénom, date de naissance, matricule, classe, etc.

• Une unité d’enseignement (code, libellé, crédits, etc.)


2
s

fi
r

DÉFINITION
• Un enregistrement est un type de données dé ni par l’utilisateur et qui permet de
grouper un nombre ni d’éléments, de types éventuellement différents (alphabétique,
numérique, logique, etc.) sous un nom commun

• Tableau: permet de représenter une collection d’éléments d’un seul et même type ≠
Enregistrement: permet de combiner en un nouveau type des éléments pouvant être
de types différents les uns des autres

• Les éléments qui composent un enregistrement sont appelés champs

• Avant de déclarer une variable de type enregistrement, il faut avoir au préalable dé nit
convenablement ce type

• Le type d’un enregistrement est aussi appelé type structuré

3
fi
.

fi
.

fi
DÉCLARATION
Exemple
Type nomDuType : Enregistrement
Algoritme gestionUniversite
nomChamp_1 : typeChamp_1, //Pas de ;
nomChamp_2 : typeChamp_2,
Type Étudiant : Enregistrement
… nom : chaîne de caractère,
nomChamp_N : typeChamp_N prenom : chaîne de caractère,
Fin Enregistrement ; redoublant : booléen,
moyenneBac : réel
Fin Enregistrement ;

Var i, n : entier ;

📝 On dé nit le type dans la Var mispa : Étudiant ;


partie déclaration
Début

Fin

4
fi
REMARQUES
• Les champs d’un enregistrement peuvent être de n’importe quel
type et donc en plus des types usuels, ils peuvent être des
tableaux* ou … de type enregistrement

• Aucune opération élémentaire n’est dé nie sur un type enregistremen

• Aucune fonction prédé nie n’est applicable sur un type enregistremen

• ⚠Les seules opérations sur une variable de type enregistrement


sont l’affectation dans la variable ou dans ses champs et
l’utilisation de la valeur des champs dans diverses expressions⚠

5
fi
fi
ACCÈS AUX CHAMPS
• On accède à un champ d’un enregistrement grâce à son nom et via l’opérateur “ .

• Ainsi on accèdera au champ champ_N de la variable de type enregistrement


var_enregistrement par l’instructio

.
var_enregistrement champ_N

• Impossible d’accéder au champ sans passer la variable de type enregistrement

• On peut effectuer sur ou avec un champ, toutes les opérations autorisées par le
type de ce champ. ⚠ N’oubliez pas que le champ peut être de type
enregistrement ⚠🤨

6
n

ACCÈS AUX CHAMPS: EXEMPLE I


1. Type Complexe : Enregistrement
partie_réelle : réel,
partie_imaginaire : réel,
module : réel
Fin Enregistrement ;

2. Var z: Complexe ;

3. Début

4. Écrire ("Entrer la partie réelle du nombre complexe ") ;


📝 On peut effectuer sur ou avec un
5. Lire (z.partie_reelle); champ, toutes les opérations
autorisées par le type de ce champ
6. Écrire (" Entrer la partie imaginaire du nombre complexe ") ;

7. Lire (z.partie_imaginaire);

8. [Link] = z.partie_réelle*z.partie_réelle + z.partie_imaginaire*z.partie_imaginaire ;

9. [Link] = racine_carrée([Link]) ;

10. Écrire(“Le module de votre nombre complexe est “ + [Link]) ;

11. Fin
7
ACCÈS AUX CHAMPS: EXEMPLE II
1. Type Étudiant : Enregistrement
nom : chaîne de caractère,
redoublant : chaîne de caractère,
moyenne : réel
Fin Enregistrement ;

2. Var etu : Étudiant ;

3. Début

4. Écrire (“Entrer le nom de l’étudiant“) ;

5. Lire ([Link]);

6. Écrire (“Est-il redoublant? OUI ou NON“) ;

7. Lire ([Link]);

8. Écrire (“Quelle est sa moyenne nale?“) ;

9. Lire ([Link]);

10. Si [Link] >= 10.0 Alors Écrire([Link] + “ a réussi “) ;

11. Sinon Écrire([Link] + “ va redoubler, si autorisé “);

12. FinSi

13. Fin
8
fi
⚠ PRÉCISIONS INUTILES
Faites attention à ce que vous manipuler… Faites ce qui est permis par la nature de ce que
vous manipule

1. Étant donné une variable, par exemple thing, determiner son type

2. Est-ce que thing est une variable atomique (réel, entier, booléen, chaine de caractère)?
Si c’est le cas alors vous savez vous en servir. #FI

3. Est-ce que thing est un tableau? Si c’est le cas, alors utilisez un indice pour accéder à
l’élément de thing que vous voulez manipuler (exemple thing[i]) et suivez le même
questionnement pour cette nouvelle variable. 📝 Commencez à l’étape1 ci-dessus

4. Est-ce que thing est une variable d’un type enregistrement? Dans ce cas, accéder au
champ de thing que vous voulez manipuler (par exemple [Link] eld) et suivez
le même questionnement pour cette nouvelle variable. 📝 Commencez à l’étape1 ci-
dessus

9
z

fi
.

EXEMPLE
1. Type Enseignant : Enregistrement
nom : chaine de caractère
Fin Enregistrement ;

2. Type Etudiant : Enregistrement


nom : chaine de caractère,
groupeTD : tableau de 4 Etudiant,
enseignantResponsable : Enseignant
Fin Enregistrement ;

3. Var etu, camarade: Etudiant ; Var ens:Enseignant;


4. Début
5. [Link] = "Bona";
6. [Link] = "Mispa";
7. [Link] = "Manu";
8. [Link] = ens; // [Link] = "Bona";
9. [Link][0] = camarade;
10. [Link][0].groupeTD[0] = etu; //(camarade*) Que fait cette instruction?
11. Fin
10
RÉFÉRENCES

Ce cours est inspiré du cours ci-aprè

• Algorithmique: les enregistrements. http://


[Link]/

Vous aimerez peut-être aussi