Précédent   Forum du club des développeurs et IT Pro > C et C++ > C > Débuter
Débuter Forum d'entraide pour débuter en langage C. Avant de poster -> FAQ C
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 18/09/2012, 11h33   #1
abdelilah
Membre du Club
 
Inscription : décembre 2006
Messages : 165
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 165
Points : 42
Points : 42
Par défaut Clonage (systèmes informatiques)

Bonsoir tout le monde,

J'ai besoin d'une aide sur un exercice dont voici la question :

Citation:
Sachant le principe du clonage recopie le contexte courant, expliquez ce qu’il
se passe (au besoin à l’aide d’un schéma) si l’on procède à l’appel monproc(7)
Code :
1
2
3
4
5
6
7
8
9
10
11
Procédure monproc(Entier n)
Entier i
Début
i <- n
Tant Que i > 0 faire
Si (i mod 2) = 0 alors
Créer un processus identique à moi (Clonage)
FinSi
i <- i - 1
FinTantQue
Fin
Si je réponds ainsi est ce correct :

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.
abdelilah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2012, 16h18   #2
Winjerome
Modérateur
 
Avatar de Winjerome
 
Homme Jérôme
Inscription : septembre 2009
Messages : 5 349
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Âge : 26
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations forums :
Inscription : septembre 2009
Messages : 5 349
Points : 13 477
Points : 13 477
Bonjour,

Un (pseudo) code indenté est toujours plus agréable et facile à lire
Code :
1
2
3
4
5
6
7
8
9
10
11
Procédure monproc(Entier n)
Entier i
Début
    i <- n
    Tant Que i > 0 faire
        Si (i mod 2) = 0 alors
            Créer un processus identique à moi (Clonage)
        FinSi
        i <- i - 1
    FinTantQue
Fin
Qu'est-ce qui te fait dire que tu aurais une boucle infinie ?
É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 :
Winjerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2012, 16h32   #3
abdelilah
Membre du Club
 
Inscription : décembre 2006
Messages : 165
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 165
Points : 42
Points : 42
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.
abdelilah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2012, 16h44   #4
Bktero
Modérateur
 
Avatar de Bktero
 
Ingénieur systèmes embarqués
Inscription : juin 2009
Messages : 1 821
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Ingénieur systèmes embarqués
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2009
Messages : 1 821
Points : 4 603
Points : 4 603
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é !
Bktero est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2012, 14h28   #5
Médinoc
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 22 496
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2005
Messages : 22 496
Points : 32 290
Points : 32 290
Envoyer un message via MSN à Médinoc
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.
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2012, 20h11   #6
Sve@r
Expert Confirmé Sénior
 
Avatar de Sve@r
 
Homme Frédéric
Ingénieur développement logiciels
Inscription : février 2006
Messages : 3 533
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 45
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 3 533
Points : 7 063
Points : 7 063
Citation:
Envoyé par Bktero Voir le message
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.
Salut

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
Sve@r est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/09/2012, 13h55   #7
Bktero
Modérateur
 
Avatar de Bktero
 
Ingénieur systèmes embarqués
Inscription : juin 2009
Messages : 1 821
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Ingénieur systèmes embarqués
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2009
Messages : 1 821
Points : 4 603
Points : 4 603
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é !
Bktero est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 05h00.


 
 
 
 
Partenaires

Hébergement Web