Pedro
Nombre de messages : 1596 Date d'inscription : 19/01/2014
| Sujet: Représentation de fonctions. Mar 7 Nov 2017 - 10:08 | |
| Bonjour. Ce code permet de tracer la courbe de fonctions affines et du second degré. - Code:
-
' Version du 22 oct 2017.
dim a, b, c, e$, crlf$, delta, k, maximum, ox, oy, x1, x2, y1, y2, x3, y3
label calcul, quitter
maximize 0 2d_target_is 0 on_close 0,quitter
crlf$=chr$(10)+chr$(13)
ox=screen_x/2 oy=screen_y/2
alpha 4:top 4,50:width 4,30:height 4,30:font_size 4,12:font_bold 4:font_color 4,255,0,128:caption 4," a" alpha 5:top 5,100:width 5,30:height 5,30::font_size 5,12:font_bold 5:font_color 5,255,0,128:caption 5," b" alpha 6:top 6,150:width 6,30:height 6,30::font_size 6,12:font_bold 6:font_color 6,255,0,128:caption 6," c"
memo 1:left 1,50:top 1,50:height 1,30:font_size 1,12:font_bold 1:font_color 1,0,0,160 memo 2:left 2,50:top 2,100:height 2,30::font_size 2,12:font_bold 2:font_color 2,0,0,160 memo 3:left 3,50:top 3,150:height 3,30::font_size 3,12:font_bold 3:font_color 3,0,0,160
button 7:left 7,50:top 7,200:width 7,100:height 7,30:font_bold 7:caption 7,"Calculer" on_click 7,calcul
end
calcul: cls
a=0:b=0:c=0 if text$(1)<>"" and numeric(text$(1))=1 then a=val(text$(1)) if text$(2)<>"" and numeric(text$(2))=1 then b=val(text$(2)) if text$(3)<>"" and numeric(text$(3))=1 then c=val(text$(3))
if a>0 then delta=b*b-4*a*c
for x1=0 to ox*2 step 25 2d_pen_color 0,128,0 2d_line x1,oy-5,x1,oy+5 if (x1-ox)/25<>0 font_color 0,128,128,255 if mod(x1,5)=0 then print_locate x1-5,oy+10:print str$((x1-ox)/25) end_if next x1
for y1=0 to oy*2 step 25 2d_pen_color 0,128,0 2d_line ox-5,y1,ox+5,y1 if (oy-y1)/25<>0 font_color 0,128,128,255 if mod(y1,5)=0 then print_locate ox+10,y1-5:print str$((oy-y1)/25) end_if next y1
k=0 2d_line ox,0,ox,oy*2 2d_line 0,oy,ox*2,oy 2d_pen_color 255,0,0 2d_pen_width 3 for x1=-100 to 100 step 0.01 k=k+1 y1=a*x1*x1+b*x1+c x2=int(ox+x1*25) y2=int(oy-y1*25) if k=1 2d_poly_from x2,y2 else 2d_poly_to x2,y2 end_if next x1
if a>0 if delta<0 message "Delta ("+str$(delta)+") est inférieur à zéro: l'équation n'a donc pas de solution !" else x1=(0-b-sqr(delta))/(2*a) x2=(0-b+sqr(delta))/(2*a) maximum=(x1+x2)/2 x3=0-maximum y3=a*maximum*maximum+b*maximum+c
e$="Delta= "+str$(delta)+crlf$+"x1= "+str$(x1)+crlf$+"x2= "+str$(x2)+crlf$+crlf$+"Extremum en ("+str$(maximum)+" ; "+str$(y3)+")" e$=e$+crlf$+crlf$ e$=e$+"Forme canonique: "+str$(a)+"(x" if x3>0 then e$=e$+"+" e$=e$+str$(x3)+")²" if y3>0 then e$=e$+"+" e$=e$+str$(y3) message e$ end_if end_if
while 0=0 x1=mouse_x_position(0) y1=mouse_y_position(0) x1=(x1-ox)/25 y1=(oy-y1)/25 caption 0,"x: "+str$(x1)+", y1: "+str$(y1) if scancode=27 then terminate end_while
return
quitter: terminate return
Dernière édition par Pedro Alvarez le Mar 7 Nov 2017 - 20:29, édité 2 fois | |
|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Représentation de fonctions. Mar 7 Nov 2017 - 14:11 | |
| Bonjour Pedro et merci pour le partage. Essayer avec a = 1 ; b = -15 ; c = 50 dont les solutions sont 5 et 10 et voir le tracé : tronqué De même avec a = 1 ; b = -20 ; c = 100 Il est préférable de mettre CLS au début du sous-programme calcul pour un nouveau tracé. Pourquoi tu fais varier x entre -10 et + 10 ? ligne 62 Il est préférable de déterminer d’abord l’intervalle de variation de x pour un tracé lisible. Jette un œil sur ce post Ajoute les tests nécessaires pour que les valeurs contenues dans les MEMO 1, 2 et 3 soient bien des valeurs numériques afin de contrer le petit malin qui donnerait comme valeur pour a (ou b ou c) quelque chose comme « q3+ » Ton code est perfectible et avec un peu de modification, il sera beaucoup plus utile. Bonne continuation. | |
|