Print_combn
Fermé
bibop1611
fiddy
- Messages postés
- 5
- Date d'inscription
- mercredi 18 septembre 2013
- Statut
- Membre
- Dernière intervention
- 27 octobre 2013
fiddy
- Messages postés
- 11067
- Date d'inscription
- samedi 5 mai 2007
- Statut
- Contributeur
- Dernière intervention
- 23 avril 2022
2 réponses
fiddy
26 oct. 2013 à 12:46
- Messages postés
- 11067
- Date d'inscription
- samedi 5 mai 2007
- Statut
- Contributeur
- Dernière intervention
- 23 avril 2022
26 oct. 2013 à 12:46
Ah dommage pour putchar().
Tu pouvais faire sinon une boucle for de 1 à v et n'afficher que les nombres respectant la condition (croissance des chiffres).
Sinon dans ton programme :
char tab[n];
Je ne te conseille pas. Cela marche en C99 mais pas pour les raisons que tu penses et cela risque d'être considéré comme faux par ton prof. Il faut passer par l'allocation dynamique (malloc/calloc) et utiliser le free qui va bien.
Niveau algorithmique, tu peux faire plus simple.
Je te mets sur la piste.
Il te faut n boucles for.
Pour la 1ère, tu fais de 0 à 9 (variable i) et tu affiches i
Pour la 2nde, tu fais de i à 9 (variable j) et tu affiches j
Pour la 3ème, tu fais de j à 0 (variable k) et tu affiches k
...
Reste à trouver l'astuce pour les n boucles for, pour les variables i,j,k (indice : tableau).
N'hésite pas à poster ton programme pour qu'on te corrige après avoir pris en compte ce post.
Courage.
Tu pouvais faire sinon une boucle for de 1 à v et n'afficher que les nombres respectant la condition (croissance des chiffres).
Sinon dans ton programme :
char tab[n];
Je ne te conseille pas. Cela marche en C99 mais pas pour les raisons que tu penses et cela risque d'être considéré comme faux par ton prof. Il faut passer par l'allocation dynamique (malloc/calloc) et utiliser le free qui va bien.
Niveau algorithmique, tu peux faire plus simple.
Je te mets sur la piste.
Il te faut n boucles for.
Pour la 1ère, tu fais de 0 à 9 (variable i) et tu affiches i
Pour la 2nde, tu fais de i à 9 (variable j) et tu affiches j
Pour la 3ème, tu fais de j à 0 (variable k) et tu affiches k
...
Reste à trouver l'astuce pour les n boucles for, pour les variables i,j,k (indice : tableau).
N'hésite pas à poster ton programme pour qu'on te corrige après avoir pris en compte ce post.
Courage.
bibop1611
26 oct. 2013 à 18:22
- Messages postés
- 5
- Date d'inscription
- mercredi 18 septembre 2013
- Statut
- Membre
- Dernière intervention
- 27 octobre 2013
26 oct. 2013 à 18:22
Salut, et merci d'avoir répondue
Oui je l'ai déjà fait avec 3 chiffres, mais le pb c'est quand je connais pas le nbr de chiffres ... donc j'ai bien penser à faire un tableaux comme ça j'ai le nbr de variable qu'il me faut mais c'est pour la suite que je coince ...
ma fonction pour 3 chiffres:
Oui je l'ai déjà fait avec 3 chiffres, mais le pb c'est quand je connais pas le nbr de chiffres ... donc j'ai bien penser à faire un tableaux comme ça j'ai le nbr de variable qu'il me faut mais c'est pour la suite que je coince ...
ma fonction pour 3 chiffres:
void print_comb()
{
char a;
char b;
char c;
a = '0';
b = '0';
c = '0';
while(a <= '9')
{
while(b <= '9')
{
while(c <= '9')
{
if(a < b && b < c)
{
ft_putchar(a);
ft_putchar(b);
ft_putchar(c);
ft_putchar(' ');
}
c++;
}
c = '0';
b++;
}
b = '0';
a++;
}
ft_putchar('\n');
}
fiddy
26 oct. 2013 à 18:32
- Messages postés
- 11067
- Date d'inscription
- samedi 5 mai 2007
- Statut
- Contributeur
- Dernière intervention
- 23 avril 2022
26 oct. 2013 à 18:32
Relis mon poste ^^.
Reste à trouver l'astuce pour les n boucles for, pour les variables i,j,k (indice : tableau).
Donc déjà remplace a par tab[0], b par tab[1], c par tab[2].
while(b <= '9')
C'est pas ce que j'ai dit... J'ai dit :
Pour la 2nde, tu fais de i à 9 (variable j) et tu affiches j donc :
for(b=a; b<10; b++) ou plutôt for(tab[1]=tab[0]; tab[1]<10; tab[1]++)
Et là tu remarque que c'est toujours de la forme : for(tab[i]=tab[i-1]; tab[i]<10; tab[i]++)
reste à savoir dans quoi mettre ta boucle for.
Etc.
Reste à trouver l'astuce pour les n boucles for, pour les variables i,j,k (indice : tableau).
Donc déjà remplace a par tab[0], b par tab[1], c par tab[2].
while(b <= '9')
C'est pas ce que j'ai dit... J'ai dit :
Pour la 2nde, tu fais de i à 9 (variable j) et tu affiches j donc :
for(b=a; b<10; b++) ou plutôt for(tab[1]=tab[0]; tab[1]<10; tab[1]++)
Et là tu remarque que c'est toujours de la forme : for(tab[i]=tab[i-1]; tab[i]<10; tab[i]++)
reste à savoir dans quoi mettre ta boucle for.
Etc.
fiddy
26 oct. 2013 à 22:22
- Messages postés
- 11067
- Date d'inscription
- samedi 5 mai 2007
- Statut
- Contributeur
- Dernière intervention
- 23 avril 2022
26 oct. 2013 à 22:22
Je viens d'essayer pour voir.
Ca se fait très bien avec la récursivité (si tu connais).
Ca se fait très bien avec la récursivité (si tu connais).
bibop1611
27 oct. 2013 à 13:38
- Messages postés
- 5
- Date d'inscription
- mercredi 18 septembre 2013
- Statut
- Membre
- Dernière intervention
- 27 octobre 2013
27 oct. 2013 à 13:38
ben justement oui je pensais à la récursivité, mais je suis vraiment pas à l'aise avec le concept ...
j'ai vraiment du mal, la seule fonction que j'ai faite en récursivité, c'est la fonction factoriel donc ^^
mais je vais essayer quand même ... on va voir ce que ça donne mais je suis pas sûr du résultat x)
j'ai vraiment du mal, la seule fonction que j'ai faite en récursivité, c'est la fonction factoriel donc ^^
mais je vais essayer quand même ... on va voir ce que ça donne mais je suis pas sûr du résultat x)
fiddy
Modifié par fiddy le 27/10/2013 à 17:43
- Messages postés
- 11067
- Date d'inscription
- samedi 5 mai 2007
- Statut
- Contributeur
- Dernière intervention
- 23 avril 2022
Modifié par fiddy le 27/10/2013 à 17:43
Beh c'est l'occasion de progresser :-p.
En argument de la fonction, tu fais passer le nombre de chiffres. Si le nombre est 1 chiffre, tu peux faire l'affichage.
Ensuite tu trouves la relation entre un nombre de n chiffres et de n-1 chiffres (boucle for). Et le tour est joué.
Si tu n'y arrives vraiment pas, tu peux partir de ce prototype :
void parcours(char * const unit, const int depth, const int deb, const int taille)
unit c'est le tableau qui contient les chiffres
depth c'est la profondeur
deb c'est le chiffre à partir duquel on va afficher
taille c'est le nombre de chiffres entré par l'utilisateur au début.
En argument de la fonction, tu fais passer le nombre de chiffres. Si le nombre est 1 chiffre, tu peux faire l'affichage.
Ensuite tu trouves la relation entre un nombre de n chiffres et de n-1 chiffres (boucle for). Et le tour est joué.
Si tu n'y arrives vraiment pas, tu peux partir de ce prototype :
void parcours(char * const unit, const int depth, const int deb, const int taille)
unit c'est le tableau qui contient les chiffres
depth c'est la profondeur
deb c'est le chiffre à partir duquel on va afficher
taille c'est le nombre de chiffres entré par l'utilisateur au début.