Accueil‎ > ‎

Notion d'algorithmes

Un algorithme est avant tout une description non ambiguë en un ensemble fini d´étapes de la résolution d'un problème. Le programme quand à lui est la traduction dans un "Langage de Programmation" de l'algorithme. Une fonction mathématique est une relation entre un ou plusieurs élément de depart et un unique élément dárrivé d'un autre ensemble.

Consiérons par exemple la resolution d'une équation du premier degré:

La fonction f(a,b)->x

R*xR->R
(a,b)->{x / ax+b=0}

l'algorithme:

degré_1(a,b) : calcule de la solution ax+b=0
si a==0 alors ERREUR: ce n'est pas une équation du premier degré
sinon x=-(b/a)

Le programme en Java

public class Equation {
    public static double degre1(double a, double b) throws Exception {
        if (a==0) throw new Exception("Pas du premier degré");
        else return b/a?;
    }

}

remarques:

  1. dans un premier lieu nous considerons qu'une classe est une décomposition modulaire (un namespace) regroupant plusieurs fonctions. ainsi dans notre exemple le nom de la fonction est Algo.degre1
  2. Nous verrons plus en détail plus tard le traitement des exceptions, pour l'instant, considérez que ´´throw new Exception("...")´´ permet de gérer les erreurs.

Trouvons maintenant le cas d'une équatoin du second degré

f(a,b,c)->(x1,x2)
RxExR->RxR

en effet une équation du second degré peut renvoyé 2 solutions L'argorithme

degré_2(a,b,c) : Calcul les racines x1 et x2 de l'équation ax2+bx+c=0
 si a==0 alors Cette équation est une équation du premier degré et on a: x1=x2=degré1(b,c)
 sinon , soit Delta=(b*b - 4*a*c);
         si delta >= 0 x1=(-b+sqrt(delta))/2*a,x2=(-b-sqrt(delta))/2*a
         sinon ERREUR

Ici on rearque que pour réalisé cet algorithme nous avons utilisé un autre algorithme; c'est une décomposition descendante. En terme de fonction nous aurons un résultat par composition de fonctions.

comment une fonction pourrait-elle retourné 2 valeurs? ce n'est pas possible. Il faut donc trouvé une solution permettant de retourné une seule valeur représentant le couple. Nous créons pour cela une structure de donné pouvant représenté RxR, en Java cela donne:

public class Couple {
    public double x;
    public double y;
}

La classe Couple est une définition abstraite, pour créer un couple il faut "l'instancié" (cad le créer et l'ajouté a l'ensemble des objets du programme). La commande new permet de réalisé cette opération.

new Couple(); Créra donc un couple et nous pourrons ensuite l'utilisé.

D'où le programme en java: On ajoute la méthode suivante à la classe Equation

public static Couple degre2(double a, double b, double c) throws Exception {
    Couple resultat=new Couple(); //Création d'un couple
    if (a==0) {
         resultat.x=resultat.y=degre1(b,c);
    } else {
        double delta=(b*b-4*a*c);
        if (delta>=0) {
            resultat.x=(-b+sqrt(deltat))/(2*a);
            resultat.x=(-b+sqrt(deltat))/(2*a);
        } else throw Exception("Erreur delta négatif");
    }

}


Comments