cs_washh
Messages postés2Date d'inscriptionjeudi 28 décembre 2000StatutMembreDernière intervention30 novembre 2008
-
30 nov. 2008 à 11:45
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 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);
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és2Date d'inscriptionjeudi 28 décembre 2000StatutMembreDernière intervention30 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 ??