Tester l'algorithme :


(cliquer sur le bouton ci-dessus pour lancer ou relancer l'exécution de l'algorithme)

Résultats :

Code de l'algorithme :
1     VARIABLES
2       L EST_DU_TYPE LISTE
3       l EST_DU_TYPE LISTE
4       l0 EST_DU_TYPE LISTE
5       l1 EST_DU_TYPE LISTE
6       n EST_DU_TYPE NOMBRE
7       N EST_DU_TYPE NOMBRE
8       c EST_DU_TYPE NOMBRE
9       C EST_DU_TYPE NOMBRE
10      k EST_DU_TYPE NOMBRE
11      k0 EST_DU_TYPE NOMBRE
12      b EST_DU_TYPE NOMBRE
13      i EST_DU_TYPE NOMBRE
14      i0 EST_DU_TYPE NOMBRE
15      i1 EST_DU_TYPE NOMBRE
16    DEBUT_ALGORITHME
17      N PREND_LA_VALEUR 0
18      //demander le nombre de cotés
19      AFFICHER "nombre de cotés : "
20      LIRE n
21      //demander le nombre de couleurs
22      AFFICHER "nombre de couleurs : "
23      LIRE c
24      //créer la première combinaison
25      POUR i ALLANT_DE 0 A n-1
26        DEBUT_POUR
27        l[i] PREND_LA_VALEUR 0
28        FIN_POUR
29      //generation+test de toutes les combinaisons
30      POUR i ALLANT_DE 1 A pow(c, n)
31        DEBUT_POUR
32        //on compte le nombre de couleurs dans le nombre
33        C PREND_LA_VALEUR 0
34        POUR i0 ALLANT_DE 0 A c-1
35          DEBUT_POUR
36          l1[i0] PREND_LA_VALEUR 0
37          FIN_POUR
38        POUR i0 ALLANT_DE 0 A n-1
39          DEBUT_POUR
40          SI (l1[l[i0]] == 0) ALORS
41            DEBUT_SI
42            l1[l[i0]] PREND_LA_VALEUR 1
43            C PREND_LA_VALEUR C+1
44            FIN_SI
45          FIN_POUR
46        //on tourne les chiffres afin d'obtenir le plus grand nombre possible
47        k PREND_LA_VALEUR -1
48        POUR i0 ALLANT_DE 0 A n-1
49          DEBUT_POUR
50          k0 PREND_LA_VALEUR 0
51          POUR i1 ALLANT_DE 0 A n-1
52            DEBUT_POUR
53            k0 PREND_LA_VALEUR k0+l[(i1+i0)%n]*pow(c, i1)
54            FIN_POUR
55          SI (k < k0) ALORS
56            DEBUT_SI
57            k PREND_LA_VALEUR k0
58            POUR i1 ALLANT_DE 0 A n-1
59              DEBUT_POUR
60              l0[i1] PREND_LA_VALEUR l[(i1+i0)%n]
61              FIN_POUR
62            FIN_SI
63          FIN_POUR
64        //On teste si le nombre obtenu existe dans ceux déjà générés
65        b PREND_LA_VALEUR 1
66        POUR i0 ALLANT_DE 0 A N-1
67          DEBUT_POUR
68          k0 PREND_LA_VALEUR 0
69          POUR i1 ALLANT_DE 0 A n-1
70            DEBUT_POUR
71            k0 PREND_LA_VALEUR k0 + L[i0*n+i1]*pow(c, i1)
72            FIN_POUR
73          //si les deux nombres sont égaux, b vaut 0
74          SI (k0 == k) ALORS
75            DEBUT_SI
76            b PREND_LA_VALEUR 0
77            FIN_SI
78          FIN_POUR
79        //si b vaut 1 et que le nombre de couleur est correct, alors on rajoute la combinaison dans la liste
80        SI (b == 1 && C == c) ALORS
81          DEBUT_SI
82          POUR i0 ALLANT_DE 0 A n-1
83            DEBUT_POUR
84            L[N*n+i0] PREND_LA_VALEUR l0[i0]
85            AFFICHER l0[i0]
86            FIN_POUR
87          AFFICHER " "
88          N PREND_LA_VALEUR N+1
89          FIN_SI
90        //créer la combinaison suivante
91        l[0] PREND_LA_VALEUR l[0]+1
92        POUR i0 ALLANT_DE 0 A n-2
93          DEBUT_POUR
94          SI (l[i0] >= c) ALORS
95            DEBUT_SI
96            l[i0] PREND_LA_VALEUR 0
97            l[i0+1] PREND_LA_VALEUR l[i0+1]+1
98            FIN_SI
99          FIN_POUR
100       FIN_POUR
101     AFFICHER N
102     AFFICHER " combinaisons différentes"
103   FIN_ALGORITHME