Strick9
Messages postés40Date d'inscriptionmardi 8 novembre 2005StatutMembreDernière intervention 9 mai 2007
-
21 nov. 2005 à 23:03
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 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.
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 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.
BunoCS
Messages postés15474Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention22 avril 2024103 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...
Strick9
Messages postés40Date d'inscriptionmardi 8 novembre 2005StatutMembreDerniè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.