Vous êtes sur la page 1sur 74

ALGORITHMIE

Apprendre à réaliser un
algorithme
ou comment résoudre un problème en
structurant la mise en œuvre d’une solution
Enjeu: Être plus efficace dans le bricolage de ma voiture

Objectif : Ranger son armoire de bricolage pour la


voiture

Étapes

Regrouper les Créer/


Trier les objets adapter le
Exemple

objets « voiture » rangement


« voiture » « voiture »
Pour chaque objet de l’univers Voiture

regrouper avec le même type d’objet


outils/pièces/vis, etc.

regrouper à nouveau par fonctionnalites


clés avec clés, tournevis avec tournevis, etc.

trier par sa taille


Enchainements

clés de taille mini à maxi

Choisir le casier adapté


une vis est la plus petite mais la quantité la plus grande si casier n’existe pas alors le créer

ranger
et reprendre un objet
Puis-je appliquer cet enchainement au rangement de mon
univers Vélo?
Généralisation de la solution

si oui, quel changement va avoir lieu dans l’enchainement?

• définition de l’univers
• enumération des objets par univers

Puis-je appliquer cet enchainement au rangement de mon


univers Menuiserie? de la cuisine? de mon magasin à l’atelier?

Quel autre exemple, significativement différent proposez-vous?


Ce n’est pas parce qu’un ordinateur est plus puissant qu’un autre, que le même
algorithme, éxécuté sur les 2 postes, sera plus rapide.

L’efficacité d’un algorithme: c’est l’utilisation correcte de la mémoire, la simplicité du


traitement, la vitesse des enchainements quelque soit le nombre d’opérations

Parfois on ne peut tester en conditions réelles une solution

Une mesure: « si je donne à mon programme une entrée de taille N, quel est l'ordre de
grandeur, en fonction de N, du nombre d'opérations qu'il va effectuer ? »
Complexité

Traiter 2 X plus de données ne devrait pas prendre plus de temps

Consommation de la mémoire doit être évaluée mais aussi de l’énergie (vitesse ou


consommation dans les systèmes embarqués?)
QUELQUES DEFINITIONS
RAM: Mémoire vive faite de plusieurs millions de composants qui
"filtrent" une charge électrique

BIT: information binaire (0 ou 1)


Lexique informatique

OCTET: groupe de 8 bits (en anglais , Byte)

• 28 possibilités soit 256 nombres différents


• 2 octets: 65 536 possibilités (256*256)
• 3 octets: 16 777 216 possibilités (256*256*256)

ASCII: (American Standard Code Information Interchange) standard


international de codage des caractères et ponctuations
Vocabulaire du développeur

Langage de
Instruction: Programmation: Pseudo code:
programmation:

• Convention • consigne • permet de • organisé


d’instructions formulée dans traduire comme un
organisées un langage de l’algorithme langage de
programmation dans un programmation
selon un code langage adapté mais sans les
à l’ordinateur soucis de
syntaxes
(conventions)
Vocabulaire du développeur Interprétation:
• chaque ligne du programme source est traduite en instructions du langage
machine au fur et à mesure,
• moins rapide mais plus de polyvalence —multiplateforme
• Vba, Php…

Compilateur:
• le programme est traduit en une seule fois et stocké dans un exe
• plus rapide
• C, C++,…
Semi-compilé:
• combine les 2 techniques en compilant d’abord et en les interprétant ensuite
• Python, Java…
LE PSEUDO CODE
Écriture d’algorithme à l’aide d’un
vocabulaire simple

support informatique optionnel


Description

possibilité d’échanger avec un développeur


