Petite erreu de code

divx78 Messages postés 118 Statut Membre -  
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je ne compren ce que me retourne mon programme il me classe bien par ordre alpha me maffiche des trucs bizard voir plus bas ce quil me retourne :

void rev_alpha(char *str, int size)
{
char temp;
char *str2;

if(str[size + 1])
{
if(str[size] > str[size + 1])
{
temp = str[size];
str[size] = str[size + 1];
str[size + 1] = temp;
if(str[size + 1] != '\0')
{
size = size + 1;
rev_alpha(str, size);
}
else
{
size = 0;
rev_alpha(str, size);
}
}
//size = size + 1;
rev_alpha(str, size+1);
}
}

me retourn :
a???bcd
POURQOI ?

Merci de vos reponces
A voir également:

6 réponses

fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Salut,
Que dois faire ce programme ?
Quels valeurs as-tu donné aux arguments avant d'appeler la fonction ?
Cdlt
0
divx78 Messages postés 118 Statut Membre 3
 
salut,

il affiche par ordre alphabetique une chaine
mes parametres sont : "dcba"

0
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
En fait, tu souhaites que ta fonction classe les caractères de ta chaîne par ordre alphabétique ?
Sinon, tu as deux arguments dans ta fonction.
Que signifie le second ? Tu appelles ta fonction avec les paramètres "abcd",0 ou avec "abcd",4 ?
0
divx78 Messages postés 118 Statut Membre 3
 
le second permet de rendre la fonction ecursive ses juste un compteur initialiser :)
voila mon main :

int main(int argc, char **argv)
{
char tab[5] = "dcba";

rev_alpha(tab, 0);
printf("%s", tab);
}
0
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
J'ai du mal à suivre ton algo.
if(str[size + 1])
if(str[size + 1]!='\0') sont pareils.
Donc les imbriquer comme tu as fait t'apportera rien.
J'ai corrigé ton code. Mais attention, les cas particuliers comme str="" vont faire bobo à l'exécution. Donc à traiter.
Comme l'algo est faux, (en fait il manque une itération, sinon t'aurais réussi à inventer un algo de meilleure complexité ^^), tu devras relancer la fonction jusqu'à ce que str soit inchangé. A ce moment-là, le tri aura était accompli. Donc, si tu veux rester avec cette fonction, tu peux en créer une autre, qui l'appellera autant de fois que nécessaire, ou le faire dans le main.
void rev_alpha(char *str, int size)
{
    char temp;

    if(str[size + 1])
    {
        if(str[size] > str[size + 1])
        {
            temp = str[size];
            str[size] = str[size + 1];
            str[size + 1] = temp;
        } 
        rev_alpha(str,size+1);
    }
}



Sinon, tu peux par exemple implémenter le tri sélectif ou le tri à bulle. Ca sera une version itérative, cas d'école.
Sur google, tu devrais trouver comment ça marche ces algos.

A noter que le C implémente le tri rapide (qsort). Après tout dépend du contexte (exercice d'école, ou programme à toi, ou entraînement cérébral ^^)
Cdlt
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
divx78 Messages postés 118 Statut Membre 3
 
Deja je te remercie pour ton code je me permet de donner mon code qui je travaille et il est plutot pas mal il lui manque juste une boucle suplemantaire sur lui meme pour marcher degouter :s
me jen suis content :)

void rev_alpha(char *str, int size)
{
char temp;
char *str2;

if(str[size + 1] != '\0')
{
if(str[size] > str[size + 1])
{
temp = str[size];
str[size] = str[size + 1];
str[size + 1] = temp;
size = size + 1;
if(str[size + 1])
rev_alpha(str, size);
else
{
size = 0;
rev_alpha(str, size);
}
}
else
{
size = size + 1;
rev_alpha(str, size);
}
//size = size + 1;
}
}

Merci a toi.
0
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Re,
Bah, je te fais une fois de plus les même remarques sur ton code.
Cdlt
0