Cliquez ici pour retirer la feuille de style si vous souhaitez imprimer ce document (ou en cas de problème d'affichage).

Encore des tableaux d'entiers

Nous souhaitons écrire une fonction max_and_count() qui prend en paramètre un tableau d'entiers  et qui calcule, en un seul parcourt du tableau, à la fois la valeur maximale contenue dans le tableau, mais également le nombre de fois qu'elle apparait.

Par exemple, sur le tableau [2,6,18,17,18,3,-7,18,-7,6,2] la valeur maximale est 18 et elle apparait 3 fois.

  1. Déterminer le prototype de la fonction. Attention, il y a deux valeurs à "renvoyer", par conséquent, pour au moins une de ces valeurs, la fonctino necessitera un passage de variable par adresse.
  2. implementer la fonction. L'algorithme est simple :
  • max recoit le premier élément du tableau
  • count_max recoit 1
  • parcourt du tableau à partir du deuxième élément, pour chaque élement x
    • si x > max, max recoit x et count_max recoit 1
    • si x = max, count_max recoit count_max +1

Implémentez un programme qui teste votre fonction a partir d'un tableau d'entiers qui est soit donné sur la ligne de commande, soit demandé à l'utilisateur avec scanf. Dans les deux cas on rensigne d'abord la taille puis les entiers. Exemple :

$> ./a.out 4 3 2 11 -13 

veut dire que l'on veut appeller la contion sur le tableau de 4 valeurs [3,2,11,-13].

Avez vous un warning à la compilation (avec les options -Wall -ansi -pedantic) ? Savez vous l'expliquer ?

 

Encore plus de tableaux d'entiers

Nous souhaitons maintenant obtenir une fonction qui à partir d'un tableau d'entiers, initialise un deuxième tableau d'entiers contenant à chaque case le nombre d'occurences de la case de même indice dans le tableau de départ.

Par exemple, si on donne à la fonction le tableau  [2,6,18,17,18,3,-7,18,-7,6,2] ainsi qu'un tableau vide de 11 cases, après l'appel à la fonction, le tableau qui était vide contient [2,2,3,1,3,1,2,3,2,2,2].

Implémentez la solution "brutale" qui pour chaque élement du tableau, parcourt tout le tableau à la recherche des doublons pour les compter. Vous êtes encouragés à coder une fonction intermédiaire count() qui prend un tableau d'entier et un entier et qui renvoie le nombre d'occurences de l'entier dans le tableau.

Implémentez un programme qui teste votre fonction a partir d'un tableau d'entiers qui est soit donné sur la ligne de commande, soit demandé à l'utilisateur avec scanf. Dans les deux cas on rensigne d'abord la taille puis les entiers. Exemple :

$> ./a.out 4 3 2 11 -13 

veut dire que l'on veut appeller la contion sur le tableau de 4 valeurs [3,2,11,-13].

Avez vous un warning à la compilation (avec les options -Wall -ansi -pedantic) ? Savez vous l'expliquer ?

[bonus -- à la maison ou en fin de séance] Comment diminuer le nombre de parcourts nécessaires ? Proposez et implémentez vos idées.

 

Et si c'était une chaine de caractères ?

Refaites la fonction de l'exercice précédant, mais maintenant le tableau de départ n'est plus un tableau d'eniter, mais une chaine de caractères (donc un tableau d'entiers typés char dont on ne connait pas a priori la taille mais qui contient le caractère spécial '\0' pour marquer sa fin).

 

Les structures

Si ce n'est pas déjà fait depuis longtemps, faites la partie III du tp 4