Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Algorithmique - Techniques fondamentales de programmation
  3. Techniques fondamentales de programmation
Extrait - Algorithmique - Techniques fondamentales de programmation Exemples en PHP (nombreux exercices corrigés) (4e édition)
Extraits du livre
Algorithmique - Techniques fondamentales de programmation Exemples en PHP (nombreux exercices corrigés) (4e édition) Revenir à la page d'achat du livre

Corrigés des exercices

Introduction à l’algorithmique

Exercice 1

Pour convertir un nombre binaire en décimal, doit-on :

  • Ajouter les nombres ?

  • Utiliser les puissances de 2 selon le poids ?

  • Convertir les groupes de 4 bits ?

  • Ajouter les nombres et diviser par 2 ?

Solution

Utiliser les puissances de 2 selon le poids.

Exercice 2

Quelle est la valeur maximale d’un nombre codé en 16 bits sans tenir compte du signe ? Indiquez comment calculer cette valeur et exprimez le résultat en décimal et en hexadécimal.

Solution

La taille maximale d’un nombre sur 16 bits est de 216-1. Ce résultat est facilement trouvable comme ceci :

1*215 + 1*214 + 1*213 + … + 1*20

Ce qui donne 65535, le nombre maximal pouvant être stocké dans 16 bits, et non 65536 (216).

Sa représentation hexadécimale est FFFF.

Exercice 3

Convertissez le nombre décimal 3407 en binaire et en hexadécimal.

Solution

3407-2048 = 1359, donc on a 1 fois 2048 dans 3407

1359-1024 = 335 donc 1

335-512 = -177 donc 0

335-256 = 79 donc 1

79-128 = -49 donc 0

79-64 = 15 donc 1

15-32 = -17 donc 0

15-16 = -1 donc 0

15-8 = 7 donc 1

7-4 = 3 donc 1

3-2 = 1 donc 1

1-1 = 0 donc 1

Le résultat est donc 1101 0100 1111, soit 12 bits.

En hexadécimal, on peut partir du résultat binaire et se rapporter au tableau de ce livre pour trouver : D4F.

Exercice 4

Quel est l’intrus parmi les langages...

Les variables et opérateurs

Exercice 1

Quelles seront les valeurs des variables A et B après exécution des instructions suivantes ?

VAR 
A,B:entiers 
DEBUT 
AImages/flechegauche.PNG2 
BImages/flechegauche.PNGA+4 
AImages/flechegauche.PNG4 
FIN 

Solution

AImages/flechegauche.PNG2 

A=2, B n’a pas encore de valeur.

BImages/flechegauche.PNGA+4 

A=2, B=6.

AImages/flechegauche.PNG4 

A=4, B=6.

Exercice 2

Quelles seront les valeurs des variables A, B et C après exécution des instructions suivantes ?

VAR 
A,B,C:entiers 
DEBUT 
AImages/flechegauche.PNG1 
BImages/flechegauche.PNG3 
CImages/flechegauche.PNGA+B 
AImages/flechegauche.PNG5 
CImages/flechegauche.PNGB-A 
FIN 

Solution

AImages/flechegauche.PNG1 

A=1, B et C n’ont pas encore de valeur.

BImages/flechegauche.PNG3 

A=1, B=3, C n’a pas encore de valeur.

CImages/flechegauche.PNGA+B 

A=1, B=3, C=4.

AImages/flechegauche.PNG5 

A=5, B=3, C=4.

CImages/flechegauche.PNGB-A 

A=5, B=3, C=-2.

Exercice 3

Quelles seront les valeurs des variables A et B après exécution des instructions suivantes ?

VAR 
A,B:entiers 
DEBUT 
AImages/flechegauche.PNG2 
BImages/flechegauche.PNGA+3 
AImages/flechegauche.PNGA+5 
BImages/flechegauche.PNGA-4 
FIN 

Solution

AImages/flechegauche.PNG2 

A=2, B n’a pas encore de valeur.

BImages/flechegauche.PNGA+3 

A=2, B=5.

AImages/flechegauche.PNGA+5 

