TD6 - Les tris lents

Appliquer le tri sur un tableau de réel

Durée : 1h30

Objectifs :

  • Réaliser les algorithmes de tris étudiés en cours
  • Coder avec des fichiers séparés
  • Utiliser des Tableaux dynamiques
  • Appliquer les différents tris à un même tableau

Attention :

À chaque étape de programmation, vous devez vérifier si le programme :

  • Compile sans warning
  • Obtient les résultats attendus
  • Avant de coder, il faut écrire un algo avec un papier et un stylo !

    logo

0- Objectifs

1- Créer l’arborescence des fichiers suivantes

2- Créer le squelette du programme

fonctions.h

#ifndef __fonctions_H_
#define __fonctions_H_
/* toutes mes signatures/prototypes de fonctions/méthodes */
#endif

fonctions.c

#include "fonctions.h"
/* toutes mes signatures/prototypes de fonctions/méthodes + leur corps */

trisLents.h

#ifndef __trisLents_H_
#define __trisLents_H_
/* toutes mes signatures/prototypes de fonctions/méthodes */
#endif

trisLents.c

#include "trisLents.h"
/* toutes mes signatures/prototypes de fonctions/méthodes + leur corps */

main.c

#include <stdio.h>
#include "fonctions.h"
#include "trisLents.h"

int main(){
    printf("C'est le TD5 !");
    return 0;
}

3- Créer la fonction permettant d’allouer un tableau dynamique d’entiers (1D)

  • La taille devra être une fixée par l’utilisateur au début du programme ou via une variable globale (exemple : #define TAILLE 100)
  • La compilation doit être séparée
    • le corps de la fonction est dans le fichier fonctions.c
    • la signature de la fonction dans fichier fonctions.h
    • l’appel de la fonction dans le fichier main.c
  • La tableau devra contenir uniquement des entiers (vous devrez faire un malloc sur la taille d’un entier)
/* Auteur : ... */
/* Date :   ... */
/* Résumé : ... */
/* Entrée(s) : ... */
/* Sortie(s) :  ...  */

int* allouer(int taille);

4- Créer une méthode permettant d’initialiser toutes les cases de la matrice avec des valeurs aléatoires

  • La compilation doit être séparée
    • le corps de la fonction est dans le fichier fonctions.c
    • la signature de la fonction dans fichier fonctions.h
    • l’appel de la fonction dans le fichier main.c
  • Attention :
    • ne pas oublier dans le main.c et sa fonction main l’instruction d’initialisation de rand
    • ne pas oublier le include contenant les instructions de génération aléatoire !
...
#include <time.h>
...
int main(){
...
srand(time(NULL));
...
}
/* Auteur : ... */
/* Date :   ... */
/* Résumé : ... */
/* Entrée(s) : ... */
/* Sortie(s) :  ...  */
void initialiser(int* monTab,int taille);

5- Créer une méthode permettant d’afficher le tableau

  • La compilation doit être séparée
    • le corps de la fonction est dans le fichier fonctions.c
    • la signature de la fonction dans fichier fonctions.h
    • l’appel de la fonction dans le fichier main.c
/* Auteur : ... */
/* Date :   ... */
/* Résumé : ... */
/* Entrée(s) : ... */
/* Sortie(s) :  ...  */
void afficher(int* monTab,int taille);

6- Créer une méthode permettant de copier un tableau dans un autre

  • La compilation doit être séparée
    • le corps de la fonction est dans le fichier fonctions.c
    • la signature de la fonction dans fichier fonctions.h
    • l’appel de la fonction dans le fichier main.c
  • Objectif : garder en mémoire le tableau initial et appliquer l’ensemble des tris étudiés en cours
  • Attention : le tableau copier doit avoir été alloué dans le programme principal
/* Auteur : ... */
/* Date :   ... */
/* Résumé : ... */
/* Entrée(s) : ... */
/* Sortie(s) :  ...  */
void copie(int* tableauOriginal, int* tableauCopie, int tailleTableau);

7- Créer une méthode permettant d’effectuer un échange entre 2 valeurs dans un tableau

  • La compilation doit être séparée
    • le corps de la fonction est dans le fichier fonctions.c
    • la signature de la fonction dans fichier fonctions.h
    • l’appel de la fonction dans le fichier main.c
/* Auteur : ... */
/* Date :   ... */
/* Résumé : ... */
/* Entrée(s) : ... */
/* Sortie(s) :  ...  */
void echange(int* monTab, int i, int j);

8- Coder l’ensemble des tris étudiés en cours

  • La compilation doit être séparée
    • le corps de la fonction est dans le fichier trisLents.c
    • la signature de la fonction dans fichier trisLents.h
    • l’appel de la fonction dans le fichier main.c
  • Attention :
    • n’oubliez pas de sauvegarder une copie du tableau créé aléatoirement
    • d’appliquez le tri à la copie du tableau, afin de pouvoir le réutiliser pour les autres tris
/* Auteur : ... */
/* Date :   ... */
/* Résumé : ... */
/* Entrée(s) : ... */
/* Sortie(s) :  ...  */
void triSelection(int* monTab, int taille);
/* Auteur : ... */
/* Date :   ... */
/* Résumé : ... */
/* Entrée(s) : ... */
/* Sortie(s) :  ...  */
void triBulles(int* monTab, int taille);
/* Auteur : ... */
/* Date :   ... */
/* Résumé : ... */
/* Entrée(s) : ... */
/* Sortie(s) :  ...  */
void triInsertion(int* monTab, int taille);

9- (Bonus)

logo

  1. Créer un makefile permettant de compiler le tout
  2. Ajouter au programme la possibilité de rajouter un argument à l’éxécution avec la taille du Tableau
  3. Créer un menu interactif permettant à l’utilisateur de choisir un tri en particulier
  4. Coder les tris drapeau, shell, cocktail.