variantes
Compteur <- 0;
boucle
afficher "Bonjour";
Compteur <- Compteur + 1;
si (Compteur vaut 100) sortie ;
fboucle
Compteur <- 0;
boucle
si (Compteur vaut 100) sortie ;
afficher "Bonjour";
Compteur <- Compteur + 1;
fboucle
1
variantes
tant_que (Compteur ne_vaut_pas 100)
faire
afficher "Bonjour";
Compteur <- Compteur + 1;
ffaire
jusqua (Compteur vaut 100)
faire
afficher "Bonjour";
Compteur <- Compteur + 1;
ffaire
repeter
afficher "Bonjour";
Compteur <- Compteur + 1;
jusqua (Compteur vaut 100)
2
Premier algorithme formalisé
Boucle à compteur
afficher 100 fois "Bonjour"
pour les valeurs successives d’un compteur variant de 1 à 100
faire
afficher "Bonjour" ;
faire
avantages
formaliser l'écriture
pas de déclaration
pour (i variant de 1 a 100)
faire pas d'initialisation
pas d'incrémentation
afficher "Bonjour" ;
pas de test d'arrêt
ffaire
visibles ! 3
Autre type de boucle
dite « boucle ForEach »
pour (chaque element dans collection)
faire
Traitement de l’element;
ffaire
la "collection" peut être une liste, un tableau, ...
Exemple
pour (chaque fichier dans repertoire_courant)
faire
Imprimer le fichier;
ffaire 4
types simples
identificateur
booleen
valeurs
vrai faux
opérations (opérateurs booléens) produisent un booleen
ET OU NON OUX
declarer ToBe : booleen;
declarer NotToBe : booleen;
declarer Question : booleen;
...
ToBe <- faux;
NotToBe <- NON ToBe; // vrai
Question <- ToBe OU NotToBe; // toujours vrai!
5
types simples
identificateur
booleen
valeurs
vrai faux
opérations (opérateurs booléens) produisent un booleen
ET OU NON OUX
opérations (d'identité) produisent un booleen
vaut ne_vaut_pas
si (ToBe vaut NotToBe)
afficher "n'importe quoi !";
fsi
6
types simples
identificateur
entier entier_naturel entier_positif
valeurs
sous-ensemble des entiers mathématiques
opérations (opérateurs arithmétiques) produisent un entier
+ - * /
division euclidienne (troncature)
modulo
reste de la division euclidienne
A = B * Q + R = B * (A / B) + A modulo B
afficher 25 modulo 7; // affiche 4 7
types simples
identificateur
entier entier_naturel entier_positif
valeurs
sous-ensemble des entiers mathématiques
opérations (opérateurs arithmétiques) produisent un entier
+ - * / modulo
opérations (de comparaison) produisent un booleen
< <= > >= relation d'ordre
opérations (d'identité) produisent un booleen
vaut ne_vaut_pas
8
types simples
identificateur littéral :
reel 3.5 -21.2e12
valeurs
sous-ensemble des réels mathématiques
opérations (opérateurs arithmétiques) produisent un reel
+ - * / modulo
division réelle
opérations (de comparaison) produisent un booleen
< <= > >= relation d'ordre
opérations (d'identité) produisent un booleen
vaut ne_vaut_pas 9
types simples
identificateur littéral : symbole entre quotes
caractere 'a' '9'
valeurs
lettres majuscules et minuscules
chiffres décimaux (digits)
ponctuation, caractères divers
caractères accentués (dépendent de la langue)
10
types simples
identificateur littéral : symbole entre quotes
caractere 'a' '9'
valeurs
opérations (de comparaison) produisent un booleen
< <= > >= relation d'ordre
chiffres < ... < majuscules < ...
< minuscules < ... < caractères accentués
opérations (d'identité) produisent un booleen
vaut ne_vaut_pas
11
types simples
identificateur
caractere
valeurs
fonctions applicables produisent un caractere
declarer Caract : caractere;
Caract <- n_importe_quel_caractere;
...
afficher lower (Caract); // Caract en minuscule
afficher upper (Caract); // Caract en majuscule
afficher succ (Caract); // suivant de Caract
afficher pred (Caract); // précédent de Caract
12
types plus complexes
identificateur
tableau de
permet de regrouper plusieurs valeurs sous un même identificateur
désignées par leur rang
exemple
declarer TabReel : tableau de 20 reel;
TabReel désigne l'ensemble des 20 valeurs
espace mémoire réservé mais pas initialisé
13
types plus complexes
identificateur
tableau de
permet de regrouper plusieurs valeurs sous un même identificateur
désignées par leur rang
fonction applicable
afficher taille (TabReel); // affiche 20
TabReeli désigne la ième valeur de l'ensemble
TabReeli <- 3.1416;
le premier élément
i [ 0, taille (TabReel) [
exclue intervalle semi-ouvert
14
exemple : initialiser le tableau à 0
declarer i : entier_naturel;
i <- 0;
jusqua (i vaut taille (TabReel))
faire
TabReeli <- 0.0;
i <- i + 1;
ffaire
ou
pour (i variant de 0 a taille (TabReel) - 1)
faire
TabReeli <- 0.0;
ffaire
15
declarer TabInt : tableau de entier;
pas d'espace mémoire réservé par exemple taille non encore connue
Comment faire ?
Deux autres opérations applicables
allonger TabInt de 5; // sous-entendu entier
ou
redimensionner TabInt a 5; // => on peut raccourcir un tableau
Dans les deux cas, nouveaux éléments non initialisés
16
cas particulier tableau de caractères
identificateur string littéral : suite de caractères entre guillemets
declarer Chaine : string;
Chaine <- "AEIOUY\""; AEIOUY"
chaîne vide
opérations et fonctions applicables 7 caractères
taille (Chaine)
< <= > >= relation d'ordre (lexicographique)
vaut ne_vaut_pas
17 caractères
concaténation
+
Chaine <- Chaine + "0123456789";
17
Premier algorithme formalisé
Boucle à compteur
Boucle sur collection
Types prédéfinis simples
Types prédéfinis complexes
Procédure : exemple
18
afficher 100 fois "Bonjour"
rappel de l'algorithme
algorithme afficher_100_Bonjour
debut
pour (i variant de 1 a 100)
faire et si on veut
l'afficher 50 fois ?
afficher "Bonjour" ;
tout réécrire ?
ffaire
fin => sous-programme
19
procedure afficher_N_Fois_Bonjour
( N : in entier_naturel )
identificateur du paramètre son type
debut paramètre "donnée"
pour (i variant de 1 a 100
N )
faire
afficher "Bonjour" ;
ffaire
fin
c'est une procédure (ne renvoie rien)
20
sous-programme qu'est-ce que c'est ?
c'est un algorithme qui
a toujours un identificateur (nommé)
a des specs (spécifications = conditions d'utilisation)
a éventuellement des paramètres
entre autres ses "ingrédients" :
les données sur lesquelles il travaille
la liste des paramètres est un "guichet" de communication
entre le monde extérieur et l'intérieur du sous-programme
"produit" éventuellement un résultat
21
sous-programme à quoi ça sert ?
à "mettre en facteur" du code
séquence d'instructions souvent utilisée
écrite une seule fois
mise sous forme d'un sous-programme
toutes les occurrences de la séquence sont remplacées par
l'appel du sous-programme
22
sous-programme à quoi ça sert ?
à "mettre en facteur" du code
exemple : saisir un texte dans une zone de saisie , c'est gérer
- le déplacement du curseur dans la zone
(passage au caractère précédent ou suivant,
au début ou à la fin de la zone)
- l'affichage ou la suppression des caractères
- l'insertion ou le remplacement
- l'effacement du caractère précédent
23
sous-programme à quoi ça sert ?
à "mettre en facteur" du code
exemple : saisir un texte dans une zone de saisie
intervient très souvent :
les différents éditeurs de texte
les cellules d'Excel
nombreuses boîtes de dialogues
de fichiers : open, save, save as ...
de légendes : graphiques Excel,
nombreuses zones de texte : explorer
nommer un nouveau dossier
renommer un dossier
24
sous-programme à quoi ça sert ?
à "mettre en facteur" du code
avantages
réduire la taille du code efficience
= économie des moyens
ici ressources matérielles : mémoire/disque
être réutilisé dans du code à venir réutilisabilité
mise au point une seule fois
maintenabilité
maintenance
(modifs, améliorations, corrections)
éviter le "Copier/Coller" source d'erreurs
améliorer la lisibilité 25
sous-programme à quoi ça sert ?
à "mettre en facteur" du code
à écrire des algorithmes "de haut niveau"
remplacer une suite d'actions élémentaires
par une action "de haut niveau"
exemple :
afficher l'écran d'accueil
établir une connexion
saisir login/password
charger les images
interroger une base de données
...
...
26
Premier algorithme formalisé
Boucle à compteur
Boucle sur collection
Types prédéfinis simples
Types prédéfinis complexes
Procédure : exemple
Sous-programme
Procédure
27
sous-programme comment on s'en sert ?
procedure afficher_N_Fois_Bonjour
(N : in entier_naturel);
paramètre formel
C'est une déclaration (ou interface, ou profil)
précise son mode d'emploi compatibles
utilisation
declarer NbFois : entier_positif;
NbFois <- 12; indispensable car nécessaire au sous-progr.
afficher_N_Fois_Bonjour (NbFois);
28
paramètre effectif
les paramètres servent à communiquer avec l'extérieur
"données" nécessaires au fonctionnement du sous-programme
afficher_N_Fois_Bonjour (N : in entier_naturel)
29
les paramètres servent à communiquer avec l'extérieur
"données" nécessaires au fonctionnement du sous-programme
"résultats" produits par le sous-programme
exemple : un sous-programme qui
reçoit une chaîne de caractères,
crée une nouvelle string dans laquelle il supprime tous les espaces,
fournit le nombre de suppressions effectuées
procedure SupprSpaces
(StrInitiale : in string,
StrFinale : out string,
NbSuppr : out entier_naturel);
30
procedure SupprSpaces
(StrInitiale : in string,
on ne sait pas quelle sera la taille de la
chaîne à transformer
=> sera de la taille du paramètre
effectif
StrFinale : out string,
on ne sait pas quelle sera la taille de la
chaîne transformée
=> supposée chaîne vide (taille nulle)
NbSuppr : out entier_naturel);
Il faudra donc impérativement que la procédure donne une taille
non nulle à StrFinale
soit par allonger StrFinale de xxx
soit par redimensionner StrFinale à xxx 31
les paramètres servent à communiquer avec l'extérieur
"données" nécessaires au fonctionnement du sous-programme
"résultats" produits par le sous-programme
procedure SupprSpaces
(StrInitiale : in string,
StrFinale : out string,
NbSuppr : out entier_naturel);
declarer LigneLue : string; // par défaut chaîne vide
declarer NewLigne : string; // par défaut chaîne vide
declarer NbSuppr : entier_naturel; // non initialisé
saisir LigneLue; // indispensable
donne la véritable taille à LigneLue
NbSuppr <- 0; // totalement inutile
SupprSpaces (LigneLue, NewLigne, NbSuppr);
NewLigne et NbSuppr utilisables en sortie du sous-progr. 32
les paramètres servent à communiquer avec l'extérieur
"données" nécessaires au fonctionnement du sous-programme
"résultats" produits par le sous-programme
"données-résultats" les deux
exemple : un sous-programme qui
reçoit une chaîne de caractères,
dans laquelle il transforme toutes les minuscules en majuscules,
fournit le nombre de transformations effectuées
procedure MinToMaj
(Str : in_out string,
NbTransf : out entier_naturel);
33
Premier algorithme formalisé
Boucle à compteur
Boucle sur collection
Types prédéfinis simples
Types prédéfinis complexes
Procédure : exemple
Sous-programme
Procédure
Paramètres
Fonction - Prédicat
34
fonction c'est une procédure qui n'a qu'un seul paramètre out
et aucun paramètre in_out
elle renvoie alors le paramètre out
exemple : un sous-programme qui
reçoit un nombre réel,
calcule sa racine carrée
en procédure :
procedure SqrRoot (ValInit : in reel,
Result : out reel);
en fonction :
fonction SqrRoot (ValInit : in reel)
renvoie reel;
Exemple d'utilisation
declarer Rac_12 : reel;
Rac_12 <- SqrRoot (12.0); 35
prédicat c'est une fonction qui renvoie un booleen
Choisir un identificateur qui commence par Is
exemple : un sous-programme qui
renvoie vrai si un entier est un multiple d'un autre entier,
tous deux passés en paramètre
profil (= déclaration)
fonction IsMultiple (Entier1 : in entier,
Entier2 : in entier)
renvoie booleen;
36
prédicat c'est une fonction qui renvoie un booleen
Choisir un identificateur qui commence par Is
exemple : un sous-programme qui
renvoie vrai si un entier est un multiple d'un autre entier,
tous deux passés en paramètre
corps (= définition)
fonction IsMultiple (Entier1 : in entier,
Entier2 : in entier)
renvoie booleen
debut
si (Entier1 modulo Entier2 vaut 0)
renvoie vrai;
sinon
renvoie faux;
fsi
fin 37
prédicat c'est une fonction qui renvoie un booleen
Choisir un identificateur qui commence par Is
exemple : un sous-programme qui
renvoie vrai si un entier est un multiple d'un autre entier,
tous deux passés en paramètre
utilisation (= appel)
si (IsMultiple (Nombre, 10))
...
Parfois un identificateur qui commence par Has est plus parlant
si (HasValue (Objet))
...
38
A travailler : cours d'algorithmique/programmation
Variables - Types
Instructions de base
Schémas itératifs
Boucles "finies"
Boucles avec compteur de boucle
Boucles de parcours de collection
Sous-programmes
39