Tri à bulle
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

Tri à bulle



  1. #1
    invitef151616d

    Exclamation Tri à bulle


    ------

    Bonsoir ,
    je suis un débutant en langage C , je voulais essayer de compiler un programme de tri à bulle je connais son principe, mais lors de la compilation il m'arrive des erreurs que j'arrive pas a les détecter voila ce que j'ai écrit
    Code:
    #include<stdio.h>
    #define N
    #define VRAI 1
    #define FAUX 0
    void tri_a_bulle(int T[])
    {   int i,permute,N;
    for (i=0;i<N-2;i++)
    {permute=VRAI   ;
    while ((i>0)!=0&&(permute=VRAI)!=0)
    {permute=FAUX ;
    if (T[i]>T[i+1]) 
    {T[i]=T[i+1]; permute=VRAI ;}
    N=N-1; 
    }}}
    void main ()
    { int N;int T[N];
    printf("donnez la longueur de tableau");
    scanf("&N");
    for (i=0,i<N,i++)
    {printf("T[%d]=",i};
    scanf("&T[i]");}
    tri_a_bulle(T);
    }
    Cordialement

    -----

  2. #2
    Jack
    Modérateur

    Re : Tri à bulle

    mais lors de la compilation il m'arrive des erreurs que j'arrive pas a les détecter
    Tu ne penses pas que le minimum serait de nous communiquer les erreurs générées ???????

    C'est bien d'avoir pensé aux balises code, mais si le code n'est pas indenté correctement, je ne cherche plus à le lire. Fais un effort de présentation!

  3. #3
    invitef151616d

    Thumbs up Re : Tri à bulle

    voilà
    Code:
    #include<stdio.h>
    #define N
    #define VRAI 1
    #define FAUX 0
    
    void tri_a_bulle(int T[])
    {
        int i,permute,N;
          for (i=0;i<N-2;i++)
               {permute=VRAI   ;
               while ((i>0)!=0&&(permute=VRAI)!=0)
                       {
                        permute=FAUX ;
                        if (T[i]>T[i+1]) 
                           {
                             T[i]=T[i+1]; permute=VRAI ;
                           }
                         N=N-1; 
                         }
             }
    }
    //---------Fonction principale-----------------
    void main ()
    { 
    int N,T[N];
    printf("donnez la longueur de tableau");
    scanf("&N");
          for (i=0,i<N,i++)
         {
            printf("T[%d]=",i};
            scanf("&T[i]");
          }
    tri_a_bulle(T);
    }
    et voici les erreurs que j'ai sachant que je compile dans turbo C
    Nom : 2015-10-27_003416gsfs.png
Affichages : 82
Taille : 10,2 Ko
    Merci d'avance

  4. #4
    Jack
    Modérateur

    Re : Tri à bulle

    C'est mieux

    Mais que d'erreurs! Il faut que tu te renseignes davantage sur la syntaxe du C avant de t'attaquer à des algos tels que ceux de tri Par exemple:
    - revoir comment on utilise scanf
    - tu n'aurais pas oublié la valeur de N dans la ligne #define N?
    - du coup N n'étant pas définie, il n'est pas possible de déclarer le tableau T[N], ce que dis bien le compilateur (size of T is unknow)
    - Il n'est pas possible de définir dynamique la taille de ton tableau, donc pas question de faire saisir N au clavier
    etc

    et au niveau de la fonction de tri, il est d'usage de passer la taille du tableau en paramètre au lieu d'utiliser une constante ou une variable globale

    Allez hop, tu as du pain sur la planche

  5. A voir en vidéo sur Futura
  6. #5
    invitef151616d

    Thumbs up Re : Tri à bulle

    Merci beaucoup mais malheureusement il me reste cette erreur là :
    constant expression required in function main dans la ligne que j'ai marqué ci dessous par un commentaire .(que le compilateur a pointé sur )
    Code:
    #include<stdio.h>
    #define VRAI 1
    #define FAUX 0
    
    void tri_a_bulle(int T[],int N)
    {   
    int i,permute;
    for (i=0;i<N-2;i++)
        { 
           permute=VRAI   ;
           while ((i>0)!=0&&(permute=VRAI)!=0)
               {
                 permute=FAUX ;
                 if (T[i]>T[i+1]) 
                    { 
                      T[i]=T[i+1]; 
                      permute=VRAI ;
                    }
                 N=N-1;
               }
        }
    }
    void main () //---fonction--principale--
    { 
    int N,T[N],i; // l'erreur------est-----ici-----dans----cette------ligne----------
    printf("donnez la longueur de tableau");
    scanf(&N);
    for ( i=0;i<N;i++)
        {
          printf("T[%d]=",i);
          scanf(&T[i]);
        }
    tri_a_bulle(T[N],N);
    }

  7. #6
    Jack
    Modérateur

    Re : Tri à bulle

    C'est ce que j'ai expliqué plus haut:
    Il n'est pas possible de définir dynamique la taille de ton tableau, donc pas question de faire saisir N au clavier
    N doit être défini à la compilation, ce qui explique le message d'erreur indiquant que N doit être une constante.

  8. #7
    pm42

    Re : Tri à bulle

    Citation Envoyé par Jack Voir le message
    C'est ce que j'ai expliqué plus haut:N doit être défini à la compilation, ce qui explique le message d'erreur indiquant que N doit être une constante.
    Dans le cas présent, je pense que c'est surtout l'utilisation de N pour définir la taille du tableau alors que N n'a pas encore été initialisé qui pose problème je crois. 1ère ligne du main.

    Ensuite, le reste du code contient encore de nombreuses "erreurs" comme :

    Code:
    &&(permute=VRAI)!=0
    qui ne sert à rien parce que toujours vrai et dont je me demande si l'intention n'était pas de mettre == plutôt que =.

    Ou le

    Code:
    (i>0)!=0
    qui devrait simplement être i>0.

  9. #8
    Jack
    Modérateur

    Re : Tri à bulle

    Dans le cas présent, je pense que c'est surtout l'utilisation de N pour définir la taille du tableau
    C'est à peu près ce que je viens de dire.

    alors que N n'a pas encore été initialisé qui pose problème je crois. 1ère ligne du main.
    Même si N avait été initialisée, ça na serait pas passé à la compil, puisque l'expression définissant la taille du tableau lors de sa déclaration doit être une constante, en tout cas en C99.
    Je sais que la norme C++11 autorise désormait des expression non constantes entre les crochets, et peut-être la norme C11 le permet-elle également, mais en l'occurrence, il s'agit d'un compilateur turbo C, donc aucune chance de suivre la norme C11

Discussions similaires

  1. M52 et la Bulle
    Par invitee907ed75 dans le forum Matériel astronomique et photos d'amateurs
    Réponses: 8
    Dernier message: 20/01/2012, 15h14
  2. Une Bulle de gaz !
    Par invite57b3c556 dans le forum Matériel astronomique et photos d'amateurs
    Réponses: 13
    Dernier message: 05/11/2010, 19h09
  3. M31 à bulle...
    Par invite20d6ac7d dans le forum Matériel astronomique et photos d'amateurs
    Réponses: 6
    Dernier message: 18/08/2010, 17h08
  4. La bulle du 29 oct
    Par invite29c32fc6 dans le forum Matériel astronomique et photos d'amateurs
    Réponses: 10
    Dernier message: 31/10/2009, 20h19
  5. Gaz et bulle
    Par aNyFuTuRe- dans le forum Physique
    Réponses: 1
    Dernier message: 04/11/2007, 20h32