Université de la Polynésie

Française

 

 

Examen Algorithmique

Licence Pro. TechniCom

Année 2003-04

Jeudi 4 décembre 2003

 

 

0.                Modalités

1.Vous disposez de une heure trente,

2.vos documents personnels sont autorisés,

3.le barème, sur 21 !, 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 des occurrences multiples dans une liste d’entiers (env. 4 pts)

Il s’agit de faire en sorte qu’une liste présentant plusieurs fois le même entier soit « nettoyée » de ces occurrences multiples pour ne plus faire apparaître chaque entier qu’une seule fois.

Exemple : Soit la liste T suivante :        12   4     8       4     12   9       7     12   8       13

La liste T après application de l’algorithme sera : 12 4     8       9     7       13

1.2.           Même question que la précédente mais en copie cette fois (env. 2 pts)

Pour cette question, vous supposerez que vous disposez d’un sous-programme Nombre_occurrences(Tab, taille, nombre) qui rend –1 si nombre ne se trouve pas dans le tableau Tab et la position de nombre si il fait partie du tableau.

2.                Opération sur une chaîne de caractères

Une chaîne de caractères n’est rien d’autre qu’un tableau de caractères au même titre qu’un tableau d’entiers. Vous écrirez donc vos algorithmes de la même manière (indices commençant à 0, variable donnant la taille, …)

2.1.           Ecrire, sous forme de pseudo-code, un algorithme d’extraction d’une sous-chaîne de caractères dans une chaîne (env. 4 pts)

Votre sous-programme prendra une chaîne de caractère de taille connue, un indice de début et un nombre de caractères, il construira une nouvelle chaîne qui sera la sous-chaîne extraite à partir de l’indice de début et ayant la longueur donnée. Si le nombre de caractères dépasse la longueur de la chaîne, on stoppe le processus à la fin de la chaîne.

 

Exemple 1 : Soit la chaîne « Bonjour », l’indice de début = 2 et le nombre de caractère 3, alors le résultat sera la chaîne « njo »

Exemple 2 : Soit la chaîne « Hello », l’indice 3 et le nombre de caractères 5, alors le résultat sera la chaîne « lo »

2.2.           Ecrire, sous forme de pseudo-code, un algorithme de suppression de caractères dans une chaîne (env. 4 pts)

Votre sous-programme prendra une chaîne de caractère de taille connue, un indice de début et un nombre de caractères, il construira une nouvelle chaîne qui sera la chaîne d’origine dans laquelle vous aurez supprimé les caractères indiqués. Si le nombre de caractères à supprimer dépasse la longueur de la chaîne, on stoppe le processus à la fin de la chaîne.

 

Exemple 1 : Soit la chaîne « Bonjour », l’indice de début de suppression = 2 et le nombre de caractère 3, alors le résultat sera la chaîne « Bour »

Exemple 2 : Soit la chaîne « Hello », l’indice de début de suppression = 3 et le nombre de caractères 5, alors le résultat sera « Hel ».

3.                Programmation 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.           Programmer dans la classe ListeEntier une méthode plus_grande_suite_nombres_pairs qui retourne la taille de la plus grande suite de nombres pairs. L’algorithme est ci-dessous (env. 3 pts)

/* La liste tab de taille longueur */

maxi <== 0

i <== 0

Répéter

       compte <== 0

       /* Comptage des nombres pairs successifs */

       tant que (tab[i] est pair) ET (i < longueur)

             compte <== compte + 1

             i<== i + 1

       fin_tant_que

       /* Si cette suite de pairs est plus longue que la précédente */

      si compte > maxi

      alors maxi <== compte

      I <== i + 1

tant_que (i < longueur)

Rendre(maxi)

 

3.2.           Proposez une petite modification dans la programmation de l’algorithme ci-dessus qui vous permettra d’afficher cette plus grand suite de nombres pairs (env. 1 pt)

3.3.           Ecrire une classe EssaiListes permettant de créer une liste hasard1 de 10 entiers au hasard entre 0 et 100 et d’afficher cette liste. Vous afficherez ensuite la plus grande suite de nombres pairs contenue dans cette liste hasard1 (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)

}