Page 4 sur 5
Re: Math en s'amusant
Publié : sam. 17/mars/2018 23:12
par Ollivier
Super, PAPIPP !
J'avais besoin de 30 secondes de détente, pour me remettre d'une charge de données à traiter qui ne cesse. Et j'ai apprécié ces jeux de mots.
Pi est impressionnant. Pendant des siècles, sa précision s'est faite impénétrable, puis les difficultés de son calcul ont été pulvérisées dans les années 80, bien que Pi reste infini.
Re: Math en s'amusant
Publié : sam. 31/mars/2018 17:21
par Kwai chang caine
MC PAPIPP a écrit :Certes le PIs est imbuvable mais ce qui en sort l’est (lait)
Vous allez de mal en Pis. Elève Kcc vous serez au Piquet.
Certains disent que le PIment.
Je ne le crois pas car si le Pirate pour vous c’est à cause de vos Pirouettes.
De toutes manières au Pifomètre le Pivot 3,14.
Le PIlier aux nombres complexes n’est pas un PIs-aller (pis à lait) il n’est donc pas vache.
Merci KCC.
A+

Top cool !!!!
Pappip's Delight a écrit :Je ne le crois pas car si le Pirate
Moi j'ai pas assez intelligent pour savoir si le
PIrate

Mais aprés c'que j'viens d'lire...j'ai sûr que le pa
PIpp rap !!! yo !!!!

