Inscription / Connexion Nouveau Sujet
Niveau algorithmique
Partager :

Problème de combinaisons

Posté par
Astronas
15-06-19 à 12:17

Bonjour, mon post est un problème que je n'arrive pas à résoudre.

J'ai 2 séries de nombres, en les multipliants entre-eux (1 d'une série multiplié avec 1 autre de l'autre série) doit me donner un nombre prédifini en résultat (ou s'en approcher le plus possible).

Pour moi cela ressemble à de la combinaison, mais je ne trouve pas de solution à mon problème.

Exemple de problème concret :

SÉRIE 1 : 8 ; 14.5 ; 52 ; 100 ; 100 ; 100 ; 100 ; 4.6 ; 8 ; 29 ; 100 ; 100 ; 100 ; 5 ; 9 ; 32 ; 100 ; 100 ; 8.25 ; 14.75 ; 54 ; 100 ; 18.25 ; 33 ; 100 ; 50 ; 90 ; 100 ; 72

SÉRIE 2 : 11.5 ; 12.75 ; 26 ; 78 ; 100 ; 100 ; 100 ; 6.75 ; 6.50 ; 14 ; 42 ; 100 ; 100 ; 7.25 ; 7.50 ; 14 ; 45 ; 100 ; 11.5 ; 11.75 ; 24 ; 68 ; 24 ; 25 ; 50 ; 64 ; 66 ; 100 ; 27

Il faut que je trouve les couples pour ces séries qui font 188.5 ± 1.

Il faudrait donc un algorithme ou une formule qui calcule : 1er nombre de la série 1 × 1er nombre de la série 2, si c'est pas égal à 188.5±1 alors on continue, 1er nombre de la série 1 × 2ème nombre de la série 2 et à nouveau vérifier la condition, et ainsi de suite ...

Désolé je n'arrive pas trop à expliquer ce que je veux, j'espère que c'est assez clair.

À la fin il me faudrait les couples solutions de valeurs (série 1; série 2) qui donnent 188.5 ± 1.

Merci d'avance pour votre aide.

Posté par
carpediem
re : Problème de combinaisons 15-06-19 à 12:31

salut

Citation :
Il faudrait donc un algorithme ou une formule qui calcule : 1er nombre de la série 1 × 1er nombre de la série 2, si c'est pas égal à 188.5±1 alors on continue, 1er nombre de la série 1 × 2ème nombre de la série 2 et à nouveau vérifier la condition, et ainsi de suite ...
ben oui ... et c'est très simple ...

tu considères les deux listes facteur1 et facteur2, la valeur du produit p voulue et l'incertitude e

et tu fais une (double) boucle qui teste tous les produits d'un élément de facteur1 par un élément de facteur2 et te renvoie le premier ou tous les couples (en les stockant dans une troisième liste) de produit convenable

Posté par
Leile
re : Problème de combinaisons 15-06-19 à 12:39

bonjour,

j'imagine que les deux séries sont de longueur L ..
un algorithme de ce genre pourrait convenir, je suppose. A toi de l'améliorer.

n=0
entrer r
pour   i   allant de 1  à  L  faire
             pour   j   allant de 1  à  L   faire
                               p =   s1(i) *  s2(j)
                               si  r compris entre p-1  et p+1    alors
                                                      afficher s1(i),   afficher s2(j),   afficher p, n=n+1
                               fsi
             fin pour
fin pour
afficher  "nombre de couples trouvés " n
fin prog.

Posté par
carpediem
re : Problème de combinaisons 15-06-19 à 13:14

presque du python :

je ne traite pas l'initialisation des listes F1 et F2

prod = []
Imput (p)   # résultat voulu
Input (e)   # incertitude
For i = 0 To len (F1)
   For j = 0 To len (F2)
      If abs (p - F1(i) * F2(j)) <= e
          prod.append ((F1(i), F2(j)))
Print prod

Posté par
Astronas
re : Problème de combinaisons 15-06-19 à 14:45

Bonjour carpediem, merci d'avoir répondu à mon problème. Cependant je suis débutant en Python.

