Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#1 02-07-2014 14:55:09
- totomm
- Membre
- Inscription : 25-08-2011
- Messages : 1 093
Triangles ayant un point intérieur à distance entière des sommets
Bonjour,
Il s'agit de triangles à cotés entiers (Suite à discussion initiée par 0^0 dans le forum "Enigmes").
le sommet A est à l'origine des coordonnées et [AB], le plus grand coté, sur l'axe des abscisses.
Ce code est adaptable pour des triangles non-scalènes.
Le langage choisi est un langage strictement typé pour assurer que certains calculs se font bien sur des entiers.
Programme pour déterminer les triangles scalènes de cotés entiers possédant au moins un point M à distance entière de chaque sommet..
Le programme est un module (.vb) dans Visual Basic express 2010
L' option "Strict On" garantit que les calculs sur entiers Long dans la partie "recalcul sur entiers" s'effectuent bien sur des "Long" sans aucune introduction de décimales.
Voir() est une procédure (non donnée) de création simultanée de fichier en plus de l'affichage sur console.
Option Explicit On
Option Strict On
Imports System.Math
Module TrianglesEntiers_M
Sub TrianglesEntiers()
Dim nombre As Integer = 0
Dim Max As Long = 120
Dim CM, Yc2, Ym2 As Long
Dim xc, yc, xm, ym As Double
For AC As Long = 1 To Max
Dim AC2 As Long = AC * AC
For BC As Long = AC + 1 To Max + 1
Dim BC2 As Long = BC * BC
For AB As Long = BC + 1 To AC + BC - 1
Dim AB2 As Long = AB * AB
For AM As Long = 1 To AB - 1
Dim AM2 As Long = AM * AM
For BM As Long = AB - AM + 1 To Max
Dim BM2 As Long = BM * BM
xc = (AC2 + AB2 - BC2) / (2 * AB)
yc = Sqrt(AC2 - xc ^ 2)
xm = (AM2 + AB2 - BM2) / (2 * AB)
ym = Sqrt(AM2 - xm ^ 2)
If ym * xc - (xm * yc) + 0.001 < 0 And ym * (xc - AB) - (yc * (xm - AB)) - 0.001 > 0 Then
'M est intérieur
Dim CMd As Double = Sqrt((xm - xc) ^ 2 + (ym - yc) ^ 2)
CM = CInt(CMd + 0.000000001)
If Abs(CM - CMd) < 0.000001 Then
' recalcul sur entiers
Dim xcL, xmL As Long
xcL = AC2 + AB2 - BC2
xmL = AM2 + AB2 - BM2
Yc2 = 4 * AB2 * AC2 - (xcL * xcL) '4*AB*AB*yc*yc
Ym2 = 4 * AB2 * AM2 - (xmL * xmL) '4*AB*AB*ym*ym
Dim G As Long = 2 * AB2 * (AC2 + AM2 - (CM * CM)) - ((AB2 + AM2 - BM2) * (AC2 + AB2 - BC2))
If G * G = Yc2 * Ym2 Then
nombre += 1
Voir("N° " & nombre & " : " & AC & " " & BC & " " & AB & " " & AM & " " & BM & " " & CM)
If nombre = 1001 Then Exit Sub
End If
End If
else
exit for ' dès que M est extérieur
End If
Next
Next
Next
Next
Next
End Sub 'TrianglesEntiers()
End Module
Dernière modification par totomm (03-07-2014 19:18:16)
Hors ligne
#3 03-07-2014 13:52:38
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 128
Re : Triangles ayant un point intérieur à distance entière des sommets
Bonjour,
J'ai traduit aussi scrupuleusement que possible du VB en Python, mais j'ai un plantage au 3e tour ici :
ym = sqrt(AM2 - xm**2)
Voilà ce que me donne print(xm,AM2,AB2,AC2,BC2) placé juste avant cette ligne :
0.1 1 25 9 16
-1.0 1 25 9 16
-2.3 1 25 9 16
et le résultat de AM2-xm**2 est -4.29...
ou avec les quotients entiers :
0 1 25 9 16
-1 1 25 9 16
-3 1 25 9 16
-8
Donc l'erreur est "normale"... sauf que le passage de -4.29 à -8 simplement en substituant // à / me paraît louche !
J'ai dû rater quelque chose avant, mais quoi... Je n'ai plus le temps de chercher pour le moment.
Pour information, en Python (j'ai découvert ça depuis peu) :
True
>>> sqrt(224).is_integer()
False
>>>
@+
Dernière modification par yoshi (03-07-2014 16:45:30)
Arx Tarpeia Capitoli proxima...
Hors ligne
#4 03-07-2014 19:33:19
- totomm
- Membre
- Inscription : 25-08-2011
- Messages : 1 093
Re : Triangles ayant un point intérieur à distance entière des sommets
Bonsoir,
@ yoshi : Que c'est difficile de ne pas transmettre les bugs initiaux des programmes !!
J'ai eu aussi ce bug sur sqrt d'une valeur négative parce que BM croit jusqu'à Max.
Pourtant j'y avais pensé dès que j'ai commencé à écrire le programme, mais j'ai oublié de transmettre ce que j'avais aouté :
else
exit for ' dès que M est extérieur
juste avant le dernier "end if" qui précède les "next".
Cela empèche BM de progresser et renvoie au AM suivant, xm ne peut plus être < 0 : je viens de l'insérer au post #1
Les 1001 triangles sont calculés en 2 mn 57s et non 14 min 57 s.
Sauf nouvel oubli. Cordialement : totomm
Hors ligne
#5 03-07-2014 20:08:58
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 128
Re : Triangles ayant un point intérieur à distance entière des sommets
Bonsoir,
Rectifié, plus de plantage...
Le prog tourne... sans résultats.
Donc j'ai un autre problème ailleurs.
Probablement déjà la transcription de :
1) CM = CInt(CMd + 0.000000001)
CInt : j'ai cherché une doc où j'ai cru lire
CInt(8,43) --> 8
CInt(8,51) --> 9
Ce serait l'arrondi à l'entier le plus proche ?
Quel est le but de l'ajout de 0.000000001 ?
2) If Abs(CM - CMd) < 0.000001 Then
Test si CM -CMd très proche de 0 (à 10^-6 près) ?
Donc, j'ai fixé Max à 20 et je lui ai fait afficher AB, AC, BC dans cet ordre.
Arrêt à 37, 19, 20 sans rien trouver...
Je teste l'arrondi à l'entier : pas plus de succès.
from math import sqrt
def triangles(Max, nombre):
for AC in range(1,Max):
AC2 = AC**2
for BC in range(AC + 1, Max + 1):
BC2 = BC**2
for AB in range(BC + 1,AC + BC - 1):
AB2 = AB**2
for AM in range(1, AB - 1):
AM2 = AM**2
for BM in range(AB - AM + 1,Max):
print(AB,AC,BC)
BM2 = BM**2
xc = (AC2 + AB2 - BC2)//(2 * AB)
yc = sqrt(AC2 - xc**2)
xm = (AM2 + AB2 - BM2)//(2 * AB)
ym = sqrt(AM2 - xm**2)
if ym * xc - (xm * yc) + 0.001 < 0 and ym * (xc - AB) - (yc * (xm - AB)) - 0.001 > 0:
#M est intérieur
CMd = sqrt((xm - xc)**2 + (ym - yc)**2)
CM = round((CMd + 0.0000001),0)
if abs(CM - CMd) < 0.000001:
#recalcul sur entiers
xcL = AC2 + AB2 - BC2
xmL = AM2 + AB2 - BM2
Yc2 = 4 * AB2 * AC2 - (xcL**2) #4*AB*AB*yc*yc
Ym2 = 4 * AB2 * AM2 - (xmL**2) #4*AB*AB*ym*ym
G = 2 * AB2 * (AC2 + AM2 - CM**2) - ((AB2 + AM2 - BM2) * (AC2 + AB2 - BC2))
if G**2 == Yc2 * Ym2:
nombre += 1
print("N°",nombre," : ",AC,BC,AB," --- ",AM,BM,CM)
if nombre == 11: # j'ai demandé l'arrêt à 11 et non 1001 pour test
return
else:
break
nombre = 0
Max = 20
triangles(Max, nombre)
Je verrai ça plus tard
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#6 03-07-2014 21:58:15
- totomm
- Membre
- Inscription : 25-08-2011
- Messages : 1 093
Re : Triangles ayant un point intérieur à distance entière des sommets
Bonsoir,
J'ai vu dès la 2ème ligne : AC2 = AC**2
AC2 va être un nombre flottant. il faut AC2=AC*AC pour que AC2 soit un nombre entier...
Voici mon code qui donne (Pyton 3.2) exactement les mêmes 1001 triangles que le programme en Visual Basic
mais en Python il met environ 23 minutes (idle GUI sous Windows, interprété), sans créer de fichier,
alors que Vb (compilé et sous debugger) met moins de 3 minutes (en créant aussi un fichier en plus de l'affichage console
def trianglesEntiers():
nombre, max=0,121
for ac in range(1,max):
ac2=ac*ac
for bc in range(ac+1,max+1):
bc2=bc*bc
for ab in range(bc+1,ac+bc-1):
ab2=ab*ab
for am in range(1,ab-1):
am2=am*am
for bm in range(ab-am+1,max):
bm2=bm*bm
xc = (ac2+ab2-bc2)/(2*ab)
yc = sqrt(ac2-xc**2)
xm = (am2+ab2-bm2)/(2*ab)
ym = sqrt(am2-xm**2)
if ym*xc-(xm*yc)+0.001 < 0 and ym * (xc-ab)-(yc*(xm-ab))-0.001 > 0:
#M est intérieur
cmd=sqrt((xm - xc) ** 2 + (ym - yc) ** 2)
cm=int(cmd+0.000000001)
if abs(cm-cmd)<0.000001:
#recalcul avec entiers
xcl=ac2+ab2-bc2
xml=am2+ab2-bm2
yc2=4*ab2*ac2-(xcl*xcl)
ym2=4*ab2*am2-(xml*xml)
g=2*ab2*(ac2+am2-(cm*cm))-((ab2+am2-bm2)*(ac2+ab2-bc2))
if g*g==yc2*ym2:
nombre+=1
print("N°",nombre," :",ac,bc,ab,am,bm,cm)
if nombre==1001:
return
else:
break
trianglesEntiers()
Hors ligne
#7 03-07-2014 22:07:36
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 128
Re : Triangles ayant un point intérieur à distance entière des sommets
Bonsoir,
Merci.
AC2 va être un nombre flottant. il faut AC2=AC*AC pour que AC2 soit un nombre entier...
C'est que j'ai remplacé partout !
Mais là quelque chose méchappe :
vous êtes en train de dire que [tex]AC^2 \ne AC*AC[/tex] au niveau typage !
Il va falloir que je vérifie ça...
J'avais déjà lu qu'en Python AC*AC était un peu plus rapide que AC², mais encore jamais que l'un était un flottant et l'autre non !
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#8 03-07-2014 22:07:54
- totomm
- Membre
- Inscription : 25-08-2011
- Messages : 1 093
Re : Triangles ayant un point intérieur à distance entière des sommets
Re-Bonsoir,
Je n'ai pas trouvé comment arrêter (sortir de l’exécution) quand on veut terminer depuis une boucle for imbriquée...
Ce pourquoi j'ai utilisé une procédure def car le return fonctionne alors !
Je reprends la constatation
Si la comparaison if g*g==yc2*ym2: se fait sur des flottants, il suffit qu'une 15ème décimale soit différente (!!!) pour faire échouer ce qui serait vrai entre entiers
Cordialement : totomm
Hors ligne
#9 03-07-2014 22:09:31
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 128
Re : Triangles ayant un point intérieur à distance entière des sommets
Re,
Je n'ai pas trouvé comment arrêter (sortir de l’exécution) quand on veut terminer depuis une boucle for imbriquée...
Ce pourquoi j'ai utilisé une procédure def car le return fonctionne alors !
Même raison !
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#10 03-07-2014 22:21:18
- totomm
- Membre
- Inscription : 25-08-2011
- Messages : 1 093
Re : Triangles ayant un point intérieur à distance entière des sommets
ReBonsoir,
Dès que l'on utilise une opération autre que multiplication pour élever à une puissance, on passe en flottant (double en général)
x=2**3 donne x en flottant, x=2*2*2 donne x en entier : C'est le piège de Python qui donne par ailleurs des programmes plus lisible et plus faciles à écrire que VB. C'est la grande différence, avec les inconvénients de ses avantages entre un langage typé (VB) et non typé (Python).
Mais je ne connais pas suffisamment Python pour savoir si on peut forcer son comportement (typage dynamique vers statique) comme le fait l'option "strict on" avec VB.
Ainsi avec VB, s'il m'arrive d'écrire x=y^2 avec x déclaré entier (ou entier long), j'ai un avertissement.
Cordialement
EDIT du 04/07/2014 NON : En Python, X=2**3 est bien du type 'int' de même que x=2^3 en Visual Basic si x est déclaré integer.
L'opération "élever à la puissance" est dans le cas du VB "effectuée en flottant", mais une conversion est faite éventuellement suivant le type déclaré. En Python je suppose que cela dépend du type des 2 nombres utilisés ?
Dernière modification par totomm (04-07-2014 10:14:37)
Hors ligne
#11 03-07-2014 23:06:37
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 128
Re : Triangles ayant un point intérieur à distance entière des sommets
Dès que l'on utilise une opération autre que multiplication pour élever à une puissance, on passe en flottant (double en général)
x=2**3 donne x en flottant, x=2*2*2 donne x en entier : C'est le piège de Python (...)
Quel piège ?
Pourtant, voyez ces vérifications :
- directe :
<class 'int'>
- indirecte :
>>> (2**3).is_integer()
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
(2**3).is_integer()
AttributeError: 'int' object has no attribute 'is_integer'
>>>
Alors ?
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#12 04-07-2014 08:47:31
- totomm
- Membre
- Inscription : 25-08-2011
- Messages : 1 093
Re : Triangles ayant un point intérieur à distance entière des sommets
Bonjour,
@ yoshi : Je peux m'être trompé en faisant des hypothèses sur Python que je connais insuffisamment....
Et j'ai regardé plus avant votre programme : xc et xm doivent être calculés en division normale, pas en division entière (euclidienne)...
Le principe de mon programme c'est de trouver la longueur d'un [CM] suffisamment proche d'un entier pour avoir alors un entier dont on vérifie sa pertinence.
Et mieux vaut peut-être convertir CM en entier par CM = int() que par CM=round() qui pourrait (?) renvoyer une valeur entière représentée en flottant...
Dernière modification par totomm (04-07-2014 08:54:49)
Hors ligne
#13 04-07-2014 09:52:45
- totomm
- Membre
- Inscription : 25-08-2011
- Messages : 1 093
Re : Triangles ayant un point intérieur à distance entière des sommets
Bonjour,
avec type(x) on voit que 3**2 est bien du type entier, mais round(2.00001,0) reste du type float et vaut 2.0
EDIT : J'ai donc modifié (EDIT) mon post #10
Avec les 2 // en / pour xc et xm dans le programme de yoshi : C'est OK, mais CM reste du type float
Avec round() remplacé par int() , Max =121 et if nombre=1001 : Résultat exactement identique pour programme yoshi et programme VB de totomm
Dernière modification par totomm (04-07-2014 10:15:44)
Hors ligne
#14 04-07-2014 11:13:19
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 128
Re : Triangles ayant un point intérieur à distance entière des sommets
Bonjour
Ok, objection valable pour round().
Je plaide les circonstances atténuantes : je n'ai pas VB et j'ai cherché un équivalent à CInt...
J'ai pensé à int, mais int(3.85)--> 3 alors que, sauf erreur, en VB CInt(3,85) --> 4 : si c'est bien le cas, la nuance de taille quand même ! D'où l'emploi du round() insuffisamment réfléchi :
pour simuler le CInt, j'aurais dû écrire int(round(2.00001,0)).
D'autre part, je ne savais pas quelle était la "philosophie" précise sous-tendant vos calculs.
Idel pour le : la doc consultée m'a dit qu'en VB le / désignait le quotient entier : apparemment, c'est donc inexact !
Je vais devoir comparer votre version avec la mienne de très près, parce que je viens de remettre / en lieu et place de // et corriger round() en int(round()), je n'ai pas plus de résultats qu'hier...
Même punition en mettant seulement int().
J'ai donc encore raté autre chose...
J'ai pourtant adapté votre programme ainsi :
j'ai copié/collé votre prog dans Python 3.4 et fait les modifs ligne après ligne pour être sûr de ne rien inventer...
Bon, là, je n'ai plus le temps, peut-être d'ici 2-3 h...
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#15 04-07-2014 12:54:55
- totomm
- Membre
- Inscription : 25-08-2011
- Messages : 1 093
Re : Triangles ayant un point intérieur à distance entière des sommets
bonjour,
Voila exactement votre code avec 3 lignes modifiées plus Max=121 :
from math import sqrt
def triangles(Max, nombre):
for AC in range(1,Max):
AC2 = AC**2
for BC in range(AC + 1, Max + 1):
BC2 = BC**2
for AB in range(BC + 1,AC + BC - 1):
AB2 = AB**2
for AM in range(1, AB - 1):
AM2 = AM**2
for BM in range(AB - AM + 1,Max):
#print(AB,AC,BC)
BM2 = BM**2
xc = (AC2 + AB2 - BC2)/(2 * AB)
yc = sqrt(AC2 - xc**2)
xm = (AM2 + AB2 - BM2)/(2 * AB)
ym = sqrt(AM2 - xm**2)
if ym * xc - (xm * yc) + 0.001 < 0 and ym * (xc - AB) - (yc * (xm - AB)) - 0.001 > 0:
#M est intérieur
CMd = sqrt((xm - xc)**2 + (ym - yc)**2)
#CM = round((CMd + 0.0000001),0)
CM=int(CMd + 0.0000001)
if abs(CM - CMd) < 0.000001:
#recalcul sur entiers
xcL = AC2 + AB2 - BC2
xmL = AM2 + AB2 - BM2
Yc2 = 4 * AB2 * AC2 - (xcL**2) #4*AB*AB*yc*yc
Ym2 = 4 * AB2 * AM2 - (xmL**2) #4*AB*AB*ym*ym
G = 2 * AB2 * (AC2 + AM2 - CM**2) - ((AB2 + AM2 - BM2) * (AC2 + AB2 - BC2))
if G**2 == Yc2 * Ym2:
nombre += 1
print("N°",nombre," : ",AC,BC,AB," --- ",AM,BM,CM)
if nombre == 11: # j'ai demandé l'arrêt à 11 et non 1001 pour test
return
else:
break
nombre = 0
Max = 121
triangles(Max, nombre)
et le résultat de l'exécution :
Python 3.2.2 (default, Sep 4 2011, 09:07:29) [MSC v.1500 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>>
N° 1 : 8 19 22 --- 6 17 4
N° 2 : 12 57 59 --- 8 54 6
N° 3 : 13 30 32 --- 6 28 8
N° 4 : 14 38 39 --- 8 34 8
N° 5 : 16 38 44 --- 12 34 8
N° 6 : 16 39 43 --- 13 34 7
N° 7 : 16 70 76 --- 14 64 9
N° 8 : 16 71 73 --- 11 63 13
N° 9 : 17 38 43 --- 12 35 7
N° 10 : 17 73 80 --- 21 61 13
N° 11 : 18 20 26 --- 15 13 9
>>>
Vous pouvez supprimer ce post après l'avoir vu. Cordialement totomm
Hors ligne
#16 04-07-2014 14:22:25
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 128
Re : Triangles ayant un point intérieur à distance entière des sommets
RE,
Effectivement, votre version tourne...
J'ai donc comparé point par point avec les dernières modifs de ce matin (pas retouché depuis) : conforme !
Je l'ai donc relancé et maintenant il tourne !
Invraisemblable... C'est bien la première fois que ça m'arrive.
Désolé, mais j'ai quelques soucis domestiques en ce moment avec ma chère vieille (88 ans) mère : ça m'accapare pas mal.
Bon l'important est qu'il fonctionne.
Je vais pouvoir essayer de gagner du temps.
Merci
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#18 04-07-2014 21:41:05
- 0^0
- Membre
- Inscription : 24-06-2014
- Messages : 325
Re : Triangles ayant un point intérieur à distance entière des sommets
Bonjour
Serait-il très compliqué de modifier le programme de façon à ce qu'il donne aussi les cas où certaines d'entre les valeurs AB, BC, AC, AM, BM et CM sont égales?
Il permettrait ainsi de fournir la liste complète de tous les triangles entiers ABC possibles "ayant un point M intérieur à distances entières des sommets" pour un "Max" donné, ce qui serait vraiment parfait.
@+
Hors ligne
#19 05-07-2014 16:05:23
- totomm
- Membre
- Inscription : 25-08-2011
- Messages : 1 093
Re : Triangles ayant un point intérieur à distance entière des sommets
Bonjour,
@0^0 : Bien des choses ne sont pas si compliquées, donc faisables. Et chacun peut en faire une partie.
Si vous voulez "la liste complète de tous les triangles entiers ABC possibles…",
il faut peut-être définir un classement de tous ces triangles : Je vous suggère un classement par périmètres croissants.
Définissez donc comment cela pourrait être et donnez les 20 premiers de votre classement.
Hors ligne
#20 05-07-2014 18:06:44
- 0^0
- Membre
- Inscription : 24-06-2014
- Messages : 325
Re : Triangles ayant un point intérieur à distance entière des sommets
Bonjour,
Bien des choses ne sont pas si compliquées, donc faisables. Et chacun peut en faire une partie.
Que j'aimerais que certaines choses "pas si compliquées" aux dires des uns, me soient plus familières... Ainsi, je pourrais tenter de participer comme je le souhaiterais, même si ce n'est que pour une petite part...
Or je suis tout juste en train de découvrir les bases 'Python': je précise que je ne connaissais encore rien de rien à la programmation il n'y a que quelques jours de cela...
"Si vous voulez "la liste complète de tous les triangles entiers ABC possibles…",
il faut peut-être définir un classement de tous ces triangles : Je vous suggère un classement par périmètres croissants.
Définissez donc comment cela pourrait être et donnez les 20 premiers de votre classement.
Je planche sur la question depuis un certain temps sans guère avancer...
Au départ je recherchais une formule permettant d'attribuer à tout triangle une seule valeur qui dépendrait à la fois de son aire et de son périmètre, valeur permettant un classement et qui serait en théorie la même pour tous les triangles ayant une même aire et un même périmètre.
Cela dit, j'en arrive aussi à me dire que considérer seulement le Périmètre est sans doute plus adéquat (???) ou en tout cas au moins plus pratique, à défaut de mieux...
Je dis cela dans le sens que pour un périmètre donné, il existe une aire minimale égale à 0 (soit celle du triangle plat correspondant) et une aire maximale égale à celle du triangle équilatéral ayant ce périmètre, soit: [tex]S_{max} = \left(\frac{Périmètre}{3}\right)^2.\frac{\sqrt{3}}{4}[/tex], alors que ce n'est pas le cas si l'on considère seulement les aires...
> En effet, pour chaque aire donnée, il y a bien un périmètre minimal correspondant: encore celui d'un triangle équilatéral, mais pas de périmètre maximal défini, car ce dernier peut être infini... Ce serait bien gênant pour un triangle à qui l'on attribuerait une valeur qui ne l'est pas*!
*note: autrement dit: infinie...
Mis à part cela, et à part si j'ai raté quelque chose, je ne vois pas en quoi un tel classement serait finalement nécessaire pour obtenir l'ensemble des triangles adéquats possibles - en y incluant ceux possédants des dimensions égales - pour un "Max" choisi, arbitraire certes....
@+
Hors ligne
#21 05-07-2014 21:14:38
- totomm
- Membre
- Inscription : 25-08-2011
- Messages : 1 093
Re : Triangles ayant un point intérieur à distance entière des sommets
Bonsoir,
Complément à mon post #19 : On doit pouvoir considérer les triangles dont le périmètre est 3, puis 4, puis 5, etc.
Pour chaque valeur du périmètre le nombre de triangles entiers est fini.
Pas besoin donc d'évoquer les aires pour classer les triangles...
Pouvez-vous ainsi, en utilisant papier crayon (avant d'essayer de programmer) énumérer les 20 premiers ?
Hors ligne
#22 05-07-2014 21:40:22
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 128
Re : Triangles ayant un point intérieur à distance entière des sommets
Saut,
@O^O
Bravo d'essayer d'apprendre à programmer.
Presque tout le monde est d'accord pour dire qu'il vaut mieux commencer par le livre de Gerard Swinnen : Apprendre à programmer avec Python 3.
Tu peux soit acheter le livre si tu préfères une version papier ou le télécharger en cliquant ici.
Le lien est tout à fait légal : ce livre est sous licence libre.
Si ça ne marche pas tout seul au début (et même après) ne pas te décourager, mais "20 fois sur le métier remets ton ouvrage"...
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#23 07-07-2014 00:52:26
- 0^0
- Membre
- Inscription : 24-06-2014
- Messages : 325
Re : Triangles ayant un point intérieur à distance entière des sommets
Bonsoir,
@ Yoshi,
Merci pour les encouragements et le lien. Je suis tombé par moi-même sur ce livre qui a l'air excellent, je vais m'y mettre.
C'est vraiment bien que des livres de cette qualité soient en accès libre.
@ totomm,
En m'aidant de vos (désolé pour la politesse, je m'aperçois que je vous tutoyais) résultats, voici les 20 premiers que je trouve, vérifications faites à la calculette:
N° 01 : 08 19 22 - 06 17 04 --- 49 --- 27
N° 02 : 18 20 26 - 15 13 09 --- 64 --- 37 --- 179,5995..
N° 03 : 20 21 23 - 14 13 10 --- 64 --- 37 --- 194,9769..
N° 04 : 13 30 32 - 06 28 08 --- 75 --- 42
N° 05 : 23 27 28 - 18 20 08 --- 78 --- 46 --- 286,9982..
N° 06 : 24 26 28 - 17 21 08 --- 78 --- 46 --- 289,2317..
N° 07 : 20 31 39 - 19 22 11 --- 80 --- 52
N° 08 : 26 30 32 - 19 15 18 --- 88 --- 52
N° 09 : 24 27 39 - 15 26 11 --- 90 --- 52 --- 319,4683..
N° 10 : 24 31 35 - 19 26 07 --- 90 --- 52 --- 363,7306..
N° 11 : 14 38 39 - 08 34 08 --- 91 --- 50
N° 12 : 16 38 44 - 12 34 08 --- 98 --- 54 --- 298,2197..
N° 13 : 16 39 43 - 13 34 07 --- 98 --- 54 --- 311,4803..
N° 14 : 17 38 43 - 12 35 07 --- 98 --- 54 --- 321,6955..
N° 15 : 22 37 39 - 13 28 15 --- 98 --- 56 --- 398,4469..
N° 16 : 25 29 44 - 25 21 10 --- 98 --- 56 --- 342,9285..
N° 17 : 25 36 37 - 14 27 15 --- 98 --- 56 --- 428,3176..
N° 18 : 30 31 37 - 26 13 20 --- 98 --- 59 --- 448,4372..
N° 19 : 23 36 41 - 10 33 15 ---100 --- 58 --- 412,4318..
N° 20 : 28 32 40 - 28 13 21 ---100 --- 62 --- 444,9719..
Les trois dernières colonnes sont respectivement les sommes des longueurs extérieures, les sommes des longueurs intérieures et les aires des triangles ABC de mêmes périmètres.
L'ordre exact est discutable... Au moins deux aires (mises en rouge) pourraient être considérées en vue d'un autre classement...
@+
Dernière modification par 0^0 (07-07-2014 22:35:05)
Hors ligne
#24 07-07-2014 10:06:52
- totomm
- Membre
- Inscription : 25-08-2011
- Messages : 1 093
Re : Triangles ayant un point intérieur à distance entière des sommets
Bonjour,
@ 0^0 : il y a une petite incompréhension dans votre dernière réponse après mes posts #19 et #21.
Il ne s'agit pas de considérer les triangles présents dans le fichier que je vous ai envoyé, ces triangles sont scalènes, tels que AC, BC, AB entiers et AC<BC<AB. Quand AC est choisi on a une infinité de triangles possibles si on ne limite pas BC et AB, donc on ne peut énumérer TOUS les triangles ainsi.
Pour énumérer TOUS les triangles entiers (puisqu'ils sont "dénombrables"), il faut énumérer successivement tous les triangles ayant pour périmètre 3, puis 4, etc.
Pour chaque périmètre successif les triangles possibles sont en nombre fini. C'est le principe du "dénombrable" : une infinité dénombrable (les périmètres) d'ensembles finis (les triangles ayant un périmètre donné).
Ensuite on pourra définir parmi TOUS les triangles entiers, comment on trouve tous ceux qui ont au moins un point à distance entière des 3 sommets
Hors ligne
#25 07-07-2014 19:34:31
- 0^0
- Membre
- Inscription : 24-06-2014
- Messages : 325
Re : Triangles ayant un point intérieur à distance entière des sommets
Bonjour,
En effet totomm, j'avais mal compris...
- Je ne regrette cependant pas d'avoir fait ce petit travail en post #23, car il a au moins le mérite de mettre en évidence 2 ou 3 propriétés que je trouve assez intéressantes... Les avez-vous tu remarquées? -
Voici donc les 20 premiers triangles demandés + 88:
P = 03: ---- 1,1,1
P = 05: ---- 2,2,1
P = 06: ---- 2,2,2
P = 07: ---- 3,2,2 - 3,3,1
P = 08: ---- 3,3,2
P = 09: ---- 3,3,3 - 4,3,2 - 4,4,1
P = 10: ---- 4,3,3 - 4,4,2
P = 11: ---- 4,4,3 - 5,3,3 - 5,4,2 - 5,5,1
P = 12: ---- 4,4,4 - 5,4,3 - 5,5,2
P = 13: ---- 5,4,4 - 5,5,3 - 6,4,3 - 6,5,2 - 6,6,1
P = 14: ---- 5,5,4 - 6,4,4 - 6,5,3 - 6,6,2
P = 15: ---- 5,5,5 - 6,5,4 - 6,6,3 - 7,4,4 - 7,5,3 - 7,6,2 - 7,7,1
P = 16: ---- 6,5,5 - 6,6,4 - 7,5,4 - 7,6,3 - 7,7,2
P = 17: ---- 6,6,5 - 7,5,5 - 7,6,4 - 7,7,3 - 8,5,4 - 8,6,3 - 8,7,2 - 8,8,1
P = 18: ---- 6,6,6 - 7,6,5 - 7,7,4 - 8,5,5 - 8,6,4 - 8,7,3 - 8,8,2
P = 19: ---- 7,6,6 - 7,7,5 - 8,6,5 - 8,7,4 - 8,8,3 - 9,5,5 - 9,6,4 - 9,7,3 - 9,8,2 - 9,9,1
P = 20: ---- 7,7,6 - 8,6,6 - 8,7,5 - 8,8,4 - 9,6,5 - 9,7,4 - 9,8,3 - 9,9,2
P = 21: ---- 7,7,7 - 8,7,6 - 8,8,5 - 9,6,6 - 9,7,5 - 9,8,4 - 9,9,3 - 10,6,5 - 10,7,4 -10,8,3 - 10,9,2 - 10,10,1
P = 22: ---- 8,7,7 - 8,8,6 - 9,7,6 - 9,8,5 - 9,9,4 - 10,6,6 - 10,7,5 - 10,8,4 - 10,9,3 - 10,10,2
P = 23: ---- 8,8,7 - 9,7,7 - 9,8,6 - 9,9,5 - 10,7,6 - 10,8,5 - 10,9,4 - 10,10,3 - 11,6,6 - 11,7,5 - 11,8,4 - 11,9,3 - 11,10,2 - 11,11,1
etc...
Note: Je n'ai pas pris en compte les triangles plats.
[Corrections faites: pour les périmètres 22, il manquait 8,8,6 et pour les périmètres 19, il manquait 9,8,2 9,7,3 9,6,4 et 9,5,5. Merci totomm! ---- C'était un bug au recopiage, je les avais bien trouvés sur le papier.]
@+
Dernière modification par 0^0 (08-07-2014 10:07:48)
Hors ligne