Merci plutôt à toi MAITRémathique 
Re: Math en s'amusant
Publié : dim. 19/avr./2020 11:03
par Patrick88
Dessin d'un cercle passant par 3 points définit "au hasard",
source Cercle passant par 3 points (Obs. Lyon - phm - 2006/02/05 - cercle_3pts.wpd)
https://cral-perso.univ-lyon1.fr/labo/f ... e_3pts.pdf
Falsam, je n'ai pas réussi en utilisant ton fond de code je te laisse le plaisir de convertir "à ta sauce"...
code utilisant la lib VectorDrawing, rien de bien sorcier, mais je comprends ce que je fait...
ça faisait perpet de temps (code pondu en octobre 2019) que je n'avais pas utilisé purebasic.
et afin de relancer le sujet un peu spamé par des bots chinois...
Pat
Code : Tout sélectionner
#Fen1 = 0
#Fen1_Canvas1 = 0
#Fen1_Font1 = 0
#FontSize = 12
#Margin = 6 ;Marge affichage texte
#NbSegmentPolygon = 12
#FontName2 = "Monotype Corsiva"
#FontName1 = "Arial"
; sinus = axe des Y
; cosinus = axe des X
; angle d'un point d'un cercle par rapport à son centre
; angle = Arcsin(x) ou Arccos(x)
;Structure d'un vecteur
Structure Vector
x.f ;Position x
y.f ;Position y
EndStructure
;Points A, B et *pt
Global A.Vector, B.Vector, C.Vector, D.Vector, *pt.vector
Global *M1.Vector, *M2.vector ; milieu des segment [A B] et [B C]
;Afficher un texte
Global SpriteGauche,SpriteDroit, Buffer.s, TextWidth, TextHeight
;Marge affichage texte
Global Margin = 6,LargeuDeLaLigne.d=1
;{ Macro Trace() extension de la fonction debug de purebasic
; par G-Rom Dim Juin 12, 2016
; http://www.purebasic.fr/french/viewtopic.php?f=1&t=16107
;
Macro Quote
"
EndMacro
Macro Trace(name)
Debug "Line : " + Str(#PB_Compiler_Line) + " Name = "+Quote#name#Quote+ " Value = " + name
EndMacro
;}
Procedure DessinePoint(*P1.Vector, texte.s)
; dessin du point
StrokePath(LargeuDeLaLigne)
AddPathCircle(*p1\x, *p1\y, 2)
VectorSourceColor(RGBA(255, 0, 0, 255))
VectorFont(FontID(#Fen1_Font1))
ClosePath()
; libellé du point
StrokePath(LargeuDeLaLigne)
MovePathCursor(*p1\x - Margin*2, *p1\y - Margin*2)
AddPathText(Texte)
VectorSourceColor(RGBA(0, 0, 0, 255))
ClosePath()
EndProcedure
Procedure DessineCerclePassantPar3Point(*P1.Vector,*P2.Vector,*P3.Vector)
;B5 = x1 *p1\x
;C5 = y1 *p1\y
;D5 = x2 *p2\x
;E5 = y2 *p2\y
;F5 = x3 *p3\x
;G5 = y3 *p3\y
;H5 = xc
;i5 = yc
;j5 = RC
; point x du centre : xc =((F5,2-D5,2+G5,2-E5,2)/(2*(G5-E5))-(D5,2-B5,2+E5,2-C5,2)/(2*(E5-C5)))/((F5-D5)/(G5-E5)-(D5-B5)/(E5-C5))
; point y du centre : yc =-(D5-B5)/(E5-C5)*H5+(D5,2-B5,2+E5,2-C5,2)/(2*(E5-C5))
; rayon du cercle : rc =RACINE((B5-H5),2+(C5-I5),2)
Protected B5.d,C5.d,D5.d,E5.d,F5.d,G5.d,H5.d,i5.d,j5.d
Protected PtCentre.Vector
B5 = *p1\x
C5 = *p1\y
D5 = *p2\x
E5 = *p2\y
F5 = *p3\x
G5 = *p3\y
H5 = ((Pow(F5,2)-Pow(D5,2)+Pow(G5,2)-Pow(E5,2))/(2*(G5-E5))-(Pow(D5,2)-Pow(B5,2)+Pow(E5,2)-Pow(C5,2))/(2*(E5-C5)))/((F5-D5)/(G5-E5)-(D5-B5)/(E5-C5))
i5 = -(D5-B5)/(E5-C5)*H5+(Pow(D5,2)-Pow(B5,2)+Pow(E5,2)-Pow(C5,2))/(2*(E5-C5))
j5 = Sqr(Pow((B5-H5),2)+Pow((C5-I5),2))
PtCentre\x = H5
PtCentre\y = i5
DessinePoint(PtCentre,"")
AddPathCircle(H5, i5, j5)
VectorSourceColor(RGBA(255, 0, 0, 255))
StrokePath(LargeuDeLaLigne)
ClosePath()
; longueur L d’un arc de cercle = angle en radian * rayon
EndProcedure
If OpenWindow(0, 0, 0, 800, 600, "Jeu de Math : Dessine un segment d'arc par 3 points", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CanvasGadget(#Fen1_Canvas1, 0,0, WindowWidth(#Fen1), WindowHeight(#Fen1))
LoadFont(#Fen1_Font1, #FontName1, #FontSize)
;Définition du point A
A\x = 100
A\y = 300
;Définition du point B
B\x = 300
B\y = 50
;Définition du point C
C\x = 570
C\y = 400
If StartVectorDrawing(CanvasVectorOutput(#Fen1_Canvas1))
; ;Affichage les points A B C
DessinePoint(A,"A")
DessinePoint(B,"B")
DessinePoint(C,"C")
DessineCerclePassantPar3Point(A,B,C)
StopVectorDrawing()
EndIf
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
EndIf
Re: Math en s'amusant
Publié : dim. 19/avr./2020 15:57
par Ar-S
Petite variante du code de MLD
Code : Tout sélectionner
;falsam - Tracé de points sur un cercle
;appli MLD
;Niveau de difficulté : *
; apparition/disparition des dots : Ar-S
Enumeration Window
#mainForm
EndEnumeration
Enumeration Gadget
#Canvas
EndEnumeration
;Centre X et Y d'un cercle
Global CX = 400
Global CY = 300
;Rayon du cercle
Global Radius.i = 150
Global Maxangle,color
;Plan de l'application
Declare Start()
Declare Draw()
Declare Exit()
Start()
Procedure Start()
OpenWindow(#mainForm, 0, 0, 800, 600, "Point tournant autour d'un cercle", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CanvasGadget(#Canvas, 0, 0, 800, 600)
AddWindowTimer(0, 1, 100)
BindEvent(#PB_Event_Timer,@Draw())
BindEvent(#PB_Event_CloseWindow, @Exit())
Repeat : WaitWindowEvent() : ForEver
EndProcedure
Procedure Draw()
Static Angle ;Angle variant de 0 à 360 Degrés
Protected X, Y ;Coordonnées X, Y du point circulant sur le cercle
maxangle + 30
If maxangle > 360 : maxangle = 0
If color = 0 : color = $FFFFFF
Else
color = 0
EndIf
EndIf
StartDrawing(CanvasOutput(#Canvas))
;L'angle varie de 0 à 360 Degrés incrémenté + 10
For Angle = 0 To maxangle Step 10
;Dessin du cercle
DrawingMode(#PB_2DDrawing_Default)
;Nouvelles coordonnées X & Y du point
X = CX + Radius * Cos(Angle * #PI / 180)
X2 = CX + Radius * Cos((Angle-30) * #PI / 180)
Y = CY + Radius * Sin(Angle * #PI / 180)
Y2 = CY + Radius * Sin((Angle-30) * #PI / 180)
;Dessin du point
Circle(X, Y, 3, color)
Next
StopDrawing()
EndProcedure
Procedure Exit()
End
EndProcedure
Re: Math en s'amusant
Publié : lun. 20/avr./2020 14:05
par Micoute
Déplacement d'un point C sur une suite de segment de droite
Publié : dim. 24/oct./2021 17:11
par Thyphoon
Ma petite contribution ...
Pour se deplacer sur un chemin constitué de plusieurs segments en ne connaissant que la distance sur ce chemin
Code : Tout sélectionner
EnableExplicit
Procedure.f distanceBetwenPoint(x1, y1, x2, y2)
ProcedureReturn Sqr((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
EndProcedure
If InitSprite()
InitKeyboard()
InitMouse()
EndIf
OpenWindow(0, 0, 0, 800, 600, "Test", #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 800, 600)
Structure p
x.f
y.f
EndStructure
;Path
NewList Path.p()
AddElement(path()):path()\x=10:path()\y=10
AddElement(path()):path()\x=50:path()\y=30
AddElement(path()):path()\x=60:path()\y=45
AddElement(path()):path()\x=80:path()\y=80
AddElement(path()):path()\x=120:path()\y=90
AddElement(path()):path()\x=150:path()\y=150
AddElement(path()):path()\x=250:path()\y=300
AddElement(path()):path()\x=300:path()\y=250
AddElement(path()):path()\x=500:path()\y=100
AddElement(path()):path()\x=600:path()\y=50
AddElement(path()):path()\x=750:path()\y=500
AddElement(path()):path()\x=100:path()\y=300
Define.l Distance=0
Define.l n,x1,x2,y1,y2,hypothenus,OldPathDistance,PathDistance,SegmentDistance
Define Target.p
Repeat
Repeat : Until WindowEvent() = 0
Distance=Distance+5
StartDrawing(ScreenOutput())
PathDistance=0
For n=0 To ListSize(Path())-1
SelectElement(Path(),n)
x1=Path()\x
y1=Path()\y
If SelectElement(Path(),n+1)
x2=Path()\x
y2=Path()\y
;Calcul Path Distance
OldPathDistance=PathDistance
hypothenus=distanceBetwenPoint(x1, y1, x2, y2)
PathDistance=PathDistance+hypothenus
;Draw
LineXY(x1,y1,x2,Y2,#White)
Circle(x1,y1,5,#Red)
Circle(x2,y2,5,#Red)
;Draw target
If Distance>=OldPathDistance And Distance<PathDistance ; If you are one this segment
SegmentDistance=Distance-OldPathDistance
Target\x=x1+(SegmentDistance/hypothenus*(x2-x1))
Target\y=y1+(SegmentDistance/hypothenus*(y2-y1))
Circle(Target\x,Target\y,5,#Green)
EndIf
EndIf
Next
StopDrawing()
FlipBuffers()
ClearScreen(RGB(128, 128, 128))
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
Re: Math en s'amusant
Publié : ven. 12/août/2022 22:38
par PAPIPP
Bonjour à tous
Voici un code qui détermine PI avec autant de digits que l’on désir.
Ce code, d’une utilité assez restreinte, est plutôt vu d’un point de vue amusant, c’ est une copie en purebasic du célèbre site rosetta code task :
https://rosettacode.org/wiki/Category:Programming_Tasks
Code : Tout sélectionner
#SCALE = 10000
#ARRINT= 2000
Procedure Pi(Digits)
Protected First=#True, Text$
Protected Carry, i, j, sum
Dim Arr(Digits)
For i=0 To Digits
Arr(i)=#ARRINT
Next
i=Digits
While i>0
sum=0
j=i
While j>0
sum*j+#SCALE*arr(j)
Arr(j)=sum%(j*2-1)
sum/(j*2-1)
j-1
Wend
Text$ = RSet(Str(Carry+sum/#SCALE),4,"0")
If First
Text$ = ReplaceString(Text$,"3","3.")
First = #False
EndIf
Print(Text$)
Carry=sum%#SCALE
i-14
Wend
EndProcedure
nbdigits=24*1024*2
; nbdigits=24*1024*10
; nbdigits=24*1024*1024
If OpenConsole()
PrintN(" pi avec = "+Str(nbdigits)+" digits")
PrintN(" ")
SetConsoleCtrlHandler_(?Ctrl,#True)
; Pi(24*1024*1024)
Pi(nbdigits)
EndIf
Input()
PrintN(#CRLF$+"Ctrl-C was pressed")
End
Ctrl:
Input()
PrintN(#CRLF$+"Ctrl-C was pressed")
End
A+
Re: Math en s'amusant
Publié : mar. 16/août/2022 9:52
par Ollivier
Ah... Pi !
Cet algo mérite peut-être un rappel de son auteur initial, qui ne s'est "pas foulé", en 1989, me semble-t-il.
C'était quelquechose comme << Bon euh moi je fais dans l'informatique... Pi, je le connais à l'infini, comme 1/3 = 0.333333... etc... jusqu'à l'infini, ben Pi = 2,222222... etc... jusqu'à l'infini en base e. Et convertir un nombre de la base e à la base 10, c'est, comme qui dirait, on ne peut plus simple, de surcroît, en informatique : c'est fait pour ! >>
Re: Math en s'amusant
Publié : mar. 13/sept./2022 13:35
par Ollivier
J'ai enfin retrouvé ce que je cherchais :
l'algorithme "compte-goutte" de Stanley Rabinovitz.
Erratum dans le message précédent : pi n'est pas 2.22222... en base e. pi est 2.22222... dans une base variable (en l'occurrence 1/3; 2/5; 3/7; 4/9; 5;11; etc...
Re: Math en s'amusant
Publié : mar. 13/sept./2022 15:39
par Micoute
moi pour calculer PI, je dis la phrase suivante :
"Que j'aime à faire connaître ce nombre utile aux sages, immortel Archimède, artiste, ingénieur qui de ton jugement peut priser la valeur, pour moi il eut de pareils avantages."
il suffit de compter le nombre de lettres dans chaque mot.
Re: Math en s'amusant
Publié : sam. 04/mai/2024 16:45
par brossden
Deux petits problèmes pour le plaisir :
Le premier:
J'ai trois fois l'âge qui tu avais quand j'avais ton âge, quand tu auras mon âge nous auront ensemble 72 ans quels âges avons-nous ?
Le second :
Deux copains qui ne se sont pas vu depuis longtemps se rencontre dans un bar.
Au bout de quelques échanges concernant leur récent passé respectif l'un des deux lui dit :
J'ai trois enfants et la somme de leurs âges est égal au numéro de la maison d'en face.
Le second regarde ce numéro et lui dit que ce n'est pas suffisant pour trouver.
Le premier lui dit alors le produit de leurs âges est égal à 36.
Ce n'est toujours pas suffisant lui répond le second.
Bien alors sache que l'ainé mange de la soupe.
Ah OK, j'ai trouvé lui répond le second, et vous sauriez-vous me donner leurs âges respectifs en respectant toutes les données du problème ?
Et puis tien un troisième plus difficile:
Un homme récemment élu président de la république cherche à nommer son premier ministre.
Le problème c'est qu'il hésite entre trois personnes qui lui paraissent convenir pour ce poste.
Alors il leur dit :
Je vais vous mettre à la queue leu leu face à un mur.
Je dispose de 5 chapeaux 3 noirs et deux blancs la face inférieure des trois chapeaux est rouge.
Pendant que vous aurez les yeux bandés je déposerai à chacun un de ces 5 chapeaux et vous ne pourrez pas voir les deux restants.
Une fois les yeux débandés celui qui me donnera la bonne couleur de son chapeau sera nommé à ce poste sachant que si vous vous retournez vous serez disqualifié.
En résumé le premier personnage ne voir que le mur devant lui, le second voit celui qui est devant lui et le dernier voit les deux personnes devant lui.
L'enjeu étant de conséquent personne ne répond au hasard mais au bout d'un bon moment, le premier qui ne voit que le mur affirme qu'il a un chapeau noir! Pourquoi a-t' il raison ?
Re: Math en s'amusant
Publié : mer. 21/mai/2025 22:00
par SPH
brossden a écrit : sam. 04/mai/2024 16:45
Deux petits problèmes pour le plaisir :
Le premier:
J'ai trois fois l'âge qui tu avais quand j'avais ton âge, quand tu auras mon âge nous auront ensemble 72 ans quels âges avons-nous ?
J'ai trois fois l'âge qui tu avais quand j'avais ton âge
x=3*y
quand tu auras mon âge nous auront ensemble 72 ans
x+y=72
3*y+y=72
4*y=72
y=72/4
y=18
x=72-18
x=54
L'un a 18 ans et l'autre a 54 ans (j'espère ne pas m'être gourré)
Re: Math en s'amusant
Publié : dim. 25/mai/2025 19:12
par Demivec
J'ai trois fois l'âge qui tu avais quand j'avais ton âge, quand tu auras mon âge nous auront ensemble 72 ans quels âges avons-nous ?
(Moi) m
(Vous) v
Aujourd'hui, m = 3v
Quand v' = m; m' = m + (m - v)):
72 années = m' + v' = m + (m - v) + m = 3m - v = 3(3v) - v = 9v - v = 8v
v = 9
Aujourd'hui : v = 9 Ans; m = 27 Ans
@Correction
Re: Math en s'amusant
Publié : dim. 25/mai/2025 19:40
par SPH
Je n'ai plus l'habitude des devinettes mathématiques.
Cette phrase "J'ai trois fois l'âge qui tu avais quand j'avais ton âge" est difficilement compréhensible (pour moi).
J'aurais essayé

Re: Math en s'amusant
Publié : lun. 26/mai/2025 14:43
par case
J'ai trois fois l'âge qui tu avais quand j'avais ton âge, quand tu auras mon âge nous auront ensemble 72 ans quels âges avons-nous ?
impossible a résoudre en tout cas avec des entiers, j'ai pas tenté avec des float
la véritable énigme est probablement
J'ai trois fois l'âge qui tu avais quand j'avais ton âge, quand tu auras mon âge nous auront ensemble xx ans quels âges avons-nous ?
je vais prendre l'exemple de 27 ANS .
j'ai 27 ans, tu as donc 18 ans car quand j'avais 18 ans tu avais 9 ans ce qui fait bien mon age actuel si on multiplie par 3 (3*9=27)
tu aura mon age dans 9 ans. (18+9)=27 et moi j'aurais alors 36 ans(27+9) on aura alors 63 ans a tout les deux quand tu aura mon age.
maintenant 30 ans.
j'ai 30 ans, tu as donc 20 ans car quand j'avais 20 ans tu avais 10 ans ce qui fait bien mon age actuel si on multiplie par 3 (3*10=30)
tu aura mon age dans 10 ans. (20+10)=30 et moi j'aurais alors 40 ans(30+10) on aura alors 70 ans a tout les deux quand tu aura mon age.
enfin 33 ans
j'ai 33 ans, tu as donc 22 ans car quand j'avais 22 ans tu avais 11 ans ce qui fait bien mon age actuel si on multiplie par 3 (3*11=33)
tu aura mon age dans 11 ans. (22+11)=33 et moi j'aurais alors 44 ans(33+11) on aura alors 77 ans a tout les deux quand tu aura mon age.
pour que l'énoncé soit juste cela ne fonctionne pas avec 72 . ou alors j'ai mal compris.
