Inscription / Connexion Nouveau Sujet
Niveau algorithmique
Partager :

Algorithme

Posté par
Amar252
28-02-22 à 00:42

Bonsoir
J'ai besoin d'aide concernant l'écriture d'un algorithme avec les structures itératives, j'ai essayé de faire l exo mais je suis pas sur merci de bien vouloir m'aider

Exo
Ecrire un algorithme qui affiche toutes les possibilités d'obtenir un total de 15 en ajoutant trois entiers choisis entre 1 et 9

Posté par
Amar252
re : Algorithme 28-02-22 à 00:47

Voilà ce que j ai fait
Algo somme
Variables p ,a , b ,c , S
  Début
        a<- --- aléatoire (1,9)
         b<----aleatoire ( 1, 9)
         c<----aleatoire (1,9)
    S<-- a+b+c
    P<---0
  Tant que S= 15 Faire
P<---P +1
Fantastique
Fin
  

Posté par
LeHibou
re : Algorithme 28-02-22 à 08:48

Bonjour,

Avec des choix aléatoires, tu risques de manquer certaines combinaisons possibles.

Je verrais plutôt 3 boucles imbriquées :
Pour a de 1 à 9
   Pour b de 1 à 9
      Pour c de 1 à 9
         Calculer S = a+b+c
         Si S = 15 alors imprimer (a, b, c)
      Fin de la boucle sur c
   Fin de la boucle sur b
Fin de la boucle sur a

Posté par
mathafou Moderateur
re : Algorithme 28-02-22 à 11:33

Bonjour,

"tu risques de"
Amar252, ton programme, c'est même bien pire que ça

on n'effectue que une seule fois ces trois choix aléatoires
il y a peu de chance qu'on obtienne 15
mais si par hasard on obtient 15 le programme ne se termine jamais car la boucle tant que S = 15 est alors sans fin, S restant à 15 éternellement.
et si S vaut autre chose que 15 la boucle tant que n'est pas exécutée du tout et on en reste là.
de toute façon ton programme ne donne aucun résultat, il ne fait que faire des calculs dans son coin en douce.

Posté par
flight
re : Algorithme 28-02-22 à 15:19

Bonjour

En réalité on pourrait utiliser l'aléatoire mais ce n'est pas du tout la façon optimale d'écrire le code demandé , car basiquement en trois boucle for c'est bouclé
j'ai moi même essayé par l'aléatoire sous vba et ça marche a condition de bien mettre tout les paramètres en place et voila ce que ca donne  :

Citation :
Sub somme_15()
Randomize
w = ""
i = 0
Do
i = i + 1
recom:
   a = Int(Rnd * 9) + 1
   b = Int(Rnd * 9) + 1
   c = Int(Rnd * 9) + 1
    If a + b + c = 15 And InStr(w, CStr(a) & CStr(b) & CStr(c)) = 0 Then
       w = w & " " & CStr(a) & CStr(b) & CStr(c)
       Else
       GoTo recom
    End If
Loop Until i = 61 ' (je ne détail pas le calcul de cette valeur )
MsgBox w
End Sub


Posté par
flight
re : Algorithme 28-02-22 à 15:21

le code precedent me retourne bien les 61 cas possibles , mais 61 doit etre évalué par un calcul séparé ou par un code different

Posté par
mathafou Moderateur
re : Algorithme 28-02-22 à 19:08

ce qu'on peut dire d'un tel programme est que sa durée d'exécution est aléatoire !

d'autre part une méthode avec 3 boucles est inefficace :
une fois qu'on a a et b des deux boucles sur a et b, alors c = 15-a-b
deux boucles imbriquées suffisent
avec un test que 1 ≤ c ≤ 9, ou une astuce sur les bornes de la boucle sur b

avec l'astuce, les seules exécutions des boucles sont directement les seuls triplets "qui marchent" (61 boucles exécutées seulement) alors que avec 3 boucles on boucle 93 - 61 = 661 exécutions inutiles en plus des 61 cas qui marchent.

avec 2 boucles imbriquées sans astuce sur les bornes mais avec le test sur c donnent 92 = 81 boucles exécutées (au lieu de 93 = 729 avec 3 boucles imbriquées !)

je laisse à Amar252 le soin de modifier l'algo de LeHibou en ce sens.
(c'est tout de même au demandeur de bosser et pas aux intervenants de lui fournir un algo tout maché )

Posté par
flight
re : Algorithme 28-02-22 à 20:06

salut mathafou

Citation :
ce qu'on peut dire d'un tel programme est que sa durée d'exécution est aléatoire !


oui certe mais rien ne presse :)  puisqu'il s'agit d'un programme qui n'est pas celui attendu



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !