Université de Yaoundé I ---------Ecole Normale Supérieure ----------Département d’Informatique et des technologies Educatives The University of Yaoundé I ---------------Higher Teachers training College ------------Department of Computer science and educational Technologies MA404 : ALGORITHME ET PROGRAMMATION AVANCEE PROJET : PROGRAMMATION DES ALGORITHMES DE TRI, DE RECHERCHE ET DE FUSION SUR LES TABLEAUX Réalisé par : MAFOFOU Christiane Dorence Matricule 09YIOO7 Enseignant : Dr. FOUDA Année académique 2009-2010 INTRODUCTION Ce travail est élaboré dans le cadre du cours d'algorithme et programmation avancée. Il est question ici de programmer les algorithmes de tri, de recherche d'un élément dans un tableau et de fusion de deux tableaux. Ces algorithmes doivent être programmés en langage C. Pour réaliser ce travail, nous avons utilisé un ordinateur portable IBM ThinkPad pentium M avec 40GO de disque dur, 2GO de Ram, 1,6GHz de processeur et équipé du système d'exploitation Mandriva Linux 2008 Spring. Nos programmes ont été compilés et exécutés en utilisant le compilateur gcc. Nous donnerons d'une par les algorithmes et d'autre par les programmes de ces algorithmes en langage C. I LES ALGORITHMES A. ALGORITHME DU TRI D'UN TABLEAU Nous donnons ici l'algorithme qui permet de trier un tableau d'éléments. Nous considérons dans ce cas qu'il s'agit d'un tableau d'entiers et nous le trions par ordre décroissant. Algorithme tri (taille : Entier, tab :Tableau ) i, k, tem : Entier; afficher (Votre tableau est:); afficher (tab); pour i de 0 à taille-1 faire pour k de i à taille-1 faire si tab[i]<tab[k] alors tem <-- tab[i]; tab[i] <-- tab[k]; tab[k] <-- tem; fin si fin pour fin pour afficher (Le tableau trié est:); afficher (tab); fin Algorithme B. ALGORITHME DE RECHERCHE D'UN ELEMENT DANS UN TABLEAU Il s'agit dans cet autre algorithme de rechercher un élément dans un tableau. En d'autres termes de voir si un élément existe dans un tableau. Nous considérons toujours que nous manipulons un tableau d'entiers. Algorithme recherche (taille : Entier, element: Entier, tab: Tableau) i : Entier; afficher (Votre tableau est:); afficher (tab); i <-- 0; tant que i<taille et tab[i] différent de element faire i <-- i+1; fin tant que si i=taille alors afficher (l'élément recherché n'est pas dans le tableau tab); sinon afficher (l'élément element se trouve en position i du tableau); fin si fin Algorithme C. ALGIRITHME DE FUSION DE DEUX TABLEAUX Cet algorithme permet de fusionner deux tableaux triés en un tableau trié. Nous supposons toujours qu'il s'agit d'un tableau d'entiers. Algorithme fusion (taille1 : Entier, taille2 : Entier, tab1 : Tableau, tab2 : Tableau) i, j, k : Entier; tab3 : Tableau; afficher (Votre premier tableau est:); afficher (tab1); afficher (Votre deuxième tableau est:); afficher (tab2); i <-- 0; j <-- 0; k <-- 0; tant que i<taill1 et j<taille2 faire si tab2[j]<tab1[i] alors tab3[k] <-- tab1[i]; i <-- i+1; k <-- k+1; sinon tab3[k] <-- tab2[j]; j <-- j+1; k <-- k+1; fin si fin tant que si i<taille1 alors pour l de i à taille1 faire tab3[k] <-- tab1[i]; k <-- k+1; fin pour fin si si j<taille2 alors pour l de i à taille1 faire tab3[k] <-- tabé[i]; k <-- k+1; fin pour fin si afficher (le tableau, résultat de la fusion des deux tableaux est:); afficher (tab3); fin Algorithme II LES PROGRAMMES A. LE PRAGMME DE TRI Ce programme est écrit en langage C et se trouve dans le fichier tri.c. pour le compiler, il suffit de se positionner en ligne de commande, dans le répertoire contenant le fichier source et de taper la commande gcc -o trier tri.c. Pour l'exécuter on tape également en ligne de commande ./trier {la taille du tableau} {les éléments du tableau}. Exemple : pour trier le tableau [4 56 7 8 9], on tape la commande ./trier 5 4 56 7 8 9 et on obtient le résultat suivant : votre tableau est: 4 56 7 8 9 et le tableau trié par ordre décroissant est : 56 9 8 7 4 B. LE PROGRAMME DE RECHERCHE D'UN ELEMENT DANS UN TABLEAU Ce programme est écrit en langage C et se trouve dans le fichier recherche.c. pour le compiler, il suffit de se positionner en ligne de commande, dans le répertoire contenant le fichier source et de taper la commande gcc -o rechercher recherche.c. Pour l'exécuter on tape également en ligne de commande ./rechercher {la taille du tableau} {l'élément recherché} {les éléments du tableau}. Exemple : pour rechercher 8 dans le tableau [4 56 7 8 9], on tape la commande ./rechercher 5 8 4 56 7 8 9 et on obtient le résultat suivant : votre tableau est: 4 56 7 8 9 L'élément recherché se trouve en position 4 du tableau. C. LE PROGRAMME DE FUSION DE DEUX TABLEAUX TRIES Ce programme est écrit en langage C et se trouve dans le fichier fusion.c. pour le compiler, il suffit de se positionner en ligne de commande, dans le répertoire contenant le fichier source et de taper la commande gcc -o fusionner fusion.c. Pour l'exécuter on tape également en ligne de commande ./fusionner {la taille du premier tableau} {taille du deuxième tableau} {les éléments du premier tableau} {les éléments du deuxième tableau}. Exemple : pour fusionner les deux tableaux [56 45 34 12 4 2 1] et [45 44 42 32 23 19 12 8 3 1], on tape la commande ./fusionner 7 10 56 45 34 12 4 2 1 45 44 42 32 23 19 12 8 3 1 et on obtient le résultat suivant : Votre premier tableau est: 56 45 34 12 4 2 1 Votre deuxième tableau est: 45 44 42 32 23 19 12 8 3 1 Le tableau final, résultat de la fusion des deux tableaux est : 56 45 45 44 42 34 32 23 19 12 12 8 4 3 2 1 1 CONCLUSION Au terme de ce travail, il ressort qu'il est possible de programmer en langage C les algorithmes de tri, de recherche et de fusion en manipulant les tableaux.