# Creation d un programme en C

**URL:** <https://www.debian-fr.org/t/creation-d-un-programme-en-c/86293>\
**Category:** Programmation\
**Created:** [Mars 24, 2022, 7:05 UTC](https://www.debian-fr.org/t/creation-d-un-programme-en-c/86293 "2022-03-24T19:05:05Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![Pat66](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pat66/32/11445_2.png) [@Pat66](https://www.debian-fr.org/u/Pat66)\
**Post date:** [Mars 24, 2022, 7:05 UTC](https://www.debian-fr.org/t/creation-d-un-programme-en-c/86293/1 "2022-03-24T19:05:05Z")

</div>

Bonsoir

je dois realiser un programme en C qui permet de trouver des combinaisons de chiffres

Pourrais-je avoir des explications ?

Merci.

---

<div class="post-metadata">

**Author:** ![nicola](https://www.debian-fr.org/user_avatar/www.debian-fr.org/nicola/32/8969_2.png) [@nicola](https://www.debian-fr.org/u/nicola)\
**Post date:** [Mars 25, 2022, 7:44 UTC](https://www.debian-fr.org/t/creation-d-un-programme-en-c/86293/2 "2022-03-25T07:44:00Z")

</div>

Et nous ?  
Ta question n’est pas super claire. 🤔

---

<div class="post-metadata">

**Author:** ![Pat66](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pat66/32/11445_2.png) [@Pat66](https://www.debian-fr.org/u/Pat66)\
**Post date:** [Mars 25, 2022, 1:59 UTC](https://www.debian-fr.org/t/creation-d-un-programme-en-c/86293/3 "2022-03-25T13:59:20Z")

</div>

je desire ecrire une fonction qui affiche dans l ordre croissant toutes les differentes combinaisons de trois chiffres differents dans l ordre croissant  
012,013,014,015,015,016,017,018,019,023…789

je voudrai avoir des explications et des idees pour debuter ce programme

---

<div class="post-metadata">

**Author:** ![Almtesh](https://www.debian-fr.org/user_avatar/www.debian-fr.org/almtesh/32/10312_2.png) [@Almtesh](https://www.debian-fr.org/u/Almtesh)\
**Post date:** [Mars 25, 2022, 2:20 UTC](https://www.debian-fr.org/t/creation-d-un-programme-en-c/86293/4 "2022-03-25T14:20:37Z")

</div>

Bonjour,

Je te conseille de partir sur un algorithme simple.  
Le plus simple que je vois est un truc de ce genre :

```nohighlight
initialiser variable nombre à 0
initialiser variable texte de longueur 3
tant que nombre strictement inférieur à 1000
| convertir nombre en texte avec complément à gauche avec des zéros et le mettre dans la variable texte
| si le premier caractère de texte n'est pas égale au deuxième et que le deuxième n'est pas égal au premier et si le premier n'est pas égal au troisième
| | afficher texte
| fin si
| incrémenter nombre
fin tant que

```

Après, mes compétences en C sont un peu rouillées, mais je pense que tu peux commencer par un truc du genre :

```auto
include <stdio.h>

```

Tu peux aussi en profiter pour vérifier que tu as bien un compilateur de C pour pouvoir compiler le code que tu auras produit.

---

<div class="post-metadata">

**Author:** ![nicola](https://www.debian-fr.org/user_avatar/www.debian-fr.org/nicola/32/8969_2.png) [@nicola](https://www.debian-fr.org/u/nicola)\
**Post date:** [Mars 25, 2022, 2:28 UTC](https://www.debian-fr.org/t/creation-d-un-programme-en-c/86293/5 "2022-03-25T14:28:00Z")

</div>

Ne pas oublier la condition sur l’ordre des chiffres.  
Tu peux le faire avec trois boucles emboîtées :

```
Pour i de 0 à 7, faire :
| Pour j de i+1 à 8, faire :
| | Pour k de j+1 à 9, faire :
| | | Afficher "%d%d%d",(i,j,k)
| | Fin Pour k
| Fin Pour j
Fin Pour i

```

La dernière ligne est à finir de traduire en C.

---

<div class="post-metadata">

**Author:** ![Almtesh](https://www.debian-fr.org/user_avatar/www.debian-fr.org/almtesh/32/10312_2.png) [@Almtesh](https://www.debian-fr.org/u/Almtesh)\
**Post date:** [Mars 25, 2022, 2:35 UTC](https://www.debian-fr.org/t/creation-d-un-programme-en-c/86293/6 "2022-03-25T14:35:59Z")

</div>

Ah oui, en effet, je viens de voir le message de @nicola et, nous sommes parti⋅e⋅s dans deux direction opposées. C’est à cause de ça :

> [@Pat66](#):
>
> ffiche dans l ordre croissant toutes les differentes combinaisons de trois chiffres differents dans l ordre croissant toutes les differentes combinaisons de trois chiffres

Je suis parti⋅e du principe que tu avais collé deux fois le même texte et que tu veux les combinaisons de trois chiffres différents dans l’ordre croissant et @nicola est parti⋅e du principe que tu voulais toutes les combinaisons de trois chiffres différents dans l’ordre croissant, dans l’ordre croissant.  
Effectivement, vu ton exemple, qui semble exclure les combinaisons `021`, `879`, `897`, `978` et `987`, je me demande qui a bien compris ta demande…

---

<div class="post-metadata">

**Author:** ![Pat66](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pat66/32/11445_2.png) [@Pat66](https://www.debian-fr.org/u/Pat66)\
**Post date:** [Mars 25, 2022, 2:38 UTC](https://www.debian-fr.org/t/creation-d-un-programme-en-c/86293/7 "2022-03-25T14:38:58Z")

</div>

Merci pour le compilateur j ai gcc

---

<div class="post-metadata">

**Author:** ![Pat66](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pat66/32/11445_2.png) [@Pat66](https://www.debian-fr.org/u/Pat66)\
**Post date:** [Mars 25, 2022, 2:46 UTC](https://www.debian-fr.org/t/creation-d-un-programme-en-c/86293/8 "2022-03-25T14:46:24Z")

</div>

Merci Almtesh de me faire remarquer cette ligne de trop dans la reformulation de ma requete

---

<div class="post-metadata">

**Author:** ![Pat66](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pat66/32/11445_2.png) [@Pat66](https://www.debian-fr.org/u/Pat66)\
**Post date:** [Mars 25, 2022, 2:48 UTC](https://www.debian-fr.org/t/creation-d-un-programme-en-c/86293/9 "2022-03-25T14:48:17Z")

</div>

Voici la reformulation

je desire ecrire une fonction qui affiche dans l ordre croissant toutes les differentes combinaisons de trois chiffres differents dans l ordre croissant  
012,013,014,015,015,016,017,018,019,023…789

je voudrai avoir des explications et des idees pour debuter ce programme

---

<div class="post-metadata">

**Author:** ![nicola](https://www.debian-fr.org/user_avatar/www.debian-fr.org/nicola/32/8969_2.png) [@nicola](https://www.debian-fr.org/u/nicola)\
**Post date:** [Mars 25, 2022, 5:38 UTC](https://www.debian-fr.org/t/creation-d-un-programme-en-c/86293/10 "2022-03-25T17:38:19Z")

</div>

Regarde mon pseudo-code, il me semble qu’il répond à ta question.

---

<div class="post-metadata">

**Author:** ![Almtesh](https://www.debian-fr.org/user_avatar/www.debian-fr.org/almtesh/32/10312_2.png) [@Almtesh](https://www.debian-fr.org/u/Almtesh)\
**Post date:** [Mars 25, 2022, 5:51 UTC](https://www.debian-fr.org/t/creation-d-un-programme-en-c/86293/11 "2022-03-25T17:51:18Z")

</div>

Je viens d’implémenter le pseudo-code de @nicola et je confirme qu’il semble faire exactement ce que tu veux :

```nohighlight
012
013
014
015
016
017
018
019
023
024
025
026
027
028
029
034
035
036
037
038
039
045
046
047
048
049
056
057
058
059
067
068
069
078
079
089
123
124
125
126
127
128
129
134
135
136
137
138
139
145
146
147
148
149
156
157
158
159
167
168
169
178
179
189
234
235
236
237
238
239
245
246
247
248
249
256
257
258
259
267
268
269
278
279
289
345
346
347
348
349
356
357
358
359
367
368
369
378
379
389
456
457
458
459
467
468
469
478
479
489
567
568
569
578
579
589
678
679
689
789

```

et non, je n’ai pas fait l’implémentation de test en C.

---

<div class="post-metadata">

**Author:** ![vbreton](https://www.debian-fr.org/user_avatar/www.debian-fr.org/vbreton/32/11400_2.png) [@vbreton](https://www.debian-fr.org/u/vbreton)\
**Post date:** [Avril 8, 2022, 3:39 UTC](https://www.debian-fr.org/t/creation-d-un-programme-en-c/86293/12 "2022-04-08T15:39:12Z")

</div>

int _ma\_variable_=12;  
printf("%03d",_ma\_variable_);

%03d signifie que l’on souhaite afficher la valeur de _ma\_variable_ sur 3 chiffres et si le nombre n’a besoin que de un ou deux chiffres il est complété à gauche par des 0.

C’est bien sur un exemple avec une valeur particulière. Pour toutes les autres valeurs, tu peux employer une boucle: for(int ma\_variable=0; ma\_variable\<=789; ma\_variable++){  
…  
}

Le programme complet enregistré par exemple dans test.c:

```auto
#include<stdio.h>
void main(){
for(int a=0; a<=789; a++){
    printf("%03d\n",a);
    }
}

```

Je te laisse deviner le rôle de \n en le supprimant ou en le remplaçant par un espace 🙂

Dans un terminal linux:  
gcc test.c (pour compiler le code source)  
./a.out (pour lancer le fichier exécutable produit)

---

<div class="post-metadata">

**Author:** ![Almtesh](https://www.debian-fr.org/user_avatar/www.debian-fr.org/almtesh/32/10312_2.png) [@Almtesh](https://www.debian-fr.org/u/Almtesh)\
**Post date:** [Avril 10, 2022, 9:59 UTC](https://www.debian-fr.org/t/creation-d-un-programme-en-c/86293/13 "2022-04-10T09:59:27Z")

</div>

> [@vbreton](#):
>
> int _ma\_variable_ =12;  
> printf(«&nbsp;%03d&nbsp;», _ma\_variable_ );

Oui, c’est vrai, mais il faut manipuler les trois chiffres indépendamment, il est donc plus pertinent d’avoir une variable par chiffre, comme proposé ici :

> [@nicola](#):
>
> ```plaintext
> Pour i de 0 à 7, faire :
> | Pour j de i+1 à 8, faire :
> | | Pour k de j+1 à 9, faire :
> | | | Afficher "%d%d%d",(i,j,k)
> | | Fin Pour k
> | Fin Pour j
> Fin Pour i
> 
> ```

> [@vbreton](#):
>
> Le programme complet enregistré par exemple dans test.c:
> 
> ```auto
> #include<stdio.h>
> void main(){
> for(int a=0; a<=789; a++){
> printf("%03d\n",a);
> }
> }
> 
> ```

J’ai testé et je vois, au hasard, la valeur `320`, qui ne correspond pas du tout à la liste que j’ai faite par rapport à ce que j’ai compris du besoin.

---

<div class="post-metadata">

**Author:** ![vbreton](https://www.debian-fr.org/user_avatar/www.debian-fr.org/vbreton/32/11400_2.png) [@vbreton](https://www.debian-fr.org/u/vbreton)\
**Post date:** [Avril 10, 2022, 10:38 UTC](https://www.debian-fr.org/t/creation-d-un-programme-en-c/86293/14 "2022-04-10T10:38:17Z")

</div>

A mauvais énoncé, mauvais exemple ou réponse 🙂 !

En aucun cas @Pat66 à mentionné la valeur particulière 320 ni même de manipuler les trois chiffres indépendamment. Pour @nicola la question n’est pas claire; @Pat66 reformule clairement sa demande sans préciser qu’il faille manipuler les trois chiffres indépendamment et qu’il y aurait des valeurs particulières à écarter.  
Ce n’est pas pour rien que les cours de français existent ! Il ne faut pas les négliger et penser à relire la demande, notamment quand on pense avoir trouvé la solution pour s’assurer que l’on a bien répondu.  
Quand on écrit ici, il faut savoir que tous ceux portant un intérêt sur Debian sont susceptibles de lire les messages, pas seulement quelques personnes de la même école ayant reçu le même sujet et reformulé maladroitement ou trop partiellement ici.  
Qu’en pense @Pat66 ? C’est je pense plus particulièrement à lui de réagir à présent pour savoir si on répond bien à sa demande; à défaut, il pourrait alors s’exprimer et apporter des précisions utiles qu’il aurait éventuellement oublié.

---

<div class="post-metadata">

**Author:** ![nicola](https://www.debian-fr.org/user_avatar/www.debian-fr.org/nicola/32/8969_2.png) [@nicola](https://www.debian-fr.org/u/nicola)\
**Post date:** [Avril 10, 2022, 11:18 UTC](https://www.debian-fr.org/t/creation-d-un-programme-en-c/86293/15 "2022-04-10T11:18:23Z")

</div>

L’ouvreur du fil a quand même clairement expliqué que les trois chiffres devaient être distincts et dans l’ordre croissant.  
Donc en fait, on s’en fout si on utilise trois variables indépendantes ou non ou une seule, ce qui compte est que le programme réponde à la question en un temps raisonnable.

---

<div class="post-metadata">

**Author:** ![vbreton](https://www.debian-fr.org/user_avatar/www.debian-fr.org/vbreton/32/11400_2.png) [@vbreton](https://www.debian-fr.org/u/vbreton)\
**Post date:** [Avril 10, 2022, 11:20 UTC](https://www.debian-fr.org/t/creation-d-un-programme-en-c/86293/16 "2022-04-10T11:20:10Z")

</div>

Non absolument pas, relis le premier et le troisième message du fil, ou en d’autres termes les deux premiers messages de @Pat66.

---

<div class="post-metadata">

**Author:** ![nicola](https://www.debian-fr.org/user_avatar/www.debian-fr.org/nicola/32/8969_2.png) [@nicola](https://www.debian-fr.org/u/nicola)\
**Post date:** [Avril 10, 2022, 11:22 UTC](https://www.debian-fr.org/t/creation-d-un-programme-en-c/86293/17 "2022-04-10T11:22:12Z")

</div>

> [@Pat66](#):
>
> je desire ecrire une fonction qui affiche dans l ordre croissant toutes les differentes combinaisons de trois chiffres differents dans l ordre croissant  
> 012,013,014,015,015,016,017,018,019,023…789

Je ne sais pas ce qu’il te faut de plus. 😉  
Alors oui, on peut pinailler sur l’ordre : s’applique-t-il aux chiffres eux-mêmes ou aux nombres engendrés ? Ben les deux, on dirait.

---

<div class="post-metadata">

**Author:** ![vbreton](https://www.debian-fr.org/user_avatar/www.debian-fr.org/vbreton/32/11400_2.png) [@vbreton](https://www.debian-fr.org/u/vbreton)\
**Post date:** [Avril 10, 2022, 11:34 UTC](https://www.debian-fr.org/t/creation-d-un-programme-en-c/86293/18 "2022-04-10T11:34:45Z")

</div>

Oui, tu as raison. C’est d’ailleurs pour ça que 020 est exclu (2 zéros) et 021 aussi car 1 est inférieur à 2.

---

<div class="post-metadata">

**Author:** ![nicola](https://www.debian-fr.org/user_avatar/www.debian-fr.org/nicola/32/8969_2.png) [@nicola](https://www.debian-fr.org/u/nicola)\
**Post date:** [Avril 10, 2022, 11:37 UTC](https://www.debian-fr.org/t/creation-d-un-programme-en-c/86293/19 "2022-04-10T11:37:39Z")

</div>

On pourrait utiliser une simple boucle `for i in range(1000)`, transformer en une chaîne, ajouter le nombre de zéros qui va bien devant (`ljust`) et tester si les chiffres sont différents (`len(set(truc))==len(truc)`) et bien rangés (`sorted(truc)==list(truc)`).  
Avantage, on peut étendre le programme à 2 ou 5 chiffres.  
Inconvénient, il est moins efficace puisqu’il a du déchet.

---

<div class="post-metadata">

**Author:** ![vbreton](https://www.debian-fr.org/user_avatar/www.debian-fr.org/vbreton/32/11400_2.png) [@vbreton](https://www.debian-fr.org/u/vbreton)\
**Post date:** [Avril 10, 2022, 11:40 UTC](https://www.debian-fr.org/t/creation-d-un-programme-en-c/86293/20 "2022-04-10T11:40:38Z")

</div>

J’ai pas souvenir de `for i in range` en C mais en Python, oui.  
On peut faire une boucle générale puis une autre imbriquée de la longueur de la chaine du nombre ou l’on scruterait chaque digit s’il est inférieur au suivant.

[Page suivante](https://www.debian-fr.org/t/creation-d-un-programme-en-c/86293.md?page=2)
