J'ai besoin de calculer ou de dessiner un tableau du type tableau de Pascal mais je sais pas comment faire .
Svp y a des idées ?
Version imprimable
J'ai besoin de calculer ou de dessiner un tableau du type tableau de Pascal mais je sais pas comment faire .
Svp y a des idées ?
Salut,
L'intérêt de ce genre d'exercice est que vous pouvez le réaliser sur une feuille de papier et réfléchir à la méthode programmatique (ou un algo.) qui vous permet de le réaliser avant d'essayer de la traduire en code.
Après si vous ne vous en sortez pas, cherchez un peu sur Internet, vous avez des articles sur Wikipedia qui vous donnent des algorithmes. Vous pouvez tricher un peu en allant regarder des codes Python.
Ici on va vous certainement vous aider si vous avez essayé de faire quelque chose (du code à montrer) et que vous ne comprenez pas pourquoi çà ne marche pas (un algorithme à décrire)...
Pour le reste, chercher sur Internet, apprendre les bases du langage, ... on ne peut pas le faire à votre place.
- W
Bonjour,
Juste un coup de pouce.
Le "triangle de Pascal" est donné, pour la ligne n et la colonne k par le "nombre de combinaisons de n objets pris k à k".
Par exemple, si n=4 et k=2, on trouve 6. Autre exemple, si n=6 et k=2, on trouve 15.
Pour calculer ce nombre de combinaisons, on peut repartir de sa définition (https://fr.wikipedia.org/wiki/Combin...C3%A9matiques)), par exemple:
Mais c'est une très mauvaise façon de faire ça: le calcul des factorielles conduit rapidement à des nombres très grands qui prennent beaucoup de temps et peuvent conduite à des dépassements de capacité. Mais pour des valeurs faibles de n et k, ça donne le résultat attendu. Il y a, bien sûr, d'autres algorithmes plus efficaces pour faire ça.Code:
1
2
3 from math import factorial def combin2(n, k): return factorial(n)//(factorial(k)*factorial(n-k))
Il y a une autre méthode pour Python: l'utilisation de "combinations" du module itertools. Mais on ne trouve pas directement le nombre de combinaisons, mais la liste, dont on peut trouver le nombre d'éléments.
Par exemple, list(combinations([0,1,2,3], 2)) renvoie [(0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3)] qui contient bien 6 éléments.
Bonjour
On peut éviter ça en multipliant et en divisant successivement.
Exemple, C(3, 8)=C(5, 8)=(6*7*8)/(1*2*3). On voit qu'il y a toujours 3 termes au numérateur et au dénominateur. Si on prend le premier (6) et qu'on le divise par 1 puis on multiplie par le second 7 qu'on divise par 2 et etc, le résultat ne dépassera jamais de beaucoup la valeur du triangle qu'il doit atteindre. Et la division tombera toujours juste à chaque étape car chaque diviseur sera ou aura été à un moment donné un facteur de la multiplication en cours ou précédente.
D'où l'algorithme suivant qui permet de calculer de grandes valeurs du triangle sans pour cela monter très haut
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 def comb(col, lig): # Optimisation possible #if col in (0, lig): return 1 #if col in (1, (lig-1)): return lig # Recherche du pivot (point à partir duquel on commencera à multiplier) pivot=(lig-col) if lig > 2*col else col # Calcul de la combinaison par multiplication et division simultanée res=1 for (i, j) in enumerate(range(pivot+1, lig+1), 1): res=res * j // i return res # comb()
Pour le reste, la ligne (par exemple) 8 du triangle ce n'est que la succession des valeurs C(0, 8), C(1, 8), C(2, 8)... C(8, 8).
Je pense que sa meilleure option, étant donné qu'il doit afficher un triangle de Pascal d'une certaine taille (et non pas trouver tel ou tel coefficient binomial perdu dans le désert), est de déduire chaque ligne de la précédente avec une simple addition, ou dit d'une manière plus matheuse, en exploitant la relation C(n,p) + C(n,p+1) = C(n+1,p+1).