Demande d'explication a propos d'un code.

Résolu
Strick9 Messages postés 40 Date d'inscription mardi 8 novembre 2005 Statut Membre Dernière intervention 9 mai 2007 - 21 nov. 2005 à 23:03
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 23 nov. 2005 à 13:41
Salut à tous,
j'ai obtenu grâce à se merveilleux site ce code sources pour cet énoncés:

un programme permettant de donner toute les combinaison suite a la saisie d'une séquance de chiffres et ceci de 1 a "n" chiffres.
tell que pour les chifres 1, 5 et 8 on obtient :
158 185 518 581 851 815

et voici le code source :

#include <stdio.h>

void Affichage(int tab[60],int taille_tab)
{
int i;

for(i=0;i<taille_tab;i++)


printf("%d",tab[i]);
printf("\n");
}

void permute(int tab[60],char i, char j)
{
char c;

c=tab[i];

tab[i]=tab[j];

tab[j]=c;

}

void combin(int tab[60],int i, int taille_tab)
{


char j;

if (i==taille_tab)

{
Affichage(tab,taille_tab);


}
else


for(j=i;j<taille_tab;j++)
{
permute(tab,i,j);

combin(tab,i+1,taille_tab);

permute(tab,i,j);
}


}

void main()
{


int i,nbrval,tab[60];



printf("\n\t\tDonner le nombre de valeur(s) a calculer:\n");






scanf("\t\t%d", &nbrval);

for (i=0;i<nbrval;i++)


{
printf("\n\tDonner une valeur:\t");

scanf("%d", &tab[i]);
}


combin(tab,0,nbrval);
printf("\n");
}

Donc si une âme charitable accpete bien de m'expliquer ce code source pour que je puisse mieux le comprendre j'en serai vraiment ravi et merci d'avance.

8 réponses

deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
22 nov. 2005 à 08:31
La procédure affichage, ben c'est très simple .



void Affichage(int tab[60],int taille_tab)

{

int i;

for(i=0;i<taille_tab;i++) printf("%d",tab[i]);

printf("\n");

}



Pour i allant de 0 à taille du tableau -1 on affiche les valeurs des différents indices.



Pour la fonction de permutation :



void permute(int tab[60],char i, char j)

{

char c;

c=tab[i];

tab[i]=tab[j];

tab[j]=c;

}



on stock dans une variable temporaire (ici c) la valeur de tab[i],
ensuite on remplace la valeur de l'indice i par la valeur de l'indice
j. Et ensuite on retape la valeur de l'indice pas la valeur contenue
dans la variable c.





void combin(int tab[60],int i, int taille_tab)

{
char j;

if (i==taille_tab)

{
Affichage(tab,taille_tab);



}
else



for(j=i;j<taille_tab;j++)
{
permute(tab,i,j);

combin(tab,i+1,taille_tab);

permute(tab,i,j);
}}



Ici on utilise la récursivité (a savoir on appelle la procédure
combi dans celle-ci). Donc en faite on fait une boucle. Le permier if
est la condition pour finir la boucle. Donc une fois que on a permuter
les caractères jusqu'à atteindre la taille du tableau (hum j'espère que
tu a compris cette phrase lol). Si ce n'est pas le cas on fait pour i
allant de l'indice j(élément suivant) jusqu'à taille du tableau, on
permutes les caractères et puis on rapelle la procédure (c'est grace à
ceci que le j=i de la boucle for peut fonctionner.) et on repermute.



Pour ce qui est du main c'est bêtement l'introduction des données.



Voila, j'espère que j'ai pus t'aider.

Bon code



++ALL
3
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
22 nov. 2005 à 10:04
lol

buno, t'as surement raison, mais j'aimes bien programmer...



dsl si mon code est foireux, ça fait longtemps que je n'ai pas fait de C....





#include <stdio.h>



int main(){

char tab[3];

tab[0]=1;

tab[1]=5;

tab[2]=8;

int i, j, k;



for(i=0;i<3;i++){

for(j=0;j<3;j++){

if (j!=i){

for(k=0;k<3;k++){

if (k!=i && k!=j){



printf("%d%d%d\n",tab[i],tab[j],tab[k]);

}

}

}

}

}

}





ça donne :



maxime@devmax:~$ gcc 1.c

maxime@devmax:~$ ./a.out

158

185

518

581

815

851

maxime@devmax:~$



Bon, en -Wall, j'ai un message, mais j'ai jamais prétendu être super super fort en C...


In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy

http://coucou747.hopto.org
3
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
22 nov. 2005 à 09:01
salut



mais trois boucles for les unes dans les autres, ça ne marche pas ?


In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy

http://coucou747.hopto.org
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
22 nov. 2005 à 09:46
Pour quel procédure ? combi?
0

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

Posez votre question
BunoCS Messages postés 15474 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 22 avril 2024 103
22 nov. 2005 à 09:49
Je récapitule:
- 617419 Strick9 a reçu un énoncé d'exercice à faire pour le tant,
- =617419 Strick9 a la flemme de le faire et personne ne veut l'aider donc il demande à CS
- Quelqu'un lui pond un code, relativement aisé à comprendre (merci Mr. X)
- 617419 Strick9 a aussi la flemme de comprendre ce code et redemande la solution

Question:
=617419 Strick9 a-t-il testé le code fourni par l'aimable MR. X??

Morale:
C'est pas comme ça qu'on apprend à coder...

Remarque:
Si j'avais été MR. X, j'aurais laissé au moins un bug...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
Strick9 Messages postés 40 Date d'inscription mardi 8 novembre 2005 Statut Membre Dernière intervention 9 mai 2007
22 nov. 2005 à 23:36
Merci beaucoup Deck_bsd ton aide m'a vraiment été utile.
Je respecte votre point de vue Buno mais le seul hic est que je ne suis pas un étudiant, mon travail est facteur donc pour ce coups ci, c'est vous qui avais tort bien que si j'était étudiant ce que vous aurez dit serai vraiment correct.
0
BunoCS Messages postés 15474 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 22 avril 2024 103
23 nov. 2005 à 09:09
Ok, autant pour moi.
Mais il n'est malheureusement pas rare de voir se genre de demande sur CS...
Désolé si je t'es froissé et bonne continuation

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
23 nov. 2005 à 13:41
salut



et mon algo à moi n'est pas corect ?

In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy

http://coucou747.hopto.org
0
Rejoignez-nous