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