:: Enseignements :: ESIPE :: E3INFO :: 2014-2015 :: Algorithmique ::
[LOGO]

Introduction à l'algorithmique, manipulation de tableaux


Ce TP permet de manipuler des algorithmes simples sur les tableaux et leur complexité.

Exercice 1 - Tableau aléatoire

Écrire une fonction void remplirAleatoire(int t[], int taille) qui remplit un tableau de taille éléments avec des entiers pseudo-aléatoires obtenus avec les fonctions suivantes;
#include <stdlib.h>
  long int rand(void);
  void srand(unsigned int seed);
la fonction srand pouvant être initialisée grâce à
#include <sys/types.h>
#include <unistd.h>
  pid_t getpid(void);
en commençant la fonction main par l'instruction srand(getpid()).

Écrire également une fonction void afficher(int t[], int taille) et tester ces deux fonctions dans le main sur un tableau, alloué sur la pile, d'une taille TAILLE_MAX définie comme une constante.

Exercice 2 - Minimum et maximum d'un tableau

Écrire une fonction itérative de recherche du minimum et du maximum d'un tableau, en effectuant un parcours du tableau.
Combien de comparaisons ont été effectuées?

Exercice 3 - Recherche dans un tableau

On souhaite écrire des fonctions de recherche d'un élément dans un tableau. Les fonctions sont itératives et renvoient l'indice de l'élément si une occurrence a été trouvée, et -1 sinon.
On pourra tester ces fonctions dans un programme qui affiche Element présent ou Elément absent et l'index.
  • Pour un tableau rempli aléatoirement:
    Dans ce cas, on parcourt le tableau tant qu'il y a des éléments et que l'on a pas trouvé la valeur recherchée.
    Combien de comparaisons sont effectuées?
  • Pour un tableau trié (en ordre croissant):
    Dans ce cas, la fonction effectue une recherche dichotomique dans une partie triée, commençant à l'indice debut et comprenant taille éléments.
    On pourra obtenir un tableau en ordre croissant (pour des valeurs de MAX_ECART*taille inférieures à MAX_INTMAX_ECART est l'écart maximum entre deux éléments consécutifs du tableau) par:
    t[0] = random()%MAX_ECART;
    for(i=1;i<taille;i++) {
      t[i] = t[i-1] + random()%MAX_ECART;	
    }
    
    • Si la partie est vide, l'élément n'est pas présent; sinon, on détermine l'élément à l'indice milieu de la partie.
    • Si cet élément est celui recherché, c'est fini: on l'a trouvé.
    • Si l'élément à l'indice milieu est supérieur à l'élément recherché, on poursuit la recherche dans la partie qui se trouve avant l'indice milieu.
    • Si l'élément à l'indice milieu est inférieur à l'élément recherché, on poursuit la recherche dans la partie qui se trouve après l'indice milieu.

Combien de comparaisons ont été effectuées?

Exercice 4 - Décalage circulaire dans un tableau