|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||
|
Membre du Club
![]() Inscription : décembre 2006 Messages : 165 ![]() |
Bonsoir tout le monde,
J'ai besoin d'une aide sur un exercice dont voici la question : Citation:
Code :
Première exécution de la boucle : 7 mod 2 ≠0 ne répond pas à la condition 7 - 1 = 6 Deuxième exécution de la boucle : 6 mod 2 = 0 répond à la condition clonage infini du processus. Résultat boucle infinie. Merci de me guider dans la réponse, merci par avance. |
|||
|
|
00
|
|
|
#2 | ||
![]() ![]() Jérôme Inscription : septembre 2009 Messages : 5 349 ![]() |
Bonjour,
Un (pseudo) code indenté est toujours plus agréable et facile à lire Code :
Étant donné que tu as l'instruction i <- i - 1, non tu n'auras pas de boucle infinie : ta variable i va être décrémentée jusqu'à atteindre la valeur 0 qui mettra fin à la boucle : |
||
|
|
00
|
|
|
#3 |
|
Membre du Club
![]() Inscription : décembre 2006 Messages : 165 ![]() |
Le fait d'avoir la procèdure clonage (par tout dépend de ce qui sera cloné) qui va cloner une condition vraie à savoir 6 mod 2 = 0 une fois le clonage lancé, navré pour le code mal indenté, merci de m'éclairer sur le premier point.
|
|
|
00
|
|
|
#4 |
![]() ![]() Ingénieur systèmes embarqués Inscription : juin 2009 Messages : 1 821 ![]() |
A noter qu'il existe un forum Algorithmie : http://www.developpez.net/forums/f60...s/algorithmes/
En regardant rapidement je dirais qu'il n'y a pas de boucle infinie. Le fait qu'on clone le processus n'a pas d'influence sur le processus courant : on pourrait afficher i, l'effet serait le même. Comme dit par Winjerome, on arrivera à i = 0 et donc la fin de la boucle. Si ce programme se termine, alors il n'y a pas de raison qu'un processus crée ne se termine pas non plus. Surtout que i est de plus en plus petit au fur et à mesure des copies. Chaque fils créera donc moins de fils que son père.
__________________
Si Code::Blocks vous dit undefined reference to 'socket@12', cela signifie que vous avez un problème d'édition des liens. Allez dans Projects / Build Options / Linker Settings / Add et renseigner ici les .a qui vont bien. Exemple pour les sockets : C:\Program Files\CodeBlocks\MinGW\lib\libws2_32.a Pour les adeptes du langage SMS, allez ici et ramenez la traduction française ^^ Pour vos problèmes d'embarqué, utilisez le forum dédié ! |
|
00
|
|
|
#5 |
|
Expert Confirmé Sénior
![]() |
Le clonage ne devrait pas être infini, plutôt un truc du genre 2 puissance n/2.
Il ne faut pas oublier que le clone d'un processus possède un état identique, donc pour les deux processus on arrive au FinSi avec i=6. Puis les deux processus ne font rien quand i=5, puis se clonent chacun quand i=4 --> on a maintenant 4 processus. Puis les 4 processus ne font rien quand i=3, puis se clonent chacun quand i=2 --> on a maintenant 8 processus. Puis les 8 processus ne font rien quand i=1, puis quittent avant le Si quand i=0.
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant. "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?" Apparently everyone. -- Raymond Chen. Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen. |
|
|
00
|
|
|
#6 | |
|
Expert Confirmé Sénior
![]() ![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 3 533 ![]() |
Citation:
Pas forcément car le processus créé prend en paramètre un entier "n" qui initie la boucle. Le pb c'est qu'il n'est pas précisé dans l'instruction de clonage ce qu'on passe au nouveau processus. Donc si, lors du clonage, on passe le n initial alors le nouveau processus démarre au même niveau que le premier et produira autant de fils qui eux-mêmes se multiplieront pareillement (ver) Maintenant si c'est i qui lui est passé alors effectivement cet ersatz de "jeu de la vie" meurt naturellement au bout de qq générations (calculables en plus)...
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
|
|
|
10
|
|
|
#7 |
![]() ![]() Ingénieur systèmes embarqués Inscription : juin 2009 Messages : 1 821 ![]() |
Sve@r, tu n'as pas tord, ça dépend de comment on clone. Perso, j'étais parti sur la même idée que Medinoc où le clone possède la version courante de i et donc on crée de moins en moins d'enfants. La résolution du problème vient donc de la façon de cloner.
Le multipost c'est mal
__________________
Si Code::Blocks vous dit undefined reference to 'socket@12', cela signifie que vous avez un problème d'édition des liens. Allez dans Projects / Build Options / Linker Settings / Add et renseigner ici les .a qui vont bien. Exemple pour les sockets : C:\Program Files\CodeBlocks\MinGW\lib\libws2_32.a Pour les adeptes du langage SMS, allez ici et ramenez la traduction française ^^ Pour vos problèmes d'embarqué, utilisez le forum dédié ! |
|
10
|
Copyright © 2000-2013 - www.developpez.com