Salut a tous et merci pour lire ma question!

Je veux afficher sur l'ecran toutes les combinaisons de 16(a mon cas n=16) pris par 2 (p=2) en utilisant le langage C.

Combinaisons de n (ou n=16) pris par p ou p=2.

Le nombre des combinaisons j'ai calcule ils sont 120 ce n'est pas ici le probleme.

Le probleme c'est quand je veux afficher les combinaisons .

Je vous donne ici tous mon code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
 
 
#include<stdio.h>
#include<iostream.h>
#include<conio.h>
 
	typedef int sir[100];
	sir x;
	int p,i,k,n;
	int as,ev;
	sir a;
 
void succ(sir x,int k,int &as)
{if(x[k]<n)
  {as=1;
   x[k]=x[k]+1;
  }
 else as=0;
}
 
void valid(sir x, int k, int &ev)
{ev=1;
if((k>1) && !(a[x[k]]>a[x[k-1]]))
ev=0;
}
 
void afis(sir x, int k)
{int i;
for(i=1;i<=k;i++)
 cout<<a[x[i]]<<" ";
 cout<<endl;
}
 
main()
{cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
 
cout<<"p=";cin>>p;
 
k=1; x[k]=0;
 
while(k>0)
 
{ do
    {succ(x,k,as);
       if(as)
 
           valid(x,k,ev);
    }
while(as && !ev);
 
if(as)
   if(k==p) afis(x,k);
         else
              {k=k+1;
               x[k]=0;
               }
else k=k-1;
}
getche();
}
}
Je n'ai pas d'erreurs de syntaxe ca genere les combinaisons de 16 pris par 2 quand je lis n=16 et p=2.

Ce que je veux c'est lister les combinaisons sans lire n et p.

Voila ce que j'ai essaye:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
 
//Generarea combinarilor
 
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<iostream.h>
 
//combinari de 16 luate cate2
     typedef int sir[120];
     sir st;
     sir a;
 
int k,as,ev,n=16,p=2,nr;
 
void init()          //functia de initializare
{
st[k]=0;
}
 
int succesor() //functia de succesor
{
if (st[k]<n)
 {
  st[k]=st[k]+1;
  as=1;
 }
else
 as=0;
 return as;
}
 
void afis(int st[50], int k) //functia de afisare a combinarilor
{int i;
for(i=1;i<=k;i++)
cout<<a[st[i]]<<" ";
nr=nr+1;
}
 
void valid(sir st, int k, int &ev)
{ev=1;
if((k>2) && !(a[st[k]]>a[st[k-1]]))
ev=0;
}
 
int sol(int k) //solutia care afiseaza combinarile
{
return (k==p);
}
 
void back()      //functia back de generare a combinarilor - combinarile sunt stocate in vectorul st[120]
{
int i,a;
k=1;
init();
  do
    {
      a=succesor();
       if (a)
	 valid(st,k,ev);
    }
while (k==1);
 while (as&&!ev);
    if (a)
      {
       if (sol(k))
	 {
	   afis(st,k);
	 }
    else
	 {
	  k=k+1;
	  init();
	 }
      }
     else
      k=k-1;
}
 
void main()
{  nr=0;
clrscr();
//printf("Combinari:");
//scanf("%d",&n);
//printf("luate cate:");
//scanf("%d",&p);
back();
printf("nr");scanf("%d",nr);
getch();
}
Les modifications faits a partir du code1:

(j'ai pris une variable nr j'ai modifier la fonction afisare (affichage) nr=nr+1 et j'ai donne n=16 et p=2.

Mais ca n'a pas l'air a marcher(code2). Pourquoi?