Vous êtes sur la page 1sur 74

Universit Paris XI

iUT ORSAY I.U.T. d'Orsay


Dpartement Informatique
Anne scolaire 2003-2004

Algorithmique : Volume 1
Introduction
Instructions de base
Logique propositionnelle

Ccile Balkanski, Nelly Bensimon, Grard Ligozat


Pourquoi un cours d "Algo" ?

Objectif : obtenir de la machine quelle effectue


un travail notre place
Problme : expliquer la machine comment
elle doit s'y prendre

Mais... comment le lui dire ?


Comment le lui apprendre ?
Comment s'assurer qu'elle fait ce travail aussi
bien que nous ?
Mieux que nous?
Algorithmique 1 : Introduction 1
Objectif de cet enseignement

rsoudre des problmes comme une


machine
savoir expliciter son raisonnement
savoir formaliser son raisonnement
concevoir (et crire) des algorithmes :
- squence dinstructions qui dcrit comment rsoudre
un problme particulier

Algorithmique 1 : Introduction 2
Thmes abords en Algo

Apprentissage dun langage


Notions de base
- algorithmes de base pour problmes lmentaires
Structures de donnes
- des plus simples aux plus complexes
Rsolution de problmes complexes
- algorithmes astucieux et efficaces

Algorithmique 1 : Introduction 3
L'algorithmique, vous la pratiquez tous les
jours et depuis longtemps...

Briques de LEGO Camion de pompiers


suite de dessins
Meuble en kit Cuisine quipe
notice de montage

Cafetire Expresso
instructions

Laine Pull irlandais


modle

Farine, oeufs, chocolat, etc.... Fort noire


recette

Algorithmique 1 : Introduction 4
De l'importance de l'algorithme
Informations Rsultats
parses mis en forme
Machine

Donnes Obtention
structures de rsultats

Traitement

Un algorithme, traduit dans un langage comprhensible par lordinateur


(ou langage de programmation, ici le C++), donne un programme, qui
peut ensuite tre excut, pour effectuer le traitement souhait.
Algorithmique 1 : Introduction 5
Savoir expliquer comment faire un travail sans
la moindre ambigut
- langage simple : des instructions (pas lmentaires)
- suite finie d'actions entreprendre en respectant une
chronologie impose

Lcriture algorithmique : un travail de


programmation vise universelle
un algorithme ne dpend pas
- du langage dans lequel il est implant,
- ni de la machine qui excutera le programme correspondant.
Algorithmique 1 : Introduction 6
Les problmes fondamentaux
en algorithmique
Complexit
- En combien de temps un algorithme va -t-il atteindre le
rsultat escompt?
- De quel espace a-t-il besoin?
Calculabilit :
- Existe-t-il des tches pour lesquelles il n'existe aucun
algorithme ?
- Etant donne une tche, peut-on dire s'il existe un
algorithme qui la rsolve ?
Correction
- Peut-on tre sr qu'un algorithme rponde au problme
pour lequel il a t conu?
Algorithmique 1 : Introduction 7
Les instructions de base

