Aide : Tri a bulle !

Fermé
Mizo-Up Messages postés 41 Date d'inscription mardi 19 février 2013 Statut Membre Dernière intervention 25 mars 2014 - 28 févr. 2013 à 21:40
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 1 mars 2013 à 23:54
Salut ! Je veux savoir il est ou le problem sur le coude source suivant :

#include <stdio.h>
#include <stdlib.h>

void Tri_A_Bulle(int n, int t[]){
int i,p,f;

f=1;
while (f=1){
f=0;
for (i=0;i<=n;i++){
if (t[i]>t[i+1]){
p=t[i+1];
t[i+1]=t[i];
t[i]=p;
f=1;
}
}
for (i=0;i<=n-1;i++){
printf ("%d !! ",t[i]);
}
}
}

int main()
{
int i,n;
printf("Donner la dimension du tableau\n");
scanf ("%d",&n);

int t[n];
for (i=0;i<n;i++){
printf ("Donner un nombre");
scanf ("%d",&t[i]);
}
Tri_A_Bulle(t,n);
return 0;
}

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
28 févr. 2013 à 22:31
int t[n];
Ne marche qu'en C99. Sinon il faut utiliser le malloc().

while (f=1)
Boucle infinie. L'opérateur de comparaison est == (et non =).

for (i=0;i<=n;i++){
if (t[i]>t[i+1]){

La valeur max est i=n. Donc t[i] est à l'extérieur du tableau et ne parlons pas de t[i+1]
0
Mizo-Up Messages postés 41 Date d'inscription mardi 19 février 2013 Statut Membre Dernière intervention 25 mars 2014
28 févr. 2013 à 22:36
Merci Fiddy,
Pour la derniere Remarque, j'ai pas bien compirs,
Enfin kesk'il faut faire ?!
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
28 févr. 2013 à 22:42
Au lieu de i<=n, mets plutôt i<n-1 (ou i<=n-2)
0
Mizo-Up Messages postés 41 Date d'inscription mardi 19 février 2013 Statut Membre Dernière intervention 25 mars 2014
28 févr. 2013 à 22:46
Ok merci c fait ! Mais dans la class on utulise int t[n];
Bon, tu peux m'expliquer en resume "malloc(). "
Et donne moi un example(de cet exercice) pour ke je comprend bien :)
0
Mizo-Up Messages postés 41 Date d'inscription mardi 19 février 2013 Statut Membre Dernière intervention 25 mars 2014
28 févr. 2013 à 22:49
Et on peux aussi met int* t[n] dans les parametres, nn ?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
28 févr. 2013 à 23:00
Mais dans la class on utulise int t[n];
Exaspérant ^^.
En bon C, int t[X] est une allocation statique (on fixe X une bonne fois pour toute).
Si on désire créer un tableau d'une taille connue à l'exécution, on utilise l'allocation dynamique. Concrètement, il s'agit d'un pointeur qui pointe sur une zone qu'on va allouer dans le heap.
Cela donne :
/*déclaration*/
int *p;
/*allocation dynamique : n est défini avec scanf()*/
p=malloc(n*sizeof(int));

/*lorsque tu n'as plus besoin du tableau, libération de la mémoire*/
free(p), p=NULL;

Variante statique :
#define X 15
/*allocation statique : X est connue à la compilation*/
int t[X];

C'est d'ailleurs le cas idéal en C pour apprendre les pointeurs.

Une nouvelle norme est sortie pour le C (ISO C99) et cela autorise dans certains cas int t[n]; avec n défini à l'exécution. Il s'aggit du mécanisme complexe de VLA. Mais quand on débute, ce n'est pas recommandé.

En espérant avoir été clair
0
Mizo-Up Messages postés 41 Date d'inscription mardi 19 février 2013 Statut Membre Dernière intervention 25 mars 2014
28 févr. 2013 à 23:12
Un peu .. Mais merci bien fiddy tu es tjr ^^
Mnt je veux just ke tu me donne le code source corrige,
Stp, just pour cette fois !
0