Comment faudrait-il initialiser les listes en Python ?

Merci beaucoup

Posté par
Astronas
re : Problème de combinaisons 15-06-19 à 15:32

F1 = [8,14.5,52,100,100,100,100,4.6,8,29,100,100,100,5,9,32,100,100,8.25,14.75,54,100,18.25,33,100,50,90,100,72]
F2 = [11.5,12.75,26,78,100,100,100,6.75,6.50,14,42,100,100,7.25,7.50,14,45,100,11.5,11.75,24,68,24,25,50,64,66,100,27]


prod = []
Input (p)   # résultat voulu
Input (e)   # incertitude

For i = 0 To len(F1) #j'ai une erreur sur cette ligne (invalid syntax)
   For j = 0 To len(F2)
      If abs (p - F1(i) * F2(j)) <= e
          prod.append ((F1(i), F2(j)))
Print prod

Posté par
Leile
re : Problème de combinaisons 15-06-19 à 17:45

à la fin de la ligne For, il faut mettre un double point ": "

exemple :
for i in range(2,6):

idem pour l'instruction if
exemple :
if x == 5:
  print("Gagné")
else:
  print("Perdu")

Posté par
Astronas
re : Problème de combinaisons 15-06-19 à 18:29

Merci pour ces corrections mais j'ai toujours l'erreur invalid syntax à la même ligne.

Que faire ?

Posté par
Leile
re : Problème de combinaisons 15-06-19 à 18:56

as tu essayé comme mon exemple :

for i in range(0,len(F1)):

Posté par
Astronas
re : Problème de combinaisons 15-06-19 à 18:57

Bien-sûr, mon code ressemble à ceci désormais :

F1 = [8,14.5,52,100,100,100,100,4.6,8,29,100,100,100,5,9,32,100,100,8.25,14.75,54,100,18.25,33,100,50,90,100,72]
F2 = [11.5,12.75,26,78,100,100,100,6.75,6.50,14,42,100,100,7.25,7.50,14,45,100,11.5,11.75,24,68,24,25,50,64,66,100,27]


p=118.5   # résultat voulu
e=1   # incertitude

prod = []
for i in range (0,len(F1)):
   for j in range (0,len(F2)):
      if abs(p - F1(i) * F2(j)) <e :
          prod.append ((F1(i), F2(j)))
print (prod)

Posté par
Leile
re : Problème de combinaisons 15-06-19 à 18:59

et ça se comporte comment ?

Posté par
Astronas
re : Problème de combinaisons 15-06-19 à 18:59

Astronas @ 15-06-2019 à 18:57

Bien-sûr, mon code ressemble à ceci désormais :

F1 = [8,14.5,52,100,100,100,100,4.6,8,29,100,100,100,5,9,32,100,100,8.25,14.75,54,100,18.25,33,100,50,90,100,72]
F2 = [11.5,12.75,26,78,100,100,100,6.75,6.50,14,42,100,100,7.25,7.50,14,45,100,11.5,11.75,24,68,24,25,50,64,66,100,27]


p=118.5   # résultat voulu
e=1   # incertitude

prod = []
for i in range (0,len(F1)):
   for j in range (0,len(F2)):
      if abs(p - F1(i) * F2(j)) <e :
          prod.append ((F1(i), F2(j)))
print (prod)


J'oublie de préciser que je n'ai plus l'erreur invalid syntax.

J'ai maintenant l'erreur :

if abs(p - (F1)](i) * (F2)(j)) <e :
TypeError: 'list' object is not callable


Comment faire ?

Posté par
Leile
re : Problème de combinaisons 15-06-19 à 19:11

quand tu appelles un élément de F1 ou F2, il faut mettre des crochets, pas des parenthèses.

Posté par
Astronas
re : Problème de combinaisons 15-06-19 à 19:14

J'ai déjà tenté et j'ai toujours la même erreur...

Posté par
Leile
re : Problème de combinaisons 15-06-19 à 19:18

il ne s'agit pas de "tenter", mais tu dois écrire F1[i]  et non F1(i)...
à chaque fois que tu fais référence à F1 ou F2..