même sans connaître de langage particulier
Exemple
Pas de standard mais des conventions
algorithme : Travail de la journée
Mots clés en gras Début
• Début, Fin, Alors, Sinon Tant Que, Jusqu’à…
prendre l’agenda
aller à aujourd'hui
Opérateurs
TANT QUE il y a une tâche FAIRE
•  (affectation)
• +, - ,*, /
Lire tâche
• =, ( ) Réaliser tâche
• <, >, <>, <=, >= Passer à la tâche suivante
• ^ (puissance)
• & (concaténation)
FIN TANT QUE
• Mod (reste division entiere) Fermer agenda
• 6 mod 3=0 mais 6 mod 4=2
Syntaxe

• permet de savoir si le diviseur est un multiple Fin


• attention, Mod est une fonction Excel mais un
opérateur VBA
L’ALGORITHME
Ensemble
de règles

Enchainements
DE QUOI S’AGIT-IL?

Problème (Structure) Algorithme

Nombre fini
d’opérations
Méthodologie de conception:
analyse descendante

Ss Pbs Algorithme
Décomposition Recomposition
simples principal

• Ss Pb 1 • Algo 1
Problème •… •… Résolution
• Ss Pb X • Algo X
objectifs de la Méthodologie de conception

Modularité: Lisibilité: Complexité:


1 problème mise en page enchainements
simple = 1
algorithme simple
mesure de la
commentaires
durée d’exécution
réutilisable mesure de
déscription
l’espace mémoire
Méthodologie de conception: les structures

Sequentielle Conditionnelle Itérative

bloc bloc
ordonnancement d’instructions à d’instructions à
des instructions executer selon exécuter
circonstances plusieurs fois
• Écriture Exemple

Algorithme Tension
Algorithme <Nom>
Var P, I, U: réel Simple
<Déclaration des
Début
variables>
P  4400
Début
Syntaxe globale

I  20
<Bloc Instructions>
UP/I
Fin
Fin
LES VARIABLES
• Description exemple

Usage
• stocker des valeurs
• définitives
• intermédiaires • Var NomPiece
• où?
Var Nom_Piece
• mémoire Pc
Var NomPiece, NomFamille
Les Variables

Déclaration
• Nom
• simple, sans espace, sans
ponctuation
• Descriptions exemples
Taille: optimisée pour économiser ressources PC

