Tri insertion langage C et appel de fonction

cs_washh Messages postés 2 Date d'inscription jeudi 28 décembre 2000 Statut Membre Dernière intervention 30 novembre 2008 - 30 nov. 2008 à 11:45
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 30 nov. 2008 à 16:39
Bonjour,

Je débute en langage C et j'ai écrit l'algorithme du tri d'un tableau contenant des chaines de caractères, mais dès la compilation, le programme ne se lance pas, pouvez vous me montrer mon erreur. Merci

void TRI_INSERTION(char tab[][][], int nbreLig, int nbreCol){
int indi,indk; // position testée, le plus grand élément, élément tampon
char tampon[nbreLig+1][nbreCol][MAX_LETTRES+1];
     for(indi=2;indi<nbreLig;indi++){
       strcpy(tampon[][][], tab[indi][][]); // c'est a cet endroit qu'il mindique qu'il y a un probleme
       indk=indi;
       while((indk>1)&&(strcmp(tab[indk-1][][],tampon[][][])>0)){
         strcpy(tab[indk-1][][],tab[indk][][]);
         (indk=indk-1);
         }
       strcpy(tab[indk][][],tampon[][][]);
       }
}

ainsi que l'appel 
- en en tête : void TRI_INSERTION(char tab[][][], int *nbreLig, int *nbreCol);
- dans le programme principal : TRI_INSERTION(tab, &nbreLig, &nbreCol);

3 réponses

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
30 nov. 2008 à 15:37
salut

http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/strcpy.3.html

mettre [] apres une variable (en dehors des declarations), c'est pas correct.

bon, sinon :
- pourquoi tu inserres sur un char *** ?
- char tampon[nbreLig+1][nbreCol][MAX_LETTRES+1]; pourquoi as tu besoin d'un tampon ? et pourquoi ce genre de declarations ? (c'est pas du C89 ca, et c'est piegeux comme declaration... parce-que c'est equivalent a un malloc, et pas a (nbrelig+1) * nbrecol mallocs)
- tu mets beaucoup trop de parentheses.

bon, ensuite, tu appelles ta fonction avec :
TRI_INSERTION(tab, &nbreLig, &nbreCol);
ce qui est incorrect, tu devrais mettre :
TRI_INSERTION(tab, nbreLig, nbreCol);

et quand tu demandes de l'aide, donne nous le message d'erreur, ca nous aide a comprendre pourquoi ca ne marche pas.
cs_washh Messages postés 2 Date d'inscription jeudi 28 décembre 2000 Statut Membre Dernière intervention 30 novembre 2008
30 nov. 2008 à 15:56
Comme je l'ai dit je débute donc quand tu me parle de malloc, sa veut pas encore dire cgrand chose pour moi, mais merci sa me competera ma culture G .
J'utilise un tampon, car c'est un tri par insertion donc il faut que linformation soit stocké quelque part en attendant de déplacer l'autre information.
Le tampon est un char car ce sont des mots dans les cases du tableau.
Si tu as d'autres suggestions (autres tri à utiliser, tout aussi efficace), je suis open. J'ai choisi un tableau car je suis pas très doué avec les pointeurs..


J'ai donc modifié le programme :


void TRI_INSERTION(char tab[][][], int nbreLig, int nbreCol){
int indi,indk; // position testée, le plus grand élément, élément tampon
char tampon[nbreLig+1][nbreCol][MAX_LETTRES+1];
     for(indi=2;indi<nbreLig;indi++){
       strcpy(tampon, tab[indi]);
       indk=indi;
       while((indk>1)&&strcmp(tab[indk-1],tampon)>0){
         strcpy(tab[indk-1],tab[indk]);
         indk=indk-1;
         }
       strcpy(tab[indk],tampon);
       }
      
}
et mon appel de fonction :
void TRI_INSERTION(char tab[][][], int nbreLig, int nbreCol);

TRI_INSERTION(tab, nbreLig, nbreCol); // c'est a cette ligne que le message d'erreur s'affiche :
 [Warning] passing arg 1 of `TRI_INSERTION' from incompatible pointer type , cela signifie-til que je vais être obligé d'utiliser des pointeurs ??

Merci
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
30 nov. 2008 à 16:39
si tu commences par decaller la fin, t'as pas besoin de tampon.
Rejoignez-nous