Correction du TD n°6
Implanter une méthode de recherche de l'indice de la valeur minimale d'un intervale d'un tableau d'entiers compris entre les indices deb et fin inclus.
/* Auteur: Nicolas JANEY */
/* nicolas.janey@univ-fcomte.fr */
/* Fevrier 2005 */
import java.io.*;
public class RechercheIndiceMinimum {
static BufferedReader flux = new BufferedReader(new InputStreamReader(System.in));
/* Fonction d'affichage de tous les entiers contenus */
/* dans un tableau d'entiers */
public static void affichageTableau(int [] t) {
int i;
/* Pour toutes les valeurs d'indice 0 a t.length-1 inclus */
for ( i = 0 ; i < t.length ; i++ )
System.out.println(t[i]);
}
/* Fonction d'initialisation de tous les entiers */
/* contenus dans un tableau d'entiers */
/* avec une valeur tiree au sort entre 0 et max inclus */
public static void initialisationTableau(int [] t,int max) {
int i;
/* Pour toutes les valeurs d'indice 0 a t.length-1 inclus */
for ( i = 0 ; i < t.length ; i++ ) {
/* Initialisation de t[i] avec un entier tire */
/* au hasard entre 0.0 (inclu) et max+1 (exclu) */
t[i] =(int) ((max+1)*Math.random()); }
}
/* Fonction de recherche de l'indice de la valeur */
/* minimum d'un tableau pour les seules valeurs */
/* allant de l'indice deb a l'indice fin inclus */
public static int indiceMinimum(int [] t,int deb,int fin) {
/* Declaration et initialisation a t[deb] de la variable */
/* de stockage de l'indice recherche */
int imin = deb;
int i;
/* Pour toutes les valeurs d'indice 0 a t.length-1 inclus */
for ( i = deb+1 ; i <= fin ; i++ )
/* Si la valeur d'indice i est plus petite que la valeur */
/* d'indice imin */
if ( t[i] < t[imin] )
imin = i;
return(imin);
}
/* Fonction principale */
public static void main(String [] args) throws IOException {
/* Definition et allocation d'un tableau de 10 entiers */
/* tires au sort entre 0 et 5 */
int [] tab = new int[10];
int indice;
int indiceDebut;
int indiceFin;
initialisationTableau(tab,100);
System.out.println("Le tableau contient les valeurs suivantes:");
/* Appel a la fonction d'affichage */
affichageTableau(tab);
System.out.println();
/* Lecture clavier de l'indice de debut de recherche */
System.out.println("Indice de debut de recherche:");
indiceDebut = Integer.valueOf(flux.readLine()).intValue();
/* Lecture clavier de l'indice de fin de recherche */
System.out.println("Indice de fin de recherche:");
indiceFin = Integer.valueOf(flux.readLine()).intValue();
/* Appel a la fonction de recherche */
indice = indiceMinimum(tab,indiceDebut,indiceFin);
System.out.println("L'indice de la valeur minimale est "+indice);
System.out.println("et correspond a la valeur "+tab[indice]);
}
}
Implanter la méthode de recherche des nombres premiers par le crible
d'Eratosthène.
Le but est de déterminer si chaque nombre entier entre 1 et n est premier ou non.
La méthode développée rendra un tableau de n booléens.
/* Auteur: Nicolas JANEY */
/* nicolas.janey@univ-fcomte.fr */
/* Fevrier 2005 */
import java.io.*;
public class CribleEratosthene {
static BufferedReader flux = new BufferedReader(new InputStreamReader(System.in));
/* Fonction d'affichage de tous les booleens contenus */
/* dans un tableau de booleens */
public static void affichage(boolean [] t) {
int i;
/* Pour toutes les valeurs d'indice 0 a t.length-1 inclus */
for ( i = 0 ; i < t.length ; i++ )
System.out.println(t[i]);
}
/* Fonction d'affichage de tous les entiers codes comme */
/* premiers (true) dans un tableau de booleens */
public static void affichageNombresPremiers(boolean [] t) {
int i;
/* Pour toutes les valeurs d'indice 0 a t.length-1 inclus */
for ( i = 0 ; i < t.length ; i++ )
if ( t[i] )
System.out.println(i+1);
}
/* Fonction d'initialisation a true des booleens */
/* contenus dans un tableau de booleens */
/* sauf la premier a false */
public static void initialisationTableau(boolean [] t) {
int i;
t[0] = false;
/* Pour toutes les valeurs d'indice 1 a t.length-1 inclus */
for ( i = 1 ; i < t.length ; i++ ) {
t[i] = true; }
}
/* Fonction de calcul d'un tableau de booleens */
/* codant les nombres premiers (true pour premier, */
/* false pour non premier) */
public static boolean [] realiseCribreEratosthenet(int n) {
/* Declaration et allocation d'un tableau de n booleens */
boolean [] tab = new boolean[n];
/* Initialisation du tableau tab */
initialisationTableau(tab);
/* Calcul de la valeur limite de criblage */
int limite =(int) Math.sqrt(n);
/* Pour tous les entiers de 2 a limite */
for ( int i = 2 ; i <= limite ; i++ )
/* Si i est un nombre premier */
if ( tab[i-1] )
/* Tous les multiples de i entre 2*i et n inclus ne sont pas */
/* des nombres premiers */
for ( int j = 2*i ; j <= n ; j += i )
tab[j-1] = false;
return(tab);
}
/* Fonction principale */
public static void main(String [] args) throws IOException {
int nb;
boolean [] tableau;
/* Lecture clavier du nombre jusqu'ou realiser le criblage */
System.out.println("Valeur limite jusqu'ou rechercher:");
nb = Integer.valueOf(flux.readLine()).intValue();
/* Realisation du crible */
tableau = realiseCribreEratosthenet(nb);
System.out.println();
System.out.println("Tableau de booleens obtenu");
/* Affichage du tableau de booleens brut */
affichage(tableau);
System.out.println();
System.out.println("Nombres premiers entre 2 et "+nb);
/* Affichage des nombres premiers codes dans un tableau */
/* de booleens */
affichageNombresPremiers(tableau);
}
}
Auteur: Nicolas JANEY
UFR Sciences et Techniques
Université de Besançon
16 Route de Gray, 25030 Besançon
nicolas.janey@univ-fcomte.fr