# Quel résultat pour ce programme ?

**URL:** <https://www.debian-fr.org/t/quel-resultat-pour-ce-programme/80206>\
**Category:** Programmation\
**Created:** [Septembre 19, 2019, 6:15 UTC](https://www.debian-fr.org/t/quel-resultat-pour-ce-programme/80206 "2019-09-19T06:15:49Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![steph1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/b9e5f3/32.png) [@steph1](https://www.debian-fr.org/u/steph1)\
**Post date:** [Septembre 19, 2019, 6:15 UTC](https://www.debian-fr.org/t/quel-resultat-pour-ce-programme/80206/1 "2019-09-19T06:15:49Z")

</div>

Bonjour ,  
Je ne saisis pas la totalité du cheminement de ce code . Dabord le code :

```auto
#include <stdio.h>
          int main(){
          int n=0;
         do
          { if(n%2==0) {printf("%d est pair\n",n);
                                 n+=3;
                                continue;
                                }
          if(n%3==0) {printf("%d est multiple de 3\n",n);
                                  n+=5;
                              }
          if(n%5==0){printf("%d est multiple de 5\n",n);
                              break;
                            }
          n+=1;
          }while(1);
    }

```

Je comprends ceci :  
Je pars avec n=0 , je rentre dans la boucle do while .  
Si le modulo est egale a 0 , j’affiche le printf et j’additionne n a 3 . C’est le cas donc la valeur n devient 3 .  
Mais quel est le role de l’instruction continue ?( etait elle nécéssaire ?)Est ce que ca veut dire que pour ce if on passe directement au prochain if sans passer par le : n+= 1; (fin du code)  
Enfin j’ai compris aussi que la condition while etait vrai donc , la boucle ne s’arretera qu’au break .  
Pouvez vous m’eclairer d’avantage sur le deroulement de ce code ?  
Merci

---

<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:** [Septembre 19, 2019, 7:13 UTC](https://www.debian-fr.org/t/quel-resultat-pour-ce-programme/80206/2 "2019-09-19T07:13:14Z")

</div>

> [@steph1](#):
>
> Mais quel est le role de l’instruction continue ?( etait elle nécéssaire ?)Est ce que ca veut dire que pour ce if on passe directement au prochain if sans passer par le : n+= 1; (fin du code)

Oui, ça veut dire qu’on saute à l’itération suivante de la boucle tout de suite.

> [@steph1](#):
>
> Enfin j’ai compris aussi que la condition while etait vrai donc , la boucle ne s’arretera qu’au break .

Oui, c’est exactement ça.

> [@steph1](#):
>
> Pouvez vous m’eclairer d’avantage sur le deroulement de ce code ?

```auto
0 est pair
3 est multiple de 3
8 est pair
12 est multiple de 3
18 est pair
21 est multiple de 3
26 est pair
…

```

J’avoue que je comprend pas bien le but de ce programme et j’ai bien l’impression qu’il ne s’arrêtera jamais.

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Septembre 19, 2019, 8:04 UTC](https://www.debian-fr.org/t/quel-resultat-pour-ce-programme/80206/3 "2019-09-19T08:04:22Z")

</div>

> [@Almtesh](#):
>
> > Mais quel est le role de l’instruction continue ?( etait elle nécéssaire ?)Est ce que ca veut dire que pour ce if on passe directement au prochain if sans passer par le : n+= 1; (fin du code)
> 
> Oui, ça veut dire qu’on saute à l’itération suivante de la boucle tout de suite.

Et la réponse est: effectivement, elle saute les if suivants dans la boucle, mais ce ‹&nbsp;continue&nbsp;› ne se déclenche que pour n=0 en évitant, aprés avoir dit que 0 était pair, de préciser aussi qu’il est divisible par 3 et 5.  
Aprés, ce ‹&nbsp;continue&nbsp;› n’est plus nécessaire, car plus jamais la boucle ne donne une valeur paire à n, les incréments de n dans la boucle étant pairs et n devenant impair avec n=3 aprés la première itération est forcément toujours impair aprés chaque itération.

> [@Almtesh](#):
>
> 0 est pair  
> 3 est multiple de 3  
> 8 est pair

Non @Almtesh , tu as oublié le +=1 de fin de boucle do, pour n=3 (il n’y a ni break ni continue), ce qui fait passer à n=9 l’itération suivante.  
Ca donne donc:  
_0 est pair_  
_3 est multiple de 3_  
_9 est multiple de 3_  
_15 est multiple de 3_  
_20 est multiple de 5_  
(début de cycle)  
_21 est multiple de 3_  
_27 est multiple de 3_  
_33 est multiple de 3_  
_39 est multiple de 3_  
_45 est multiple de 3_  
_50 est multiple de 5_  
(nouveau cycle)  
_51 est multiple de 3_  
_57 est multiple de 3_  
_63 est multiple de 3_  
_69 est multiple de 3_  
_75 est multiple de 3_  
_80 est multiple de 5_  
(etc…)

---

<div class="post-metadata">

**Author:** ![steph1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/b9e5f3/32.png) [@steph1](https://www.debian-fr.org/u/steph1)\
**Post date:** [Septembre 19, 2019, 12:33 UTC](https://www.debian-fr.org/t/quel-resultat-pour-ce-programme/80206/4 "2019-09-19T12:33:24Z")

</div>

Ok tout dabord , je vous remercie tous les deux d’avoir pris le temps de toutes ces explications .  
Lorsque l’on passe pour la 3 eme fois dans cette boucle avec n ayant la valeur 15 :

> [@steph1](#):
>
> if(n%3==0) {printf(«&nbsp;%d est multiple de 3\n&nbsp;»,n); n+=5;

On affiche que 15 est un multiple de 3 et , on rajoute 5 a la valeur de 15 . Mais pourquoi n ne prend t il pas une valeur de 1 supplémentaire avec le : n+= 1 de la fin de code ?  
La valeur de n ne devrait elle pas etre de 21 plutot que 20 ?

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Septembre 19, 2019, 2:01 UTC](https://www.debian-fr.org/t/quel-resultat-pour-ce-programme/80206/5 "2019-09-19T14:01:32Z")

</div>

> [@steph1](#):
>
> Mais pourquoi n ne prend t il pas une valeur de 1 supplémentaire avec le : n+= 1 de la fin de code ?

il rentre n=15, affiche «&nbsp;15 est multiple de 3&nbsp;», puis ajoute 5.  
Par contre, et c’est la que tu ne vois pas, il n’y a ni break ni continue, donc il passe au test modulo 5, puis affiche «&nbsp;20 est multiple de 5&nbsp;».  
Et c’est là que je me suis planté, j’ai oublié qu’il y avait un break, donc il sort direct de la boucle et n’effectue jamais le +=1.  
Donc la bonne sortie complète est juste:  
_0 est pair_  
_3 est multiple de 3_  
_9 est multiple de 3_  
_15 est multiple de 3_  
_20 est multiple de 5_

---

<div class="post-metadata">

**Author:** ![steph1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/b9e5f3/32.png) [@steph1](https://www.debian-fr.org/u/steph1)\
**Post date:** [Septembre 19, 2019, 2:31 UTC](https://www.debian-fr.org/t/quel-resultat-pour-ce-programme/80206/6 "2019-09-19T14:31:58Z")

</div>

Parfaitement compris cette fois . Encore merci !

---

<div class="post-metadata">

**Author:** ![steph1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/b9e5f3/32.png) [@steph1](https://www.debian-fr.org/u/steph1)\
**Post date:** [Septembre 20, 2019, 6:19 UTC](https://www.debian-fr.org/t/quel-resultat-pour-ce-programme/80206/7 "2019-09-20T06:19:33Z")

</div>

par contre , c’est dommage de ce quitter comme ca ,une derniere pour la route ! 😀  
J’ai un peu de mal a comprendre ce que peux produire ceci :  
int i,n;  
for(i=0, n=50; n\>10; i++, n-=i){}  
printf(“A : i=%d, n =%d\n”,i,n);

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Septembre 20, 2019, 7:12 UTC](https://www.debian-fr.org/t/quel-resultat-pour-ce-programme/80206/8 "2019-09-20T07:12:35Z")

</div>

> [@steph1](#):
>
> ce que peux produire ceci :

_A : i=0, n =50_  
_A : i=1, n =40_  
_A : i=2, n =30_  
_A : i=3, n =20_

---

<div class="post-metadata">

**Author:** ![steph1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/b9e5f3/32.png) [@steph1](https://www.debian-fr.org/u/steph1)\
**Post date:** [Septembre 20, 2019, 11:14 UTC](https://www.debian-fr.org/t/quel-resultat-pour-ce-programme/80206/9 "2019-09-20T11:14:34Z")

</div>

Désolé de prendre un peu plus de ton temps , j’ai compris que l’on partait de i=0 et n=50 et que n va en decroissant dans la boucle jusqu’a 10 mais je ne comprends pas la suite et comment tu as obtenu ces résultats . Peux tu decomposer ?  
En fait le resultat du bouquin est :  
A: i = 9, n = 5

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Septembre 20, 2019, 2:49 UTC](https://www.debian-fr.org/t/quel-resultat-pour-ce-programme/80206/10 "2019-09-20T14:49:17Z")

</div>

Bah j’ai zappé le n-=i, j’ai lu n-=10.  
Donc je recommence, ça donne plutôt:  
_A : i=0, n =50_  
_A : i=1, n =49_  
_A : i=2, n =47_  
_A : i=3, n =44_  
_A : i=4, n =40_  
_A : i=5, n =35_  
_A : i=6, n =29_  
_A : i=7, n =22_  
_A : i=8, n =14_  
_A : i=9, n =5_

---

<div class="post-metadata">

**Author:** ![steph1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/b9e5f3/32.png) [@steph1](https://www.debian-fr.org/u/steph1)\
**Post date:** [Septembre 20, 2019, 3:03 UTC](https://www.debian-fr.org/t/quel-resultat-pour-ce-programme/80206/11 "2019-09-20T15:03:21Z")

</div>

Ok je te remercie . J’ai compris cette fois  
Bon week-end

---

<div class="post-metadata">

**Author:** ![littlejohn75](https://www.debian-fr.org/user_avatar/www.debian-fr.org/littlejohn75/32/3840_2.png) [@littlejohn75](https://www.debian-fr.org/u/littlejohn75)\
**Post date:** [Septembre 20, 2019, 4:07 UTC](https://www.debian-fr.org/t/quel-resultat-pour-ce-programme/80206/12 "2019-09-20T16:07:29Z")

</div>

(je rectifie les quotes et la lise en forme)

> [@steph1](#):
>
> ```auto
> int i,n;
> for(i=0, n=50; n>10; i++, n-=i){}
> printf("A : i=%d, n =%d\n",i,n);
> 
> ```

> [@mattotop](#):
>
> Donc je recommence, ça donne plutôt:  
> _A : i=0, n =50_  
> _A : i=1, n =49_  
> …  
> _A : i=9, n =5_

Simplement pour le plaisir de pinailler : il n’y a qu’une ligne émise par le programme, l’instruction `printf` n’est pas à l’intérieur de la boucle `for`.  
À titre d’exemple que donnerait

```auto
int i,n;
for(i=0, n=50; n>10; i++, n-=i){}
n = printf("A : i=%d, n =%d\n",i,n);
n = printf("A : i=%d, n =%d\n",i,n);

```

?  
Cordialement,  
Regards,  
Mit freundlichen Grüßen,  
مع تحياتي الخالصة

* * *

F. Petitjean  
Ingénieur civil du Génie Maritime.

« On ne perd pas son temps en aiguisant ses outils. »  
Proverbe français

« Moi, lorsque je n’ai rien à dire, je veux qu’on le sache. » (R. Devos)

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Septembre 20, 2019, 8:00 UTC](https://www.debian-fr.org/t/quel-resultat-pour-ce-programme/80206/13 "2019-09-20T20:00:56Z")

</div>

> [@littlejohn75](#):
>
> n’est pas à l’intérieur de la boucle `for`

Pas fait attention. C’est con.
