Vous êtes sur la page 1sur 7

Tri de trois entiers [ss13] - Exercice

Karine Zampieri, Stéphane Rivière

Unisciel algoprog Version 16 mai 2018

Table des matières


1 Tri de trois entiers / pgtrcompare 2
1.1 Décomposition du problème . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Procédure permuter2i (permutation de deux entiers) . . . . . . . . . . . . 3
1.3 Procédure ordonner2i (reordre de deux entiers) . . . . . . . . . . . . . . . 4
1.4 Procédure ordonner3i (reordre de trois entiers) . . . . . . . . . . . . . . . 5
1.5 Ré-ordre des entiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2 Applications 7
2.1 Le paquet de poste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

3 Références générales 7

Java - Tri de trois entiers (Solution)


Mots-Clés Algorithmes paramétrés 
Requis Structures de base, Structures conditionnelles 
Difficulté • ◦ ◦ (30 min) 

Objectif
Le premier exercice reprend l’exercice @[Tri de trois éléments] en définissant une décom-
position en procédures et les exercices suivants en sont des applications.

...(énoncé page suivante)...

1
Unisciel algoprog – Tri de trois entiers [ss13] 2

1 Tri de trois entiers / pgtrcompare

1.1 Décomposition du problème

L’exercice @[Tri de trois éléments] saisit trois entiers puis les remet dans l’ordre via trois
ordonnancements.

Algorithme initial
import java.util.Scanner;

class PGTrcompare1 {

public static void main(String[] args)


{
Scanner input = new Scanner(System.in);
int a, b, c;
System.out.print("Trois entiers? ");
a = input.nextInt();
b = input.nextInt();
c = input.nextInt();
int tmp;
if (b < a)
{
tmp = a;
a = b;
b = tmp;
}
System.out.println("==> Apres ordonner a et b : a=" + a + " b=" + b + " c=" + c);
if (c < b)
{
tmp = b;
b = c;
c = tmp;
}
System.out.println("==> Apres ordonner b et c : a=" + a + " b=" + b + " c=" + c);
if (b < a)
{
tmp = a;
a = b;
b = tmp;
}
System.out.println("==> Apres ordonner a et b : a=" + a + " b=" + b + " c=" + c);
}

Exemple d’exécution
(Avec cet algorithme)
Trois entiers? 2 1 3
==> Après ordonner a et b : a=1 b=2 c=3
==> Après ordonner b et c : a=1 b=2 c=3
Unisciel algoprog – Tri de trois entiers [ss13] 3

==> Après ordonner a et b : a=1 b=2 c=3

Résultat attendu
Il ne sera pas utile d’afficher les entiers après chaque ordonnancement.
Voici un exemple du résultat attendu.
Trois entiers? 3 8 2
==> Valeurs dans l’ordre sont 2 3 8

Proposez une décomposition en procédures en écrivant les en-têtes de ces dernières.

Solution simple
On peut proposer successivement :
• Une procédure ordonner3i(a,b,c) qui remet en ordre les entiers a, b, c.
• Une procédure ordonner2i(a,b) qui remet en ordre les entiers a et b.
• Une procédure permuter2i(a,b) qui permute le contenu des entiers a et b.

1.2 Procédure permuter2i (permutation de deux entiers)

Écrivez le profil d’une procédure permuter2i(a,b) qui échange les contenus de deux entiers
a et b.

Orientation
Les paramètres formels a et b sont des paramètres mixtes Donnée/Résultat. En effet,
ils ont des valeurs avant l’appel et ils seront modifiés lors de l’échange.

Solution Paramètres
Modifiés : Les entiers a et b

Écrivez le corps de la procédure.

Rappel de cours
Pour permuter deux variables, il faut passer par une variable intermédiaire.

Solution simple
On a :
Unisciel algoprog – Tri de trois entiers [ss13] 4

Validez votre procédure avec la solution.

Solution Java
/**
Permute les valeurs de deux entiers
@param[in,out] a - un entier
@param[in,out] b - un entier
*/

public static void permuter2i(int[] a, int[] b)


{
int tmp = a[0];
a[0] = b[0];
b[0] = tmp;
}

1.3 Procédure ordonner2i (reordre de deux entiers)

Écrivez le profil d’une procédure ordonner2i(a,b) qui remet dans l’ordre croissant les
contenus des entiers a et b.

Solution Paramètres
Modifiés : Les entiers a et b

Écrivez le corps de la procédure de sorte que, si b<a, elle appelle la procédure permuter2i
pour les ordonner. Ainsi, à l’issue de la procédure, a contient le plus petit entier et b le
plus grand de (a,b).
Unisciel algoprog – Tri de trois entiers [ss13] 5

Validez votre procédure avec la solution.

Solution Java
/**
Ré-ordonne les valeurs de deux entiers
@param[in,out] a - un entier
@param[in,out] b - un entier
@post a <= b
*/

public static void ordonner2i(int[] a, int[] b)


{
if (b[0] < a[0])
{
permuter2i(a,b);
}
}

1.4 Procédure ordonner3i (reordre de trois entiers)

Déduisez une procédure ordonner3i(a,b,c) qui classe trois entiers a, b et c par ordre
croissant, en appelant trois fois la procédure ordonner2i :
• Classez a et b en ordre croissant.
• Puis classez b et c en ordre croissant.
• Puis classez a et b en ordre croissant.

Solution Paramètres
Modifiés : Les entiers a, b et c

Validez votre procédure avec la solution.

Solution Java
/**
Ré-ordonne les valeurs de trois entiers via ordonner2i
@param[in,out] a - un entier
@param[in,out] b - un entier
@param[in,out] c - un entier
@post a <= b <= c
*/

public static void ordonner3i(int[] a, int[] b, int[] c)


{
ordonner2i(a,b);
ordonner2i(b,c);
Unisciel algoprog – Tri de trois entiers [ss13] 6

ordonner2i(a,b);
}

1.5 Ré-ordre des entiers

Écrivez une procédure test_tr3cmp en utilisant les procédures :


• Demandez trois entiers dans a, b et c.
• Ordonnez-les.
• Affichez (où [x] désigne le contenu de x) :
==> Valeurs dans l’ordre sont [a] [b] [c]

Testez. Exemple d’exécution :


Trois entiers? 3 8 2
==> Valeurs dans l’ordre sont 2 3 8

Validez votre procédure avec la solution.

Solution Java @[pgtrcompare.java]


public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
int[] a = new int[1], b = new int[1], c = new int[1];
System.out.print("Trois entiers? ");
a[0] = input.nextInt();
b[0] = input.nextInt();
c[0] = input.nextInt();
UtilsSSOpers.ordonner3i(a,b,c);
System.out.println("==> Valeurs dans l’ordre sont " + a[0] + " " + b[0] + " " + c[0]);
}

