US

Manipulation de tableaux

Question 1

Écrire une méthode sum qui prend comme paramètre un tableau d'entiers int d'une dimension et qui renvoie la somme des entiers contenus dans le tableau. Voici la signature de la méthode :

public static int sum (int[] tab);

Par exemple, l'appel sum (new int[] {1, 2, 3, 4, 5}); renvoie 15.

Solution

1 
2 
3 
4 
5 
6 
7 
8 
9 
public static int sum (int[] tab)
{
    int sum = 0;
    for (int i = 0; i < tab.length; i++)
    {
        sum += tab[i];
    }
    return sum;
}

La solution est très simple, on déclare et initialise une variable sum à zéro. Ensuite, on parcoure la tableau complètement avec une boucle for et on ajoute chaque élément du tableau à la variable sum que l'on renvoie à la fin de la méthode.

Question 2

Écrire une méthode min qui prend comme paramètre un tableau de flottants double d'une dimension et qui renvoie le plus petit élément du tableau (celui qui a la valeur la plus petite). Voici la signature de la méthode :

public static double min (double[] tab);

Par exemple, l'appel sum (new double[] {-9.5, 1, -98.21, 218.2}); renvoie -98.21.

Solution

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
public static double min (double[] tab)
{
    double min = Double.POSITIVE_INFINITY;
    for (int i = 0; i < tab.length; i++)
    {
        if (tab[i] < min)
        {
            min = tab[i];
        }
    }
    return min;
}

On commence par déclarer une variable min qu'on initialise à l'infini positif. Cette variable va servir à stocker le plus petit réel déjà rencontré. On parcoure ensuite le tableau et on met à jour la variable min avec une condition if. Une autre solution consiste à initialiser la variable min à tab[0]. Cette solution ne fonctionnera que si le tableau contient au moins un élément.

Question 3

Écrire une méthode compareTab qui prend comme paramètre deux tableaux d'entiers int d'une dimension (tab1 et tab2) qui possèdent la même longueur. La méthode doit renvoyer un tableau de caractères (char) de même longueur et qui contient les caractères <, = et >. Le ième élément du tableau renvoyé contient < si tab1[i] < tab2[i] (même chose pour = et >). Voici la signature de la méthode :

public static char[] compareTab (int[] tab1, int[] tab2);

Par exemple, l'appel compareTab (new int[] {1, 2, 3}, new int[] {3, 2, 1}); renvoie le tableau [<, =, >].

Solution

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
public static char[] compareTab (int[] tab1, int[] tab2)
{
    char[] result = new char[tab1.length];
    for (int i = 0; i < result.length; i++)
    {
        result[i] = '=';
        if (tab1[i] < tab2[i])
        {
            result[i] = '<';
        }
        else if (tab1[i] > tab2[i])
        {
            result[i] = '>';
        }
    }
    return result;
}

On commence par créer un nouveau tableau de caractères. Ensuite, on parcoure le tableau que l'on vient de créer et on va y stocker soit <, = ou > en fonction des valeurs se trouvant dans tab1 et tab2 grâce à une instruction if-else.

Question 4

Écrire une méthode merge qui prend comme paramètre deux tableaux d'entiers int d'une dimension (tab1 et tab2) de longueurs quelconques. La méthode doit renvoyer un nouveau tableau d'entiers int qui contient les éléments des deux tableaux reçus en paramètre intercalés. Soit s1, s2, s3, ..., sm les éléments du premier tableau et t1, t2, t3, ..., tn les éléments du second tableau. Les éléments du tableau renvoyé sont s1, t1, s2, t2, s3, t3, .... Faites bien attention que les deux tableaux n'ont pas forcément la même longueur.

Par exemple, l'appel merge (new int[] {1, 2, 3, 4}, new int[] {5, 6}); renvoie le tableau [1, 5, 2, 6, 3, 4].

Solution

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
public static int[] merge (int[] tab1, int[] tab2)
{
    int[] ret = new int[tab1.length + tab2.length];
    int min = Math.min (tab1.length, tab2.length);
    int k = 0;
    // Intercalage
    for (int i = 0; i < min; i++)
    {
        ret[k++] = tab1[i];
        ret[k++] = tab2[i];
    }
 
    // Ajout éléments du plus long tableau
    for (int i = min; i < tab1.length; i++) { ret[k++] = tab1[i]; }
    for (int i = min; i < tab2.length; i++) { ret[k++] = tab2[i]; }
 
    return ret;
}

On commence par trouver la taille du plus petit tableau grâce à la méthode Math.max. Ensuite, on s'occupe dans une première phase de l'intercalage des éléments des deux tableaux. Ensuite, il reste à ajouter tous les éléments du tableau le plus long, ce qui est fait grâce aux deux dernières boucle for.

Question 5

Écrire une méthode max qui prend comme paramètre un tableau de flottants double à deux dimensions et qui renvoie la plus grand élément de ce tableau. Attention, le tableau peut être vide et n'est pas nécessairement rectangulaire. Si le tableau est vide, la méthode doit renvoyer l'infini négatif.

Par exemple, l'appel max (new double[][] {{}, {1, 2}, {3}, {4, 5, 6, 7}, {}}); renvoie 7.0.

Solution

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
public static double max (double[][] tab)
{
    double max = Double.NEGATIVE_INFINITY;
    for (int i = 0; i < tab.length; i++)
    {
        for (int j = 0; j < tab[i].length; j++)
        {
            max = Math.max (max, tab[i][j]);
        }
    }
    return max;
}

On commence par initialiser une variable max à l'infini négatif grâce à la constante Double.NEGATIVE_INFINITY. Ensuite, on parcoure tout le tableau grâce à une double boucle for imbriquée tout en faisant attention que la seconde boucle aille bien de 0 à la taille de la ième ligne. Pour chaque élément du tableau, on calcule le maximum entre l'élément et le plus grand élément rencontré jusqu'à présent avec la méthode Math.max.

Vous pouvez télécharger la liste des questions. Si vous avez des problèmes ou que vous ne comprenez pas bien une question, rendez-vous sur le forum consacré aux exercices.

  • Espace membre
  • Learning Center
  • Les forums
  • Livre d'or
  • Imprimer
  • Boutique
  • Info
  • Règlement
  • Erreur
  • Newsletter

MyPagerank.Net

Firefox 3.6

Browse Happy logo

Open Clip Art Library

Join our Facebook Group

Twitter

Copyright © 2000-2018 UKO. Toute reproduction strictement interdite sans autorisation du webmaster

Valid XHTML 1.1 !
Valid CSS2 !
Level Triple-A conformance icon, W3C-WAI Web Content Accessibility Guidelines 1.0
ICRA Internet Content Rating Association
Creative Commons License
Site optimisé pour Firefox avec une résolution 1024x768 --- Page chargée en 0.1069748 secondes --- This site uses Thumbshots previews