numérique
•byte (0 à 255) • Var A :byte
•entier simple (-32 768 à 32767)
•entier long ( -2147483648 à 2147483647)
•réel simple (-3,4x1038 à 3,4x1038)
• Var coefA: réel double
•réel double (-1,79x10308"à 1,79x10308)

monétaire
•2 chiffres après la virgule, devise
• Var prixHT: monétaire
date
•numéro de série
•format
• Var dateEffet: date (jj/mm/yyyy)
Les Variables

alphanumérique (entre guillemets: " ")"


•texte
•caractères
• Var indiceBruit: caractères
•chaîne
•nombre sous forme de texte (code postal)

booléen • Var nomFamille: string,


•vrai/faux
•oui/non
•0/1
calculAutorise: bool
• Descriptions Exemples

Portée-Durée

accessibilité • publique si déclarée avant la


procédure
• publique: Projet
• privée: Zone de déclaration

conservation • Const Entier nbMachines10


Les Variables

• Static Entier tentativesMDP3


• constante: initialisée 1 fois
• static: conserve la valeur
précédente
• Descriptions Exemples
• Tableau Entier: t(10) \\10 cases d’entiers
Spéciales Tableau String: tab(3) \\3 cases de textes
Tableau Entier tab(5,6) \\(5 lignes, 6 colonnes) d’entiers
tableaux Tableau tab \\variant, taille non définie
• spécialisés
• variant • monClasseur: objet classeur Excel

objets • Enum droits


lecture=-1
• sélections ecriture=0
• plage lecture_ecriture=1
• feuille Excel, classeur, … FinEnum \\ lecture < ecriture < lecture_ecriture

énumératives • Struct Famille


Var Nom: string
Les Variables

• regroupement de plusieurs constantes ordonnées Var Code: string


Var nbSousEnsembles: byte
structurées Var nbArticles: entier
• regroupement de types différents Var statutActif: bool
FinStruct
intervalles • JourOuvrés: Lundi..Vendredi
• définition de valeurs ordonnées et bornées au mini et Pourcentage: 0..100
maxi IndiceBruit: A..E \\descriptif, inconnu en vba hormis range(selection), ou tableau
• Syntaxe Exemples

• Var nbHeures: double


nbHeures  15.25

Affectation • Var Famille: string


• "prend la valeur de …" Famille  "Moteurs"
Les Variables

• Var n: entier
n10
Tableau Entier: t(n) \\10 cases
Exercices
Valeurs des variables au cours et à la fin de
l’exécution
• Exo 1: Exo 2:

Var A, B, C: Entier
Var A, B : Entier Début
Début A←2 \\ A=2
Exercices Variables

A←4 \\ A=4 B←6 \\ B=6


B←A+5 \\ A=4, B=9 C ← A + B \\ C=8
A←8 \\ A=8, B=9 A←3 \\ A=3
Fin C ← B – A \\ C=3
Fin
• Exo 3: Exo 4:

Var A, B: Entier Var A, B: Entier


Début Début
A←1 \\ A=1 A←6 \\ A=6
Exercices Variables

B ← A+3 \\ A=1, B=4 B←4 \\ B=4


A ← A+3 \\ A=4 A←B \\ A=4
B  4-A \\ B=0 B←A \\ B=4
Fin Fin
• Exo 5: Exo 6:

Écrire l’algorithme qui Écrire l’algorithme qui permet


permet d’échanger les d’échanger les valeurs de 3
valeurs de 2 entiers A et B entiers A,B et C (B à A, C à B
et A à C)

Var A, B, C: entier
Exercices Variables

Var A, B, C: entier
Début Début
CA \\C temporaire D←A \\D temporaire
AB A←B
B←C
BC C←D
Fin Fin
• Exo 7: Exo 8:

Var A: string Var A: string


B: Entier B: Entier
Début Début
A ← "100" \\ A= "100" A ← "100" \\ A= "100"
Exercices Variables

B ← 200 \\ B=200 B ← 200 \\ B=200


A ← A+B \\ A= "300" B ← A+B \\ B= 300
Fin Fin
\\ selon programme \\ selon programme
\\ A converti implicite entier, \\A converti implicite entier
ajouté à B et résultat dans un
string
• Exo 9: Exo 10:

Var A,B, C: string


Var A, B: string
Début
Début
A ← "100" \\ A="100"
Exercices Variables

A ← "100" \\ A="100"
B ← "200" \\ B= "200"
B ← "200" \\ B= "200"
C ← A+B \\ Erreur!
A ← A&B \\ A="100200"
Fin
Fin
LECTURE ET ECRITURE
exemple

Lecture: Récupérer
une valeur provenant VAR A,B: ENTIER
de l’extérieur (clavier) DÉBUT
Lecture / écriture

LIRE (A,B)
ECRIRE (A+B)
Écriture: Afficher une FIN
valeur ( écran)
Exercices
lecture/ecriture
• Exo 1: Exo 2:
Programme de caisse qui affiche le
montant à payer, le montant reçu et le
Programme qui demande un reste à rendre
nombre puis affiche le carré de ce
Exercices Lesture/Ecriture

nombre sous la forme:" "le carré VAR MontantTotal, MontantRecu,


de ce nombre est …" MontantRendu: monetaire
Début
ECRIRE "Saisir le montant total" //côté vendeur
LIRE MontantTotal //vendeur saisit
Var A : Entier ECRIRE " le montant à payer est de:" &
MontantTotal
DÉBUT //côté acheteur
ECRIRE "Saisir le montant reçu" //côté vendeur
ECRIRE "Entrez un nombre:" LIRE MontantRecu //vendeur saisit
MontantRendu  MontantTotal-MontantRecu
LIRE A ECRIRE " Le montant rendu est de: " &
ECRIRE "le carré de ce nombre est: " & A * A MontantRendu
FIN //côté acheteur
Fin
LES STRUCTURES
SEQUENTIELLES (ALTERNATIVES):
les conditions (tests)
• SI ALORS SINON exemple

SI <CONDITION> ALORS
< instruction1> SI TEMPERATURE < 50°C ALORS
[SINON "OK"
< instruction2>] SINON
FINSI "Arrêt système"
Sequentielle

FINSI
[SINON]: facultatif
• SI ALORS SINON IMBRIQUÉS SI ALORS SINONSI

SI <CONDITION1> ALORS
Si <CONDITION2> ALORS SI <CONDITION1> ALORS
< instruction1> < instruction1>
Conditions imbriquées

SINON SINONSI <CONDITION2>


< instruction2> < instruction2>
FINSI SINON
SINON < instruction3>
< instruction3> FINSI
FINSI
• Condition=comparaison exemple
VAR A, B: entier
1.une valeur S, T: string
A5
2.un opérateur de B3
comparaison A>B //faux
•= B>A //vrai
• <> S"F"
• <, <= T "G"
Conditions

• >, >=
S>T //faux (Ascii)
3.une autre valeur T>S //vrai
• Et/Ou/Xor/Non Exemple
VAR Temperature, Pression: reel double
• les 2 conditions
ET doivent être Vrai pour
que le tout soit Vrai
Temperature45.5
Pression 175
SI Temperature<50 ET Pression<180 ALORS
"ok"
SINON
Conditions composées

"arrêt système"
• 1 condition doit être Finsi //ok

OU Vrai pour que le tout


soit Vrai
SI Temperature<50 OU Pression<180 ALORS
"ok"
SINON
"arrêt système"
Finsi //ok
• Si 2 conditions sont Faux SI Temperature<50 XOR Pression<180 ALORS

XOR ou Vrai (simultanément),


le tout est faux
"ok"
SINON
"arrêt système"
Finsi //arrêt

SI NON(Pression<180) ALORS
"ok"
• si 1 condition doit être
NON inversée
SINON
"arrêt système"
Finsi //arrêt
• SELON CAS exemple
SELON CAS <Variable> SELON CAS Temperature
CAS valeur1 CAS < 0
Ecrire "Température négative!"
<instruction1>
CAS < 50
CAS valeur2 Ecrire "ok"
<instruction2> CAS 50
CAS valeurX Ecrire "Optimal"
<instructionX> CAS < 100
Sequentielle

Ecrire "à surveiller!"


AUTRES CAS AUTRES CAS
<instruction> Ecrire "Arrêt système!"
FINSELON FINSELON
Exercices
conditions logiques
• Exo 1: Exo 2:
Faire saisir 2 nombres et verifier si
Faire saisir 2 nombres différents et verifier • différent de l’autre
si l’un est strictement plus grand que l’autre • <10
• l’un est strictement plus grand que l’autre
Var"A, B":"reel entier
Début Var"A, B":"byte
Début
Ecrire "Entrez 2 nombres": " Ecrire "Entrez 2 nombres": "
Lire A,B
Exercices Logiques

Lire A,B Si A<>B


ALORS
Si A > B SI A < 10 ET B < 10
ALORS
ALORS SI A > B
ECRIRE "A est plus grand que:" " & B
ECRIRE "A est plus grand que:" " & B SINON
ECRIRE "B est plus grand que:" " & A
SINON FINSI
SINON
ECRIRE "B est plus grand que:" " & A ECRIRE "l’un de ces nombres est > à 10"
Finsi FINSI
SINON
Fin ECRIRE "ces 2 nombres sont identiques "
FINSI
Fin
• Exo 3: Exo 4:
Var DateDerMaint: date Une machine est en
Faire saisir 1 température et afficher l’état maintenance selon:
du système tel que: nbHeuresUse: double
• correct si <50°C production: entier si le nb de jours depuis la
dernière date de maintenance
• à surveiller si >=50°C et <100°C C1,C2,C3 : booleen
>35
• Arrêter système si >=100°C Début
Ecrire "date dernière maintenance?" si son nbre d’heures
d’utilisation>3000
lire DateDerMaint
sa production<2000 ou >10000
C1aujourdhui-DateDerMaint>35
Var Temperature: double ecrire "nb heures utilisation?"
depuis la date de dernière
Exercices Logiques

Début lire nbHeuresUse


maintenance
Ecrire "Entrez la température" C2nbHeuresUse>3000
Quelles questions doit poser le
Lire Temperature Ecrire "Production ?"
programme? et comment va-t-
il résoudre ce problème?
Si Temperature <50 ALORS lire production
ECRIRE "correct"
C3production<2000 OU production>10000
SINONSI Temperature <100 si C1 ou C2 ou C3 Alors
ECRIRE "à surveiller " Ecrire "Maintenance impérative"
SINON
ECRIRE "arrêt système" sinon

Finsi Ecrire "Maintenance reportée"


Finsi
Fin
Fin
• Exo 5:

Algo Menu
Afficher un menu qui Var choixMenu:byte
Debut
permet à l’utilisateur Ecrire "Menu:
1:Resultats
après choix, d’accéder aux 2:Chantiers
sections suivantes: 3:Devis
Exercices Logiques

4:Facturation
Resultats, Chantiers, 5:Paramètres"
Devis, Facturation, Lire choixMenu
Selon cas choixMenu
Paramètres cas 1
Ecrire …
cas 5

FinSelon
Fin
STRUCTURES
ITÉRATIVES: les boucles
Usage
• répéter une série d’instructions
• possibilité d’imbriquer les boucles
Utilisation: (exemples)
• remplir un tableau
• parcourir des champs de formulaires
• itérer sur des milliers de lignes très rapidement
• trier des listes
2 types:
• classiques
• 2 formes:
• nombre d’itérations connues à l’avance gérées par un compteur
Les boucles

• ex: "Pour i=1 (jusqu’)à 3 , enrouler film autour palette"


• la boucle s’arrête quand une condition est remplie, gérée par un booléen
• ex: "Tant que le MDP <> MotDePasseSaisi , ressaisir"
• récursives
• une boucle qui s’appelle elle-même
Syntaxe
POUR Var_Compteur = valeurDebut À valeurConnue [INCRÉMENT]
Instructions
Var_Compteur SUIVANT
Exemple Var password:
i:entier
string
Const string MDP "Secret"
DEBUT
Pour i1 À 3
ecrire "Saisissez le MDP:"
lire password
Pour…jusqu’à

SI MDP <> password ALORS


ECRIRE "Échec " "
SINON
ECRIRE "Ok"
SORTIR POUR \\ permet la sortie de la boucle si saisie ok
FINSI
i SUIVANT
FIN
Syntaxe Exemple
Pour tester au moins une fois la condition
Var i:entier
• TantQue <expression booleenne> Faire password: string
Instructions valide: booleen
FinTantQue Const string MDP "Secret"
• Jusqu’à <expression booleenne> Faire DEBUT
Instructions TantQue validefaux Faire
FinJusqu’à Ecrire "Saisissez le MDP:"
Tant que… Jusqu’à

lire password
SI MDP <> password ALORS
Sinon
ECRIRE "Échec "
• Faire SINON
Instructions ECRIRE "Ok"
TantQue <expression booleenne> validetrue
• Faire FINSI
FinTantQue
Instructions
FIN
Jusqu’à <expression booleenne>
Exercices
• Exo 1 Exo 2
Créer et renommer 12 onglets même exo mais en créant dans
d’un classeur Excel avec les mois chaque feuille une liste des 5 sites de
de l’année en nombre (1…12) l’entreprises (type site1…site5)
verticalement qui commence à ligne 2
Var feui,lig: byte
Var feui: byte Debut
Pour feui1 à 12
Debut ajouter.feuille
Pour feui1 à 12 nom.feuilleactivefeui
ajouter.feuille Pour lig2 à 6
cellule(lig,1)"site"&lig-1
nom.feuilleactivefeui lig suivant
Boucles

feui suivant feui suivant


Fin Fin
• Exo 3

Var feui,lig,col: byte


Debut
Pour feui1 à 12
ajouter.feuille
Imbriquer les boucles

même exo mais en ajoutant nom.feuilleactivefeui


horizontalement sur la 1ère Pour lig2 à 6
ligne les 4 commerciaux cellule(lig,1)"site"&lig-1
Pour col2 à 5 \\on décale de 1
(type cial1…cial4)
SI lig>2 ALORS SORTIE POUR
cellule(1,col)"cial"&col-1
col suivant
lig suivant
feui suivant
Fin
• Exo 3

Var Tableau Entier: tab(10)


i: byte
• Ecrire dans une feuille Excel le
contenu d’un tableau d’entiers Pour i1 à 10
rempli de 1 à 10 (remplir d’abord Tab(i-1)i
le tableau puis le transposer dans i suivant
excel)
Pour i1 à 10
cellule(i,1)Tab(i-1)
Boucles

i suivant
• Exo 4

Var cpt: entier


Supprimer les lignes d’une feuille
ère Debut
si dans la 1 colonne, le caractère
« - » est présent, TantQue cellule(cpt,1) <> vide
(on suppose que toutes les cases Si cellule(cpt,1)"-" Alors
sont remplies) supprimer.ligneEntiere(cpt)
employer des verbes d’actions Sinon
pour les méthodes
cptcpt+1 \\pour descendre d’1 ligne
FinSi
à noter que dans Excel, supprimer
Boucles

Fin TantQue
1 ligne fait remonter la suivante…
Fin
les Tableaux
par l’exemple
Tableau

variable pouvant stocker N éléménts


• de string, d’entiers ou en mélange (variant)

déclaration: Tableau Entiers: T(10)


• les « cases » du tableau sont numérotées de 0 à N
• la 1ère case : T(0) et la Nème :T(N)

pour les remplir:

affectation simple: T(2)5, signifie que 5 a été affecté à la 3ème case

itération: Tableau Entiers: T(6) (7 cases)


• POUR N1 à 6
• T(N)N
• N SUIVANT
• ce tableau a la 1ère case vide et les autres valeurs sont 1,2,3,4,5,6
Description

affectation de « plage » Excel (VBA: Range):


• Tableau Variant: T()
• Tplage("Fournisseurs").valeurs

Propriétés
• taille statique ou dynamique ( redimensionnable)
• 1 ou plusieurs dimensions : Tableau Entiers : T(5,3) signifie 5 lignes sur 3 colonnes \\T(5,6,3)? 3 rangées  1 cube. etc.
• Reprenons l’exo 3 des Tableau String: T()
boucles en affectant le Var feui,lig,cx: byte
nom réel des Debut
commerciaux placés Tplage("Commerciaux").valeurs\\si 5 cx: T(1à5, 1à1)
verticalement dans une Pour feui1 à 12
ajouter.feuille
plage d’Excel; dans ce nom.feuilleactivefeui
cas Vba instancie Pour lig2 à 6
(declare) un tableau à 2 cellule(lig,1)"site"&lig-1
dimensions Pour cx1 à indiceSuperieur(T,1)\\1: 1 dimension(5)
ère

SI lig>2 ALORS SORTIE POUR


( N lignes, 1 colonne) cellule(1,cx+1)T(cx,1)
initialisé à 1: cx suivant
Tableaux

lig suivant
T(1 à N, 1 à 1) feui suivant
qu’est ce que cela fera? Fin
FONCTIONS
Usage
• Algorithme prédéfini livré avec le langage (comme les calculettes)
• librairie mathématique (trigo, géo, finance): sin, cos, loi.normale, etc.
• traitements de chaines de caractères (extraction, recherche,…)

Utilisation
• pendant toute la programmation
• en appel « exterieur » pour effectuer un traitement intermédiaire

Syntaxe
Description

• un nom
• 2 parenthèses
• de 0 à N arguments séparés par virgule(s)

nomFonction([Argument1],[Argument2], [Argument3],…)
• Principales textes Equivalent VBA

taille(chaine): nb caractères

gauche(chaine, n): n car depuis gauche • len(string)


• left(string, n)
Exemples fonctions

droite(chaine, n): idem depuis droite


• right(string,n)
extraire(chaine, depart, n): extrait une partie de la chaine • mid(string,n1,n2)
commençant au caractère de départ et long de n caractères
• replace(string, t1,t2)
remplacer(chaine,texte1,texte2): remplace dans une chaine la
chaine trouvée texte1 par la texte2 • Instr(string1,string2)
trouve(chaine1,chaine2): renvoie la position du caractère qui
commence la chaine dans la chaine1 ou erreur si pas trouvé
• Conversion Equivalent VBA
Asc("caractère"): renvoie le nombre auquel
il correspond dans table ASCII

Chr(nombre):renvoie le caractère Ascii • Asc("A")=65


Cnum(texte): convertit une chaine en • Chr(97)="a"
numerique • Val("24 kg")=24 <> Val("kg 24")=0
Cint(nombre): renvoie la partie entiere (en • Cint(25.32)=25
Exemples fonctions

fait convertit en entier) • Cdbl(25)=25.00


Cdbl(nombre):convertit un entier en double • Cstr(25)="25"
• Format("22/09/2019",
Cstr(nombre):convertit un nombre en texte "yyyy\mm\dd")="2019\09\22"

texte(Chaine,format): renvoie le format


defini de la chaine
• Exo1
Var phrase: caracteres
nb, it:entier
Debut
Ecrire "Saisir une phrase"
Lire phrase
• Compter le nb de nb0
caractères d’une Pour it1 à taille(phrase)
phrase sans les
espaces SI NON extraire(phrase,it,1)=" " ALORS
nbnb+1
FINSI
Fonctions

it SUIVANT
Ecrire "Cette phrase a " & nb & "caractères"
Fin
• Exo2
Var phrase, voy: caracteres
nb, it:entier
Debut
Ecrire "Saisir une phrase"
Lire phrase
nb0
• Compter le nb de voy "aeiouy"
voyelles d’une phrase Pour it1 à taille(phrase)
SI trouve(voy,extraire(phrase,it,1)) >0 ALORS
nbnb+1
FINSI
Fonctions

it SUIVANT
Ecrire "Cette phrase a " & nb & « voyelles"
Fin
• Exo3

Var strDate: string


Debut
• on souhaite inviter
Ecrire "Saisir la date"
l’utilisateur à saisir
une date au format Lire strDate
jjmmaa mais il strdategauche(strdate,2) & "/" &
faudra l’afficher au Mid(strdate,3,2) & "/" & droite(strdate,2)
format classique
Ecrire "La date est " & Cdate(maDate)
jj/mm/aaaa
Fonctions

Fin
\\ la conversion affichera l’année (aaaa)
FONCTIONS PERSONNALISEES
Le compilateur repère le début du programme: la procédure Principale
n’existe pas en VBA ( ≈ evenement Workbook_Open si
appelée par le système d’exploitation on veut lancer à l’ouverture du fichier)
Fonctions personnalisées

Procédure principale suit les instructions: Déroulement


si actions répétitives de traitements: si actions répétitives avec attente d’un
Sous- procédures retour: Fonctions personnalisées

Le programme devient Modulaire:


Transmission d’arguments (paramètres) typés
Retour typé du traitement:
procédures ou fonctions
fonctions seulement
• Procédures sans et avec arguments Exemple
Procedure NomProcedure() Procedure EliminerLignes()
Instructions Pour lig50 à 100
FinProcedure supprimer.ligneEntiere(lig)
FinPour
FinProcedure
Procedure NomProcedure( Arg1, [Arg2] )
Procedure ElimineCertainesLignes(str en string)
SI Arg1=… ALORS \\exemple...
Pour lig50 à 100
instructions SI gauche(cellule(lig,2),3)=str ALORS
FINSI supprimer.ligneEntiere(lig)
Procédures

FinProcedure FinSI
FinPour
FinProcedure
• Fonctions sans et avec arguments Exemple
Fonction NomFonction () en type Fonction AdditionnerPlage() en long
Instructions Var calc: double
Pour lig50 à 100
FinFonction
calccalc+cellule(lig,1)
FinPour
Fonction NomFonction(Arg1, [Arg2]) en type AdditionnerPlagecalc
SI Arg1=… ALORS \\exemple... FinFonction
instructions
NomFonction… Fonction testDroits(str en string) en bool
SINON Selon str
NomFonction … cas "Admin"
testdroitsVrai
Fonctions

FINSI
cas "User"
FinFonction tesdroitsFaux
FinSelon
FinFonction
• Exo1

Debut
• Ecrire un prog qui va avertissement
afficher un message Fin
Exercices Fonctions

d’avertissement au
moyen d’une sous procedure avertissement()
procedure Ecrire "La valeur saisie…"
FinProcedure
• Exo2
Var Msg: string
Debut
Msg"Erreur de…"
• idem précédent avertissement(Msg)
mais qui permettra …
Exercices Fonctions

d’afficher un Msg"La valeur saisie…"


message différent avertissement(Msg)
à chaque appel …
Fin
Procedure avertissement(strMsg: string)
Ecrire strMsg
FinProcedure
• Exo3

Var P, I, U: Entiers reels


Debut
P4400
I20
• Ecrire une fonction
UTension(P,I)
qui retournerait la
Fin
Exercices Fonctions

tension d’après les


valeurs de
Fonction Tension(intP:Entier, intI:Entier) en Entier
Puissance et
SI intI=0 ALORS \\si oubli, Erreur!
d’intensité
Tension0
proposées
SINON
TensionintP/intI
FinSi
FinFonction
• Exo4
Var saisie: string
Var Tableau String: tab (10)
Debut
• Ecrire une tab(0)("test")
fonction qui tab(…)("…")
tab(9)("essai")
verifierait si Ecrire "entrez un texte"
Exercices Fonctions

une valeur lire saisie


texte Ecrire verifieTexte(saisie,tab)
appartient à Fin
un tableau en Fonction verifieTexte(strSaisie: string, tablo: variant) en boleen
affichant vrai verifieTexteTrouve(strSaisie,joindre(tablo))>0
ou faux FinFonction
\\joindre: fonction qui concatène tous les éléments d’un
tableau; VBA: Join
• Exo
Algo Appel_exposant
Var Nb, Ex: long
Créer 1 fonction récursive Debut
qui permet d’entrer 2 lire Nb: lire Ex
nombres en paramètres, Ecrire exposant(Nb,Ex)
le second étant Fin
l’exposant du premier;
Boucle récursive

renvoyer le résultat du Fonction exposant(Nbr:long,Expo:long) en long


calcul depuis la Si Expo >=1 Alors
procédure d’appel. exposant=exposant(Nbr,expo-1)*Nbr
expo(2,5)=32 Sinon
(2*2*2*2*2) exposant=1 \\permet de sortir de la pile
FinSi
FinFonction

Vous aimerez peut-être aussi