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

Vue hybride

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]

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ordonnerTableau2(tableau , 1000);
    Tu ne dois pas mettre la taille totale du tableau, mais le nombre effectif de valeurs qu'il contient. Sinon, il trie les 1000 int dont la plupart sont à zéro puisque tu as initialisé le tableau de cette façon.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Parfait.. j'ai juste remplacer 1000 par n, et sa fonctionne niquel, je comprend pas pourquoi j'y ai pas penser avant .
    Bref faut que je comprenne maintenant comment fonctionne ma fonction.

    merci

+ 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