Je viens de finir les tableaux et je suis à l'exercice n°5. Je pensais avoir trouvé la solution mais en ajoutant plus de chiffres et plus de contraintes, cela ne marche pas.
Voici le code:
#include <stdio.h>
#include <stdlib.h>
void ordonnerTableau(int tableau[], int tailleTableau);
int main()
{
//Initialisation des valeurs
int tableau[10] = { 2,28,1,130, 57, 22, 88,100,33,69 };
ordonnerTableau(tableau, 10);
printf("Tableau dans l'ordre croissant:");
for (int i = 0; i < 10; i++)
{
printf("%d / ", tableau[i]);
}
return 0;
}
void ordonnerTableau(int tableau[], int tailleTableau)
{
int x = 0;
for (int i = 0; i < tailleTableau - 1; i++)
{
while (tableau[i] > tableau[i + 1])
{
x = tableau[i];
tableau[i] = tableau[i + 1];
tableau[i + 1] = x;
}
}
}
Au début, mon tableau était le suivant: 2 / 8 / 4 / 10. Avec ce système, le tableau fonctionnait. Mais en y ajoutant des chiffres cela bloque.
En faite, j'ai remarqué que mon while à un énorme défaut. Il ne va que chercher le chiffre après et pas plus loin. Du coups, le premier chiffre est faux car il ne va chercher que le 28 et non le 1 qui se situe après.
Bien évidemment, je pourrais faire un truc comme :
Si 2 est plus petit que 28, 1, 130,....
Mais cela m'a l'air bien compliqué et embêtant. Malheureusement, je ne trouve rien de mieux.
Auriez-vous une petite idée ( en restant dans les bases qu'on apprend ) pour résoudre mon soucis?
Je vous remercie de vos futures réponses et vous souhaite une agréable semaine.
Il s'agit ici plus d'un tri par insertion non réussi que d'un tri à bulles.
Comme l'a écris rouloude, il manque quelque chose au while car ici il teste l'inversion, si c'est cas échange les valeurs, puis re-teste les données échangées pour voir qu'elle sont finalement ordonnées; il agit donc comme un if. Quand tu as écrit ce while, tu souhaitais lui faire parcourir plusieurs valeurs. Peut être qu'avec un autre indice j, on pourrait parcourir tous les éléments d'indices inférieurs à i+1.
Pour être honnête avec vous, je ne vois toujours pas comment faire. J'ai vraiment du mal à comprendre. J'ai beau mélanger les formules dans tous les sens j'ai l'impression que si je veux réussi à faire quelque chose il me faudra 12 variables voir plus.
N'auriez-vous pas un indice supplémentaire?
Je vous remercie d'avance et vous souhaite une excellente soirée.
Pour être honnête avec vous, je ne vois toujours pas comment faire. J'ai vraiment du mal à comprendre. J'ai beau mélanger les formules dans tous les sens j'ai l'impression que si je veux réussi à faire quelque chose il me faudra 12 variables voir plus.
N'auriez-vous pas un indice supplémentaire?
Je vous remercie d'avance et vous souhaite une excellente soirée.
Bah, tu as un lien donnant un algorithme de tri en pseudo-langage, tu as juste à le traduire, même pas besoin de réfléchir !
tri_à_bulles(Tableau T)
pour i allant de taille de T - 1 à 1
pour j allant de 0 à i - 1
si T[j+1] < T[j]
échanger(T[j+1], T[j])
#include <stdio.h>
static void disp_tab(const int *tab, int lg)
{
int i;
i = 0;
while (i < lg)
{
if (i + 1 < lg)
printf("%d | ", tab[i]);
else
printf("%d\n", tab[i]);
i += 1;
}
}
static void swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
static void ord_tab(int *tab, int lg)
{
int i;
i = 0;
while (i + 1 < lg)
{
if (tab[i] > tab[i + 1])
{
swap(&tab[i], &tab[i + 1]);
i = -1;
}
i += 1;
}
}
int main(void)
{
int tab[10] = { 2, 28, 1, 130, 57, 22, 88, 100, 33, 69 };
ord_tab(tab, 10);
disp_tab(tab, 10);
return (0);
}
- Edité par banebps 15 août 2017 à 22:43:07
Tableau
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
En recherche d'emploi.