Université de la Polynésie

Française

 

 

Examen Algo et programmation Java

Lic Prof. Techni.Com

Année 2002-03

Jeudi 12 Décembre

 

 

0.                Modalités

1.Vous disposez de une heure trente,

2.vos documents personnels sont autorisés,

3.le barème est donné à titre indicatif et est susceptible d'être modifié.

1.                Opérations sur une liste d’entiers

1.1.           Ecrire, sous forme de pseudo-code, un algorithme de suppression, en place du dernier élément pair d’une liste d’entiers tab de taille longueur (env. 4 pts)

Il s’agit bien de faire « disparaître » l’élément en question et donc d’obtenir une liste de taille longueur –1.

1.2.           Ecrire, sous forme de pseudo-code, un algorithme de calcul de la taille de la plus grande suite de nombres pairs dans une liste (env. 6 pts)

A partir d'une liste d'entiers quelconque, on souhaite calculer la plus grande suite de nombres pairs contenue dans cette liste. Il s’agit simplement de rendre la taille de la plus grande suite d’entiers pairs trouvée. Les exemples ci-dessous sont probablement plus explicites qu’un long discours.

Exemples :

1.      liste = 3, 4, 6, 8, 7, 18, 20, 21, 30 le résultat est 3 car la plus longue suite de pairs est : 4, 6, 8

2.      liste = 12, 3, 67, 21, 44, 66, 8, 12 le résultat est 4 car la plus longue suite de pairs est : 44, 66, 8, 12

3.      liste = 5, 7, 6, 3, 9, 10 le résultat est 1 car la plus longue suite de pairs est : 6 ou 10

4.      liste = 5, 7, 11, 3, 9 le résultat est 0 car il n'y a aucun nombre pair


2.                Faire tourner un algorithme à la main (env. 4 pts)

Soit l’algorithme suivant :

 

mystere[0] <== tab[0]

lmystere <== 1

Répéter pour i allant de 1 à longueur -1

      /* ?????????? */

      j <== 0

      tant que (tab[i] > mystere[j]) ET (j < lmystere)

            j <== j + 1

      fin_tant_que

        /* ?????????? */

      Répéter pour k allant de lmystere -1 à j par pas de -1

            mystere[k+1] <== mystere[k]

      fin_de_répéter

      mystere[j] <== tab[i]

      lmystere <== lmystere + 1

fin_de_répéter

 

Si tab vaut :   8       12   6     7       14   9       23 et longueur = 7

Donner étape par étape la liste mystere.

3.                Programmation en Java

La classe ListeEntier ci-dessous est supposée connue et dispose des attributs et méthodes expliqués par les commentaires. Le code Java des méthodes importe peu.

A partir de cette classe, il vous est demandé de :

3.1.           Ecrire une méthode mysterieuse dans la classe ListeEntier qui code l’algorithme ci-dessus (env. 3 pts)

Remarque : tab et mystere sont deux instances de ListeEntier.

3.2.           Ecrire une classe EssaiListes permettant de créer une liste hasard1 de 10 entiers au hasard entre 0 et 100, d’afficher cette liste hasard1 puis de lui appliquer la méthode mysterieuse et afficher le résultat (env. 3 pts)

 

import java.io.*;

import  java.util.Random;

 

/** Une classe de manipulation des listes d'entiers

 * @author          Patrick Capolsini - 2000

 * @version         1.0

 */

public class ListeEntier

{                  /* Les éléments de la liste */

        int elementsListe[];

       

        /*  Initialisation du générateur de nombres aléatoires */

        private static Random hasard = new Random();

 

        /* Constructeur à partir de la seule taille de la liste à créer */

        ListeEntier(int taille)

 

        /** Constructeur (surcharge) à partir d'un tableau de String */

                    ListeEntier(String elem[])

                   

                    /* Retourne la taille de la liste */

        public int getDim()

 

        /* Affichage des éléments de la liste */

        public void affichage()

                    /* Tirage aléatoire des éléments d'une liste */

        public void randomListe()

 

                    /* Tirage aléatoire des éléments d'une liste */

        /* entiermax est la valeur maximum des entiers à tirer */

        public void randomListe(int entiermax)

}