Aide : Tri a bulle !

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

  1. Contributeur
    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]
    1. Merci Fiddy,
      Pour la derniere Remarque, j'ai pas bien compirs,
      Enfin kesk'il faut faire ?!
      1. Contributeur
        Au lieu de i<=n, mets plutôt i<n-1 (ou i<=n-2)
      2. 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 :)
      3. Et on peux aussi met int* t[n] dans les parametres, nn ?
      4. Contributeur
        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
      5. 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 !