Vous êtes sur la page 1sur 9

Examen de Principes Algorithmiques et Programmation (IPRO/PRM2)

1re session - Juin 2018


Nom - prénom : Groupe :
Ne répondez pas à deux questions différentes sur une même feuille !

1) Complétez un programme dont le but est d’encadrer une ligne de texte introduite par l’utilisateur.
Le programme commence par demander à l’utilisateur d’introduire une ligne de texte (à l’aide de la
méthode nextLine() de la classe Scanner). Ensuite le programme demande d’introduire un
entier qui correspond à la largeur du cadre entourant le texte. Bien entendu, la largeur du cadre doit
être supérieure à celle du texte ; il faut au moins un espace à gauche et à droite du texte et compter
les bords du cadre. Donc, tant que la largeur introduite ne respecte pas cette contrainte, le programme
en redemande une. Par ailleurs, la largeur introduite doit être telle que le texte soit centré dans le cadre
(autant d’espaces blancs à gauche et à droite).

Vous devez définir et utiliser la fonction public static int saisieLargeur(int min), qui
demande à l’utilisateur une valeur entière qui correspondra à la largeur du cadre et qui renvoie cette
valeur. La fonction redemande une valeur tant que les 2 contraintes ci-dessous ne sont pas
respectées :

1. la valeur doit être strictement plus grande que min.


2. la valeur doit avoir la même parité que min (elle doit être paire ssi min l’est).

Ecrivez également une fonction afficheCadreTexte qui reçoit le texte et la largeur et qui affiche
le texte comme demandé.

Par ailleurs, n’hésitez pas à définir d’autres fonctions que vous jugeriez utiles.

Ci-dessous, deux exemples d’exécution du programme (les valeurs introduites par l’utilisateur sont
soulignées). Veillez à reproduire exactement les affichages des messages et du format du cadre
proposés.

Introduisez le texte à encadrer : Bonjour monde¿


Entrez une largeur impaire plus grande que 15 : 10¿
Erreur ! Entrez une largeur impaire plus grande que 15 : 15¿
Erreur ! Entrez une largeur impaire plus grande que 15 : 16¿
Erreur ! Entrez une largeur impaire plus grande que 15 : 17¿
+---------------+
| Bonjour monde |
+---------------+

Introduisez le texte à encadrer : Hello world! ¿


Entrez une largeur paire plus grande que 14 : 15¿
Erreur ! Entrez une largeur paire plus grande que 14 : 19¿
Erreur ! Entrez une largeur paire plus grande que 14 : 20¿
+------------------+
| Hello world! |
+------------------+

EPFC - ULB
Bachelier en Informatique 1er niveau page 1/9
Examen de Principes Algorithmiques et Programmation (IPRO/PRM2)
1re session - Juin 2018
Nom - prénom : Groupe :
Ne répondez pas à deux questions différentes sur une même feuille !

package examen;

import java.util.Scanner;

public class Question1 {

public static String saisieTexte() {


Scanner scan = new Scanner(System.in);
System.out.print("Introduisez le texte à encadrer : ");
return scan.nextLine();
}

public static void main(String[] args) {


String texte = saisieTexte();
int lg = saisieLargeur(texte.length() + 2);
afficheTexteCadre(texte, lg);
}
}

EPFC - ULB
Bachelier en Informatique 1er niveau page 2/9
Examen de Principes Algorithmiques et Programmation (IPRO/PRM2)
1re session - Juin 2018
Nom - prénom : Groupe :
Ne répondez pas à deux questions différentes sur une même feuille !

2) Écrivez une fonction qui reçoit en paramètre une séquence et qui renvoie la longueur de la plus
longue suite d’entiers pairs consécutifs dans cette séquence.

Consignes
• Donnez l'analyse du problème, c'est à dire utilisez la méthode des tableaux, indiquez et
décrivez clairement les invariants utilisés, la façon de les initialiser et la façon de les restaurer.
• Utilisez obligatoirement la méthode des hypothèses inductives.
• Écrire une fonction qui reçoit une séquence et qui renvoie le résultat désiré.
• Veillez à ce que votre fonction ne fasse qu'un seul parcours de la séquence.

Exemples :

• Si s = {1, 2, 2, 2, 3, 3, 1, 6, 4, 8, 4, 5, 7, 3, 5, 5, 2, 5}
alors le résultat est 4

• Si s = {3, 1, -5, -5, 1, 1, 2, 12, 2} alors le résultat est 3

• Si s = {3, 1, -5, -5, 1, 1, 3, 5, 1} alors le résultat est 0

• Si s = {2, 4, 3, 1, -5, -5, 1, 1} alors le résultat est 2

• Si s = {} alors le résultat est 0

EPFC - ULB
Bachelier en Informatique 1er niveau page 3/9
Examen de Principes Algorithmiques et Programmation (IPRO/PRM2)
1re session - Juin 2018
Nom - prénom : Groupe :
Ne répondez pas à deux questions différentes sur une même feuille !

package examen;

import seqint.SeqInt;
import seqint.SeqIntIterator;

public class Question2 {

public static void main(String[] args) {


SeqInt s1 = new SeqInt(1, 2, 2, 2, 3, 3, 3, 1, 6, 4, 8, 4, 5, 7, 3, 5, 5, 2, 5);
System.out.print("Plus longue suite d'entiers pairs : ");
System.out.println(lgPlusLongueSuitePair(s1));
}
}

EPFC - ULB
Bachelier en Informatique 1er niveau page 4/9
Examen de Principes Algorithmiques et Programmation (IPRO/PRM2)
1re session - Juin 2018
Nom - prénom : Groupe :
Ne répondez pas à deux questions différentes sur une même feuille !

3) Soit la classe suivante :

public class Note {

public String nomEtud;


public double note;

public Note(String nomEtud, double note) {


this.nomEtud = nomEtud;
this.note = note;
}

public int compareTo(Note other) {


return nomEtud.compareToIgnoreCase(other.nomEtud);
}

@Override
public String toString() {
return nomEtud + " : " + note;
}

La classe Question3 contient la fonction main suivante :

public static void main(String[] args) {


Array<Note> interros = new Array<>();
System.out.println("Au départ :\n" +interros);
ajouteNote(new Note("Ben", 8), interros);
System.out.println("après ajouteNote(Ben,8) :\n" +interros);
ajouteNote(new Note("Arthur", 9), interros);
System.out.println("après ajouteNote(Arthur,9) :\n" +interros);
ajouteNote(new Note("Arthur", 6), interros);
System.out.println("après ajouteNote(Arthur,6) :\n" +interros);
ajouteNote(new Note("Arthur", 9), interros);
System.out.println("après ajouteNote(Arthur,9) :\n" +interros);
ajouteNote(new Note("Arthur", 5), interros);
System.out.println("après ajouteNote(Arthur,5) :\n" +interros);
ajouteNote(new Note("Arthur", 7), interros);
System.out.println("après ajouteNote(Arthur,7) :\n" +interros);
ajouteNote(new Note("Caro", 9), interros);
System.out.println("après ajouteNote(Caro,9) :\n" + interros);
}

EPFC - ULB
Bachelier en Informatique 1er niveau page 5/9
Examen de Principes Algorithmiques et Programmation (IPRO/PRM2)
1re session - Juin 2018
Nom - prénom : Groupe :
Ne répondez pas à deux questions différentes sur une même feuille !

qui produit l’affichage suivant :

Au départ :
[]
après ajouteNote(Ben,8) :
[Ben : 8.0]
après ajouteNote(Arthur,9) :
[Arthur : 9.0, Ben : 8.0]
après ajouteNote(Arthur,6) :
[Arthur : 6.0, Arthur : 9.0, Ben : 8.0]
après ajouteNote(Arthur,9) :
[Arthur : 9.0, Arthur : 6.0, Arthur : 9.0, Ben : 8.0]
après ajouteNote(Arthur,5) :
[Arthur : 9.0, Arthur : 6.0, Arthur : 9.0, Ben : 8.0]
après ajouteNote(Arthur,7) :
[Arthur : 9.0, Arthur : 7.0, Arthur : 9.0, Ben : 8.0]
après ajouteNote(Caro,9) :
[Arthur : 9.0, Arthur : 7.0, Arthur : 9.0, Ben : 8.0, Caro : 9.0]

Il vous est demandé d’écrire la fonction ajouteNote (et d’autres que vous jugerez utiles) qui ajoute
une note concernant un étudiant dans un tableau de notes. Elle respectera les contraintes suivantes :

• Le tableau est gardé trié ; pour cela vous ferez les comparaisons au moyen de la méthode
compareTo de la classe Note.

• Pour chaque étudiant, seules les 3 meilleures notes sont gardées dans le tableau (si on
appelle la fonction avec une note inférieure aux 3 notes existantes pour l’étudiant, la
fonction ne fait rien).

• Une solution en un minimum de parcours du tableau sera grandement préférée.

• Vous ne pouvez pas utiliser de tableau temporaire, tout doit se faire en place dans le tableau
donné.

EPFC - ULB
Bachelier en Informatique 1er niveau page 6/9
Examen de Principes Algorithmiques et Programmation (IPRO/PRM2)
1re session - Juin 2018
Nom - prénom : Groupe :
Ne répondez pas à deux questions différentes sur une même feuille !

package examen;

import eu.epfc.prm2.Array;

public class Question3 {

public static void main(String[] args) {


//voir énoncé
}
}

EPFC - ULB
Bachelier en Informatique 1er niveau page 7/9
Examen de Principes Algorithmiques et Programmation (IPRO/PRM2)
1re session - Juin 2018
Nom - prénom : Groupe :
Ne répondez pas à deux questions différentes sur une même feuille !

4) Écrivez, de manière récursive, une fonction replaceAll qui reçoit en paramètres un tableau
d’entiers tab, un entier oldval et un entier newval, et qui modifie tab en remplaçant toutes les
occurrences de oldval par newval.

Remarque : Vous aurez probablement besoin d'utiliser une fonction auxiliaire.

Exemple d’utilisation (ici dans une fonction main) :

public static void main(String[] args) {


Array<Integer> tab = new Array<>(1, 2, 2, 5, 2, 3);
System.out.println("tab : " + tab);
replaceAll(tab, 2, 4);
System.out.println("2 remplacé par 4 : " + tab);
replaceAll(tab, 6, 4);
System.out.println("6 remplacé par 4 : " + tab);
}

Donne, à l’exécution :

tab : [1, 2, 2, 5, 2, 3]
2 remplacé par 4 : [1, 4, 4, 5, 4, 3]
6 remplacé par 4 : [1, 4, 4, 5, 4, 3]

EPFC - ULB
Bachelier en Informatique 1er niveau page 8/9
Examen de Principes Algorithmiques et Programmation (IPRO/PRM2)
1re session - Juin 2018
Nom - prénom : Groupe :
Ne répondez pas à deux questions différentes sur une même feuille !

package examen;

import eu.epfc.prm2.Array;

public class Question4 {

public static void main(String[] args) {


//voir énoncé
}
}

EPFC - ULB
Bachelier en Informatique 1er niveau page 9/9