Petite erreu de code
divx78
Messages postés
118
Statut
Membre
-
fiddy Messages postés 11653 Date d'inscription Statut Contributeur Dernière intervention -
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
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:
- Petite erreu de code
- Code ascii - Guide
- Code puk bloqué - Guide
- Code de déverrouillage oublié - Guide
- Code activation windows 10 - Guide
- Scanner qr code pc - Guide
6 réponses
Salut,
Que dois faire ce programme ?
Quels valeurs as-tu donné aux arguments avant d'appeler la fonction ?
Cdlt
Que dois faire ce programme ?
Quels valeurs as-tu donné aux arguments avant d'appeler la fonction ?
Cdlt
salut,
il affiche par ordre alphabetique une chaine
mes parametres sont : "dcba"
il affiche par ordre alphabetique une chaine
mes parametres sont : "dcba"
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);
}
voila mon main :
int main(int argc, char **argv)
{
char tab[5] = "dcba";
rev_alpha(tab, 0);
printf("%s", tab);
}
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.
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
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.