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 d'un tableau


Sujet :

C

  1. #1
    Membre confirmé Avatar de dyala
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    81
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 81
    Par défaut tri d'un tableau
    salut tout le monde
    j'ai fait deux methodes de tris la premiere tri a bulle et la 2 eme par selection il y a aucun probleme au niveau de compilation mais il fait rien
    tri a bulle :
    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
     
    #include<stdio.h>
     
    void main()
    			  { int t[8],i,j,x;
    			  int  c=1;
    			  for(i=0;i<8;i++)
    			  scanf("%d/n",&t[i]);
    			  for (i=0;i<8 && c;i++)
    			  c=0 ;
    			  for(j=1;j<8-i;j++)
    			  if (t[j]<t[j-1])
    			  {x=t[j-1];
    			  t[j-1]=t[j];
    			  t[j]=x;
    			  c=1;}
    				  for(i=0;i<8;i++)
    				  printf("%d",t[i]);}
    par selection:
    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
      # include<stdio.h>
     
    			  void main()
    			  { int t[8],i,j,x,min,k;
    			  printf("donnez les valeurs de tableau");
    			  for(i=0;i<8;i++)
    				scanf ("%d",&t[i]);
    			  for (i=0;i<8;i++)
    			  min=t[i];
    			  k=i;
     
    			  for(j=1+i;j<8;j++)
    			  if (t[j]<min)
    			  {min=t[j];
    			  k =j;};
    			  if(k!=i){x=t[i];
    				t[i]=min;
    				t[k]=x;}
     
    			  for(i=0;i<8;i++)
    			  printf("%d",t[i]);
    je pense que le proleme est au niveau de permutation
    merci d'avance

  2. #2
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Bonjour,

    dans le premier comme dans le deuxième, je pense qu'il te manque une accolade ouvrante juste après la deuxième boucle "for (i=...", accolade qu'il faut bien sûr fermer après avoir permuter les valeurs.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  3. #3
    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
    Ton code est tellement mal indenté et les {} placés n'importe où que tu ne peux pas t'y retrouver. Exemple :
    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
    void main()  // int main(void)
    {
      int t[8],i,j,x;
      int  c=1;
      for(i=0;i<8;i++)  scanf("%d/n",&t[i]);
      for (i=0;i<8 && c;i++)  c=0 ; // bizarre non ?
      for(j=1;j<8-i;j++)
        if (t[j]<t[j-1])
        {
           x=t[j-1];
           t[j-1]=t[j];
           t[j]=x;
           c=1;
        }
      for(i=0;i<8;i++)  printf("%d",t[i]);
    }

  4. #4
    Membre confirmé Avatar de dyala
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    81
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 81
    Par défaut
    pour les accolades j'ai ajouté une apre for et l'autre apres la permutation mais le probleme reste tjr
    pour:c=0 j'ai essayé d'utiliser une variable booleéne sous forme une variable entiére et ca pour verifier que le tableau n'est pas trié !

  5. #5
    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
    j'ai essayé d'utiliser une variable booleéne sous forme une variable entiére et ca pour verifier que le tableau n'est pas trié !
    OK
    Reste logique dans l'utilisation de ta variable : je recommence tant qu'il n'est pas trié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    do
    {
        c=0 ;
        for(j=1;j<8;j++)
           if (t[j]<t[j-1])
           {
                x=t[j-1];
                t[j-1]=t[j];
                t[j]=x;
                c=1;
           }
    } while(c!=0) ;

  6. #6
    Membre confirmé Avatar de dyala
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    81
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 81
    Par défaut
    j'ai essaye ex :
    létat du vecteur au debut est 4 2 3 1 il m'affiche 4 2 3 1

  7. #7
    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
    létat du vecteur au debut est 4 2 3 1 il m'affiche 4 2 3 1
    Je suis sceptique . Montre exactement le code que tu as utilisé pour ce brillant résultat

  8. #8
    Membre confirmé Avatar de dyala
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    81
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 81
    Par défaut
    le premier code

  9. #9
    Membre confirmé Avatar de dyala
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    81
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 81
    Par défaut
    meme le 2 éme

  10. #10
    Membre éprouvé Avatar de siegfried64
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Maroc

    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Par défaut
    Citation Envoyé par dyala Voir le message
    meme le 2 éme
    ca marche parfaitement, tu a du oublier quelque chose dans ton code.

    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
    int main()
    {
        int j,c,t[8],x;
        for(j=0;j<8;j++) scanf("%d",&t[j]);
        do
    {
        c=0 ;
        for(j=1;j<8;j++)
           if (t[j]<t[j-1])
           {
                x=t[j-1];
                t[j-1]=t[j];
                t[j]=x;
                c=1;
           }
    } while(c!=0) ;
    for(j=0;j<8;j++) printf("\n%d",t[j]);
        return 0;
    }

  11. #11
    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
    Citation Envoyé par siegfried64 Voir le message
    ca marche parfaitement, tu a du oublier quelque chose dans ton code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int main()
    {
        int j,c,t[8],x;
        for(j=0;j<8;j++) scanf("%d",t[j]);// &t[j] ou t+j
    ....
    }

  12. #12
    Membre confirmé Avatar de dyala
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    81
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 81
    Par défaut
    ah oui ca marche tres bien merci

  13. #13
    Membre confirmé Avatar de dyala
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    81
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 81
    Par défaut
    mais j'arrive pas à trouver le probléme dans le tri de selection

  14. #14
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    ben dans

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    			  for (i=0;i<8;i++)
    			  min=t[i];
    il aurait peut-etre fallu mettre un test non ??

    la tout ce que tu as c'est la derniere valeur...

  15. #15
    Membre confirmé Avatar de dyala
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    81
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 81
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(j=1+i;j<8;j++)
    			  if (t[j]<min)
    			  {min=t[j];
    			  k =j;};
    non cette boucle me permet de chercher le i éme min ex:
    dans la premiére iteration il trouve le premier min .apres la permuter avec
    t[0]...

  16. #16
    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
    dyala :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(j=1+i;j<8;j++)
    			  if (t[j]<min)
    			  {min=t[j];
    			  k =j;};
    diogene :
    Ton code est tellement mal indenté et les {} placés n'importe où que tu ne peux pas t'y retrouver.
    Si tu t'obstines à ne pas suivre les conseils,on perd notre temps. Débrouilles toi !

  17. #17
    Membre confirmé Avatar de dyala
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    81
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 81
    Par défaut

  18. #18
    Membre éclairé Avatar de archer
    Ingénieur développement logiciels
    Inscrit en
    Mai 2007
    Messages
    338
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 338
    Par défaut
    Salut
    Je suis heureux de te revoir une nouvelle fois sur ce forum.
    En faite il faut suivre les conseils proposés pour que le code soit lisible pour toi et pour ceux qui veulent t’aider afin de faciliter la détection des erreurs.
    Et bien je te propose le code suivant, il est basé sur le tien avec quelques rectifications
    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
    # include<stdio.h>
    int main()
    {
    	int t[8],n,j,min,indice_min;
    	printf("donnez les valeurs de tableau\n");
    	for(j=0;j<8;j++)
    		scanf ("%d",&t[j]);
    	n=7;
    	while(n>0)
    	{
    		indice_min=0;//prendre l'indice de la 1ere case
    		for(j=1;j<n+1;j++)
    		{
    			if (t[j]<t[indice_min])//le comparer avec les autres cases
    			{
    				indice_min =j;//si t[j] est plus petit on met son indice dans indice_min
    			}
    		}//à la fin on récupère l'indice du min du tableau 
    		min=t[indice_min];
    		t[indice_min]=t[n];
    		t[n]=min;// échange entre la dernière case et celle du min
    		n--;//restreindre le tri sur les cases restantes
    	}
    	for(j=0;j<8;j++)
    		printf("%d ",t[j]);
    	return 0;
    }
    J’espère que ce code soit clair a+

  19. #19
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 121
    Par défaut
    Bonsoir dyala
    Je crois que tu as simplement oublié les {} de la boucle principale de ton tri par sélection:

    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
    		for (i=0;i<8;i++){
    			min=t[i];
    			k=i;
    			for (j=1+i; j<8; j++) {
    				if (t[j]<min) {
    					min=t[j]; 
    					k =j;
    				};
    			}
    
    			if(k!=i){
    				x=t[i];
    				t[i]=min;
    				t[k]=x;
    			}
    		}

  20. #20
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 7
    Par défaut
    Bonjour tout le monde. Peut etre que tu devrais utiliser une boucle du genre pour ton tri par bulle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    for(i = 0; i < N -1; i++)
    {
         for(j = i + 1; j < N; j++)
         {
                  if(t[j] < t[i])
                  {
                          tmp = t[i];
                           t[i] = t[j];
                           t[j] = tmp;
                   }  
          }  
    }
    où t est ton tableau, N le nombre d'éléments et i, j, tmp des entiers. Cette boucle a pour role de comparer un élément du tableau avec les autres éléments restants et de les ranger par ordre croissant.

Discussions similaires

  1. Tri d'un tableau en 2D
    Par sniperseb dans le forum C
    Réponses: 4
    Dernier message: 05/01/2006, 16h33
  2. Réponses: 6
    Dernier message: 16/09/2005, 10h30
  3. tri d'un tableau à 2 dimensions
    Par dede92 dans le forum C
    Réponses: 4
    Dernier message: 19/02/2005, 18h29
  4. [langage] Probleme de tri d'un tableau de tableau
    Par Ludo167 dans le forum Langage
    Réponses: 1
    Dernier message: 25/08/2004, 10h32
  5. [] Tri d'un tableau par ordre alphabétique
    Par cafeine dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/09/2002, 08h43

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