Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à 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) - 3e édition (BTS, DUT Informatique)
Extraits du livre
Algorithmique - Techniques fondamentales de programmation Exemples en PHP (nombreux exercices corrigés) - 3e édition (BTS, DUT Informatique)
1 avis
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 suivant ? Expliquez.

  • PHP

  • Java

  • HTML

  • C++

Solution...

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

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

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['nombre'])) {  
  ?> 
    <form method="GET">       Entrez un nombre : <input type="text" size="4" name="nombre" /><br /> 
      <input type="submit" name="OK" />  
    </form>  
  <?php  
  } else {  
    $nombre=$_GET['nombre'];  
    $somme = 0; 
    for ($i=1;$i<=$nombre;$i++) {  
           $somme = $somme + $i;  
    } 
    echo "La somme des entiers de 1 à ".$nombre." est égale à ".$somme; 
  }  
  ?>  
  </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  
 ...

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  
$tableau1 = array(); 
$tableau2 = array(); 
$tableauSomme = array(); 
  
for ($i=1;$i<=10;$i++) { //tableau de 1 à 10 
    $tableau1[$i]=$i; 
} 
for ($i=1;$i<=10;$i++) { //tableau de 11 à 20 
    $tableau2[$i]=$i+10; 
} 
for ($i=1;$i<=10;$i++) { //tableau avec la somme des 2 autres tableaux 
    $tableauSomme[$i]=$tableau1[$i]+$tableau2[$i]; 
} 
//affichage des valeurs de la somme des 2 autres tableaux 
for ($i=1;$i<=10;$i++) {  
    echo $tableauSomme[$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 ...

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 somme(&$resultat,$tab_valeurs) { 
       $resultat = 0; 
       foreach ($tab_valeurs as $valeur) { 
              $resultat += $valeur; 
       } 
} 
// appels 
$tableau = [5,9,4,18]; 
somme($resultat,$tableau); // tableau passé en paramètre 
echo 'somme($resultat,[5,9,4,18]) => ',$resultat,'<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 
  
$tableau1 = array(); 
  
//Fonction pour échanger la valeur dans un tableau 
//Le tableau est passé par référence 
function echanger(&$tableau, $i, $j) 
{ 
   $temporaire = $tableau[$i]; 
   $tableau[$i] = $tableau[$j]; 
   $tableau[$j] = $temporaire; 
}  
  
//remplissage d'un tableau de 10 valeurs aléatoires entre 1 et 100 
for ($i=1;$i<=10;$i++) {  
    $tableau1[$i]=rand(1,100); ...

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('compteur.txt', 'r+'); 
  
$nb_vues = fgets($ressource); // Lecture de la première ligne contenant ...

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 triFusion (&$tab, $debut, $fin) 
{ 
    if($debut<$fin) 
    { 
           $milieu = round(($debut+$fin)/2,0, PHP_ROUND_HALF_DOWN); 
           triFusion($tab, $debut, $milieu); 
           triFusion($tab, $milieu+1, $fin); 
           fusionner($tab, $debut, $milieu, $fin); 
    } 
} 
  
function fusionner (&$tab, $debut, $milieu, $fin) 
{ 
    $tab_tempo = $tab; // tableau temporaire pour stocker 
                       // les données triées. 
  
    $i1 = $debut; //indice dans la première moitié de tab_tempo 
    $i2 = $milieu+1; // indice dans la deuxième moitié de tab_tempo 
    $i = $debut; //indice dans le tableau tab 
  
    while ($i1<= $milieu && $i2 <= $fin) 
    { 
           //Recherche...

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

Vehicule.class.php :

<?php 
class Vehicule  
    { 
        // Déclaration des attributs  
           private $couleur; 
           private $poids; 
     
     
           //méthodes publiques 
           public function rouler() 
           { 
            
           } 
           
        public function ajouter_personne($poids_personne) 
           { 
 
           } 
} 
  
?> 

Quatre_roues.class.php :

<?php 
class Quatre_roues extends Vehicule  
    { 
           // Déclaration des attributs  
           private $nombre_porte;  
         
           //méthode publique 
           public function repeindre($couleur) 
           { 
 
           } 
    } 
?> 

Deux_roues.class.php :

<?php 
class Deux_roues extends Vehicule  
    { 
           // Déclaration des attributs  
           private $cylindree;  
         
          ...