If Eft 8 Z QG QC C | PDF
5. Saisie et affichage
Pour simuler l’affichage d’un texte ou d’une valeur sur l’écran, il faut utiliser la
pseudo-instruction ‘Afficher’ qui prend a sa suite une chaine de texte ou une
variable. Si vous mélangez du texte et des variables, séparez ceux-ci par des virgu-
les. A l'affichage, les virgules seront remplacées par des espaces.
PROGRAMME AFFICHE
VAR
atentier
texte:chaine
DEBUT
aco
textee"Hello World"
Afficher a
Afficher texte
Afficher "Bonjour les amis"
FIN
Pour inviter un utilisateur 4 rentrer au clavier une valeur, utilisez le mot Saisir.
Valgorithme attendra alors une entrée au clavier qui sera validée avec la touche
d'entrée. La valeur que vous saisissez sera placée dans la variable indiquée a la
suite de "Saisir".
PROGRAMME SAISIE
VAR
reponse: chaine
DEBUT
Afficher "Quel est votre nom 2"
Saisir reponse
Ea Algorithmiqueaa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.aa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.aa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.Chapitre 2
® Rappel : un modulo est le reste d'une division entiére. Par exemple 15/2 vaut
7, mais il reste 1. On dit que 15 modulo 2 vaut 1.
Ces opérateurs sont dits binaires car ils s'utilisent avec deux valeurs : une avant le
symbole et une aprés. Les valeurs avant et aprés peuvent étre des données (de
méme type que la variable qui recoit les résultats) ou des variables. Voici un
exemple d’opérations dans un simple algorithme qui calcule la surface et le
périmétre d'un cercle,
PROGRANME CERCLE
VAR
r, PI, surface, perimetre: réels
DEBUT
PIC3, 1415927
re5,2
surface-PI * xr * 5
perinetree2 * PI* x
Afficher surface, perimetre
FIN
Ici il n'y a que des multiplications. Vous pouvez déja remarquer que vous avez
parfaitement le droit de chainer vos calculs et de mélanger les données et les
variables. Simulez les deux calculs :
surfaceePI * r*
eurfacec3, 1415927 * 5,2 * 5,2
surfacee84. 948666608
perimetree-2 * PI * r
perimetree2 * 3,1415927 * 5,2
perimetree32. 67256408
En PHP :
Cercle
1415927;
225
$surface=Spi*$r*$r;
Sperimetre=2* Spit $rj
echo "$surface Sperimetre";
ca Algorithmiqueaa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.aa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.aa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.Chapitre 2
PHP accepte ces opérateurs. Cette écriture peut surprendre. Voici un exemple :
PROGRAMME UNATRE
VAR
arentier
DEBUT
acl
Ecrire ++a
Ecrire at+
Ecrire a
FIN
- Le premier affichage indique 2, la variable a est incrémentée avant son
utilisation.
- Le deuxiéme indique 2 aussi, la variable a est incrémentée aprés son utilisation.
- Le dernier indique 3.
© Les opérateurs + et - peuvent aussi étre utilisés comme opérateurs unaires :
placés avant un scalaire ou une variable, le signe "-" donnera l’opposé de cette
valeur (- -1 est égal a 1).
3. Les opérateurs booléens
Les opérateurs ne permettent pas que de faire des calculs. Dans une expression,
un opérateur peut aussi effectuer des évaluations de booléens. Vous avez vu que
pour l'ordinateur tout ce qui est vrai est différent de 0, ce qui est faux valant 0.
Comment alors faire si deux expressions sont l'une vraie, l'autre fausse, pour
connaitre la valeur des deux conjuguées ? II faut utiliser des opérateurs booléens
pour indiquer ce qui doit tre considéré comme vrai : I'un ou l'autre, les deux en
méme temps, etc.
Vopérateur T indique que les deux expressions situées avant et aprés doivent
tre toutes les deux vraies pour que l'ensemble le soit aussi.
L’opérateur OU indique que seule l'une des deux expressions, que ce soit celle
située avant ou celle située aprés, doit &tre vraie pour que l'expression compléte
soit vraie aussi.
Le NON est Ia négation. Si l’expression était vraie elle devient fausse et vice
versa.
64 | Algorithmiqueaa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.aa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.aa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.Chapitre 2
© Les langages réagissent différemment selon les comparaisons et les types des
données comparées. La encore, prenez garde 4 ne pas mélanger les types. Aus-
si, si en pseudo-code algorithmique les chaines de caractéres peuvent étre
comparées avec tous les opérateurs, prenez garde a I'interprétation qui en est
faite par les langages. En C notamment (et entre autres) il faut passer par des
fonctions spécialisées.
a, L’égalité
Lopérateur d'égalité s'écrit avec le signe et sert a vérifier si les deux valeurs a
droite et a gauche sont identiques, c’est-a-dire qu’elles ont la méme valeur. Dans
cet exemple, 'expression a=b est vraie, mais a=c est fausse.
PROGRAMME EGALE
VAR
a,b, crentiers
DEBUT
aes
bes
ce10
Afficher a=b
Afficher a=c
FIN
Il ne faut surtout pas confondre, tant en algorithmique que dans les langages de
programmation, l'opérateur d'affectation *?" et l'opérateur d’égalité "=". En mathé-
matique et en langage courant, a=b peut avoir deux significations : soit a recoit la
valeur de b, soit on cherche a vérifier si a et b sont égaux. Laquelle est la bonne ?
Dans un langage comme le BASIC, I'interprétation du signe "=" dépend du
contexte. Avec une variable avant et hors contexte de condition, c’est une affecta-
tion. Dans une expression conditionnelle, c'est une comparaison. Dur de s'y retrou-
ver ! C'est pour cela que certains langages comme C, C++, Java ou encore PHP
utilisent l'opérateur d’égalité ', deux fois égal, pour ne pas le confondre avec
Vopérateur d'affectation "='
Dans ces langages :
asb=c
est une expression valable qui signifie que a recoit la valeur de b qui elle-méme
recoit la valeur de c. La variable b est affectée en premier, puis a. Les trois varia-
bles disposent de la méme valeur a la fin.
asb=sc
68 | Algorithmiqueaa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.aa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.aa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.Chapitre 2
C. Pour aller plus loin
1. Les nombres négatifs
Un nombre signé par exemple sur 8 bits, contient un bit réservé pour le signe.
Crest en tout cas ainsi qu’on vous le présente pour plus de compréhension. Géné-
ralement cest le bit de poids fort, le plus A gauche, qui sert pour le signe : 4 0 le
nombre est positif, 2 1 il est négatif.
Par exemple -9,,9) devrait étre représenté par 10001001,,,. Cette représentation
pratique pour le lecteur ne l'est cependant absolument pas pour |'ordinateur. Addi-
tionnez -9 et 30, vous obtenez 21.
En binaire, 30 équivaut 4 00011110. Le binaire s'additionne comme le décimal :
1+1=10 donc retenue de 1 et ainsi de suite :
00011110 (30)
+10001001 (-9)
10100111 (-39)
ll y a un probléme ! Vous devriez obtenir 21 soit 00010101 ! C'est qu’en réalité
un nombre négatif n'est pas représenté comme ceci. L’ordinateur "ruse" avec les
manipulations binaires. L’astuce consiste 4 prendre le complément a un de la
valeur binaire en valeur absolue (-9 => 9) et de lui ajouter un (on obtient au final
un complément 4 deux). Le complément a un consiste 4 remplacer tous les zéros
(0) par des un (1) et tous les 1 par des 0.
11111111 (complément a un)
00001001 (9)
=11110110 (tout est inversé)
+00000001 (+1)
=11110111 (équivaut a -9 représentation machine)
© si vous additionnez un nombre avec son complément & deux, vous obtenez 0
(plus une retenue).
Maintenant, additionnez ce résultat 4 30 :
11110111 (équivaut a -9 représentation machine)
+00011110 (30)
=00010101 (21 - plus une retenue)
Ea Algorithmiqueaa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.aa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.aa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.Chapitre 2
3551723
=1°x(1+ a yx ghee
=
3551723, o>
* 398608 *?
2
182.1949920654296875
a
Le codage d'un réel sur 32 bits améne deux remarques :
La taille de la mantisse limite la précision pour des nombres de grande valeur,
car pl
ABS
a | Algorithmiqueaa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.aa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.aa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.Chapitre 3
Finsi
Finsi
FIN
Peut-étre trouvez-vous cette syntaxe trop longue et surtout peu lisible. Une astuce
consiste a tracer des traits verticaux allant des Si aux FinSi pour ne pas s'y perdre.
Crest d’ailleurs recommandé par certains professeurs d’algorithmique, y compris
pour les boucles (abordées dans un prochain chapitre). L'algorithme ci-dessus est
parfaitement valable et d'une syntaxe correcte. Cependant, il est possible de faire
plus concis avec la forme suivante.
Si booléen Alors
Bloc d’ instructions 1
SinonSi booléen Alors
Bloc d’ instructions 2
SinonSi booléen Alors
Bloc d/ instructions n
Sinon
Bloc d’ instruction final
FinSi
Cette forme est plus propre, plus lisible et évite de se mélanger les pinceaux. De
multiples conditions sont testées. Si la premiére n'est pas vraie, on passe a la
deuxiéme, puis a la troisiéme et ainsi de suite, jusqu’a ce qu'une condition soit
vérifiée. Dans le cas contraire, c'est fe bloc d’instructions final qui est exécuté. Les
tests du précédent exemple doivent donc étre réécrits comme ceci :
Si ecart=0 Alors
Afficher "Bravo !"
SinonSi ecart<5 Alors
Afficher "Bouillant"
SinonSi ecart<10 Alors
Afficher "Chaud"
SinonSi ecart<15 Alors
Afficher "Tiéde"
Sinon
Afficher "Froid"
Finsi
Voici le code correspondant en PHP :
imbrique
Ea Algorithmiqueaa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.aa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.aa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.Chapitre 3
En PHP la structure équivalente est le "switch() ... case".
switch(variable) {
case valeurl : ; break ;
case valeur2 : .. ; break ;
default : ;
}
Chaque valeur case correspond a une valeur possible de la variable du switch. Si
plusieurs instructions sont présentes, il est préférable de les placer entre accolades.
Le break est pour une fois utile et fortement conseillé. En effet si PHP tombe sur
une correspondance, par exemple valeurl, et si aucun break n'est présent, alors il
va exécuter toutes les instructions, jusqu'en bas, ou jusqu’é ce qu'il rencontre un
break. En pratique, les instructions prévues pour valeur2, valeur3, etc, sont exécu-
tées. Le default est I'action par défaut si aucune valeur case n'est vérifié
bissextile
ag Algorithmiqueaa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.aa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.aa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.Chapitre 3 EER
Smois=$ GET{'mois'];
Sannee=§_GET{'annee' ];
switch ($mois) [
case l:case 3:case S:case T:case B:case 10: {
if(Sjour==31) (
Sjour=1;
Smoist+;
} else $jourt+;
break;
}
case 4:case 6:case 9:case 11: [
A£(Sjour==30) (
Sjour=1;
Smois++;
} else Sjourt+;
break;
)
case 2: {
4£( (Sannee%4—-0) && ((Sannees400--0) || (Sannee%100>0)) ) {
{
} else $jourt+;
} else (
if($jou
Siou
Smoist+;
) else Sjourtt;
1
break;
gmoi
Sannee++;
} else $jourt+;
}
}
echo "Demain est le $jour/Smois/Gannee";
}
2
aa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.aa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.aa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.Chapitre 3
Les tests pour optimiser
Etes-vous surpris par la forme que revét cet algorithme ? Probablement car il n'y a
aucun test d'effectué. La question se pose : sont-ils dans ce cas vraiment nécessai-
res ? La réponse ne coule pas de source. Rappelez-vous qu'il ne suffit pas qu’un
algorithme fonctionne, mais qu’il fonctionne vite, bien et qu'il soit économe. Est-ce
le cas ? Cet algorithme effectue neuf calculs : additions, divisions et modulos. Si
‘on ajoute des tests, on ajoute des instructions et l'algorithme devient plus long. Or,
vous aurez |'occasion de le voir dans les chapitres suivants, la complexité des algo-
rithmes n’est pas liée a leur longueur. Certains sont trés courts (comme celui-ci) et
pourtant trés gourmand en ressources. Inversement, d'autres sont longs et
semblent compliqués pour un résultat de grande rapidité.
Un test bien posé peut éviter des calculs inutiles. Un calcul est gourmand en
temps machine : le microprocesseur travaille plus longtemps en faisant des divi-
sions et des modulos qu'en comparant deux valeurs : elles sont égales ou non et
dans le cas de nombres, il suffit de faire un ET pour voir si cela retourne la méme
valeur, une opération élémentaire tres rapide, bien plus que le moindre calcul.
Autrement dit, vous avez tout intérét & faire des tests quand ceux-ci peuvent per-
mettre d’éviter des calculs lourds.
PROGRAMME HEUREZ
VAR
jours, heures,minutes, secondes, nbsec:entier
DEBUT
heurese17
minutese55
secondes¢48
Afficher "Combien de secondes en plus 2?"
Saisir nbsec
secondese-secondes+nbsec
Si secondes>59 Alors
minutes¢minutes+(secondes / 60)
secondest-seconde % 60
Si minutes>59 Alors
heurestheures+ (minutes / 60)
minutese-minutes % 60
Si heures>23 Alors
joursehevres / 24
heurestheures % 24
Ee Algorithmiqueaa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.aa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.aa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.Chapitre 3
2. Petites erreurs, grosses conséquences
Comprenez-vous maintenant l'importance de la logique formelle et de bien écrire
les tests et conditions dans un algorithme ?
Pour vous conforter un peu voici deux exemples de programmes mal écrits et de
leurs désastreuses conséquences.
a. Ariane 5
Le 4 juin 1996 un bug d’un programme de la premiére fusée Ariane 5 a provoqué
sa destruction aprés 40 secondes de vol. Le programme en question contrdlait les
gyroscopes (qui indiquent l’orientation) de la fusée. Il venait d’Ariane 4 et n'avait
pas été testé ni modifié pour Ariane 5. En gros, un nombre de 64 bits a été
converti en 16 bits. Evidemment cela ne “rentre pas" et les valeurs retournées par
ce programme sont devenus aberrantes. Or ce programme était critique et n’aurait
jamais dQ retourner de valeurs impossibles. Les données retournées n’étaient pas
testées et vérifiées par le programme central de calcul de vol qui les prenaient pour
argent comptant et les interprétaient telles quelles. Sur un nombre signé, le dernier
bit correspond au signe. Lorsque les 16 bits ont été remplis, le dernier bit est pas-
sé a un. Le programme a recu une indication comme quoi la fusée avait changé de
sens (pointait vers le bas) et a orienté les tuyéres des réacteurs en les braquant &
fond pour rectifier une situation totalement fausse. La fusée a donc subi a un mo-
ment donné de par la poussée et sa position, des forces aérodynamiques telles que
sa destruction est devenue inévitable. Le comble ? Le programme des gyroscopes
ne devait tre utilisé que durant le compte a rebours et uniquement sur les
modéles Ariane 3 ! Autrement dit, il n’aurait jamais dd étre présent ni fonctionner
en vol.
b. Mars Climate Orbiter
Lautre exemple touche encore au domaine spatial. Le 11 décembre 1998 la
NASA langa une sonde en direction de Mars : Mars Climate Orbiter (MCO), dans le
but d’étudier le climat martien. La sonde arriva en insertion orbitale (mise en orbite
autour de Mars) le 23 septembre 1999. La sonde devait allumer son moteur prin-
cipal un bon quart d’heure, passer derriére la planéte (perte de contact avec la
Terre) puis de nouveau devant (reprise de contact). Le contact n'a jamais repris.
Pourquoi ? Parce que lors des calculs nécessaires a cette insertion sur orbite, MCO
a fait appel 4 un programme issu d'un autre fournisseur (Lockheed Martin). Or
MCO programmé par la NASA utilisait le systéme métrique (Newtons par seconde)
Ral Aigorithmiqueaa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.aa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.aa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.Chapitre 3
c. La loi ET
Vous la connaissez déja depuis le chapitre Les variables et opérateurs et l'opéra-
teur logique associé. La loi ET est aussi appelée la conjonction. Elle s'énonce ain-
si:
a ET b est VRAI si et seulement si a est VRAI et b est VRAI
La loi ET utilise une notation particuliére différente selon le champ d'application :
- "(le point) : a.b
= "A" saab
- "& , "&&" ou "AND" en programmation, selon les langages.
La suite du chapitre utilisera la premiére notation avec le point. Cette loi est sou-
vent associée a une vraie multiplication, car O*n vaut toujours 0. Cependant atten-
tion, certaines propriétés ne s'appliquent pas du tout de la méme manieére !
La loi ET peut étre décrite sous forme de table, a ne pas confondre avec une table
de vérité. Elle ressemble plut6t 4 une table de multiplication...
Loi ET
ab |0 1
o 0 0
1 0 i
d. La loi OU
Vous connaissez aussi cette loi, rencontrée au chapitre Les variables et opérateurs
avec l'opérateur logique associé OU. La loi OU est aussi appelée la disjonction.
Vous trouvez parfois aussi "disjonction inclusive" afin de la différencier d'un autre
opérateur. Elle s'énonce ainsi :
a OU b est VRAI si et seulement si a est VRAI ou b est VRAI
Notez que le OU étant inclusif (on y vient), si a et b sont VRAIS tous les deux, a
QU b est VRAI aussi. Du moment qu’au moins l'un des deux est vrai, a OU b est
VRAI.
Les notations suivantes sont utilisées
- "+" (signe plus) : a+b
> "Viz avb
Ee a a Algorithmiqueaa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.aa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.aa
You have either reached a page that is unavailable for viewing or reached your viewing limit for this
book.Chapitre 3
Le théoréme de De Morgan
Comme tout algébre, celui de Boole dispose aussi de ses théorémes. Le théoréme
de De Morgan établit deux vérités sympathiques qui sont souvent utiles pour ré-
duire des calculs booléens et aussi dans |'établissement des tests et conditions. Ce
sont en fait les propriétés associées au contraire (NON, négation). Prenez la table
de vérité suivante :
a b_ | atb | -(a+b)
0 0 0 1
0 iu 1 0
1 oO 1, oO
1 1 1 oO
Prenez maintenant cette seconde table de vérité :
Peale ebe se eas |
oO 0 1 1 1
Oo 1 1 0 0
1 oO oO 1 0
1 1 Oo O 0
Comparez les derniéres colonnes et vous obtenez |'égalité suivante :
a(a+b)=-a.9b
Dans les deux cas, le résultat sera VRAI uniquement si a ET b sont FAUX.
De la méme maniére, avec une table de vérité plus compléte :
a |b | ab | =p) | =a | sb | -at+-b |
o jo fo fa 1 1 1
0 1 oO 1 2 0 1
1 fo fo fi 0 1 1
1 |i fo fo o lo Q
Comparez la colonne centrale avec la colonne finale et vous obtenez :
=(a.b)=7a+—-b
Dans les deux cas, le résultat sera VRAI seulement si a OU b sont FAUX.
Eq AlgorithmiqueYou might also like The Hobbit The Hobbit
Rating: 4.5 out of 5 stars
4.5/5 (25200)
The Hobbit The Hobbit
Rating: 4.5 out of 5 stars
4.5/5 (24589)
Good Omens Good Omens
Rating: 4.5 out of 5 stars
4.5/5 (12072)