Algorithmique 1 : Instructions de 8
base
Un premier algorithme
Algorithme ElveAuCarr
{Cet algorithme calcule le carr du nombre que lui fournit l'utilisateur}

variables unNombre, sonCarr: entiers {dclarations: rservation


d'espace-mmoire}
dbut
{prparation du traitement}
afficher("Quel nombre voulez-vous lever au carr?")
saisir(unNombre)
{traitement : calcul du carr}
sonCarr unNombre unNombre
{prsentation du rsultat}
afficher("Le carr de ", unNombre)
afficher("c'est ", sonCarr)
fin
Algorithmique 1 : Instructions de base 9
Les trois tapes dun algorithme

Prparation du traitement
- donnes ncessaires la rsolution du problme
Traitement
- rsolution pas pas, aprs dcomposition en sous-
problmes si ncessaire
Edition des rsultats
- impression lcran, dans un fichier, etc.

Algorithmique 1 : Instructions de base 10


Dclarer une variable

variable <liste didentificateurs> : type

Fonction :
Instruction permettant de rserver de lespace mmoire
pour stocker des donnes (dpend du type de ces
donnes : entiers, rels, caractres, etc.)
Exemples :
variables val, unNombre : entiers
nom, prnom : chanes de caractres

Algorithmique 1 : Instructions de base 11


Saisir une donne

saisir(<liste de noms de variables>)

Fonction :
Instruction permettant de placer en mmoire les
informations fournies par l'utilisateur.
Exemples:
saisir(unNombre)
saisir(nom, prnom)
saisir(val)
Algorithmique 1 : Instructions de base 12
Afficher une donne, un rsultat
afficher(<liste de noms de variables, de
constantes ou d expressions>)

Fonction :
Instruction permettant de visualiser les informations
places en mmoire.
Exemples:
afficher(unNombre, "est diffrent de 0")
afficher("La somme de", unNombre, "et" , val , "est",
unNombre + val)

Algorithmique 1 : Instructions de base 13


Dclarer une constante

constante (<identificateur> : type) <expression>

Fonction :
Instruction permettant de rserver de lespace mmoire
pour stocker des donnes dont la valeur est fixe pour tout
lalgorithme

Exemples :
constantes (MAX : entier) 100
(DOUBLEMAX : entier) MAX 2
Algorithmique 1 : Instructions de base 14
Saisies et affichages : exemples
Algorithme ParExemple
{Saisit un prix HT et affiche le prix TTC correspondant}
constantes (TVA : rel) 20.6
(Titre : chane) "Rsultat"
variables prixHT, prixTTC : rels {dclarations}

dbut {prparation du traitement}


afficher("Donnez-moi le prix hors taxe :")
saisir(prixHT)
prixTTC prixHT * (1+TVA/100) {calcul du prix TTC}

afficher(Titre) {prsentation du rsultat}


afficher(prixHT, euros H.T. devient ", prixTTC, euros T.T.C.")
Fin

Affichage :
Algorithmique 1 : Instructions de base 15
Affecter une valeur une variable

<identificateur> <expression> ou
<constante> ou <identificateur>

Fonction :
Instruction permettant dattribuer la variable identifie
par l'lment plac gauche du symbole la valeur
de l'lment plac droite de ce symbole.
Exemple:
nom "Venus"
val 50
val val 2
Algorithmique 1 : Instructions de base 16
Affectation : exemples
constante (SEUIL : rel) 13.25
variables valA, valB : rels
compteur : entier
mot , tom : chanes
valA 0.56
valB valA tableau de simulation :
valA valA (10.5 + SEUIL) valA valB comp- mot tom
compteur 1 teur
compteur compteur + 10
mot " Bonjour "
tom "Au revoir ! "

Algorithmique 1 : Instructions de base 17


Affectation : exemples (suite)

afficher(mot)
afficher(" valA = ", valA)
afficher(" valB = ", valB)
afficher(" compteur =", compteur )
afficher(tom)

Affichage :

Algorithmique 1 : Instructions de base 18


Simulation d'un algorithme
Algorithme CaFaitQuoi?
{Cet algorithme .........................................}
variables valA, valB : rels {dclarations}

dbut {prparation du traitement}


afficher("Donnez-moi deux valeurs :")
saisir (valA, valB)
afficher("Vous m'avez donn ", valA, " et ", valB)
{traitement mystre}
valA valB
valB valA {prsentation du rsultat}
afficher("Maintenant , mes donnes sont : ", valA, " et ", valB)
Fin

Affichage :
Algorithmique 1 : Instructions de base 19
Ce quil fallait faire

Dclarer une variable supplmentaire


variables valA, valB, valTemp : entiers

Utiliser cette variable pour stocker provisoirement


une des valeurs
saisir(valA, valB)
valTemp valA
valA valB
valB valTemp

Algorithmique 1 : Instructions de base 20


Traitement faire si

Algorithme SimpleOuDouble
{Cet algorithme saisit une valeur entire et affiche son double si cette
donne est infrieure un seuil donn.)
constante (SEUIL : entier) 10
variable val : entier
dbut
afficher("Donnez-moi un entier : ") { saisie de la valeur entire}
saisir(val)
si val < SEUIL { comparaison avec le seuil}
alors afficher ("Voici son double :" , val 2)
sinon afficher ("Voici la valeur inchange :" , val)
fsi
fin

Algorithmique 1 : Instructions de base 21


Linstruction conditionnelle

si <expression logique>
alors instructions
[sinon instructions]
fsi

Si lexpression logique (la condition) prend la valeur vrai,


le premier bloc dinstructions est excut; si elle prend la
valeur faux, le second bloc est excut (sil est prsent,
sinon, rien).
Algorithmique 1 : Instructions de base 22
Une autre criture
Algorithme SimpleOuDouble
{Cet algorithme saisit une valeur entire et affiche son double si cette
donne est infrieure un seuil donn.)
constante (SEUIL : entier) 10
variable val : entier
dbut
afficher("Donnez-moi un entier : ") { saisie de la valeur entire}
saisir(val)
si val < SEUIL
alors val val 2 {comparaison avec le seuil }
fsi
afficher("Voici la valeur finale : ", val)
fin

Algorithmique 1 : Instructions de base 23


Quand la condition se complique :
les conditionnelles embotes
Problme : afficher "Reu avec mention" si une note est
suprieure ou gale 12, "Passable" si elle est suprieure
10 et infrieure 12, et "Insuffisant" dans tous les autres cas.

si note 12
alors afficher( "Reu avec mention" )
sinon si note 10
alors afficher( "Passable" )
sinon afficher( "Insuffisant" )
fsi
fsi

Algorithmique 1 : Instructions de base 24


La slection sur choix multiples

selon <identificateur>
(liste de) valeur(s) : instructions
(liste de) valeur(s) : instructions

[autres : instructions]

Sil y a plus de deux choix possibles, linstruction selon


permet une facilit dcriture.

Algorithmique 1 : Instructions de base 25


Linstruction selon : exemple
selon abrviation
"M" : afficher( " Monsieur " )
"Mme" : afficher( " Madame " )
"Mlle" : afficher( " Mademoiselle " )
autres : afficher( " Monsieur, Madame " )

Comparer : si abrviation = "M"


alors afficher( "Monsieur" )
sinon si abrviation = "Mme"
alors afficher("Madame")
sinon si abrviation = "Mlle"
alors afficher( "Mademoiselle" )
sinon afficher( "Monsieur,Madame " )
fsi
fsi
Algorithmique 1 : Instructions de base 26
fsi
Quand il faut rpter un traitement ...
Algorithme FaitLeTotal
{Cet algorithme fait la somme des nbVal donnes qu'il saisit}
variables nbVal, cpt : entiers
valeur, totalValeurs : rels
dbut
{initialisation du traitement}
afficher("Combien de valeurs voulez-vous saisir ?")
saisir(nbVal)
{initialisation du total 0 avant cumul}
totalValeurs 0
{traitement qui se rpte nbVal fois}
pour cpt 1 nbVal faire
afficher("Donnez une valeur :")
saisir(valeur)
totalValeurs totalValeurs + valeur {cumul}
fpour
{dition des rsultats}
afficher("Le total des ", nbVal, "valeurs est " ,
fin Algorithmique 1 : Instructions de base 27
Simulation de la boucle pour

Donnes : 3 3 -1 10
Tableau de simulation :

Affichage :

Algorithmique 1 : Instructions de base 28


La boucle pour

pour <var> valInit valfin [par <pas>] faire


traitement {suite dinstructions}
fpour

Fonction:
rpter une suite dinstructions un certain nombre de fois

Algorithmique 1 : Instructions de base 29


Les champs de la boucle pour
constante, variable,
ou expression arithmtique

pour <variable> <valeur <valeur par <valeur faire


initiale> finale> du "pas">

traitement
type entier ou
rel,
le mme pour valeur dont varie la variable de boucle
ces 4 entre deux passages dans la boucle,
informations 1 par dfaut (peut tre ngatif)

Algorithmique 1 : Instructions de base 30


Smantique de la boucle pour

Implicitement, linstruction pour:


- initialise une variable de boucle (le compteur)
- incrmente cette variable chaque pas
- vrifie que cette variable ne dpasse pas la borne
suprieure
Attention :
- le traitement ne doit pas modifier la variable de boucle

pour cpt 1 MAX faire


si () alors cpt MAX Interdit !
fpour

Algorithmique 1 : Instructions de base 31


Quand le nombre d'itrations
nest pas connu...
Algorithme FaitLeTotal
{Cet algorithme fait la somme des donnes quil saisit, arrt la lecture de -1)
constante (STOP : entier) -1
variables val, totalValeurs : entiers
dbut
totalValeurs 0
afficher("Donnez une valeur, " , STOP, " pour finir.") {amorage}
saisir(val)
tant que val STOP faire
totalValeurs totalValeurs + val {traitement}
afficher("Donnez une autre valeur, " , STOP, " pour finir.")
saisir(val) {relance}
ftq
afficher("La somme des valeurs saisies est " , totalValeurs)
fin
Algorithmique 1 : Instructions de base 32
Simulation de la boucle tant que

Donnes : 3 -3 10 -1
Tableau de simulation :
STOP = 1

Affichage :

Algorithmique 1 : Instructions de base 33


La boucle tant que faire

amorage {initialisation de la (des) variable(s) de condition}


tant que <expression logique (vraie)> faire
traitement {suite dinstructions}
relance {r-affectation de la (des) variable(s) de condition}
ftq

Fonction:
- rpter une suite dinstructions tant quune condition est
remplie
remarque : si la condition est fausse ds le dpart, le
traitement nest jamais excut
Algorithmique 1 : Instructions de base 34
Smantique de la boucle tant que
amorage: initialisation
de la variable de condition
condition d'excution
du traitement
saisir(val)
tant que val STOP faire
totalValeurs totalValeurs + val
afficher("Donnez une autre valeur, " , STOP, " pour finir. " )
saisir(val)
ftq traitement
afficher("La somme des valeurs saisies est " , totalValeurs)
excuter
relance: si la condition
r-affectation est vrifie
affichage de la variable
rsultats de condition

Algorithmique 1 : Instructions de base 35


Comparaison boucles pour et tant que
pour cpt 1 nbVal faire
afficher("Donnez une valeur :")
saisir(valeur)
totalValeurs totalValeurs + valeur {cumul}
fpour

...quivaut :
cpt 0
tant que cpt < nbVal faire
afficher("Donnez une valeur :")
saisir(valeur)
totalValeurs totalValeurs + valeur {cumul}
cpt cpt + 1 {compte le nombre de valeurs traites}
ftq
Algorithmique 1 : Instructions de base 36
Comparaison boucles pour et tant que
(suite)

Implicitement, linstruction pour:


- initialise un compteur
- incrmente le compteur chaque pas
- vrifie que le compteur ne dpasse pas la borne suprieure
Explicitement, linstruction tant que doit
- initialiser un compteur {amorage}
- incrmenter le compteur chaque pas {relance}
- vrifier que le compteur ne dpasse pas la borne suprieure
{test de boucle}

Algorithmique 1 : Instructions de base 37


Choisir pour... Choisir tant que...

si le nombre ditrations est connu lavance,


choisir la boucle pour

si la boucle doit s'arrter quand survient un


vnement ,
choisir la boucle tant que

Algorithmique 1 : Instructions de base 38


La boucle rpter : un exemple
Algorithme Essai
{Cet algorithme a besoin dune valeur positive paire}
variables valeur : entier
dbut
rpter
afficher("Donnez une valeur positive non nulle : ")
saisir(valeur)
tant que valeur 0
afficher("La valeur positive non nulle que vous avez saisie est ")
afficher( valeur )
{traitement de la valeur saisie}
fin
Algorithmique 1 : Instructions de base 39
Simulation de la boucle rpter

Donnes : -2 0 4
Tableau de simulation :

Affichage :

Algorithmique 1 : Instructions de base 40


La boucle rpter ...tant que

rpter
(r)affectation de la (des) variable(s) de
condition
traitement {suite dinstructions}
tant que <expression logique (vraie)>

Fonction:
- excuter une suite dinstructions au moins une fois et
la rpter tant quune condition est remplie
Remarque: le traitement dans lexemple prcdent se
limite la r-affectation de la variable de condition
Algorithmique 1 : Instructions de base 41
Comparaison boucles
rpter et tant que
rpter
afficher("Donnez une valeur positive paire :")
saisir(valeur)
tant que (valeur < 0 ou (valeur % 2) 0)

...quivaut :
afficher("Donnez une valeur positive paire :")
saisir(valeur)
tant que (valeur < 0 ou (valeur % 2) 0) faire
afficher("Donnez une valeur positive paire:")
saisir(valeur)
ftq
Algorithmique 1 : Instructions de base 42
Comparaison boucles
rpter et tant que (suite)
boucle tant que
- condition vrifie avant chaque excution du traitement
- le traitement peut donc ne pas tre excut
- de plus : la condition porte surtout sur la saisie de nouvelles
variables (relance)
boucle rpter tant que
- condition vrifie aprs chaque excution du traitement
- le traitement est excut au moins une fois
- de plus : la condition porte surtout sur le rsultat du
traitement
Remarque : la boucle rpter est typique pour les saisies avec vrification.
Algorithmique 1 : Instructions de base 43
Choisir pour... tant que rpter

Boucle tant que


on
Traitement n
excut au moins
une fois ?
non

ou
Nombre
Boucle rpter

i
ditrations
connu ?
oui

Boucle pour

Algorithmique 1 : Instructions de base 44


Remarque

fsi, ftq et fpour peuvent tre omis si le corps


se limite une seule instruction

Exemples:
si val > 0 alors afficher( fini! )
pour i 1 MAX faire afficher(i val)

Algorithmique 1 : Instructions de base 45


Le problme dune boucle : il faut en sortir!

tant que A faire B


rpter B tant que A
quelque chose dans la suite dinstructions B doit
amener A prendre la valeur Faux.
la suite dinstructions B doit modifier au moins une variable de
lexpression logique A
(mauvais) exemple : val1 2 ; val2 3
tant que val1 < 100 faire
val2 val2 val1
ftq
cest lexpression logique A (et elle seule!) qui en
prenant la valeur Faux provoque larrt de la boucle.
Algorithmique 1 : Instructions de base 46
De l'nonc la boucle

saisir(val)
afficher le carr des
valeurs saisies tant tant que val 0 faire
quon ne saisit pas 0 afficher(val val)
saisir(val)
ftq

saisir(val)
saisir des donnes
et s'arrter ds que somme val
leur somme tant que somme 500 faire
dpasse 500 saisir(val)
somme somme + val
ftq
Algorithmique 1 : Instructions de base 47
De l'nonc la boucle (suite)

saisir des donnes


et s'arrter ds que somme 0
leur somme rpter
dpasse 500 saisir(val)
somme somme + val
tant que somme 500

saisir des donnes


tant que leur somme
ne dpasse un seuil
donn

Algorithmique 1 : Instructions de base 48


Exemple dun mauvais choix de boucle

Algorithme Somme
{Cet algorithme fait la somme dune suite de nombres tant que cette somme
ne dpasse un seuil donn)
constante (SEUIL : entier) 1000
variables val, somme : entiers
dbut
somme 0
rpter
afficher( "Entrez un nombre")
saisir(val)
somme somme + val
tant que somme SEUIL
afficher( "La somme atteinte est" , somme - val)
fin

Algorithmique 1 : Instructions de base 49


Version corrige
Algorithme Somme
{Cet algorithme fait la somme dune suite de nombres tant que cette somme
ne dpasse un seuil donn)
constante (SEUIL : entier) 1000
variables val, somme : entiers
dbut

Algorithmique 1 : Instructions de base 50


Quand utiliser la boucle tant que?

Structure itrative "universelle"


n'importe quel contrle d'itration peut se traduire par le
"tant que "

Structure itrative irremplaable ds que la


condition d'itration devient complexe
Exemple:
saisir des valeurs, les traiter, et sarrter la saisie de
la valeur darrt 1 ou aprs avoir saisi 5 donnes.

Algorithmique 1 : Instructions de base 51


Exemple
constantes (STOP : entier) -1
(MAX : entier) 5
variables nbVal , val : entiers
dbut
nbVal 0 {compte les saisies traites}
saisir(val) {saisie de la 1re donne}
tant que val STOP et nbVal < MAX faire
nbVal nbVal + 1
{traitement de la valeur saisie}
saisir(val) {relance}
ftq
afficher(val, nbVal) {valeurs en sortie de boucle}

Attention :
La valeur darrt nest jamais traite (et donc, jamais comptabilise)
Algorithmique 1 : Instructions de base 52
Simulation de la boucle

test 1 : 3 5 -1 test 3 : 3 5 -6 4 0 1
test 2 : 3 5 -6 4 0 8 test 4 : -1

Algorithmique 1 : Instructions de base 53


Interprter l'arrt des itrations
nbVal 0 {compte les saisies traites}
saisir(val) {saisie de la 1re donne}
tant que val STOP et nbVal < MAX faire
nbVal nbVal + 1
{traitement de la valeur saisie}
saisir(val) {relance}
ftq
si val = STOP
alors {la dernire valeur teste tait la valeur darrt}
afficher( Sortie de boucle car saisie de la valeur darrt;
toutes les donnes significatives ont t traites. )
sinon {il y avait plus de 5 valeurs tester}
afficher( Sortie de boucle car nombre maximum de valeurs
traiter atteint; des donnes significatives nont pas
pu t traites. ")
fsi
Algorithmique 1 : Instructions de base 54
De limportance du test de sortie
de boucle ( et donc de la logique)
tant que val STOP et nbVal < MAX faire

dans la boucle : val STOP et nbVal < MAX est vrai


la sortie de boucle :
soit val STOP est faux val = STOP
soit nbVal < MAX est faux nbVal MAX
que tester la sortie de boucle?
si val = STOP alors voir transparent prcdent.
si nbVal MAX alors mauvais test car message dpend
de la dernire valeur saisie.
Algorithmique 1 : Instructions de base 55
Conclusion: Quelques leons retenir
Le moule d'un algorithme
Algorithme AuNomEvocateur
{Cet algorithme fait..............en utilisant telle et telle donne.........}
constantes
variables
dbut
{prparation du traitement : saisies,....}
{traitements, si itration, la dcrire }
{prsentation des rsultats: affichages,... }
fin
Il faut avoir une criture rigoureuse
Il faut avoir une criture soigne : respecter lindentation
Il est ncessaire de commenter les algorithmes

Il existe plusieurs solutions algorithmiques un problme pos


Il faut rechercher lefficacit de ce que lon crit

Algorithmique 1 : Instructions de base 56


Logique propositionnelle

Algorithmique 1 : Logique 57
En quoi la logique est-elle utile au
programmeur ?

La logique : une faon de formaliser notre


raisonnement
Il ny a pas une logique mais DES logiques
La logique propositionnelle : modle
mathmatique qui nous permet de raisonner sur la
nature vraie ou fausse des expressions logiques

Algorithmique 1 : Logique 58
Retour sur les conditions d'itration

tant que somme SEUIL faire...


tant que val STOP et nbVal < MAX faire
tant que valeur < 0 ou (valeur % 2) 0 faire...

Proposition :
expression qui peut prendre la valeur VRAI ou FAUX

Exemples de propositions:
2 et 2 font 4
1 et 1 font 10
il pleut
x>y
Algorithmique 1 : Logique 59
Elments de logique propositionnelle

Formule :
- expression logique compose de variables
propositionnelles et de connecteurs logiques
Variable propositionnelle :
- une proposition considre comme indcomposable
Connecteurs logiques:
- ngation non, - conjonction et,
- implication - disjonction ou,
Exemple : p et q variables propositionnelles
(( p q) q) (p q)

Algorithmique 1 : Logique 60
Reprsentations d'une formule

(p q) ((p r) p )

p q
Par un arbre syntaxique :
r
p p
En utilisant la notation prfixe (polonaise) :
pqprp

En utilisant la notation postfixe :


p q p r p

Algorithmique 1 : Logique 61
Tables de vrit
Reprsentation des valeurs de vrit
associes une expression logique

Ngation Conjonction Disjonction Implication


p p p q pq p q pq p q pq

V F V V V V V V V V V

F V V F F V F V V F F

F V F F V V F V V

F F F F F F F F V

p et q : variables propositionnelles
Algorithmique 1 : Logique 62
Equivalences classiques
Commutativit
- pq quivalent qp
- pq quivalent qp
Associativit
- p (q r) quivalent (p q) r
- p (q r) quivalent (p q) r
Distributivit
- p (q r) quivalent (p q) (p r)
- p (q r) quivalent (p q) (p r)

Algorithmique 1 : Logique 63
Equivalences classiques (suite)
Lois de Morgan
(p q) quivalent ( p) ( q)
(p q) quivalent ( p) ( q)

p q p q (p q) p q p q

Algorithmique 1 : Logique 64
Formules :
quelques classes et relations
Les tautologies :
- vraies pour toute assignation de valeurs de vrit aux
variables. p p pp
- exemple : p p

Les formules contradictoires :


- fausses pour toute assignation de valeurs de vrit aux
variables. p p pp
- exemple : p p

Algorithmique 1 : Logique 65
Formules :
quelques classes et relations (suite)
Les formules quivalentes:
- mme valeur de vrit pour toute assignation de la mme
valeur de vrit aux variables.
- exemples : p q est quivalent p q
p q est quivalent q p

p q pq p q pq

Algorithmique 1 : Logique 66
Du bon usage de la logique
Vrification de l'quivalence de deux formules

"tre mineur (p) ou majeur (p) non imposable (q) "


quivaut "tre mineur (p) ou non imposable (q) "

p q pq p( pq) pq

Algorithmique 1 : Logique 67
Applications l'algorithmique
Interprter (et bien comprendre!) larrt des itrations
la sortie dune boucle.
tant que <cond> faire
la sortie : non(<cond>) est vrai
donc si cond = p et q
la sortie : non (p et q)
cest a dire non p ou non q

Exemple : avec <cond> gal : val STOP et nbVal < MAX


non(<cond>) gal : val = STOP ou nbVal MAX
Algorithmique 1 : Logique 68
Applications l'algorithmique (suite)
Simplifier une criture par substitution d'une formule
quivalente
si (Age = "Mineur"
ou (non (Age = "Mineur") et non (Fisc = "Imposable"))) alors...
Equivalent :
si (Age = "Mineur" ou non (Fisc = "Imposable")) alors...

Vrifier la validit d'une condition


si Valeur< 10 et Valeur >100 alors cas improbable

Ecrire la ngation dune condition


si on veut P et Q et R :
rpter . tant que non P ou non Q ou non R ou

Algorithmique 1 : Logique 69
Le Type BOOLEEN

Deux constantes boolennes :


VRAI , FAUX
Des variables de type boolens :
variables ok, continuer : boolen
ok (rep = O ou rep = o )
continuer (val > O et val < 9)
Dans les conditionnelles et itratives :
tant que ok faire
si continuer alors ...

Algorithmique 1 : Logique 70
Le Type BOOLEEN : exemple

Algorithme Logique
constantes (MAX : entier) 5
(STOP : entier) -1
variables nbVal, val : entiers
ok : boolen
dbut
nbVal 0
saisir (val)
ok val STOP et nbVal < MAX {initialisation de la variable
tant que ok faire de boucle boolenne }
nbVal nbVal + 1
saisir(val)
ok val STOP et nbVal < MAX {relance}
ftq
si val = STOP alors ...
Algorithmique 1 : Logique 71
Boolens : encore des exemples

variables val : entier


encore : boolen
dbut
encore faux encore faux
val 0 val 0
rpter tant que non encore faire
afficher( "bonjour " ) val val + 1
val val 1 afficher(val )
encore val > 0 encore val > 2
tant que encore ftq
afficher( "fini " ) afficher( "fini " )
fin

Algorithmique 1 : Logique 72
fin Volume 1

Algorithmique 1 73

Vous aimerez peut-être aussi