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 tableau caractères sans strcp() et stcomp() [Débutant(e)]


Sujet :

C

  1. #1
    Nanoucha
    Invité(e)
    Par défaut trier tableau caractères sans strcp() et stcomp()
    Bonjour,
    j'ai besoin d'aide. J'essaie de faire le tri d'un tableau comptenant des caractères (nom) en ordre alphabétique. Chaque cellule comprend 5 caractères. Ce tri doit être récursif. J'ai un tableau de caractères déclaré (ListeNom[20][5]), l'entier position(PositionMax), et le vecteur de travail (ListeTravail[]). Ils sont tous passés en paramètres dans ma fonction TrierNom. Je dois faire le trie en ordre alphabétique avec mon vecteur de travail. Je compare 2 caractères, le plus grand je le permute avec le dernier de la liste et je fais ainsi de suite avec tous les caractères de mon tableau.

    Je veux faire moi-même la comparaison des chaînes de caractères et faire le trier. Aussi, j'ai un problème de dépassement dans mon tableau "segmentation float" à résoudre.
    Voici ce que j'ai commencé à faire, si vous pouviez m'aider à me corriger:

    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
     
    void TrierNom(int ListeTravail[], char ListeNom[][5], int PositionMax)
    {
            // Fonction PlusGrand pour rechercher le nom le plus grand
            int TrouvePlusGrandNom(int ListeTravail[], char ListeNom[][5], int PositionMax);
     
            for (int i=0; i<=PositionMax; i++)
            {
                    ListeTravail[i]= i;
            }
            for (int i=0; i<PositionMax; i++)
            {
                    TrouvePlusGrandNom(ListeTravail, ListeNom, PositionMax);
            }
     
    	if (PositionMax > 0)
    		TrierNom(ListeTravail, ListeNom,PositionMax - 1);
    }
     
     
    // Trouve le plus grand Nom du vecteur et permute avec le dernier
    int TrouvePlusGrandNom(int ListeTravail[], char ListeNom[][5], int PositionMax)
    {
            int PlusGrandNom(char ListeNom[][5],int X, int Y, int PositionChar);
            int Temp;
            int idxPlusGrand;
     
            //Si on est rendu au premier
            if(PositionMax = 0)
    	{
                    return 0;
            }
     
            for(int i=0;i<PositionMax;i++)
            {
                    idxPlusGrand = PlusGrandNom(ListeNom, ListeTravail[i], ListeTravail[PositionMax], PositionMax);
    		if (idxPlusGrand = ListeTravail[i]) //S'il faut permuter (ListeTravail[i] > ListeTravail[PositionMax])
                    {
                            Temp = ListeTravail[PositionMax];
                            ListeTravail[PositionMax] = ListeTravail[i];
                            ListeTravail[i] = Temp;
                    }
            }
     
    	TrouvePlusGrandNom(ListeTravail, ListeNom, PositionMax - 1);
    }
     
    // Compare 2 noms et retourne indice du plus grand nom
    int PlusGrandNom(char ListeNom[][5],int X, int Y, int PositionChar)
    {
     
    	if (ListeNom[AX][PositionChar]> ListeNom[Y][PositionChar])
            {
                    return X;
            }
            else if (ListeNom[X][PositionChar]< ListeNom[Y][PositionChar])
            {
                    return Y;
            }
            else
                    return PlusGrandNom(ListeNom, X, Y, PositionChar + 1);
    }

  2. #2
    Membre averti Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Points : 396
    Points
    396
    Par défaut
    Es tu oblige de le faire en recursif ?

    Pour un tri, a par peut etre dans une liste chainee, j'ai pas l impression que ce soit le plus simple.

    Sinon au niveau de ton SegFault, si ton PositionMax est la taille de ton tableau le SegFault est dans la condition d'arret du premier "for" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for (int i = 0; i <= PositionMax; i++) //   <=   ou juste   <   ???
    Ca se fait une declaration et une initialisation dans un for en C ?
    Si je fais ca gcc me chie une pendule...

    Sinon y a un truc bizarre la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (ListeNom[AX][PositionChar]> ListeNom[Y][PositionChar])
    C'est quoi ce AX ?

  3. #3
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: trier tableau caractères sans strcp() et stcomp()
    Citation Envoyé par Nanoucha
    Voici ce que j'ai commencé à faire, si vous pouviez m'aider à me corriger:
    • Attention à ne pas confondre = et ==...
    • AX n'existe pas...
    • TrouvePlusGrandNom() doit retourner une valeur dans tous les cas.
    • Pour comparer des chaines, on utilise strcmp() ou une fonction maison qui fait pareil....
    • Les boucles avec '<=', ça fout la triouille
    • Que signifie 'PositionMax' ?

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Jack_serious
    Ca se fait une declaration et une initialisation dans un for en C ?
    Une définition. En C99, oui.

Discussions similaires

  1. tableau tcd sans page web
    Par krapoulos dans le forum Langage SQL
    Réponses: 1
    Dernier message: 28/02/2006, 11h23
  2. Réponses: 6
    Dernier message: 17/02/2006, 15h07
  3. [C#][debutant] tableau String sans donner la taille ?
    Par Sylk dans le forum Windows Forms
    Réponses: 4
    Dernier message: 29/11/2005, 20h42
  4. trier tableau dynamique
    Par prodi_64 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 11/10/2005, 13h44
  5. Tableau(Array) sans taill
    Par krfa1 dans le forum ASP
    Réponses: 4
    Dernier message: 21/09/2005, 22h31

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