Vous envoyez votre programme complet à Alice qui vous l’a demandée. Elle remarque que
dans les bibliothèques de son compilateur, elle dispose d’une procédure ordonner2r(a,b)
qui remet en ordre deux valeurs réelles. Sachant que les conversions d’entiers vers réels
sont implicites, elle décide de l’utiliser et donc :
1. Elle remplace l’appel de ordonner2i par ordonner2r.
2. Elle supprime toutes vos procédures sur les entiers.
Que va-t-il se passer ?

Aide simple
Le passage des paramètres par référence n’est pas un passage par valeur.
Unisciel algoprog – Tri de trois entiers [ss13] 7

Solution simple
Le compilateur va générer une erreur.

Alice vous appelle et vous demande des explications.


Expliquez-lui pourquoi le compilateur génère une erreur de typage.

Solution simple
Dans un passage de paramètres par référence, il faut que les types correspondent exac-
tement.

2 Applications

2.1 Le paquet de poste

Un colis postal est accepté par les PTT si sa longueur est inférieure à 40 cm et son
volume inférieur à 8000 cm3 .

Écrivez une procédure test_cpostal qui :


• Demande et saisit trois entiers représentant les longueurs en cm d’une boı̂te paral-
lélépipédique.
• Les ré-ordonne de façon que la hauteur soit inférieure à la largeur, elle-même infé-
rieure à la longueur.
• Calcule la surface et le volume de la boı̂te.
• Affiche les caractéristiques (longueur, largeur, hauteur, surface, volume).
• Enfin affiche l’acceptation ou le refus du colis.

Testez.

Validez votre procédure avec la solution.

3 Références générales
Comprend 

Vous aimerez peut-être aussi