Examen Java: IUP GEII RNC2

Transcription

Examen Java: IUP GEII RNC2
Examen Java: IUP GEII RNC2
Pascal Molli, Rémi Badonnel, Vincent Cridlig
26 janvier 2005
1
Exercice : Question de cours
1. En Java, l’encapsulation est elle basée sur les classes ou sur les objets ?
écrivez un programme qui montre les implications de ce choix.
2. Quelles sont les méthodes essentielles de la classe ”Object”
3. Quelles sont les méthodes essentielles de la classe ”Classe”
2
Exercice : Manipulation de tableaux (Rémi)
Soit une classe contenant deux tableaux tabA et tabB d’entiers définie comme
suit :
public class ManipulationTableaux {
int [] tabA = {6, 42, 15, 12, 9, 13, 2};
int [] tabB = {14, 8, 3, 4, 9, 6, 21, 15, 20};
}
2.1
Valeur minimale des éléments d’un tableau
Ajouter une fonction qui prend en paramètre un tableau d’entier (tabA ou
tabB) et affiche la plus petite valeur des éléments du tableau.
2.2
Calcul de moyenne et d’écart type
Ecrire deux fonctions qui prennent en paramètre un tableau d’entiers et
calculent respectivement la moyenne M et l’écart type E :
v
u n
n
n
X
X
u1 X
xi 2
1
2
t
)
xi et E =
x −(
M=
n i=1
n i=1 i
n
i=1
2.3
Union et intersection d’ensembles
On considère les tableaux tabA et tabB comme des ensembles. Calculer à la
main l’intersection tabA ∩ tabB et l’union tabA ∪ tabB de ces ensembles.
Proposer une fonction qui prend en paramètres deux tableaux d’entier et
fournit en retour un tableau représentant l’union.
1
3
3.1
Exercice : simulation de routage (Vincent)
Principe
Ce programme permet aux noeuds d’un réseau d’initialiser leur table de
routage. Chaque noeud connait la liste de ses voisins et dispose d’une liste de
chemins connus vers les autres noeuds du réseau. Au départ, la table de routage
contient les chemins vers ses voisins directs. Par exemple, si 1 et 2 sont voisins,
la table de routage de 1 contient le chemin 12.
Le noeud 0 initialise le protocole en envoyant sa propre table de routage à ses
voisins directs. Chaque noeud du réseau doit envoyer sa table de routage à tous
ses voisins directs lorsqu’il vient de mettre à jour sa propre table de routage.
Par exemple, à la fin du processus, le noeud 0 de la topologie en ligne (Figure
1) connait les chemins 01, 012, 0123.
3.2
Questions
Question 1 Implémenter le constructeur et la méthode ajouteVoisin de la
classe Noeud. Voir les commentaires décrivant leurs rôles respectifs.
Question 2 Implémenter le constructeur et les méthodes link et unlink de la
classe Simulation. Voir les commentaires décrivant leurs rôles respectifs.
0
5
0
1
2
6
1
5
1
3
0
4
2
4
2
3
3
Topologie en ligne
Topologie en anneau
Topologie en toile
Fig. 1 – Topologies réseau
Question 3 La figure 1 présente différentes topologies réseau. Implémenter
une méthode pour organiser les noeuds de façon à obtenir une topologie en
ligne. Même question pour une topologie en anneau et pour une topologie en
étoile (le premier noeud sera le centre). Chacune de ces méthodes s’écrit en trois
lignes maximum.
Question 4 Les fichiers sources sont initialement placés à la racine de l’application dans le répertoire exercice1. On veut organiser nos sources en créant
un package ”network” contenant le fichier Noeud.java. Indiquer l’ensemble des
modifications à apporter. Justifier.
3.3
Annexe
Cette annexe contient les trois fichiers sources suivants : Main.java, Simulator.java et Noeud.java.
2
import j a v a . u t i l . V ec t o r ;
public c l a s s Noeud {
S t r i n g name ;
V ec t o r v o i s i n s ;
V ec t o r chemins ;
public Noeud ( S t r i n g name ) {
/∗ A c o m p l e t e r ∗/
}
private void updateChemins ( V ec t o r cheminsRecus ) {
f o r ( i n t i =0; i <cheminsRecus . s i z e ( ) ; i ++){
S t r i n g cheminRecu = ( S t r i n g ) cheminsRecus . elementAt ( i ) ;
i f ( d e s t i n a t i o n ( cheminRecu ) != name . charAt ( 0 ) ) {
updateChemin ( cheminRecu ) ;
}
}
}
private void updateChemin ( S t r i n g cheminRecu ) {
i n t j =0;
boolean t r o u v e = f a l s e ;
while ( ! t r o u v e && j < chemins . s i z e ( ) ) {
S t r i n g chemin = ( S t r i n g ) chemins . elementAt ( j ) ;
i f ( d e s t i n a t i o n ( cheminRecu ) == ( d e s t i n a t i o n ( chemin ) ) ) {
t r o u v e = true ;
i f ( cheminRecu . l e n g t h ()+1 < chemin . l e n g t h ( ) ) {
chemins . setElementAt ( name+cheminRecu , j ) ;
advertiseNeighbours ( ) ;
}
}
j ++;
}
i f ( ! trouve ){
chemins . addElement ( name+cheminRecu ) ;
advertiseNeighbours ( ) ;
}
}
public void a d v e r t i s e N e i g h b o u r s ( ) {
f o r ( i n t i =0; i <v o i s i n s . s i z e ( ) ; i ++){
Noeud v o i s i n = ( Noeud ) v o i s i n s . elementAt ( i ) ;
v o i s i n . updateChemins ( chemins ) ;
}
}
private char d e s t i n a t i o n ( S t r i n g chemin ) {
return chemin . charAt ( chemin . l e n g t h ( ) − 1 ) ;
}
/∗
3
∗ A j o u t e un v o i s i n a l ’ e n s e m b l e d e s v o i s i n s
∗ Met a j o u r ma t a b l e d e s chemins
∗/
public void a j o u t e V o i s i n ( Noeud v o i s i n ) {
/∗ A c o m p l e t e r ∗/
}
public void r e t i r e V o i s i n ( Noeud v o i s i n ) {
v o i s i n s . removeElement ( v o i s i n ) ;
chemins . removeElement ( name+v o i s i n . name ) ;
}
/∗
∗ A f f i c h e l a l i s t e d e s v o i s i n s du noeud c o u r a n t
∗/
public void a f f i c h e r V o i s i n s ( ) {
/∗ A c o m p l e t e r ∗/
}
public void a f f i c h e r C h e m i n s ( ) {
System . out . p r i n t l n ( ” Chemins de ”+name+” : ” ) ;
f o r ( i n t i =0; i <chemins . s i z e ( ) ; i ++){
S t r i n g n = ( S t r i n g ) chemins . elementAt ( i ) ;
System . out . p r i n t ( n + ” − ” ) ;
}
System . out . p r i n t l n ( ) ;
}
}
public c l a s s S i m u l a t o r {
private i n t nbNoeuds ; // Nombre de noeuds du r e s e a u
private Noeud [ ] noeuds ; // Tableau d e s noeuds du r e s e a u
public S i m u l a t o r ( i n t nbNoeuds ) {
/∗ A c o m p l e t e r ∗/
}
public void s t a r t S i m u l a t i o n ( ) {
//Assume t h a t noeuds [ 0 ] i n i t i a t e s .
// noeuds [ 0 ] a d v e r t i s e s i t s n e i g h b o u r s
noeuds [ 0 ] . a d v e r t i s e N e i g h b o u r s ( ) ;
}
/∗
∗ L i e m u t u e l l e m e n t a e t b comme v o i s i n s
∗/
private void l i n k ( Noeud a , Noeud b ) {
/∗ A c o m p l e t e r ∗/
}
/∗
∗ Casse l e l i e n de v o i s i n a g e
4
∗ e n t r e l e s noeuds a e t b
∗/
private void u n l i n k ( Noeud a , Noeud b ) {
/∗ A c o m p l e t e r ∗/
}
/∗
∗ A f f i c h e l a t a b l e d e s chemins
∗/
public void d i s p l a y A l l R o u t i n g T a b l e s ( ) {
f o r ( i n t i =0; i <nbNoeuds ; i ++){
noeuds [ i ] . a f f i c h e r C h e m i n s ( ) ;
}
}
public void c r e a t e L i n e T o p o l o g y ( ) {
/∗ A c o m p l e t e r ∗/
}
public void c r e a t e R i n g T o p o l o g y ( ) {
/∗ A c o m p l e t e r ∗/
}
public void c r e a t e S t a r T o p o l o g y ( ) {
/∗ A c o m p l e t e r ∗/
}
}
public c l a s s Main {
public s t a t i c void main ( S t r i n g [ ] a r g s ) {
S i m u l a t o r s = new S i m u l a t o r ( 4 ) ;
s . createRingTopology ( ) ;
s . startSimulation ( ) ;
s . displayAllRoutingTables ( ) ;
}
}
5

Documents pareils