Posté par
Leile
re : Problème de combinaisons 15-06-19 à 19:22

ce script  fonctionne :

F1=[4,5,2,6,7]
F2=[3,5,2,6,7]
p=34.5
e=1
prod = []
for i in range (0,len(F1)):
       for j in range (0,len(F2)):
              
             if abs(p - F1[i] * F2[j]) <=e:
                          print (F1[i]), (F2[j])

NB : je ne sais pas utiliser la table prod, dans laquelle il faudrait placer deux éléments à chaque insertion..  j'ai mis le print des couples à l'intérieur de la boucle.

Posté par
Astronas
re : Problème de combinaisons 15-06-19 à 19:24

Coquille de ma part, le code fonctionne enfin !

Merci beaucoup, je vais passer un bon dimanche haha

Une bonne soirée à vous

Posté par
carpediem
re : Problème de combinaisons 15-06-19 à 19:37

Leile :

l'instruction  liste.append(objet) ajoute objet à la liste liste

ici j'ai choisi d'ajouter le couple (F1[i], F2[j]) lorsqu'il vérifie la condition adéquate

on peut évidemment les afficher les uns derrières les autres ...


effectivement j'ai oublié les deux points et les crochets ... merci d'avoir rectifié le tir

enfin pour les listes tu peux évidemment les initialiser au début soit en les définissant en extension soit avec une boucle

m = int(imput ("nombre de termes de la première liste"))
For i = 0 To m - 1
     f = input ("terme n° ", i + 1)
     F1.append (f)
n = int(input("nombre de termes de la deuxième liste"))
...  # boucle identique


PS: ne pas oublier que les listes sont numérotées de 0 à ...len(liste) - 1

Posté par
Leile
re : Problème de combinaisons 15-06-19 à 20:17

carpediem,

merci de ta réponse.. j'avais bien compris que tu remplissais la table prod avec les couples..

j'avais noté dans ton algorithme    "prod.append ((F1[i], F2[j]))"
cette instruction m'a donné une erreur , qui dit qu'on ne peut insérer qu'un seul élément dans une occurence de la table prod ..
de plus, quand on exécutera le print de prod, comment les couples vont ils s'afficher ?

(Je ne connais ni ne pratique  python.. ).

Posté par
carpediem
re : Problème de combinaisons 15-06-19 à 20:48

ha peut-être qu'une liste n'accepte pas des couples ...

oui il faut le rentrer comme une liste  :

prod.append([F1[i], F2[j]])


c'est donc une liste de listes !!!

un site sympa et simple pour apprendre python :

et print (prod) affiche alors la liste des listes [a, b] telles que le produit ab satisfasse la condition demandée

Posté par
Leile
re : Problème de combinaisons 15-06-19 à 21:02

merci de ta réponse.
Quand je demandais "comment vont-ils s'afficher" ?   je parlais de la "mise en page".
En effet, les couples vont s'afficher en ligne, sans saut à la ligne à chaque élément..
à moins qu'il y ait une syntaxe particulière pour le saut à la ligne ?

merci aussi pour le site, mais je ne pense pas apprendre python : je connais déjà plusieurs langages de programmation, plus orientés gestion, il est vrai, et je ne prends plus de plaisir à en ajouter un.

Ce qui m'intéresse c'est l'algorithmique, la construction de l'algorithme, mais pas sa transcription, les syntaxes étant toutes différentes..

Bonne soirée.

Posté par
carpediem
re : Problème de combinaisons 15-06-19 à 21:39

oui on peut travailler et fignoler la mise ne page éventuellement ...

mais print (liste) affiche simplement la liste des objets ...

python est intéressant car il a une syntaxe très simple

merci et à toi aussi

Répondre à ce sujet

Seuls les membres peuvent poster sur le forum !

Vous devez être connecté pour poster :

Connexion / Inscription Poster un nouveau sujet
Une question ?
Besoin d'aide ?
(Gratuit)
Un modérateur est susceptible de supprimer toute contribution qui ne serait pas en relation avec le thème de discussion abordé, la ligne éditoriale du site, ou qui serait contraire à la loi.


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 !