A=7, B=5.

BImages/flechegauche.PNGA-4 

A=7, B=3.

Exercice 4

Quelles sont les valeurs de A et B à la fin du code suivant ? Adaptez l’algorithme pour échanger les valeurs de A et B.

VAR 
A,B:entiers 
DEBUT 
AImages/flechegauche.PNG1 
BImages/flechegauche.PNG3 
AImages/flechegauche.PNGB 
BImages/flechegauche.PNGA 
FIN 

Solution

A=3, B=3

On pourrait croire que les deux valeurs sont échangées, mais ce n’est pas le cas car l’instruction AImages/flechegauche.PNGB écrase la variable A, qui perd définitivement sa valeur. Pour échanger les valeurs de A et B, il faudrait faire intervenir une troisième variable, une variable temporaire, pour stocker la valeur de A avant de l’écraser.
VAR 
A,B:entiers 
DEBUT 
AImages/flechegauche.PNG1 
BImages/flechegauche.PNG3 
CImages/flechegauche.PNGA 
AImages/flechegauche.PNGB 
BImages/flechegauche.PNGC 
FIN 

A=3...

Tests et logique booléenne

Exercice 1

Écrire un algorithme qui lira au clavier trois noms communs, et qui dira s’ils sont dans l’ordre alphabétique.

Solution

VAR  
a, b, c:chaîne  
DEBUT  
Afficher "1er nom ?"  
Saisir a  
Afficher "2ème nom ?"  
Saisir b 
Afficher "3ème nom ?"  
Saisir c 
 
Si a < b ET b < c Alors  
  Afficher "Les 3 noms sont dans l'ordre alphabétique" 
Sinon  
  Afficher "Les 3 noms ne sont pas dans l'ordre alphabétique" 
FinSi  
 
Fin 

Exercice 2

Écrire, avec des comparaisons, un algorithme qui lira au clavier les heures et les minutes, et qui affichera l’heure qu’il sera une minute plus tard. Par exemple, si l’utilisateur tape 20 puis 33, l’algorithme doit répondre :

"Dans une minute il sera 20 heure(s) 34 minute(s).

NB : on suppose que l’utilisateur entre une heure valide.

Solution

VAR 
h, m:entier 
DEBUT 
Afficher "Heure ?" 
Saisir h 
Afficher "Minute ?" 
Saisir m 
mImages/flechegauche.PNGm+1 
Si m = 60 Alors 
  m Images/flechegauche.PNG 0 
  h Images/flechegauche.PNG h + 1 
FinSi 
Si h = 24 Alors 
  h Images/flechegauche.PNG 0 
FinSi 
Afficher "Dans une minute il sera " + h + " heure(s) " + m + "minute(s)" 
Fin 

Dans l’instruction Afficher, le + sert à concaténer les chaînes de caractères ("Dans une minute il sera") et les variables (h ou bien m).

Exercice 3

Écrire le même algorithme, mais en utilisant deux variables booléennes pour vérifier si les minutes sont égales à 60 et les heures à 24, sans comparaisons dans les SI.

Solution

VAR 
h, m:entier 
boolH, boolM:booléens 
DEBUT 
Afficher "Heure ?" 
Saisir h 
Afficher "Minute ?" 
Saisir m 
mImages/flechegauche.PNGm+1 
boolMImages/flechegauche.PNGm = 60 
Si boolM Alors 
  m Images/flechegauche.PNG 0 
  h Images/flechegauche.PNG h + 1 
FinSi 
boolHImages/flechegauche.PNGh = 24 
Si boolH Alors 
  h Images/flechegauche.PNG 0 
FinSi 
Afficher "Dans une minute il sera " + h + " heure(s) " + m + "minute(s)" 
Fin 

Exercice 4

Écrire un algorithme qui détermine la catégorie sportive d’un utilisateur en fonction de son âge :

18 à 19 ans : junior

20 à 22 ans : espoir

23 à 39 ans : sénior

40 ans et plus : vétéran

Écrire le programme PHP équivalent.

Solution

VAR 
age:entier 
DEBUT 
Afficher "Age ?" 
Saisir age 
Si age>=40 Alors 
Afficher "vétéran" 
SinonSi age>=23 Alors 
Afficher "sénior" 
SinonSi age>=20 Alors 
Afficher "espoir" 
SinonSi age>=18 Alors 
Afficher "junior" 
FinSi 
FIN 

En PHP :

<html> 
  <head> 
    <title>catégorie sportive</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  </head> 
  <body> 
  <?php 
  if(!isset($_GET['age'])) { 
  ?>  
    <form method="GET"> 
      Entrez un age : <input type="text" size="4" name="age" /><br /> 
      <input type="submit" name="OK" /> 
    </form> 
  <?php 
  } else { 
    $age=$_GET['age']; 
    if($age>=40) echo "vétéran"; 
    else if($age>=23) echo "sénior"; 
    else if($age>=20) echo "espoir"; 
    else if($age>=18) echo "junior";   
  } 
  ?> 
  </body> 
</html> 

Exercice 5

Une compagnie d’assurance automobile doit appliquer une surprime suivant l’âge, le sexe et le nombre d’années de permis de la personne.

Les hommes de plus de 22 ans payent la surprime.

Les femmes entre 20 et 30 ans payent la surprime.

Les personnes ayant plus de cinq années de permis ne payent pas la surprime.

Écrire un algorithme qui détermine si la personne doit payer ou non la surprime. 

Écrire le programme PHP équivalent.

Solution

VAR 
age, year_number:entier 
sexe:chaîne 
DEBUT 
Afficher "Age ?" 
Saisir age 
Afficher "Nombre d'années de permis ?" 
Saisir year_number 
Afficher "Sexe ?" 
Saisir sexe 
C1 Images/flechegauche.PNG sexe = "M" ET age > 22 
C2 Images/flechegauche.PNG sexe = "F" ET (age > 20 ET age < 30) 
C3Images/flechegauche.PNG year_number < 5 
Si (C1 ou C2) et C3 Alors 
Afficher "surprime" 
Sinon 
Afficher "pas de surprime" 
FinSi 
FIN 

En PHP :

<html> 
  <head> 
   ...

Les boucles

Exercice 1

Écrire un algorithme qui demande un nombre de départ, et qui affiche ensuite la table de multiplication de ce nombre. Exemple avec le nombre 6 :

1+2+3+4+5+6 = 21 

Écrire le programme PHP équivalent.

Solution

VAR 
nombre, i, somme:entier  
DEBUT  
Afficher "Nombre ?"  
Saisir nombre  
somme = 0  
Pour i De 1 à nombre Faire  
  somme = somme + i  
FinPour  
Afficher "La somme des entiers de 1 à " + nombre + " est égale à " + 
somme  
FIN 

En PHP :

<html>  
  <head>  
    <title>somme</title>  
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  </head>  
  <body>  
  <?php  
  if(!isset($_GET['number'])) {  
  ?> 
    <form method="GET">       Entrez un nombre : <input type="text" size="4" name="number" /><br /> 
      <input type="submit" name="OK" />  
    </form>  
  <?php  
  } else {  
    $number=$_GET['number'];  
    $somme = 0; 
    for ($i=1;$i<=$number;$i++) {  
           $sum = $sum + $i;  
    } 
    echo "La somme des entiers de 1 à ".$number." est égale à ".$sum; 
  }  
  ?>  
  </body>  
</html> 

Exercice 2

Écrire un algorithme qui demande un nombre de départ, et qui affiche ensuite la table de multiplication de ce nombre. Exemple avec le nombre 6 :

Table de 6 :  
6 x 1 = 6  
6 x 2 = 12  
6 x 3 = 18  
... 

Écrire le programme PHP équivalent.

Solution

VAR  
nombre, i:entier  
DEBUT  
Afficher "Nombre ?"  
Saisir nombre  
Ecrire "Table de "+n  
Pour i De 1 à 10 Faire  
  Afficher N + " x " + i + " = " + n*i  
FinPour  
FIN 

En PHP :

<html> 
  <head> 
    <title>multiplication</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  </head> 
  <body> 
  <?php 
  if(!isset($_GET['number'])) { 
  ?>   
    <form method="GET"> 
      Entrez un nombre : <input type="text" size="4" name="number" /><br /> 
      <input type="submit" name="OK" /> 
    </form> 
  <?php 
  } else { 
    $number=$_GET['number'];  
    echo "Table de ".$number."<br />"; 
    for ($i=1;$i<=10;$i++) { 
          echo $number." X ".$i." = ".$number*$i."<br />"; 
    } 
  } 
  ?> 
  </body> 
</html> 

Exercice 3

Écrire un algorithme qui demande un nombre de départ, et qui affiche ensuite la factorielle de ce nombre. Exemple avec le nombre 7 :

1 x 2 x 3 x 4 x 5 x 6 x 7 = 5040

Écrire l’algorithme avec la boucle Pour puis avec la boucle Tant Que.

Écrire le programme PHP équivalent.

Solution

Boucle Pour

VAR 
nombre, i, facto:entier 
DEBUT 
Afficher "Nombre ?" 
Saisir nombre 
facto = 1 
Pour i De 2 à nombre Faire 
 facto = facto * i 
FinPour 
Afficher "Factorielle de " + n + ":" + facto 
FIN 

Boucle Tant Que

VAR 
nombre, i, facto:entier 
DEBUT 
Afficher "Nombre ?" 
Saisir nombre 
facto = 1 
i = 1 
Tant Que i<>nombre 
  i = i+1 
  facto = facto * i   
FinTantQue 
Afficher "Factorielle de " + n + ":" + facto 
FIN 

En PHP :

Boucle Pour

<html> 
  <head> 
    <title>factorielle</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  </head> 
  <body> 
  <?php 
  if(!isset($_GET['number'])) { 
  ?>  
    <form method="GET"> 
      Entrez un nombre : <input type="text" size="4" name="number" /><br /> 
      <input type="submit" name="OK" /> 
    </form> ...

Les tableaux et structures

Exercice 1

Créer un tableau contenant les chiffres de 1 à 10 et un autre tableau contenant les nombres de 11 à 20. Ensuite créer un autre tableau contenant la somme des deux premiers tableaux et afficher ses valeurs. Il faut utiliser les boucles pour créer ces tableaux.

Écrire le programme PHP équivalent.

Solution

VAR 
tableau1:tableau[1..10] d'entiers 
tableau2:tableau[1..10] d'entiers 
tableauSomme:tableau[1..10] d'entiers 
DEBUT 
Pour i de 1 à 10 faire 
  tableau1[i]Images/flechegauche.PNGi 
FinPour 
Pour i de 1 à 10 faire 
  Tableau2[i]Images/flechegauche.PNGi+10 
FinPour 
Pour i de 1 à 10 faire 
  tableauSomme[i]Images/flechegauche.PNG tableau1[i] + tableau2[i] 
FinPour 
Pour i de 1 à 10 faire 
  Afficher tableauSomme[i] 
FinPour 
FIN 

En PHP :

<?php 
$table1 = array(); 
$table2 = array(); 
$tableSum = array(); 
 
for ($i=1;$i<=10;$i++) { //tableau de 1 à 10 
    $table1[$i]=$i; 
} 
for ($i=1;$i<=10;$i++) { //tableau de 11 à 20 
    $table2[$i]=$i+10; 
} 
for ($i=1;$i<=10;$i++) { //tableau avec la somme des 2 autres tableaux 
    $tableSum[$i]=$table1[$i]+$table2[$i]; 
} 
//affichage des valeurs de la somme des 2 autres tableaux 
for ($i=1;$i<=10;$i++) { 
    echo $tableSum[$i]."<br />"; 
} 
?> 

Exercice 2

Soit deux tableaux :

  • Le tableau1 est composé des éléments 6,25,35 et 61.

  • Le tableau2 est composé des éléments 12,24 et 46.

Écrire l’algorithme permettant de calculer une valeur représentative de ces deux tableaux notée S. La valeur S se calcule en multipliant chaque valeur du tableau1 par celle du tableau2 et en additionnant le tout.

Dans cet exemple, la valeur S sera égale à :

12*6+12*25+12*35+12*61+24*6+24*25+24*35+24*61+46*6+46*25+46*35+46*61

Il faut bien entendu utiliser les boucles pour réaliser cet exercice.

Écrire le programme PHP équivalent.

Solution

VAR 
tableau1:tableau[1..4]Images/flechegauche.PNG{6,25,35,61} d'entiers 
tableau2:tableau[1..3]Images/flechegauche.PNG{12,24,46} d'entiers 
somme, nb_tableau1, nb_tableau2:entier 
DEBUT 
sommeImages/flechegauche.PNG0 
tableau1Images/flechegauche.PNG4 
nb_tableau2Images/flechegauche.PNG3 
Pour i de 1 à tableau1 faire 
   Pour j de 1 à tableau2 faire 
      somme Images/flechegauche.PNG somme  + tableau1[i] * tableau1[j] 
   FinPour 
FinPour 
Afficher " La valeur S est :", somme 
FIN 

En PHP :

<?php 
$table1=array(6,25,35,61); 
$table2=array(12,24,46); 
$sum = 0; //initialisation de la variable $somme 
 
$nb_table1=count($table1); //taille du tableau1 
$nb_table2=count($table2); //taille du tableau2 
 
for ($i=0;$i<=$nb_table1-1;$i++) { 
    for ($j=0;$j<=$nb_table2-1;$j++) { 
       $sum = $sum + $table1[$i] * $table2[$j]; 
    } 
} 
echo "La valeur S est : ".$sum; 
?> 

Exercice 3

Voici un tableau à deux dimensions :

tab_personne:tableau[1..2][1..3] de chaîne 
tab_caracteristique_dupont:tableau[1..3] de chaîne 
tab_ caracteristique_durand:tableau[1..3] de chaîne 
tab_caracteristique_dupont["prenom"]Images/flechegauche.PNG"PAUL" 
tab_caracteristique_dupont["profession"]Images/flechegauche.PNG"ministre" 
tab_caracteristique_dupont["age"]Images/flechegauche.PNG"50" 
tab_caracteristique_durand["prenom"]Images/flechegauche.PNG"ROBERT " 
tab_caracteristique_durand["profession"]Images/flechegauche.PNG"agriculteur" 
tab_caracteristique_durand["age"]Images/flechegauche.PNG"45" 
tab_personne["DUPONT"]Images/flechegauche.PNGtab_caracteristique_dupont 
tab_personne["DURAND"]Images/flechegauche.PNGtab_caracteristique_durand 

Et en PHP :

$tab_characteristic_dupont = array("prénom" => "PAUL","profession" => 
"ministre","age" => 50); 
$tab_characteristic_durand = array("prénom" => "ROBERT","profession" => 
"agriculteur","age" => 45); 
$tab_personn['DUPONT'] = $tab_characteristic_dupont; 
$tab_personn['DURAND'] = $tab_characteristic_durand; 

Créer le code permettant de générer ce tableau en HTML à l’aide des boucles.

images/05RI01N.png

Écrire le programme PHP équivalent.

Solution

Attention : dans ce cas, l’indice du tableau est une chaîne de caractères et on utilisera une boucle de type "Pour chaque" (Foreach) pour récupérer la clé du tableau. 

VAR 
tab_personne:tableau[1..2][1..3] de chaîne 
tab_caracteristique_dupont:tableau[1..3] de chaîne 
tab_ caracteristique_durand:tableau[1..3] de chaîne ...

Les sous-programmes

Exercice 1

Créer une fonction calculant la somme de valeurs passées en paramètre. Cette fonction aura le résultat comme premier paramètre par référence et le tableau de valeurs en deuxième paramètre. Appeler la fonction avec un tableau contenant les nombres 5,9,4 et 18. Écrire la solution en PHP.

Solution

<?php 
 
// Fonction avec le résultat comme premier paramètre par référence 
// et la somme des valeurs du tableau passé en deuxième paramètre. 
function sum(&$result,$tab_values) { 
    $result = 0; 
    foreach ($tab_values as $val) { 
         $result += $val; 
    } 
} 
// appels 
$table = [5,9,4,18]; 
sum($result,$table); // tableau passé en paramètre 
echo 'somme($result,[5,9,4,18]) => ',$result,'<br />'; 
?> 

Exercice 2

Créer un tableau contenant 10 chiffres aléatoires entre 1 à 100 puis trier celui-ci sans utiliser les méthodes de tri de tableau comme sort(). Il faudra créer une fonction pour échanger deux valeurs dans un tableau. Afficher ces valeurs séparées par une virgule. Écrire la solution en PHP.

Solution

<?php 
 
$table1 = array(); 
 
//Fonction pour échanger la valeur dans un tableau 
//Le tableau est passé par référence 
function exchange(&$table, $i, $j) 
{ 
   $temp = $table[$i]; 
   $table[$i] = $table[$j]; 
   $table[$j] = $temp; 
} 
 
//remplissage d'un tableau de 10 valeurs aléatoires entre 1 et 100 
for ($i=1;$i<=10;$i++) { 
    $table1[$i]=rand(1,100); 
} 
 
 
$length=10; 
while($length>0) 
{ 
  // recherche de la plus grande valeur du tableau 
  $maximum = 1; 
  for($i=1; $i<=$length; $i++) { 
     if($table1[$i]>$table1[$maximum]) { 
           $maximum = $i; 
    } 
  } 
  //échange du maximum avec le dernier élément 
    exchange($table1, $maximum, $length); 
 
  // Traitement du reste du tableau 
  $length--; 
} 
 
//affichage du tableau 
for ($i=1;$i<=10;$i++) { //tableau de 1 à 10 
    echo $table1[$i].","; 
} 
 
?> 

Exercice 3

Créer une fonction pour afficher une phrase contenant de manière aléatoire un nombre quelconque de mots passés en paramètre. Chaque mot ne doit apparaître qu’une seule fois. La fonction prendra un tableau en paramètre. Écrire la solution en PHP.

Solution

<?php 
function display($tab) { 
    $table_end = array(); //tableau contenant les mots 
                            //à afficher aléatoirement 
    $j=0; //compteur de ce tableau 
    $number_elements = sizeof($tab); 
    while ($j < $number_elements) { 
           $random_key = array_rand($tab); 
           //si la valeur tirée aléatoirement est déjà présente dans 
           //le tableau de fin, décrément de $i pour recommencer 
           //à boucler une fois de plus. 
           if (! in_array($tab[$random_key],$table_end)) { 
                 $table_end[$j] = $tab[$random_key]; 
                 $j++; 
           } ...

Les fichiers

Exercice 1

Écrire un programme en PHP permettant de créer un fichier texte s’il n’existe pas puis écrire dans ce fichier « date et heure courante : » suivi de la date du jour. En PHP, la date s’affiche avec la fonction date(’d.m.Y G:i:s’).

Solution

<?php 
 
$ressource = fopen('log.txt', 'w+'); //création du fichier texte s'il 
                                    //n'existe pas. 
if ($ressource) { 
       fputs($ressource, 'date et heure courante :'); 
       fputs($ressource, date('d.m.Y G:i:s').PHP_EOL); //écriture de 
       //la date et de l'heure courantes 
} 
 
fclose($ressource); 
?> 

Exercice 2

Écrire un programme en PHP permettant de créer un fichier texte qui stocke le nombre de fois qu’une page a été vue.

Solution

Créer un fichier compteur.txt puis exécuter le code suivant :

<?php 
 
$ressource = fopen('counter.txt', 'r+'); 
 
$nb_views = fgets($ressource); // Lecture de la première ligne contenant 
                              // le nombre de pages vues 
if ($nb_views == "") { //teste si le fichier ne contient pas encore 
                      //de nombre 
    $nb_views...

Notions avancées

Exercice 1

Écrire en PHP l’algorithme de tri par fusion expliqué dans la section Exemples de tri.

Solution

Attention de bien passer le tableau par référence lors de l’appel de triFusion et de fusionner.

<?php 
function sortMerge (&$tab, $begin, $end) 
{ 
    if($begin<$end) 
    { 
           $middle = round(($begin+$end)/2,0, PHP_ROUND_HALF_DOWN); 
           sortMerge($tab, $begin, $middle); 
           sortMerge($tab, $middle+1, $end); 
           merge($tab, $begin, $middle, $end); 
    } 
} 
 
function merge (&$tab, $begin, $middle, $end) 
{ 
    $tab_tempo = $tab; // tableau temporaire pour stocker 
                       // les données triées. 
 
    $i1 = $begin; //indice dans la première moitié de tab_tempo 
    $i2 = $middle+1; // indice dans la deuxième moitié de tab_tempo 
    $i = $begin; //indice dans le tableau tab 
 
    while ($i1<= $middle && $i2 <= $end) 
    { 
           //Recherche de la plus petite tête de liste 
           if($tab_tempo[$i1] <= $tab_tempo[$i2]) 
           { 
                 $tab[$i] = $tab_tempo[$i1]; 
                 $i1++; 
           } 
           else 
           { 
                 $tab[$i] = $tab_tempo[$i2]; 
                 $i2++; 
           } 
           $i++; 
    } 
    if ($i<=$end) 
    { 
           while($i1<=$middle)  // le reste de la première moitié 
           { 
                 $tab[$i]=$tab_tempo[$i1]; 
                 $i1++; ...

Une approche de l’objet

Exercice 1

Créer les cinq classes du schéma suivant en tenant compte de leur héritage. Toutes les méthodes sont publiques et les attributs sont privés.

images/08RI03N.png

Solution

Vehicle.class.php :

<?php 
class Vehicle 
    { 
        // Déclaration des attributs 
           private string $color; 
           private int $weight; 
 
 
           //méthodes publiques 
           public function move() 
           { 
 
           } : void 
 
        public function add_person(float $weight_person) 
           { 
 
           } : void 
} 
?> 

Four_wheels.class.php :

<?php 
class Four_wheels extends Vehicle 
    { 
           // Déclaration des attributs 
           private int $number_door; 
 
           //méthode publique 
           public function repaint(string $color) : void 
           { 
 
           } 
    } 
?> 

Two_wheels.class.php :

<?php 
class Two_wheels extends Vehicle 
    { 
           // Déclaration des attributs 
           private float $capacitycapacity; 
 
           //méthode publique 
           public function refuel(float $number_liter) : void 
           { 
 
           } 
    } 
?> 

Car.class.php :

<?php 
class Car extends Four_wheels 
    { 
           // Déclaration des attributs 
           private int $number_snow_tire; 
 
           //méthodes publiques 
           public function add_snow_tire(int $number) : void 
           { 
 
           } 
 
           public function remove_snow_tire(int $number) : void 
           { 
 
           } 
    } 
?> 

Truck.class.php :

<?php 
class Truck extends Four_wheels 
    { 
           // Déclaration des attributs 
           private float $length; 
 
           //méthodes publiques 
           public function add_trailer(float $length_trailer) : void 
           { 
 
           } 
    } 
?> 

Exercice 2 (suite du 1)

Créer les accesseurs de tous les attributs. Créer un constructeur dans la classe Vehicule prenant en paramètres la couleur et le poids. Modifier la méthode move() pour qu’elle affiche "Le véhicule roule". Modifier la méthode add_person(weight_person) pour qu’elle change le poids du véhicule en fonction du poids de la personne passé en paramètre.

Créer une page affichage.php créant un véhicule noir de 1500 kg. Le faire rouler. 

Ajouter une personne de 70 kg et afficher le nouveau poids du véhicule.

Solution

Vehicule.class.php :

<?php 
class Vehicle 
    { 
        // Déclaration des attributs 
        private...