IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Un peu de maths


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2019
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Novembre 2019
    Messages : 1
    Par défaut Un peu de maths
    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 ?

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 743
    Par défaut
    Salut,

    Citation Envoyé par starlandpro Voir le message
    J'ai besoin de calculer ou de dessiner un tableau du type tableau de Pascal mais je sais pas comment faire .
    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
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    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:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from math import factorial
    def combin2(n, k):
        return factorial(n)//(factorial(k)*factorial(n-k))
    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.

    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.

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 12 835
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par tyrtamos Voir le message
    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é.
    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 python : Sélectionner tout - Visualiser dans une fenêtre à part
    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).
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    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).

Discussions similaires

  1. [Truc et Astuce] - Raccourci universel
    Par e040098k dans le forum Contribuez
    Réponses: 0
    Dernier message: 13/08/2007, 19h11
  2. Recherche trucs et astuces en C
    Par gwendal86 dans le forum Réseau
    Réponses: 20
    Dernier message: 22/10/2006, 11h37
  3. trucs et astuces XML
    Par grishka dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 09/09/2004, 13h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo