Seuillage d un réel [ss03] Exercice résolu Karine Zampieri, Stéphane Rivière Unisciel algoprog Version 30 décembre 2016 Table des matières 1 Algorithmique, Programmation 2 1.1 Procédure ordonner2r (reordre de deux réels)................ 2 1.2 Fonction seuillagereel(seuillage d un réel)................. 2 1.3 Procédure seuillerreel(seuillage d un réel)................. 3 1.4 Programme principal............................. 4 2 Que retenir de cet exercice? 4 3 Références générales 5 Java - Seuillage d un réel (Solution) Mots-Clés Algorithmes paramétrés Utilise Procédure, Paramètres formels, Fonction Requis Structures de base, Structures conditionnelles Difficulté (30 min) Objectif Cet exercice seuille un réel par rapport à un intervalle. 1
Unisciel algoprog Seuillage d un réel [ss03], December 30, 2016 2 1 Algorithmique, Programmation 1.1 Procédure ordonner2r (reordre de deux réels) Écrivez le profil d une procédure ordonner2r(a,b) qui prend deux paramètres réels a et b et les modifie de manière à ce qu ils soient dans l ordre croissant. Orientation Paramètres Modifiés : Les entiers a et b Solution simple 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 sont modifiés en le minimum et maximum de a et b. Écrivez le corps de la procédure. Validez votre procédure avec la solution. static void ordonner2r(double[] a, double[] b){ if (b[0] < a[0]){ double tmp = a[0]; a[0] = b[0]; b[0] = tmp; 1.2 Fonction seuillagereel(seuillage d un réel) Écrivez une fonction seuillagereel(x,b1,b2) qui calcule et renvoie le réel seuillé (premier paramètre) par rapport à un intervalle de réels donnés (les deux derniers paramètres). Aide méthodologique Avant de réaliser le seuillage, la fonction appellera la procédure ordonner2r afin d assurer que la borne b1 est plus petite ou égale à la borne b2. Ces deux paramètres formels seront donc éventuellement modifiés via la procédure ordonner2r mais cette modification n a aucune répercussion sur les paramètres effectifs de l appel à la fonction seuillagereel puisque ce sont des paramètres entrants pour la fonction. Validez votre fonction avec la solution.
Unisciel algoprog Seuillage d un réel [ss03], December 30, 2016 3 static double seuillagereel(double x, double b1, double b2){ double[] borne1 = new double[1]; borne1[0] = b1; double[] borne2 = new double[1]; borne2[0] = b2; ordonner2r(borne1, borne2); if (x < borne1[0]){ x = borne1[0]; else if (x > borne2[0]){ x = borne2[0]; return x; 1.3 Procédure seuillerreel(seuillage d un réel) Écrivez le profil d une procédure seuillerreel(x,b1,b2) qui seuille un réel (premier paramètre) par rapport à un intervalle de réels donnés (les deux derniers paramètres), c.-à-d. qui doit modifier x s il n est pas dans l intervalle. Orientation Paramètres Le paramètre formel x ayant une valeur avant l appel de la procédure et étant éventuellement modifié par celle-ci, c est un paramètre mixte. Les paramètres formels b1 et b2 sont les bornes de l intervalle : ce sont des paramètres entrants. Écrivez le corps de la procédure. Aide méthodologique Avant de réaliser le seuillage, la fonction appellera la procédure ordonner2r afin d assurer que la borne b1 est plus petite ou égale à la borne b2. Ces deux paramètres formels seront donc éventuellement modifiés via la procédure ordonner2r mais cette modification n a aucune répercussion sur les paramètres effectifs de l appel à la procédure seuillerreel puisque ce sont des paramètres entrants pour la procédure. Validez votre procédure avec la solution. static void seuillerreel(double[] x, double b1, double b2){ double[] borne1 = new double[1]; borne1[0] = b1; double[] borne2 = new double[1]; borne2[0] = b2; ordonner2r(borne1, borne2); if (x[0] < borne1[0]){ x[0] = borne1[0];
Unisciel algoprog Seuillage d un réel [ss03], December 30, 2016 4 else if (x[0] > borne2[0]){ x[0] = borne2[0]; 1.4 Programme principal Écrivez un programme qui teste votre fonction et procédure dans les deux cas : 10.6 dans l intervalle [2.1,6.6] 3.0 dans l intervalle [8.5,2.4] Testez. Validez votre programme avec la solution. @[pgseuillage.java] public class PGSeuillage { public static void main(string[] args) { double y; double[] x = new double[1]; x[0] = 10.6; y = UtilsSSOpers.seuillageReel(x[0],2.1,6.6); UtilsSSOpers.seuillerReel(x,2.1,6.6); System.out.println("==> y=" + y + " et x=" + x[0]); x[0] = 3.0; y = UtilsSSOpers.seuillageReel(x[0],8.5,2.4); UtilsSSOpers.seuillerReel(x,8.5,2.4); System.out.println("==> y=" + y + " et x=" + x[0]); 2 Que retenir de cet exercice? Lorsque, dans un appel de procédure, les paramètres effectifs sont des identifiants (ce qui est toujours le cas des paramètres de statut DR ou R), ils se comportent comme des variables le temps de l exécution de la procédure. On peut donc leur appliquer les traitements comme on le ferait à des variables et leur valeur modifiée est directement prête à sortir de la procédure. Nous avons insisté sur le fait qu il fallait toujours prévoir des jeux d essais pour vérifier la justesse des algorithmes et des programmes. C est encore vrai lorsque ceux-ci contiennent des fonctions et des procédures. Il faut si possible séparer les tests pour vérifier chaque fonction ou chaque procédure. Mais, pour tester une procédure ou une fonction, il faut absolument qu elle soit appelée par un programme. C est pourquoi, lorsqu on travaille
Unisciel algoprog Seuillage d un réel [ss03], December 30, 2016 5 sur des fonctions ou des procédures, il est nécessaire d écrire des procédures de test dont le seul objectif est de les appeler pour les vérifier. Lorsqu on aborde un problème complexe, il peut être productif de ne pas cumuler les difficultés. Une méthode consiste à «déléguer» certains traitements à des procédures ou à des fonctions qui seront définies plus tard. Cela permet à l analyste de séparer les problèmes et d être plus à l aise pour élaborer une solution. 3 Références générales Comprend