Bonjour à tous j'ai un exercice sur des algos mais n'en n'ayant pas beaucoup fait en 2nde j'ai vraiment du mal
Un éléphant se déplace en trois points de son territoire. Il part du point A et effectue 3 déplacements :
Soit il tourne dans le sens des aiguilles d'une montre avec 2 chances sur 3 sinon il se déplace dans le sens inverse des aiguilles d'une montre.
On suppose que chacun de ses déplacements est indépendant des précédents.
1) écrire un algo simulant un trajet de l'éléphant et donnant en sortie le point où se trouve l'éléphant (A, B ou C)
2) écrire un algo donnant en sortie la fréquence de réalisation de l'événement "l'éléphant arrive sur le point B" lorsqu'on considère N trajets (l'éléphant repart toujours de A)
Pour la question 1 déja, j'ai pensé à :
variables : A, B et C sont des réels
initialisation : 0 -> A
0 -> B
0 -> C
traitement : RanInt#(1,3) -> D
Si D = 1
Alors A+1 -> A
Fin si
Si D = 2
Alors B+1 -> B
Fin si
Si D = 3
Alors C+1 -> C
Fin si
Sortie : Afficher A
Afficher B
Afficher C
je ne sais vraiment pas si cela est correct et je ne sais pas comment je pourrai introduire la proba de 1/3 et 2/3
Salut ,
Alors je ne suis pas experte en la matière mais il faut y introduire une boucle : (voir en bleu) parce que 2 fois la condition Si ... Alors ... est très rare.
initialisation : 0 -> A
0 -> B
0 -> C
traitement : RanInt#(1,3) -> D
Si D = 1
Alors A+1 -> A
Fin si
Si D = 2
Alors B+1 -> B
Fin si
Si D = 3
Alors C+1 -> C
Fin si
Sortie : Afficher A
Afficher B
Afficher C
Ensuite, il y a des conditions que je ne comprends pas :
Par exemple, RanInt#(1,3) -> D ----> D correspond à quoi ?
D'accord mais pour moi, si tu ne met pas D dans l'initialisation il ne sert pas à grand chose.
Ensuite :
Alors A+1 -> A
Alors B+1 -> B
Tu voulais dire quoi ?
Parce que si tu met A ou B -> 0
A ou B sera toujours égale à 1 et de plus si tu dis que :
" Si D = 1
Alors A+1 -> A -------> Quand D vaudra 2 ou 3 que se passe t-il pour A ?
Fin si
Si D = 2
Alors B+1 -> B -------> Quand D vaudra 1 ou 3 que se passe t-il pour B ?
Fin si "
Et dans ton énoncé je suppose que A et B représente 1/3 et 1/3 pour le fait qu'il tourne dans les aiguilles d'une montre ?
Et j'ai oublié de dire pour
Quand D n'est pas égal à ce nombre A -> A pareil pour B
L'éléphant est en A et il y a 2 chances sur 3 pour qu'il aille en C et 1 chance sur 3 qu'il aille en B et ainsi de suite jusqu'à ce qu'il est fait les 3 déplacements
bonsoir
je pense que l'algo que tu proposes ne donne pas en sortie ce qu'on en attend,
à savoir en sortie le point où se trouve l'éléphant (A, B ou C)
tel quel, le traitement que tu proposes ne va fonctionner qu'une seule fois (un seul déplacement de l'éléphant) :
donc, faire une boucle, comme le conseille coatch
ensuite, à l'affichage, A, B et C sont des nombres, pas des points... et tu les affiches tous !
tu dois repenser ton approche :
pourquoi ne pas garder une seule variable nombre, D par exemple, la faire évoluer selon les déplacements de l'éléphant (comment ? je te laisse réfléchir)
et à l'affichage seulement, selon la valeur contenu dans D, afficher "point A" ou "B", ou "C" ...?
nb : le nombre aléatoire : 2 possibilités suffisent
on n'envisage pas que l'éléphant fasse du sur-place.
Regarde ton enoncé car tu me dis deux choses différentes
Mais non !
Je te laisse avec Carita elle sera beaucoup mieux t'expliquer que moi.
-----
Dis (je devrais pas le demander ici ) tu pourrais venir voir mon topics après on m'a abandonné
-----
Aller bon courage
Bonsoir,
Tout d'abord, il faudrait savoir comment sont disposé les points A, B et C. Je propose de les situer comme ceci (sens des aiguilles d'une montre A->B->C->A):
Ensuite, il faut "coder les positions A, B et C".
On peut dire que la position A est 0, celle du point B est 1 et celle du point C est 2.
Le premier algorithme doit indiquer, à partir du point A, au bout de 3 déplacements, où se trouve l'éléphant.
Dans ces conditions je propose ceci :
Début
P prend la valeur 0 (P est la position = 0, 1 ou 2)
Répéter 3 fois
x est un nombre au hasard entre 0 et 1
si x < 2/3
alors y prend la valeur y+1 (il va dans le sens des aiguilles d'une montre)
sinon y prend la valeur y-1 (il va dans le sens giratoire du code de la route)
Fin si
si y=3 alors y prend la valeur 0 fin si
si y=-1 alors y prend la valeur 2 fin si
fin répéter
Si y=0 alors afficher "l'éléphant est en A"
si y=1 alors afficher "l'éléphant est en B"
si y=2 alors afficher "l'éléphant est en C"
Fin.
En utilisant les opérations modulo 3, on aurait pu simplifier un peu la fin de l'algorithme mais ceci est au programme d'arithmétique de Terminale S.
Je me suis emmêlé les pinceaux : la variable du début est y (et non pas P) pour la position de l'éléphant. (ou alors, il faut remplacer les y par des P dans tout l'algorithme).
bonsoir patrice rabiller
Nami59 n'a plus grand chose à faire :/
sauf supprimer qq tests si elle veut.
Oui, je suis désolé d'avoir donné une réponse presque complète... J'aurais dû donner un algorithme à compléter. Le problème c'est que je ne peux pas supprimer mon post, ni même le modifier (c'est interdit sur ce forum pour des raisons que je comprends très bien). Cependant il y avait une information importante qui manquait pour pouvoir raisonner simplement : la disposition des points A, B et C. À mon avis, soit l'énoncé a été mal recopié, soit il est incomplet.
Dans un algorithme, on peut, bien sûr, mettre un "répéter 3 fois".
Après, selon le langage utilisé, il faudra utiliser une ou plusieurs instructions. Il faut se souvenir qu'un algorithme est une description, en français, permettant de résoudre sans ambigüité le problème qu'on se pose, en un nombre fini d'étapes.
J'ai du mal avec les algo en général mais je comprend pas trop avec les y et pourquoi on fait comme cela
La variable y sert à indiquer la position de l'éléphant, comme ceci :
Au départ, l'éléphant est en A. Donc on initialise la variable y avec la valeur 0. Mais ensuite, y peut prendre les valeurs 1 ou 2...
Ensuite si l'éléphant tourne dans le sens des aiguilles d'une montre, alors on ajoute 1.
-> si y vaut 0 alors y prendra la valeur y+1, c'est-à-dire 1
-> Si y vaut 1, alors y prendra la valeur y+1 c'est-à-dire 2
-> si y vaut 2, alors y prendra la valeur y+1, c'est-à-dire 3.
Lorsque y est égal à 3, alors l'éléphant a fait le tour complet : il est revenu en A et la valeur de y devient égale à 0.
Si l'éléphant va dans l'autre sens, c'est pareil , sauf qu'au lieu d'ajouter 1 ou soustrait 1. Lorsque y vaut 0 (l'éléphant est en A puis a avancé dans le sens giratoire du code de la route et se trouve en, B) alors il faut lui affecter la valeur 2 et non pas -1.
Pour le sens de déplacement de l'éléphant, on choisit un nombre au hasard entre 0 et 1. Si le nombre est inférieur à 2/3 (2 chances sur 3) alors l'éléphant va avancer dans le sens horaire, sinon il va avancer dans le sens giratoire.
patrice rabiller bonsoir j'ai revu l'algo et j'ai remarqué que les points B et C sont inversés donc j'ai modifié l'algo et j'aimerai savoir si il est bon
Début
P prend la valeur 0 (P est la position = 0, 1 ou 2)
Répéter 3 fois
x est un nombre au hasard entre 0 et 1
si x < 2/3
alors y prend la valeur y+1
sinon y prend la valeur y-1
Fin si
si y=3 alors y prend la valeur 0 fin si
si y=1 alors y prend la valeur 2 fin si
fin répéter
Si y=0 alors afficher "l'éléphant est en A"
si y=1 alors afficher "l'éléphant est en C"
si y=2 alors afficher "l'éléphant est en B"
Fin.
bonsoir Nami59
je ne fais que passer en attendant le retour de patrice rabiller avec lequel tu as bien avancé.
juste une remarque :
l'algo que t'as donné patrice rabiller, c'était juste pour t'expliquer le "fonctionnement",
pour t'aider à démarrer.
mais tu peux l'améliorer en supprimant des tests qui vont "ralentir" le fonctionnement,
par exemple : le test " si y=3 alors y prend la valeur 0 fin si ,
à ton avis, dans quel cas on peut avoir y=3 ?
quand on aura fait " y prend la valeur y+1" ou bien " y prend la valeur y-1" ?
où pourrait-on déplacer l'instruction " y prend la valeur 0" pour éviter le test ?
----
même remarque pour : "si y=1 alors y prend la valeur 2 fin si "
---
de même pour l'affichage :
Si y=0 alors afficher "l'éléphant est en A"
si y=1 alors afficher "l'éléphant est en C"
si y=2 alors afficher "l'éléphant est en B" ----- on peut alléger en utilisant des SI.... SINON
pourquoi ?
parce que tel quel, la machine va exécuter les 3 tests, séquentiellement l'un après l'autre.
or, y est SOIT=0, SOIT = 1, SOIT = 2
... tu fais faire 3 tests alors qu'un seul suffirait à l'exécution.
Merci pour ta réponse
Pour ta 1ere question c'est lorsque y prend la valeur y + 1 ?
Par contre pour déplacer je ne vois pas trop
oui, bonne réponse.
où déplacer ?
si x < 2/3
alors y prend la valeur y+1
ici
sinon y prend la valeur y-1
et donc ici, que vas-tu mettre ?
finsi
* je rectifie une erreur sur mon message de 21h59 (la dernière ligne)
... tu fais faire 3 tests alors qu'un ou deux suffiraient à l'exécution.
si x < 2/3
alors y prend la valeur y+1
si y=3 alors y prend la valeur 0
fin si
sinon y prend la valeur y-1
..... complète
finsi
en déplaçant l'instruction " si y=3 alors y prend la valeur 0" à cet endroit-là,
le test ne s'exécutera seulement dans le cas où x<2/3 (section ALORS).
Bonjour,
Je suis d'accord avec carita quand elle dit qu'on peut réduire le nombre de tests à effectuer, mais l'argument "vont ralentir le fonctionnement" est un peu exagéré (on va gagner une petite fraction de seconde). De plus le nombre de tests à écrire va être le même (je ne dis pas qu'ils seront tous effectués). Enfin, on ne gagne pas vraiment en clarté.
Par ailleurs, je n'avais pas inversé les points B et C comme le dit Nami59. Dans mon schéma du message du 2 mars à 17h49, les valeurs de 0, 1, 2 pour y correspondent bien, dans cet ordre, aux positions A, B, C.
Si tes points sont placés différemment alors ça change les conditions de l'algorithme, car le sens horaire, pour toi, est A,C,B. Il aurait peut-être fallu nous montrer ta figure plus tôt !
Voici peut-être une figure qui ressemble à la tienne :
L'algorithme, si on garde les codes A = 0; C = 1 et B = 2, est alors celui que tu as proposé en inversant B et C...
Merci
Pour le 2è algo j'ai pensé à :
variables : N et F sont des réels
entrée : saisir N
traitement : F prend la valeur N/3
sortie : afficher F/3
est ce que cela est bon ?
Non, tu n'y es pas du tout...
Il faut faire N trajets de 3 déplacements, donc une boucle avec une variable compteur K (par exemple) qui va aller de 1 à N.
Ensuite, pour chaque trajet de 3 déplacements (à l'intérieur de la boucle donc), il faut regarder si l'éléphant est en B ou pas. Donc il faut faire un test et, si l'éléphant est en B, ajouter 1 à la variable E (par exemple) qui compte le nombre de fois où l'éléphant est en B à l'issue des 3 déplacements.
Enfin, en sortie il faut afficher la fréquence des positions en B, soit E/N.
L'algorithme simplifié ressemblera à ceci :
Début
E prend pour valeur 0
Pour K de 1 à N
Faire 3 déplacements de l'éléphant à partir de A
Si la position de l'éléphant est B
alors E prend pour valeur E+1
Fin si
Fin pour
F prend pour valeur E/N
Afficher F
Fin
La partie en bleu doit être détaillée ... en s'inspirant de l'algorithme précédent.
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :