Correction du TD n°15 et du TD n°16

Exercice 1 

Affichage des n premières valeurs entières positives.

001  action affichageRecursif(n) : entier
002    Données n : entier
003    ecrire(n)
004    si n <> 1 alors
005      affichageRecursif(n-1)
006    fsi
007  fin action

AffichageRecursif.java

Exercice 2 

Somme des n premières valeurs entières positives.

001  fonction sommeRecursiveNombres(n) : entier
002    Données n : entier
003    Locales res : entier        { Résultat de la fonction }
004    Resultat : res
005  fin fonction

SommeRecursive.java

Exercice 3 

Somme des n premières valeurs entières positives paires.

001  fonction sommeRecursiveNombresPaires(n) : entier
002    Données n : entier
003    Locales res : entier        { Résultat de la fonction }
004    Resultat : res
005  fin fonction

SommeRecursivePaire.java

Exercice 4 

Nombre d'occurence d'une valeur dans un tableau.

001  fonction NombreOccurencesRecursive(v,i,t) : entier
002    Données v : entier                  { Valeur recherchee }
003            i : entier                  { Valeur indiquant l'indice de l'element }
004                                        { en cours de traitement du tableau }
005            t : tableau [N] de entier   { Tableau d'entiers a traiter }
006    Locales res : entier        { Résultat de la fonction }
007            nb : entier         { Nombre d'occurence de l'indice i+1
008                                { a la fin du tableau }
009      si i >= N alors
010        res := 0
011        sinon
012        si t[i] > v alors
013          res:= 0
014          sinon
015          nb = nombreOccurencesRecursive(v,i+1,t)
016          si t[i] = v alors
017            res := 1+nb    
018            sinon
019            res := nb
020          fsi
021        fsi
022      fsi
023    Resultat : res
024  fin fonction

NombreOccurencesRecursive.java

Exercice 5 

Zéro d'une fonction par recherche dichotomique récursive.

001  fonction rechercheDichotomiqueRecursive(xi,xf,epsilon) : réel
002    Données xi : réel
003            xf : réel
004            epsilon : réel
005    Locales res : réel          { Résultat de la fonction }
006            x : réel            { valeur moyenne de xi et xf }
007    { Calcul de la valeur moyenne de xf et xi }
008    x := (xf+xi)/2.0
009    { Si l'intervale [xi,xf] a une taille plus petite que epsilon }
010    { -> La precision desiree est atteinte                        }
011    si (xf-xi) < epsilon alors
012    { Le resultat de la fonction est x }
013      res := x;
014      sinon
015    { Le resultat de la fonction est le resultat             }
016    { d'un appel recursif soit sur le premier demi-intervale }
017    { soit sur le deuxieme demi-intervale                    }
018      si f(x) >= 0.0 alors
019    { C'est sur le premier demi-intervale que se trouve le zero }
020    { car f(x) etant superieur a zero, le zero de f             }
021    { est plus petit que x                                      }
022        res := rechercheDichotomiqueRecursive(xi,x,epsilon)
023        sinon
024    { C'est sur le second demi-intervale que se trouve le zero  }
025    { car f(x) etant inferieur a zero, le zero de f             }
026    { est plus grand que x                                      }
027        res := rechercheDichotomiqueRecursive(x,xf,epsilon)
028      fsi
029    fsi
030    { Resultat fonction : Zéro de la fonction mathématique f }
031    Resultat : res
032  fin fonction

RechercheDichotomiqueRecursive.java

Exercice 6 

Modélisation

ListeChainee

  • info : entier
  • suiv : ListeChainee
  • affichage()
  • affichageRecursif()
  • affichageInverse()
  • affichageInverseRecursif()

Une classe implantant une liste chainée d'entiers.

/* Auteur: Nicolas JANEY          */
/* nicolas.janey@univ-fcomte.fr   */
/* Avril 2005                     */

public class ListeChainee {
  Object info;
  ListeChainee suiv;
  
  public ListeChainee() {
    info = null;
    suiv = null;
  }
  
  public ListeChainee(Object o) {
    info = o;
    suiv = null;
  }
  
  public void affichageRecursif() {
    System.out.println(info);
    if ( suiv != null )
      suiv.affichageRecursif();
  }
  
  public void affichage() {
    System.out.println(info);
    ListeChainee lc = suiv;
    while ( lc != null ) {
      System.out.println(lc.info);
      lc = lc.suiv; }
  }
  
  public void affichageInverse() {
    if ( suiv != null )
      suiv.affichageInverse();
    System.out.println(info);
  }
}

ListeChainee.java

Une classe application utilisant des listes chainées.

/* Auteur: Nicolas JANEY          */
/* nicolas.janey@univ-fcomte.fr   */
/* Avril 2005                     */

public class ApplicationListesChainees {

  public static void main(String [] args) {
    /* Creation d'une liste chainee de 10 entiers (0 a 9) */
    ListeChainee l = null;
    for ( int i = 0 ; i < 10 ; i++ ) {
      ListeChainee nl = new ListeChainee(new Integer(i));
      nl.suiv = l;
      l = nl; }
    /* Affichage de cette liste chainee                   */
    l.affichage();
    /* Second affichage de cette liste chainee            */
    l.affichageRecursif();
    /* Affichage inverse de cette liste chainee           */
    l.affichageInverse();
  }
}

ApplicationListesChainees.java

Auteur: Nicolas JANEY
UFR Sciences et Techniques
Université de Besançon
16 Route de Gray, 25030 Besançon
nicolas.janey@univ-fcomte.fr