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 :

tri tableau et les indices


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 49
    Par défaut tri tableau et les indices
    J'ai un programme pour trier les elements d'un tableau et je veux en plus fixer les indices de ces elements dans un autre tableau, exemple:

    tableau{3,2,9,1,4,8} avec position (leurs indices) {1,2,3,4,5,6} alors je veux les trier comme suit : tableau{1,2,3,4,8,9} et avoir position comme suit , position{4,2,1,5,6,3}.

    Mon probleme c'est qu'il saute des nombres, voici le code
    Les indices commencent à 1 car je veux pas afficher l'indice 0.
    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
     #include <stdio.h>
    #include <stdlib.h>
     
    void ordonnerTableau(int tableau[], int position[],int tailleTableau);
     
    int main(int argc, char *argv[])
    {
    int n=0,t[n],i,z,p[n];
    printf("Entrer la taille de votre tableau!\n");
    scanf("%d",&n);
    for (i=1; i<=n; i++)
            {
                printf("Entrer un nombre\n");
                scanf("%d",&t[i]);
            }
     
    ordonnerTableau(t,p,n);
     
    for(i=1; i<=n; i++)
        {
            printf(" Les valeurs de tableau sont:  %d \n\n ",t[i]);
            printf("\t");
        }
        for(z=1; z<=n; z++){
     
            printf(" Les valeurs de position sont:  %d \n\n ",p[z]);
    printf("\t");
     
        }
    return 0;
    }
     
    void ordonnerTableau(int tableau[], int position[],int tailleTableau)
    {
    int h,z,l,k=0;
    for(z=1; z<=tailleTableau; z++){
        position[z]=z;
    }
     
    for(l=2; l<tailleTableau; l++)
        {
            for(h=1; h<=tailleTableau; h++)
            { if (tableau[h]>tableau[h+1]){
     
                k = tableau[h] - tableau[h+1];
                    tableau[h] -= k;
                    tableau[h+1] += k;
     
                    k = position[h] - position[h+1];
                    position[h] -= k;
                    position[h+1] += k;
     
            }
        }
     
     
    }
    }
    Merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 779
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 779
    Par défaut
    Si tu veux garder les indices initiaux, pourquoi ne pas faire une structure pour lier le nombre à cet indice

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct my_number {
        int number;
        short index;
    };
    De plus, ton code est bizarre et mauvais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int n=0,t[n],i,z,p[n];
    printf("Entrer la taille de votre tableau!\n");
    scanf("%d",&n);
    for (i=1; i<=n; i++)
    Tes tableaux t et p ont une taille de zéro.
    Et en plus, ton indice i commence à 1 et non pas à 0

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 49
    Par défaut
    bonsoir; pour les indices , j'ai deja dis que je veux pas afficher le 0, c'est pour cette raison , les indices commencent par 1, et pour la taille des deux tableau t et p, oui c'est une faute que j'ai corrigé.

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 49
    Par défaut
    voici le code que j'ai corrigé

    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
    64
    65
    66
    67
     #include <stdio.h>
    #include <stdlib.h>
    #define MAX 500
     
    void ordonnerTableau(int tableau[], int position[],int tailleTableau);
     
    int main(int argc, char *argv[])
    {
    int n=0,t[MAX],i,z,p[MAX];
    do
    {
    printf("Entrer la taille de votre tableau (<500)!\n");
    scanf("%d",&n);
     
    }while(n>MAX);
     
    for (i=1; i<=n; i++)
            {
                printf("Entrer un nombre\n");
                scanf("%d",&t[i]);
            }
     
    ordonnerTableau(t,p,n);
     
    for(i=1; i<=n; i++)
        {
            printf(" Les valeurs de tableau sont:  %d \n\n ",t[i]);
            printf("\t");
        }
        for(z=1; z<=n; z++){
     
            printf(" Les valeurs de position sont:  %d \n\n ",p[z]);
    printf("\t");
        }
     
     
    return 0;
    }
     
    void ordonnerTableau(int tableau[], int position[],int tailleTableau)
    {
    int h,z,l,k=0,f=0;
    for(z=1; z<tailleTableau; z++){
        position[z]=z;
    }
     
    for(l=1; l<tailleTableau+1; l++)
        {
            for(h=0; h<tailleTableau; h++)
            { if (tableau[h]>tableau[h+1]){
     
                k = tableau[h] - tableau[h+1];
                    tableau[h] = tableau[h]-k;
                    tableau[h+1] = tableau[h+1]+k;
                    k=0;
     
                    f = position[h] - position[h+1];
                    position[h] = position[h]- f;
                    position[h+1] = position[h+1]+ f;
                    f=0;
     
            }
        }
    }
    }
     
    //}
    Mon probleme c'est pour la derniere case du tableau position, il m'affiche la valeur :2290708 !!!!! je ne sais pas elle provient d'où

  5. #5
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 779
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 779
    Par défaut
    Soit ne discutons pas d'un choix débile, parce que TOUT ton algo essaye de travailler entre [1, n] au lieu de [0, n-1]

    Parce que lorsque je vois tableau[h] avec h qui commence à 0

    Sinon, while(n>MAX) avec un tableau de MAX cases est faux.
    Sans parler des horreurs style l<tailleTableau+1 au lieu de l<=tailleTableau

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 49
    Par défaut
    CE N'EST PAS DEBILES. Mr , il s'agit d'un espace pour les debutants en c, donc, tu peux trouver leurs questions( qui representent des problemes pour eux) banaaaaaaales pour toi, MAIS CE N'EST PAS DEBILES.

Discussions similaires

  1. Changer les indices d'un tableau associatif
    Par identifiant_bidon dans le forum Langage
    Réponses: 2
    Dernier message: 25/06/2011, 19h16
  2. Réponses: 5
    Dernier message: 04/03/2008, 22h22
  3. Réponses: 5
    Dernier message: 03/06/2007, 14h07
  4. Les indices d'un tableau multidimension
    Par aikinhdo dans le forum Langage
    Réponses: 1
    Dernier message: 04/04/2007, 18h24
  5. algorithme de tri tableau :afficher que les éléments unique
    Par sofiane61 dans le forum Algorithmes et structures de données
    Réponses: 19
    Dernier message: 31/03/2005, 19h50

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