//--------------------------------------------------------------------------#include #include #include #include #include #pragma hdrstop #include //--------------------------------------------------------------------------#pragma argsused /* (Algorithme : Allocation dynamique d'un tableau de pointeurs pour récupérer une saisie opérateur // Fonction Saisie opérateur et stockage char** Saisie_util_stock(int nb_lignes, char **tab) { //Déclaration char tmp[100],*ptr_new; int ligne;
//nombre de lignes de saisie et pointeur du t
for (ligne = 0; ligne < nb_lignes; ligne++) { printf("Sai sie %d : ",ligne+1);
//Saisie utilisateur gets(tmp);
//Allocation mémoire pointeur ptr_new= (char*) malloc ( (strlen(tmp)+1) * sizeof(char) ); // permet de réallouer la mémoi //copie de la chaine de caractère utilisateur utilisateur (tmp) dans la chaîne allouée (saisie) strcpy(ptr_new,tmp); *(tab+ligne)=ptr_new;
}
// on libère ptr_new free(ptr_new); return tab;
//Fin fonction } // Fonction tri alphabétique Tri(char **tab, int nb_lignes,char ordonancement) void Tri( { // Déclaration variables int tableau_trie =0, i, ligne,compar e; char *tmp;
// Lire et trier les les lignes lignes 2 à 2 (tri à bulle) { for (i = nb_lignes-1 ; i >0 ; i--) tableau_trie=1; for (ligne = 0; ligne < i; ligne++) { // Tri croissant ou décroissant ? if (ordonancement=='d') { // Tri décroissant compare=strcmp(*(tab+ligne),*(tab+ligne+1)); } else { // Tri croissant compare=strcmp(*(tab+ligne+1),*(tab+ligne)); } if (compare<0) { tmp =*(tab+ligne); =*(tab+ligne); *(tab+ligne) = *(tab+ligne+ 1); *(tab+ligne+ 1)= tmp; tableau_trie=0; } } if (tableau_trie==1) { break; }
} return; //Fin fonction } // Fonction affichage void Affichage(char **tableau, int nb_lignes) { //Déclaration des variables int ligne;
//Afficher le tableau for (ligne =0; ligne< nb_lignes; ligne ++) { printf("%s\n",*(tableau+ligne)); } return;
//Fin fonction } //Programme principal void main(void ) { //allocation dynamique sur un tableau de pointeurs en fonction de la taille actuelle et de la t //Déclaration variables char nb_li[20],chx[10]=""; char *tab[20]={NULL},ordonancement; int nb_lignes=0; int utilisateur_andouille,i;
// tableau de 20 chaînes de caractères
//Affichage BONJOUR printf("####################################################################\n"); printf("### ###\n"); printf("### BONJOUR ###\n"); printf("### ###\n"); printf("####################################################################\n\n");
//combien de lignes à saisir ? printf("Combien de lignes a saisir ?\n"); gets(nb_li); nb_lignes=atoi(nb_li);
//Appel fonction saisie et stockage Saisie_util_stock(nb_lignes,tab);
//Choix du programme à exécuter utilisateur_andouille: clrscr(); printf("####################################################################\n"); printf("### ###\n"); printf("### Que faire ? ###\n"); printf("### 1) tri alphabetique croissant des chaines ###\n"); printf("### 2) tri alphabetique decroissant des chaines ###\n"); printf("### 3) tri alphabetique croissant des caracteres ###\n"); printf("### 4) tri alphabetique decroissant des caracteres ###\n"); printf("### ###\n"); printf("####################################################################\n\n"); printf("Choix : \n");
// //
// Affichage avant tri printf("Tableau avant tri : \n"); Affichage(tab,nb_lignes); switch (atoi(gets(chx))) { case 1: // Tri alphabétique croissant des chaines clrscr(); puts("Tri alphabetique croissant des chaines\n"); // Affichage avant tri printf("Tableau avant tri : \n"); Affichage(tab,nb_lignes);
// Tri alphabétique Tri(tab,nb_lignes,'c');
// Affichage après tri printf("Tableau apres tri alphabetique croissant : \n"); Affichage(tab,nb_lignes); break; case 2: // tri alphabetique décroissant des chaines clrscr(); puts("Tri alphabetique decroissant des chaines\n"); // Affichage avant tri printf("Tableau avant tri : \n"); Affichage(tab,nb_lignes);
// Tri alphabétique Tri(tab,nb_lignes,'d');
// Affichage après tri printf("Tableau apres tri alphabetique : \n"); Affichage(tab,nb_lignes); break; case 3: // tri alphabetique croissant des caracteres clrscr(); puts("Vous avez fait le 3"); break; case 4: // tri alphabetique decroissant des caracteres clrscr(); puts("Vous avez fait le 4"); break; default: // Entrez un nombre entre 1 et 4 puts("Veuillez entrer un nombre compris entre 1 et 4 !"); getch(); goto utilisateur_andouille;
} /*
//tri alphabétique Tri(tab,nb_lignes); // Affichage après tri printf("Tableau apres tri alphabetique : \n"); Affichage(tab,nb_lignes);
*/ getch(); //Fin programme } //---------------------------------------------------------------------------