• Aucun résultat trouvé

Examen de Java sur machine Fiupso 2i`eme ann´ee 2003-2004 – Solutions

N/A
N/A
Protected

Academic year: 2022

Partager "Examen de Java sur machine Fiupso 2i`eme ann´ee 2003-2004 – Solutions"

Copied!
7
0
0

Texte intégral

(1)

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)

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);

(3)

/** 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)

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.*;

(5)

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)

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();

(7)

Personne p = (Personne)it.next();

resultat = resultat + "(" + p.nom + ", " + p.age + ") -> ";

}

resultat = resultat + "null\n";

}

return resultat;

}

}

Références

Documents relatifs

Cepen- dant, on peut montrer qu’il existe une fonction f ∈ C 0 ([0, 1]) strictement croissante qui est d´erivable presque partout et dont la d´eriv´ee est nulle presque partout..

Si non, donner un contre-exemple et proposer une version

De mˆeme il suffit qu’on retourne les fl`eches d’un afd, qu’on nomme initiaux les anciens ´etats finals, et final l’ancien ´etat initial, pour obtenir un automate

Correction examen UV Mod´ elisation Partie - Probl` emes inverses. Tout document

Ca donne une ellipsoide dont les axes principaux sont les vecteurs v i et dont la racine de la longueur des demi axes correspond aux valeurs singuli` eres... Notes : les axes n’ont

Note : dans cet exercice, vous pouvez r´ esoudre les questions 4, 5, 6, mˆ eme si vous n’avez pas r´ epondu aux questions 1, 2 et/ou 3.. Le but de cette question est de montrer

Le th´ eor` eme de Courant-Fischer est un r´ esultat fondamental qui caract´ erise les valeurs propres d’une matrice sym´

Montrer que l’ensemble des points fixes de σ est la