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 :

Fonction tri Tableau


Sujet :

C

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Fonction tri Tableau
    Sa fait un moment que je me trimballe cette exo qui marche à moitié, et sa me dérange vraiment de pas comprendre pourquoi..
    Je devais faire l'algo pour un tri de 10 nombres entiers dans un tableau et les affichés dans l'ordre croissant. Sa marche très bien, no problème.

    Mon deuxième exo et de le refaire pour n nombres.. je me dit pas compliquer y'a juste a reprendre le code de ma fonction de trie et sa devrai marché.. mais non, quand je tape mes valeurs positifs sa me ressort que des nombres nuls.. sauf si j'entre des nombres négatifs, il me les classent correctement dans l'ordre je ne comprend vraiment pas..

    Voici mon 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
    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    // Appel de l'exercice 3_2
     void Exercice3_2()
    {
    	// On efface l'écran
    	system("cls");
     
    	// On présente ici l'exercice
    	printf("------------------------------------------------\n");
    	printf("Exercice3_2\n");
    	printf("------------------------------------------------\n");
    	printf("Tri de n nombres dans l'ordre croissant\n");
    	printf("------------------------------------------------\n\n");
     
    	// Déclaration & Initialisation des variables
    	int i = 0;
    	int n = 0;
     
    	// Déclaration & Initialisation du tableau
    	int tableau[1000] = {0};
     
    // DEBUT
     
    	// On demande le nombre de fois que sera demandé la saisie
    	printf("Saisissez la valeur de n : ");
    	scanf("%d", &n);
    	printf("\n");
    	// On décrémente de 1, comme le tableau part de 0
    	n--;
     
    	// On fait une boucle de n
    	for(i=0; i <=n; i++)
    	{
    		// On vide le tampon système
    		fflush(stdin);
    		printf("Entrer la valeur du nombre %d : ", i);
     
    		/* On sécurise la saisie contre les caractères,
    		on vérifie si scanf renvoie bien un nombre */
    		while (scanf("%d", &tableau[i]) <= 0)
    		{
    			/* On indique a l'utilisateur que la saisie n'est pas correct 
    			puis on redemande la saisie tant que la condition n'est pas remplie */
    			if (scanf("%d", &tableau[i]) <= 0)
    			{
    				printf("!! Erreur de saisie !!\n");
    				printf("Entrer la valeur du nombre %d : ", i);
    			}
     
    			// Si ce n'est pas le cas, on vide le buffer, et on redemande avec la boucle while
    			int c;
    			while ((c=getchar()) != '\n' && c != EOF);
    		}
    	}
     
    	printf("\nDans l'ordre croissant :\n");
     
    	// On appel la fonction ordonnerTableau
    	ordonnerTableau2(tableau , 1000);
     
    	// On affiche le résultat en parcourant le tableau
    	for(i=0; i <=n; i++)
    	{	 
    		printf("%d: %d\n", i, tableau[i]);
    	}
     
    // FIN
    }
     
    // Appel la fonction ordonnerTableau
    void ordonnerTableau2(int tableau[], int tailleTableau)
    {
    	// Déclaration & Initialisation des variables propres à la fonction
    	int i, tri, tmp = 0;
     
    // DEBUT
     
    		do // On repete tant que le trie n'est pas effectuer
    		{
    			/* Variable pour savoir si le tableau est trié
    			Par défaut on consdière que la tableau est trié */
    			tri = 0;
    			// On parcoures le tableau
    			for (i=0; i<tailleTableau-1; i++)
    			{
    				// Si valeur de i > valeur de i+1 alors on permute les valeurs
    				if (tableau[i] > tableau[i+1])
    				{
    					tmp  = tableau[i+1];
    					tableau[i+1] = tableau[i];
    					tableau[i] = tmp;
    					// On dit qu'il y a eu un trie
    					tri = 1;
    				}
    			}
    		// Si il y a eu trillage, tri = 1, on sort de la boucle
    		} while (tri == 1);
     
    // FIN
    }
    // FIN EXERCICE 3_2
    Le gros problème est surtout que je comprend mal comment marche ma fonction de trie, car elle sort d'une recherche sur internet, je ne l'ai pas codé moi même :/, mais elle marche parfaitement pour le trie d'un nombre déterminer (exo1).

    Donc si quelqu'un peu m'éclaircir pourquoi mon code marche à l'envers.. Cette fonction de tri me pose vraiment problème dans tous mes exo..
    Dernière modification par diogene ; 30/12/2009 à 17h09. Motif: Ne pas confondre les balises [QUOTE] et [CODE]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tri tableau HTML en fonction d'une colonne et ses valeurs.
    Par hugerma dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 10/12/2014, 08h04
  2. [XL-2010] Pb VBA fonction tri sur grand tableau
    Par dm217492 dans le forum Excel
    Réponses: 2
    Dernier message: 28/06/2012, 13h29
  3. [MySQL] fonction tri d'un tableau
    Par stevenP dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 23/05/2012, 10h43
  4. [Tableaux] tri tableau avec fonction
    Par ascito dans le forum Langage
    Réponses: 7
    Dernier message: 10/09/2008, 14h21
  5. Réponses: 7
    Dernier message: 02/07/2008, 16h06

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