Techniques fondamentales de programmation (Exemples en PHP ...

19
Olivier ROLLET Sébastien ROHAUT Algorithmique Techniques fondamentales de programmation Exemples en PHP (nombreux exercices corrigés) 2 ième édition BTS, DUT Informatique

Transcript of Techniques fondamentales de programmation (Exemples en PHP ...

Page 1: Techniques fondamentales de programmation (Exemples en PHP ...

ISBN

: 97

8-2-

7460

-943

2-1

29,9

0 € Al

gorit

hmiq

ue (a

vec

des

exem

ples

en

PHP)

Pour plus d’informations :

Olivier ROLLETSébastien ROHAUT

Algorithmique Techniques fondamentales

de programmation

Exemples en PHP

(nombreux exercices corrigés)

2ième édition

Nouvelle édition

BTS, DUT Informatique

Ce livre sur l’algorithmique s’adresse à toute personne désireuse de maîtriser les bases essentielles de la programmation. Pour ap-prendre à programmer, il faut d’abord comprendre ce qu’est vrai-ment un ordinateur, comment il fonctionne et surtout comment il peut faire fonctionner des programmes, comment il manipule et stocke les données et les instructions, quelle est sa logique. Alors, au fur et à mesure, le reste devient évidence : variables, tests, condi-tions, boucles, tableaux, fonctions, fichiers, jusqu’aux notions avan-cées comme les pointeurs et les objets.

Dans ce livre, le langage algorithmique (ou la syntaxe du pseudo-code des algorithmes) reprend celui couramment utilisé dans les écoles d’informatique et dans les formations comme les BTS, DUT, classes préparatoires, premières années d’ingénierie à qui ce livre est en partie destiné et conseillé.

Une fois les notions de base acquises, le lecteur trouvera dans ce livre de quoi évoluer vers des notions plus avancées : deux cha-pitres, l’un sur les pointeurs et les références, l’autre sur les arbres et les objets, ouvrent les portes de la programmation dans des lan-gages évolués et puissants comme le C, le C++, Java et PHP. De nombreux exercices ponctuent chaque chapitre.

La plupart des algorithmes de ce livre sont traduits en PHP et les sources, directement utilisables, sont disponibles en téléchargement sur le site www.editions-eni.fr.

Titulaire d’un diplôme d’ingé-nieur maître en Génie électrique et Informatique Industrielle, Olivier ROLLET a travaillé comme développeur sur de nombreux projets de sites web pendant 12 ans. Il est au-jourd’hui formateur dans le do-maine du développement autour des nouvelles technologies web et connaît parfaitement les at-tentes des lecteurs néophytes.

Après 15 années passées en SSII, Sébastien ROHAUT est aujourd’hui Ingénieur Système au sein d’un grand groupe fran-çais. Il a également enseigné pendant près de 11 ans à des classes préparatoires et d’ingé-nieurs, notamment dans le cadre de la préparation aux exa-mens Linux.

Algorithmique Techniques fondamentales de programmation (Exemples en PHP)

Téléchargementwww.editions-eni.fr.fr

sur www.editions-eni.fr : b Le code source des

solutions des exercices proposés dans le livre.

Les chapitres du livre

Avant-propos • Introduction à l’algorithmique • Les variables et opérateurs • Test et logique booléenne • Les boucles • Les tableaux et structures • Les sous-programmes • Les fichiers • Notions avan-cées • Une approche de l’objet • Corrigés des exercices

Page 2: Techniques fondamentales de programmation (Exemples en PHP ...

1Table des matières

Avant-propos

Chapitre 1Introduction à l'algorithmique

1. Les fondements de l’informatique . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131.1 Architecture de Von Neumann . . . . . . . . . . . . . . . . . . . . . . . . . . 131.2 La machine de Turing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171.3 Représentation interne des instructions et des données . . . . . . 19

1.3.1 Le binaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191.3.2 Les octets et les mots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221.3.3 L’hexadécimal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

2. L’algorithmique. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242.1 Programmer, c’est un art . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242.2 Définition : l’algorithme est une recette . . . . . . . . . . . . . . . . . . . 262.3 Pourquoi utiliser un algorithme ? . . . . . . . . . . . . . . . . . . . . . . . . 272.4 Le formalisme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

2.4.1 La représentation graphique . . . . . . . . . . . . . . . . . . . . . . . 292.4.2 L’algorithme sous forme de texte . . . . . . . . . . . . . . . . . . . 30

2.5 La complexité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

3. Les langages d’implémentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.1 Quel langage ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.2 Classifications des langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

3.2.1 Haut niveau, bas niveau. . . . . . . . . . . . . . . . . . . . . . . . . . . 383.2.2 Diverses classifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393.2.3 Compilé ou interprété . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

Les éléments à télécharger sont disponibles à l'adresse suivante :http://www.editions-eni.fr

Saisissez la référence ENI de l'ouvrage RI2PALG dans la zone de recherche et validez. Cliquez sur le titre du livre puis sur le bouton de téléchargement.

Page 3: Techniques fondamentales de programmation (Exemples en PHP ...

2(avec des exemples en PHP)

Algorithmique

3.3 La machine virtuelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413.4 PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

3.4.1 Les avantages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423.4.2 Historique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423.4.3 Informations pratiques . . . . . . . . . . . . . . . . . . . . . . . . . . . 433.4.4 Pages dynamiques. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443.4.5 Installer le nécessaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443.4.6 Un premier programme PHP . . . . . . . . . . . . . . . . . . . . . . . 46

4. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

Chapitre 2Les variables et opérateurs

1. Les variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491.2 Déclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521.3 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

1.3.1 Les nombres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531.3.2 Autres types numériques . . . . . . . . . . . . . . . . . . . . . . . . . . 561.3.3 Les caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571.3.4 Le type booléen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

1.4 Affectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601.4.1 Affectation de valeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601.4.2 Affectation de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

1.5 Saisie et affichage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 641.6 Les constantes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

2. Opérateurs et calculs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682.1 Les affectations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682.2 Les opérateurs arithmétiques. . . . . . . . . . . . . . . . . . . . . . . . . . . . 682.3 Les opérateurs booléens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 742.4 Les opérateurs de comparaison . . . . . . . . . . . . . . . . . . . . . . . . . . 77

2.4.1 L’égalité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 772.4.2 La différence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

Page 4: Techniques fondamentales de programmation (Exemples en PHP ...

3Table des matières

2.4.3 Inférieur, supérieur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 792.5 Le cas des chaînes de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . 80

3. Pour aller plus loin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 813.1 Les nombres négatifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 813.2 La représentation des nombres réels . . . . . . . . . . . . . . . . . . . . . . 833.3 Les dates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 873.4 Les caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

4. Types et langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904.1 Langages typés ou non . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904.2 La gestion de la mémoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

5. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

Chapitre 3Tests et logique booléenne

1. Les tests et conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 951.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 951.2 Que tester ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 971.3 Tests SI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

1.3.1 Forme simple. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 981.3.2 Forme complexe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

1.4 Tests imbriqués. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1021.5 Choix multiples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1061.6 Des exemples complets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

1.6.1 Le lendemain d’une date . . . . . . . . . . . . . . . . . . . . . . . . . 1091.6.2 La validité d’une date . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1131.6.3 L’heure dans n secondes . . . . . . . . . . . . . . . . . . . . . . . . . . 114

2. L’algèbre booléen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1192.1 L’origine des tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1192.2 Petites erreurs, grosses conséquences . . . . . . . . . . . . . . . . . . . . 121

2.2.1 Ariane 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1212.2.2 Mars Climate Orbiter. . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

Page 5: Techniques fondamentales de programmation (Exemples en PHP ...

4(avec des exemples en PHP)

Algorithmique

2.3 George Boole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1222.4 L’algèbre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

2.4.1 Établir une communication . . . . . . . . . . . . . . . . . . . . . . . 1232.4.2 La vérité. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1252.4.3 La loi ET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1252.4.4 La loi OU. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1262.4.5 Le contraire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1272.4.6 Les propriétés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1272.4.7 Quelques fonctions logiques . . . . . . . . . . . . . . . . . . . . . . 1312.4.8 Avec plus de deux variables . . . . . . . . . . . . . . . . . . . . . . . 134

2.5 Une dernière précision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

3. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

Chapitre 4Les boucles

1. Les structures itératives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1411.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1411.2 Quelques usages simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142

2. Tant Que. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1432.1 Structure générale. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1432.2 Boucles infinies et break. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1452.3 Des exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

2.3.1 Une table de multiplication . . . . . . . . . . . . . . . . . . . . . . . 1472.3.2 Une factorielle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1482.3.3 x à la puissance y . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1492.3.4 Toutes les tables de multiplication . . . . . . . . . . . . . . . . . 1522.3.5 Saisie de notes et calcul de moyennes . . . . . . . . . . . . . . . 1532.3.6 Rendez la monnaie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1592.3.7 Trois boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

Page 6: Techniques fondamentales de programmation (Exemples en PHP ...

5Table des matières

3. Répéter … Jusqu’à . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1643.1 Différences fondamentales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1643.2 Quelques exemples adaptés . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166

3.2.1 La factorielle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1663.2.2 Les trois boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167

4. Pour … Fin Pour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1684.1 Une structure pour compter… . . . . . . . . . . . . . . . . . . . . . . . . . 1684.2 … mais pas indispensable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1694.3 Quelle structure choisir ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1694.4 Un piège à éviter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1704.5 Quelques exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171

4.5.1 De nouveau trois boucles . . . . . . . . . . . . . . . . . . . . . . . . . 1714.5.2 La factorielle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1724.5.3 Racine carrée avec précision. . . . . . . . . . . . . . . . . . . . . . . 1734.5.4 Calcul du nombre PI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176

5. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178

Chapitre 5Les tableaux et structures

1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1811.1 Principe et définitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181

1.1.1 Simplifier les variables . . . . . . . . . . . . . . . . . . . . . . . . . . . 1811.1.2 Les dimensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1831.1.3 Les types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1841.1.4 Déclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1841.1.5 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1851.1.6 Les tableaux dynamiques . . . . . . . . . . . . . . . . . . . . . . . . . 186

1.2 PHP et les tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1871.3 Représentation en mémoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

1.3.1 Représentation linéaire. . . . . . . . . . . . . . . . . . . . . . . . . . . 1911.3.2 Représentation par référence . . . . . . . . . . . . . . . . . . . . . . 193

Page 7: Techniques fondamentales de programmation (Exemples en PHP ...

6(avec des exemples en PHP)

Algorithmique

2. Manipulations simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1952.1 Recherche d’un élément . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1952.2 Le plus grand/petit, moyenne . . . . . . . . . . . . . . . . . . . . . . . . . . 1972.3 Le morpion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

3. Algorithmes avancés. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2033.1 Les algorithmes des tris . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

3.1.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2033.1.2 Le tri par création . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2043.1.3 Le tri par sélection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2043.1.4 Le tri à bulles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2063.1.5 Le tri par insertion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2103.1.6 Le tri Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2133.1.7 Le tri Batcher. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

3.2 Recherche par dichotomie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216

4. Structures et enregistrements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2194.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2194.2 Déclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220

4.2.1 Type structuré . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2204.2.2 Enregistrement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

4.3 Utiliser les enregistrements . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2224.3.1 Utiliser les champs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2224.3.2 Un enregistrement dans une structure . . . . . . . . . . . . . . 2244.3.3 Un tableau dans une structure . . . . . . . . . . . . . . . . . . . . 225

4.4 Les tableaux d’enregistrements . . . . . . . . . . . . . . . . . . . . . . . . . 2274.4.1 Les tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2274.4.2 Une table comme champ . . . . . . . . . . . . . . . . . . . . . . . . . 228

4.5 Et PHP ?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229

5. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231

Page 8: Techniques fondamentales de programmation (Exemples en PHP ...

7Table des matières

Chapitre 6Les sous-programmes

1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2351.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2351.2 Déclaration et définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237

1.2.1 Dans un algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2371.2.2 En PHP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238

1.3 Appel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2391.4 Fonctions et procédures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240

1.4.1 Les procédures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2411.4.2 Les fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241

1.5 Variables locales et globales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2441.5.1 Les variables locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2441.5.2 Les variables globales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2451.5.3 Variables globales et PHP . . . . . . . . . . . . . . . . . . . . . . . . . 246

1.6 Paramètres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2471.6.1 Les procédures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2471.6.2 Les fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2501.6.3 Paramètres et PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2521.6.4 Petite application fonctionnelle. . . . . . . . . . . . . . . . . . . . 253

1.7 Sous-programmes prédéfinis . . . . . . . . . . . . . . . . . . . . . . . . . . . 2561.7.1 Un choix important . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2561.7.2 Quelques exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257

1.8 Dernier cas : les tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261

2. Les sous-programmes récursifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2632.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2632.2 Un premier exemple : la factorielle . . . . . . . . . . . . . . . . . . . . . . 2642.3 Un exemple pratique : les tours de Hanoi. . . . . . . . . . . . . . . . . 269

3. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271

Page 9: Techniques fondamentales de programmation (Exemples en PHP ...

8(avec des exemples en PHP)

Algorithmique

Chapitre 7Les fichiers

1. Les différents fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2731.1 Préambule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2731.2 Problématique. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2741.3 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2751.4 Les formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275

1.4.1 Types de contenus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2751.4.2 Le fichier binaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2771.4.3 Le fichier texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2781.4.4 Quel format utiliser ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280

1.5 Les accès aux fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2811.5.1 Séquentiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2811.5.2 Accès direct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2821.5.3 Indexé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2821.5.4 Autre ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282

2. Les enregistrements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2832.1 Les délimiteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2832.2 Largeur fixe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2862.3 Principes d’accès . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287

2.3.1 Étapes de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2872.3.2 Identificateurs de fichiers et canaux . . . . . . . . . . . . . . . . 2882.3.3 Les modes d’ouverture . . . . . . . . . . . . . . . . . . . . . . . . . . . 289

3. Fichier texte séquentiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2903.1 Ouvrir et fermer un fichier. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2903.2 Lire et écrire des enregistrements . . . . . . . . . . . . . . . . . . . . . . . 291

3.2.1 Lecture. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2913.2.2 Écriture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293

3.3 Les enregistrements structurés . . . . . . . . . . . . . . . . . . . . . . . . . 2973.4 Exemple en PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300

4. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302

Page 10: Techniques fondamentales de programmation (Exemples en PHP ...

9Table des matières

Chapitre 8Notions avancées

1. Les pointeurs et références . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3031.1 Rappels sur la mémoire et les données . . . . . . . . . . . . . . . . . . . 303

1.1.1 Structure de la mémoire. . . . . . . . . . . . . . . . . . . . . . . . . . 3031.1.2 PHP : des limites qui n’en sont pas . . . . . . . . . . . . . . . . . 3051.1.3 Brefs exemples en C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305

1.2 Le pointeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3061.2.1 Principe et définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3061.2.2 Le C roi des pointeurs. . . . . . . . . . . . . . . . . . . . . . . . . . . . 3081.2.3 Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309

1.3 Notation algorithmique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3121.3.1 Déclarer et utiliser les pointeurs . . . . . . . . . . . . . . . . . . . 3121.3.2 Allocation dynamique . . . . . . . . . . . . . . . . . . . . . . . . . . . 314

1.4 PHP et les références. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3161.4.1 Différences entre le C et PHP . . . . . . . . . . . . . . . . . . . . . 3161.4.2 Les références . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3171.4.3 Références sur structures . . . . . . . . . . . . . . . . . . . . . . . . . 3201.4.4 Le piège en PHP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3211.4.5 La valeur null . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322

2. Les listes chaînées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3242.1 Listes chaînées simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324

2.1.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3242.1.2 Création. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3272.1.3 Parcours de la liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3292.1.4 Recherche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3302.1.5 Ajout d’un élément. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3312.1.6 Suppression d’un élément . . . . . . . . . . . . . . . . . . . . . . . . 3352.1.7 Supprimer toute la liste . . . . . . . . . . . . . . . . . . . . . . . . . . 3382.1.8 Parcours récursif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338

2.2 L’implémentation en PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339

Page 11: Techniques fondamentales de programmation (Exemples en PHP ...

10(avec des exemples en PHP)

Algorithmique

2.3 Autres exemples de listes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3432.3.1 Listes circulaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3432.3.2 Listes d’éléments triés . . . . . . . . . . . . . . . . . . . . . . . . . . . 3432.3.3 Listes doublement chaînées . . . . . . . . . . . . . . . . . . . . . . . 3432.3.4 Files et piles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344

3. Les arbres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3453.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3453.2 Définitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347

3.2.1 Base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3473.2.2 Terminologie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3473.2.3 Description horizontale . . . . . . . . . . . . . . . . . . . . . . . . . . 3483.2.4 Description verticale . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3483.2.5 L’arbre binaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348

3.3 Parcours d’un arbre. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3493.4 Arbre binaire ordonné . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352

3.4.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3523.4.2 Recherche d’un élément . . . . . . . . . . . . . . . . . . . . . . . . . . 3523.4.3 Ajout d’un élément. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3543.4.4 Suppression d’un nœud . . . . . . . . . . . . . . . . . . . . . . . . . . 355

3.5 Exemples de tri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3563.5.1 Tri par fusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3563.5.2 Tri rapide. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357

4. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359

Chapitre 9Une approche de l'objet

1. Principe de l’objet, une notion évidente . . . . . . . . . . . . . . . . . . . . . . 3611.1 Avant de continuer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3611.2 Rappels sur la programmation procédurale . . . . . . . . . . . . . . . 362

1.2.1 Les données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3621.2.2 Les traitements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363

Page 12: Techniques fondamentales de programmation (Exemples en PHP ...

11Table des matières

1.3 L’objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3631.3.1 Dans la vie courante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3631.3.2 En informatique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364

1.4 Classe, objets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3671.5 Déclaration et accès . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3691.6 Les méthodes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3711.7 Portée des membres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3721.8 Encapsulation des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3741.9 L’héritage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376

1.9.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3761.9.2 Commerce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3781.9.3 Hiérarchie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3791.9.4 Simple ou multiple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380

1.10 Le polymorphisme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3811.10.1Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3811.10.2Le polymorphisme ad hoc . . . . . . . . . . . . . . . . . . . . . . . . 3811.10.3Le polymorphisme d’héritage . . . . . . . . . . . . . . . . . . . . . 3821.10.4Le polymorphisme paramétrique. . . . . . . . . . . . . . . . . . . 384

2. Manipuler les objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3852.1 Les constructeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385

2.1.1 Déclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3852.1.2 Appel implicite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3862.1.3 L’héritage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388

2.2 Les destructeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3902.3 Les attributs statiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3912.4 Classes et méthodes abstraites . . . . . . . . . . . . . . . . . . . . . . . . . 3932.5 Interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396

3. L’objet en PHP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3983.1 Les langages objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3983.2 Déclaration des classes et objets . . . . . . . . . . . . . . . . . . . . . . . . 3993.3 Héritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4023.4 Interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404

Page 13: Techniques fondamentales de programmation (Exemples en PHP ...

12(avec des exemples en PHP)

Algorithmique

4. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407

Chapitre 10Corrigés des exercices

1. Introduction à l’algorithmique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413

2. Les variables et opérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415

3. Tests et logique booléenne. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420

4. Les boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427

5. Les tableaux et structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436

6. Les sous-programmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442

7. Les fichiers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446

8. Notions avancées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448

9. Une approche de l’objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475

Page 14: Techniques fondamentales de programmation (Exemples en PHP ...

95

Chapitre 3

Tests et logique booléenne

Tests et logique booléenne

1. Les tests et conditions

1.1 Principe

Dans le précédent chapitre, vous avez pu vous familiariser avec les expressionsmettant en place des opérateurs, qu’ils soient de calcul, de comparaison (l’éga-lité) ou booléens. Ces opérateurs et expressions trouvent tout leur sens unefois utilisés dans des conditions (qu’on appelle aussi des branchements condi-tionnels). Une expression évaluée est ou vraie (le résultat est différent de zéro)ou fausse. Suivant ce résultat, l’algorithme va effectuer une action, ou uneautre. C’est le principe de la condition.

Grâce aux opérateurs booléens, l’expression peut être composée : plusieursexpressions sont liées entre elles à l’aide d’un opérateur booléen, éventuelle-ment regroupées avec des parenthèses pour en modifier la priorité.

(a=1 OU (b*3=6)) ET c>10

est une expression tout à fait valable. Celle-ci sera vraie si chacun de ses com-posants respecte les conditions imposées. Cette expression est vraie si a vaut1 et c est supérieur à 10 ou si b vaut 2 (2*3=6) et c est supérieur à 10.

Page 15: Techniques fondamentales de programmation (Exemples en PHP ...

© E

dit

ions

EN

I -

All r

ights

rese

rved

96(avec des exemples en PHP)

Algorithmique

Reprenez l’algorithme du précédent chapitre qui calcule les deux résultatspossibles d’une équation du second degré. L’énoncé simplifié disait que pourdes raisons pratiques seul le cas où l’équation a deux solutions fonctionne.Autrement dit, l’algorithme n’est pas faux dans ce cas de figure, mais il estincomplet. Il manque des conditions pour tester la valeur du déterminant :celui-ci est-il positif, négatif ou nul ? Et dans ces cas, que faire et comment lefaire ?

Imaginez un second algorithme permettant de se rendre d’un point A à unpoint B. Vous n’allez pas le faire ici réellement, car c’est quelque chose de trèscomplexe sur un réseau routier important. De nombreux sites Internet vousproposent d’établir un trajet avec des indications. C’est le résultat qui est in-téressant. Les indications sont simples : allez tout droit, tournez à droite auprochain carrefour, faites trois kilomètres et au rond-point prenez la troisièmesortie direction B. Dans la plupart des cas, si vous suivez ce trajet vous arrivezà bon port. Mais quid des impondérables ? Par où allez-vous passer si la routeà droite au prochain carrefour est devenue un sens interdit (cela arrive parfois,y compris avec un GPS, prudence) ou que des travaux empêchent de prendrela troisième sortie du rond-point ?

Reprenez le trajet : allez tout droit. Si au prochain carrefour la route à droiteest en sens interdit : continuez tout droit puis prenez à droite au carrefour sui-vant puis à gauche sur deux kilomètres jusqu’au rond-point. Sinon : tournezà droite et faites trois kilomètres jusqu’au rond-point. Au rond-point, si lasortie vers B est libre, prenez cette sortie. Sinon, prenez vers C puis trois centsmètres plus loin tournez à droite vers B.

Ce petit parcours ne met pas uniquement en lumière la complexité d’un trajeten cas de détour, mais aussi les nombreuses conditions qui permettentd’établir un trajet en cas de problème. Si vous en possédez, certains logicielsde navigation par GPS disposent de possibilités d’itinéraire Bis, de trajectoired’évitement sur telle section, ou encore pour éviter les sections à péage.Pouvez-vous maintenant imaginer le nombre d’expressions à évaluer danstous ces cas de figure, en plus de la vitesse autorisée sur chaque route pouroptimiser l’heure d’arrivée ?

Page 16: Techniques fondamentales de programmation (Exemples en PHP ...

97Tests et logique booléenneChapitre 3

1.2 Que tester ?

Les opérateurs s’appliquent sur quasiment tous les types de données, y com-pris les chaînes de caractères, tout au moins en pseudo-code algorithmique.Vous pouvez donc quasiment tout tester. Par tester, comprenez ici évaluerune expression qui est une condition. Une condition est donc le fait d’effec-tuer des tests pour, en fonction du résultat de ceux-ci, effectuer certainesactions ou d’autres.

Une condition est donc une affirmation : l’algorithme et le programme en-suite détermineront si celle-ci est vraie, ou fausse.

Une condition retournant VRAI ou FAUX a comme résultat un booléen.

En règle générale, une condition est une comparaison même si en programma-tion une condition peut être décrite par une simple variable (ou même uneaffectation) par exemple. Pour rappel, une comparaison est une expressioncomposée de trois éléments :

– une première valeur : variable ou scalaire

– un opérateur de comparaison

– une seconde valeur : variable ou scalaire.

Les opérateurs de comparaison sont :

– L’égalité : =

– La différence : != ou <>

– Inférieur : <

– Inférieur ou égal : <=

– Supérieur : >

– Supérieur ou égal : >=

Le pseudo-code algorithmique n’interdit pas de comparer des chaînes de carac-tères. Évidemment, vous prendrez soin de ne pas mélanger les torchons et lesserviettes, en ne comparant que les variables de types compatibles. Dans unecondition une expression, quel que soit le résultat de celle-ci, sera toujoursévaluée comme étant soit vraie, soit fausse.

Page 17: Techniques fondamentales de programmation (Exemples en PHP ...

© E

dit

ions

EN

I -

All r

ights

rese

rved

98(avec des exemples en PHP)

Algorithmique

Remarque

L’opérateur d’affectation peut aussi être utilisé dans une condition. Dans cecas, si vous affectez 0 à une variable, l’expression sera fausse et si vous affec-tez n’importe quelle autre valeur, elle sera vraie.

En langage courant, il vous arrive de dire "choisissez un nombre entre 1 et 10".En mathématique, vous écrivez cela comme ceci :

1 ≤ nombre ≤ 10

Si vous écrivez ceci dans votre algorithme, attendez-vous à des résultats sur-prenants le jour où vous allez le convertir en véritable programme. En effet lesopérateurs de comparaison ont une priorité, ce que vous savez déjà, maisl’expression qu’ils composent est aussi souvent évaluée de gauche à droite. Sila variable nombre contient la valeur 15, voici ce qui ce passe :

– L’expression 1 = 15 est évaluée : elle est vraie.

– Et ensuite ? Tout va dépendre du langage, l’expression suivante vrai = 10peut être vraie aussi.

– Le résultat est épouvantable : la condition est vérifiée et le code correspon-dant va être exécuté !

Vous devez donc proscrire cette forme d’expression. Voici celles qui convien-nent dans ce cas :

nombre>=1 ET nombre<=10

Ou encore

1<=nombre ET nombre<=10

1.3 Tests SI

1.3.1 Forme simple

Il n’y a, en algorithmique, qu’une seule instruction de test, "Si", qui prendcependant deux formes : une simple et une complexe. Le test SI permet d’exé-cuter du code si la condition (la ou les expressions qui la composent) est vraie.

Page 18: Techniques fondamentales de programmation (Exemples en PHP ...

99Tests et logique booléenneChapitre 3

La forme simple est la suivante :

Si booléen Alors Bloc d’instructionsFinSi

Notez ici que le booléen est la condition. Comme indiqué précédemment, lacondition peut aussi être représentée par une seule variable. Si elle contient 0,elle représente le booléen FAUX, sinon le booléen VRAI.

Que se passe-t-il si la condition est vraie ? Le bloc d’instructions situé après le"Alors" est exécuté. Sa taille (le nombre d’instructions) n’a aucune impor-tance : de une ligne à n lignes, sans limite. Dans le cas contraire, le programmecontinue à l’instruction suivant le "FinSi". L’exemple suivant montrecomment obtenir la valeur absolue d’un nombre avec cette méthode.

PROGRAMME ABSVAR Nombre :entierDEBUT nombre -15 Si nombre<0 Alors nombre -nombre FinSi Afficher nombreFIN

En PHP, c’est le "if" qui doit être utilisé avec l’expression booléenne entreparenthèses. La syntaxe est celle-ci :

if(boolean) { /*code */ }

Si le code PHP ne tient que sur une ligne, les accolades peuvent être suppri-mées, comme dans l’exemple de la valeur absolue. Cet exemple montre uneseconde possibilité par les mécanismes offerts par les bibliothèques de fonc-tion de PHP.

<html>

<head><meta/>

<title>ABS</title>

</head>

<body>

<?php

$nombre=-15;

Page 19: Techniques fondamentales de programmation (Exemples en PHP ...

© E

dit

ions

EN

I -

All r

ights

rese

rved

100(avec des exemples en PHP)

Algorithmique

if($nombre<0) $nombre=-$nombre;

echo $nombre;

echo "<br />";

// seconde possibilitité

$nombre2=-32;

$nombre2=abs($nombre2);

echo $nombre2;

?>

</body>

</html>

1.3.2 Forme complexe

La forme complexe n’a de complexe que le nom. Il y a des cas où il faut exécuterquelques instructions si la condition est fausse sans vouloir passer tout de suiteà l’instruction située après le FinSi. Dans ce cas, utilisez la forme suivante :

Si booléen Alors Bloc d’instructionsSinon Bloc d’instructionsFinSi

Si la condition est vraie, le bloc d’instructions situé après le Alors est exécuté.Ceci ne diffère pas du tout de la première forme. Cependant, si la condition estfausse, cette fois c’est le bloc d’instructions situé après le Sinon qui est exécuté.Ensuite, le programme reprend le cours normal de son exécution après le FinSi.

Notez que vous auriez pu très bien faire un équivalent de la forme complexeen utilisant deux formes simples : la première avec la condition vraie, la se-conde avec la négation de cette condition. Mais ce n’est pas très joli, même sic’est correct. Retenez que :

– Si dans une forme complexe, l’un des deux blocs d’instructions est vide,alors transformez-la en forme simple : modifiez la condition en consé-quence.

– Laisser un bloc d’instructions vide dans une forme complexe n’est pasconseillé : c’est une grosse maladresse de programmation qui peut être faci-lement évitée, c’est un programme sale. Cependant, certains langagesl’autorisent, ce n’est pas une erreur ni même une faute lourde, mais ce n’estpas une raison…