Vous êtes sur la page 1sur 74

iUT

ORSAY

Universit Paris XI
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

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

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

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

De l'importance de l'algorithme
Rsultats
mis en forme

Informations
parses
Machine

Donnes
structures

Obtention
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

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

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

Les instructions de base

Algorithmique 1 : Instructions de
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

Les trois tapes dun algorithme


Prparation du traitement
- donnes ncessaires la rsolution du problme

Traitement
- rsolution pas pas, aprs dcomposition en sousproblmes 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
afficher("Donnez-moi le prix hors taxe :")
saisir(prixHT)
prixTTC prixHT * (1+TVA/100)

{prparation du traitement}

{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
variables

(SEUIL : rel) 13.25


valA, valB : rels
compteur : entier
mot , tom : chanes

valA 0.56
valB valA
valA valA (10.5 + SEUIL)
compteur 1
compteur compteur + 10
mot " Bonjour "
tom "Au revoir ! "

tableau de simulation :
valA valB

Algorithmique 1 : Instructions de base

comp-

mot

tom

teur

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 : ")
saisir(val)
si val < SEUIL
alors val val 2
fsi

{ saisie de la valeur entire}

{comparaison avec le seuil }

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
fpour

{cumul}

{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
{suite dinstructions}
traitement
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


initiale>

<valeur
finale>

par <valeur faire


du "pas">

traitement
type entier ou
rel,
le mme pour
ces 4
informations

valeur dont varie la variable de boucle


entre deux passages dans la boucle,
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
fpour

Algorithmique 1 : Instructions de base

Interdit !

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
excuter
afficher("La somme des valeurs saisies est " , totalValeurs)
affichage
rsultats

relance:
r-affectation
de la variable
de condition
Algorithmique 1 : Instructions de base

si la condition
est vrifie

35

Comparaison boucles pour et tant que


pour cpt 1 nbVal faire
afficher("Donnez une valeur :")
saisir(valeur)
totalValeurs totalValeurs + valeur
fpour

{cumul}

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

non

i
ou

Nombre
ditrations
connu ?

Traitement
excut au moins
une fois ?

n
o
n

Boucle tant que

Boucle rpter

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
val1 2 ; val2 3
(mauvais) exemple :
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
afficher le carr des
valeurs saisies tant
quon ne saisit pas 0

saisir(val)
tant que val 0 faire
afficher(val val)
saisir(val)
ftq

saisir des donnes


et s'arrter ds que
leur somme
dpasse 500

saisir(val)
somme val
tant que somme 500 faire
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
leur somme
dpasse 500

somme 0
rpter
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
nbVal , val : entiers

variables
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 2 : 3 5 -6 4 0 8

test 3 : 3 5 -6 4 0 1
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


la sortie de boucle :

nbVal < MAX est vrai

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

non,

- conjonction et,
- 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 )
Par un arbre syntaxique :

q
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
p p

Conjonction
p q pq

Disjonction
p q pq

Implication
p q pq

p et q : variables propositionnelles
Algorithmique 1 : Logique

62

Equivalences classiques
Commutativit
- pq
- pq

quivalent
quivalent

qp
qp

Associativit
- p (q r)
- p (q r)

quivalent
quivalent

(p q) r
(p q) r

Distributivit
- p (q r)
- p (q r)

quivalent
quivalent

(p q) (p r)
(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

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

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

q pq p( pq)

Algorithmique 1 : Logique

pq

67

Applications l'algorithmique
Interprter (et bien comprendre!) larrt des itrations
la sortie dune boucle.

tant que <cond> faire


la sortie :
donc si
la sortie :
cest a dire

non(<cond>) est vrai


cond = p et q
non (p et q)
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
tant que ok faire
nbVal nbVal + 1
saisir(val)
ok val STOP et nbVal < MAX
ftq
si val = STOP alors ...
Algorithmique 1 : Logique

{initialisation de la variable
de boucle boolenne }

{relance}

71

Boolens : encore des exemples


variables val : entier
encore : boolen
dbut
encore faux
val 0
rpter
afficher( "bonjour " )
val val 1
encore val > 0
tant que encore
afficher( "fini " )
fin

encore faux
val 0
tant que non encore faire
val val + 1
afficher(val )
encore val > 2
ftq
afficher( "fini " )

Algorithmique 1 : Logique

72

fin Volume 1

Algorithmique 1

73