Fiupso 2 ann´ ee 2003-2004 – Solutions
Universit´e de Paris Sud
Solution de l’ex. 1 Calculatrice
Voici une solution possible :
// Gestion simpliste de banque utilisant des sockets import java.util.*;
import java.io.*;
public class Calculette {
static double resultat = 0;
/* methodes */
static int somme(int a, int b) { return(a+b); }
static int soustraction(int a, int b) { return(a-b); } static int multiplication(int a, int b) { return(a*b); } static double division(int a, int b) { return(a/b); } public static void main(String args[]) {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
// Boucle infinie for(;;) {
try {
// Afficher une invite a l’utilisateur
System.out.println("1 Somme de deux entiers\n" +
"2 Soustraction de deux entiers\n" +
"3 Multiplication de deux entiers\n" +
"4 Division de deux entiers\n" +
"5 Sortie du programme\n\n" +
"Veuillez entrer votre choix :\n");
// Lire une ligne entree par l’utilisateur String line = in.readLine();
// Si l’on rencontre une fin de fichier, ou si l’utilisateur
1
2 — Examen de Java sur machine Fiupso 2i`eme ann´ee 2003-2004 – Solutions
// entre "quit", on sort
if ((line == null) || line.equals("5")) break;
// On essaie de formatter l’entree de l’utilisateur, int choix = Integer.parseInt(line);
System.out.print("Veuillez entrer le 1er entier : ");
line = in.readLine();
int x = Integer.parseInt(line);
System.out.print("Veuillez entrer le 2eme entier : ");
line = in.readLine();
int y = Integer.parseInt(line);
switch(choix) {
case 1 : resultat = somme(x, y); // Somme break;
case 2 : resultat = soustraction(x, y); // Soustraction break;
case 3 : resultat = multiplication(x, y); // Multiplication break;
case 4 : resultat = division(x, y); // Division break;
}
System.out.println("Resultat : " + resultat);
}
// Affichage d’un message d’erreur en cas de probleme
catch(Exception e) { System.out.println("Entree Invalide"); } }
} }
Solution de l’ex. 2 Liste d’´etudiants
Le code solution est le suivant:
class Etudiant {
private String nom; // son nom.
private String prenom; // le prnom.
private int note; // sa note.
public Etudiant (String p, String n, int i) { prenom=p;
nom=n;
note=i;
}
/** affiche un tudiant */
public void affiche () {
System.out.println (prenom + " " + nom + " note: " + note);
/** retourne la note de l’tudiant */
public int note () { return note;
} }
class ListeEtudiants {
private Etudiant [] laListe;
private int nbElts;
ListeEtudiants (Etudiant[] tab, int nb) { nbElts = nb;
// allouer la place en mmoire.
laListe = new Etudiant[nbElts];
// initialiser les lments.
for(int i = 0; i < nbElts; i++) laListe[i] = tab[i];
} /*
* Methode qui retourne l’index de l’tudiant qui a eu la moins bonne note
* parmi les n premiers tudiants de la liste.
*/
private int minimum (int n) {
int im = 0; // index du minimum.
for (int i =1; i < n && i < nbElts; i++)
if (laListe[i].note() < laListe [im].note())
im = i; // meilleur candidat (en quelque sorte!).
return im;
}
/** change les etudiants en position i et j dans la liste. */
private void echange (int i, int j) { Etudiant aux;
aux = laListe[i];
laListe[i] = laListe[j];
laListe[j] = aux;
}
/** Tri par selection, dans l’ordre decroissant. */
public void tri() {
// s’arreter 2 car tableau de longueur 1!
for (int n=nbElts-1; n > 1; n--) echange (minimum (n), n-1);
}
4 — Examen de Java sur machine Fiupso 2i`eme ann´ee 2003-2004 – Solutions
/** Tri par selection, sans utiliser minimum(). */
public void triBis() { int imax;
for (int i = 0; i < nbElts-1; i++) { imax = i;
for (int j = i; j < nbElts; j++)
if (laListe[j].note() < laListe[imax].note()) imax = j;
echange(i, imax);
} }
/* affiche le contenu de la liste */
public void affiche() {
for (int i = 0; i < nbElts; i++) laListe[i].affiche();
}
// Mthode main crant une liste de 5 etudiants.
public static void main (String [] args) { ListeEtudiants maListe;
Etudiant tab[] = new Etudiant[5];
tab[0] = new Etudiant ("Evariste","Galois",12);
tab[1] = new Etudiant ("Camille", "Jordan", 8);
tab[2] = new Etudiant ("Jean Pierre","Serre", 11);
tab[3] = new Etudiant ("Jean","Ecalle",15);
tab[4] = new Etudiant ("Jean","Leray", 5);
maListe = new ListeEtudiants (tab, 5);
System.out.println("Liste non triee :");
maListe.affiche();
maListe.tri();
System.out.println("\nListe triee :");
maListe.affiche();
} }
Solution de l’ex. 3 Optionnel : classification par multi listes Le code solution est le suivant :
import java.io.*;
public class ListePersonnesMain {
public static void main(String[] args) { String chaineEntree = "z";
BufferedReader in = new BufferedReader(new
InputStreamReader(System.in));
ListePersonnes laListe = new ListePersonnes();
System.out.println("Entrez vos nom et age 1 par ligne, ’q’ pour finir");
while (chaineEntree != null) { try {
chaineEntree = in.readLine();
if (chaineEntree == null || chaineEntree.equals("q")) break;
String nom = new String(chaineEntree);
int age = Integer.parseInt(in.readLine());
laListe.ajouter(new Personne(nom, age));
System.out.println("Entrez une nouvelle personne");
} catch (IOException e) {
System.err.println("Erreur d’E/S " + e.getMessage());
continue;
} catch (NumberFormatException e ) {
System.err.println("Erreur d’entree d’entier " + e.getMessage());
continue;
} }
System.out.println("Liste " + laListe);
} }
class Personne {
String nom;
int age;
LinkedList liste;
public Personne(String sonNom, int sonAge) { nom = sonNom;
age = sonAge;
liste = null;
} }
6 — Examen de Java sur machine Fiupso 2i`eme ann´ee 2003-2004 – Solutions
class ListePersonnes { LinkedList liste[];
int nbPers;
public ListePersonnes() {
liste = new LinkedList[100];
nbPers = 0;
}
public void ajouter(Personne p) {
Personne dejaLa = renvoyerPers(p.nom);
if (dejaLa != null) {
p.liste = dejaLa.liste;
(p.liste).add(p);
} else {
LinkedList nouvListe = new LinkedList();
liste[nbPers] = nouvListe;
p.liste = nouvListe;
nouvListe.add(p);
nbPers++;
} }
public Personne renvoyerPers(String sonNom) { for (int i = 0; i < nbPers; i++) {
ListIterator it = liste[i].listIterator();
while(it.hasNext()) {
Personne p = (Personne)it.next();
String nomCourant = p.nom;
if (nomCourant.equals(sonNom)) return p;
} }
return null;
}
public String toString() { String resultat = "\n";
for (int i = 0; i < nbPers; i++) {
ListIterator it = liste[i].listIterator();
Personne p = (Personne)it.next();
resultat = resultat + "(" + p.nom + ", " + p.age + ") -> ";
}
resultat = resultat + "null\n";
}
return resultat;
}
}