IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Trier un tableau de caractères


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Trier un tableau de caractères
    Le programme doit permettre de saisir 10 mots de 20 caractères, et doit les ressortir triés dans l'ordre alphabétique. Sa devrais pas être un exo difficiles, mais je me casse la tête dessus...

    Voici mon code source

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    void Exercice1() // Appel de l'exercice 1
    {
    	system("cls"); // On éfface l'écran
     
    	// On présente ici l'exercice
    	printf("------------------------------------------------\n");
    	printf("Exercice1\n");
    	printf("------------------------------------------------\n");
    	printf("Saisie 10 mots de 20 caracteres dans un tableau\n");
    	printf("------------------------------------------------\n\n");
     
    	// Déclaration & Initialisation du tableau
    	#define TAILLE_TABLEAU1_X 20
    	#define TAILLE_TABLEAU1_Y 10
    	int ligne, colonne;
    	char tableau[TAILLE_TABLEAU1_Y][TAILLE_TABLEAU1_X] = {0};
     
    // DEBUT
     
    	printf("\nSaisissez vos 10 mots de 20 caracteres a la suite\n");
     
    	for(ligne=0; ligne<=TAILLE_TABLEAU1_Y-1; ligne++) // On fait une boucle de 10
    	{
    		scanf("%s", tableau[ligne]); // On utilise un %s pour une chaîne de caractères (%c, un caractère seulement)
    		fflush(stdin); // On vide le flux
    	}
     
    	printf("\nDans l'ordre alphabétique");
     
    	char tmp;
     
    	for (ligne=0; ligne<TAILLE_TABLEAU1_Y-1; ligne++)
    	{
    		for (colonne=0; colonne<TAILLE_TABLEAU1_X-1; colonne++)
    		{
    			if (strcmp(tableau[ligne],tableau[colonne]))
    			{
    				tmp  = tableau[ligne+1][colonne];
    				tableau[ligne+1][colonne] = tableau[ligne][colonne];
    				tableau[ligne][colonne] = tmp;
    			}
    		}
    	}
     
    	//ordonnerTableau_2D (tableau, TAILLE_TABLEAU1_X);
     
    	for(ligne=0; ligne< TAILLE_TABLEAU1_Y-1; ligne++) // On fait une boucle de 10
    	{
    		printf(": %s", tableau[ligne]);
    		printf("\n");
    	}
     
    // FIN
    }
    Je compile aucunes erreurs, mais sa trie pas bien du tous... et je ne vois pas trop ou chercher, je suis un peu embrouille faut dire .

    Mon second problèmes c'est que normalement faudrait que je fasse la fonction de trie en fonctions, mais sa compile pas en me disant que la fonction ordonnerTableau_2D ne prend pas 2 arguments, et la encore je comprend pas pourquoi il me dit sa..

    J'ai écrit ma fonction de la sorte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ordonnerTableau_2D (tableau, TAILLE_TABLEAU1_X);
    (dans le main)
     
    // Appel la fonction ordonnerTableau
    void ordonnerTableau_2D (char tableau[][20], int nb_lignes)
    {
    }
    (sans oublier bien sur la déclaration de la fonction dans un .h)
    Je vous remerci d'avance, si certains peuvent m'avancer dans mon problème

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    1- On ne doit pas utiliser fflush() sur un flux entrant (Voir la FAQ)

    2- Il te faut choisir un algorithme de tri. Ce que tu as écrit n'en est pas un.

    Une possibilité d'algorithme simple est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Pour ordonner le tableau commençant en deb et ayant N éléments :
     - Si N est égal à 0 ou 1 : rien à faire
       sinon
         - chercher la position du plus petit élément du tableau 
         - permuter le plus petit élément du tableau et celui situé au début du tableau (en deb) 
         - ordonner le tableau commençant en deb+1 et ayant N-1 éléments
    Une autre possibilité est d'utiliser la fonction standard qsort()

Discussions similaires

  1. Réponses: 7
    Dernier message: 12/06/2023, 15h51
  2. Trier un tableau de chaînes de caractères
    Par crocoscore dans le forum Pascal
    Réponses: 2
    Dernier message: 15/07/2014, 17h18
  3. [Débutant] Remplir et trier un tableau
    Par james-dean dans le forum Assembleur
    Réponses: 15
    Dernier message: 01/05/2005, 17h40
  4. Trier un tableau par ordre croissant
    Par Halleck dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 01/11/2004, 00h04
  5. trier un tableau et compter des elements du tableau
    Par remi51 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 17/06/2002, 16h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo