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
A
2
B
A+4
A
4
FIN
Solution
A
2
A=2, B n’a pas encore de valeur.
B
A+4
A=2, B=6.
A
4
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
A
1
B
3
C
A+B
A
5
C
B-A
FIN
Solution
A
1
A=1, B et C n’ont pas encore de valeur.
B
3
A=1, B=3, C n’a pas encore de valeur.
C
A+B
A=1, B=3, C=4.
A
5
A=5, B=3, C=4.
C
B-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
A
2
B
A+3
A
A+5
B
A-4
FIN
Solution
A
2
A=2, B n’a pas encore de valeur.
B
A+3
A=2, B=5.
A
A+5
A=7, B=5.
B
A-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
A
1
B
3
A
B
B
A
FIN
Solution
A=3, B=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
m
m+1
Si m = 60 Alors
m
0
h
h + 1
FinSi
Si h = 24 Alors
h
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
m
m+1
boolM
m = 60
Si boolM Alors
m
0
h
h + 1
FinSi
boolH
h = 24
Si boolH Alors
h
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]
i
FinPour
Pour i de 1 à 10 faire
Tableau2[i]
i+10
FinPour
Pour i de 1 à 10 faire
tableauSomme[i]
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]
{6,25,35,61} d'entiers
tableau2:tableau[1..3]
{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.

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