Forum de Programmation en langage PANORAMIC
Rechercher
 
 

Résultats par :
 


Rechercher Recherche avancée

Mots-clés

Derniers sujets
»  Simuler l’appui d'une touche ou combinaison de touches
Sam 16 Sep - 13:58 par Admin

» Régalez-vous !
Sam 29 Juil - 11:42 par Admin

» Les bienfaits du rire
Ven 7 Juil - 0:04 par Admin

» Derrière chaque beau parleur se cache un magnifique menteur
Ven 7 Juil - 0:01 par Admin

» Carré magique d’ordre 3 à 99 et plus si affinité !
Mer 5 Juil - 3:21 par Admin

» Dessine-moi une étoile
Mar 4 Juil - 17:32 par Admin

»  Equation paramétrique de la super-ellipse
Mar 4 Juil - 17:29 par Admin

»  Exécution des fichiers CPL
Sam 1 Juil - 14:01 par Admin

» Un papa à la page.
Ven 30 Juin - 15:01 par Admin

Octobre 2017
LunMarMerJeuVenSamDim
      1
2345678
9101112131415
16171819202122
23242526272829
3031     

Calendrier Calendrier


Traceur de courbes représentatives des fonctions y = f(x)

Voir le sujet précédent Voir le sujet suivant Aller en bas

Traceur de courbes représentatives des fonctions y = f(x)

Message par Admin le Jeu 26 Jan - 2:26

Traceur de courbes représentatives des fonctions y = f(x)
Le programme utilise EVAL.DLL, développée par Jean_Debord pour évaluer une expression mathématique.
Vous pouvez télécharger cette DLL à partir de la page de Jean_debord :
http://www.unilim.fr/pages_perso/jean.debord/panoramic/panoramic.htm


Code:


rem ============================================================================
rem         Traceur de courbes réprésentatives des fonctions
rem                        Par papydall
rem ============================================================================
rem Utilise "EVAL.DLL", bibliothèque développée par Jean Debord pour évaluer une
rem expression mathématique.
rem Vous pouvez télécharger EVAL.DLL à partir du site de son auteur :
rem    ______________________________________________________________________
rem   |                                                                      |
rem   | http://www.unilim.fr/pages_perso/jean.debord/panoramic/panoramic.htm |
rem   |______________________________________________________________________|

rem ============================================================================
' Opérateurs reconnus par la DLL :
rem + addition
rem - soustraction
rem * multiplication
rem / division
rem \ division entière
rem % modulo
rem ^ exponentiation
rem > décalage à droite
rem < décalage à gauche
rem & AND logique
rem | OR logique
rem $ XOR logique
rem ! NOT logique
rem @ IMP logique
rem = EQV logique
rem ============================================================================
' Ordre de priorité :
rem ! , & , | , $ , = , @ , ^ , +- (plus et moins unaires) , */ , \ , % , < > , +- (addition et soustraction)
rem L utilisation des parenthèses modifie l ordre de priorité : les parenthèses sont prioritaires.
rem ============================================================================
' Variables
rem la DLL peut utiliser jusqu à 26 variables de A à Z.
rem ============================================================================
' Fonctions disponibles dans la DLL
rem abs   : valeur absolue
rem sgn   : signe
rem int   : partie entière
rem sqrt  : racine carrée
rem exp   : exponentielle
rem ln    : logarithme naturel (néperien)
rem log10 : logarithme décimal
rem fact  : factorielle
rem rnd   : nombre aléatoire appartenant à [0,1)
rem deg   : degré ---> radian
rem rad   : radian ---> degré
rem sin   : sinus
rem cos   : cosinus
rem tan   : tangente
rem asin  : arc sinus
rem acos  : arc cosinus
rem atan  : arc tangente
rem atan2 : atan2(y,x) = atan(y/x) dans les 4 quadrants
rem sinh  : sinus hyperbolique
rem cosh  : cosinus hyperboloique
rem tanh  : tangente hyperboloique
rem asinh : sinus hyperbolique inverse
rem acosh : cosinus hyperbolique inverse
rem atanh : tangente hyperbolique inverse
rem gamma : fonction gamma (factorielle généralisée)
rem erf   : error function (distrinution normale)
rem ============================================================================
' Fonctions exportées par la DLL
rem EVAL.DLL exporte 3 fonctions :
rem 1) InitFunc : initialise les fonctions intégrées dans la DLL et rétourne leur nombre
rem    Appellez cette fonction avant d utiliser toute fonction intégrée.
rem 2) SetVariable : Cette fonction affecte une valeur à une variable et rend le
rem    numéro d ordre de la variable (1 pour A, 2 pour B etc)
rem 3) Eval : Cette fonction évalue une expression passée comme chaîne de caractères
rem    et retourne l un des codes d erreur suivant:
rem    0 : aucune erreur
rem    1 : signe inattendu
rem    2 : parenthèses non équilibrées
rem    3 : variable non définie
rem    4 : fonction non définie
rem ============================================================================
' Exemple d'utilisation de la DLL
rem dim x,i%,var$,exp$,result
rem dll_on "eval.dll"
rem i% = dll_call0("InitFunc") : ' initialiser les fonctions  de la DLL
rem var$ = "x"                 : ' définir X comme variable
rem x = 123                    : ' affecter une valeur à la variable X
rem i% = dll_call2("SetVariable",adr(var$),adr(x)) : ' affecter la valeur à la variable
rem exp$ = "cos(x)^2 + sin(x)^2"  : ' définir une expression mathématique sous forme de chaine de caractères
rem i% = dll_call2("Eval", adr(exp$), adr(result)) : ' Evaluer l'expression et affecter le résultat à la variable result
rem i% contient le code erreur (0 si aucune erreur)
rem ============================================================================
rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
rem ============================================================================

Init()
GUI()

end
rem ============================================================================
SUB Init()

    label Clic
    dim x,y,y$,g$,h$,i$,ret%,var$,exp$,err
    dim xe,ye,xmin,xmax,ymin,ymax,largeur,hauteur
    var$ = "x"
    dll_on "eval.dll" : ' Indiquez le chemin d'accès à EVAL.DLL
    ret% = dll_call0("InitFunc")
    width 0,1200: height 0,700
    top 0,(screen_y - height(0))/2 : left 0,(screen_x - width(0))/2
    caption 0,"Traceur de courbes répresentatives des fonctions"
    application_title "Traceur de courbes répresentatives des fonctions"

END_SUB
rem ============================================================================
SUB GUI()

    Container_Fonctions()
    Container_Axes()
    Container_Intervalle()
    Container_Dim_Grafic()
    button  90 :  top 90, 600 : left 90, 50 : font_bold 90 : font_size 90,16
    width 90,100 : caption 90,"Exécuter" : on_click 90,Clic
    button  91 :  top 91, 600 : left 91, 200 : font_bold 91 : font_size 91,16
    width 91,100 : caption 91,"Quitter" : on_click 91,Clic
    button 92 : top 92,600 : left 92,350 : font_bold 92 : font_size 92,16
    width 92,100 : caption 92,"Aide" : on_click 92,Clic
    picture 100  : top 100,20 : left 100,560 : 2d_target_is 100 : print_target_is 100 : hide 100

END_SUB
rem ============================================================================
Clic:

   select number_click
       case 90 : Executer()
       case 91 : Quitter()
       case 92 : Aide()
   end_select

return
rem ============================================================================
SUB Container_Fonctions()

    container 10 : top 10,50 : left 10,20 : width 10,500 : height 10,200
    color 10, 150,150,150 : font_color 10,255,255,255 : font_bold 10
    font_size 10,16 : caption 10,"Fonctions"

    check 11 : parent 11,10 : top 11,40 : left 11,10 :  font_color 11,0,0,255
    color 11, 150,150,150 : caption 11,"  f(x) = "  : mark_on 11
    edit 12 : parent 12,10 : top 12,30 : left 12,20 + width(11) : width 12,370
    font_color 12,0,0,0  : text 12,"cos(x) + sin(sqrt(abs(x)))"

    check 13 : parent 13,10 : top 13,80 : left 13,10 : font_color 13,255,0,0
    color 13,150,150,150 : caption 13," g(x) = " : mark_on 13
    edit 14 : parent 14,10 : top 14,70 : left 14,20 + width(13) : width 14,370
    font_color 14,0,0,0  : text 14,"sin(x)/x"

    check 15 : parent 15,10 : top 15,120 : left 15,10 : font_color 15,0,255,0
    color 15,150,150,150 : caption 15," h(x) = "  : mark_on 15
    edit 16 : parent 16,10 : top 16,110 : left 16,20 + width(15) : width 16,370
    font_color 16,0,0,0  : text 16,"1/x"

    check 17 : parent 17,10 : top 17,160 : left 17,10 : font_color 17,255,255,0
    color 17,150,150,150 : caption 17," i(x) = " : mark_on 17
    edit 18 : parent 18,10 : top 18,150 : left 18,20 + width(17) : width 18,370
    font_color 18,0,0,0 :  text 18,"1 - 2*sin(x)/sinh(x)"

END_SUB
rem ============================================================================
SUB Container_Axes()

    container 20 : top 20,70 + height(10) : left 20,20 : width 20,200 : height 20,100
    color 20, 150,150,150: font_color 20,255,255,255 : font_bold 20
    font_size 20,16 : caption 20,"Axes"
    check 21 : parent 21,20 : top 21,40 : left 21,10 :  font_color 21,0,0,0 : mark_on 21
    color 21, 150,150,150 : caption 21,"  Abscisse (X) " : width 21,150
    check 22 : parent 22,20 : top 22,60 : left 22,10 :  font_color 22,0,0,0  : mark_on 22
    color 22, 150,150,150 : caption 22,"  Ordonnée (Y) " : width 22,170

END_SUB
rem ============================================================================
SUB Container_Intervalle()

    container 40 : top 40,90 + height(10) + height(20) : left 40,20 : width 40,500 : height 40,150
    color 40, 150,150,150 : font_color 40,255,255,255 : font_bold 40
    font_size 40,16 : caption 40,"A tracer sur l'intervalle"
    alpha 41 : parent 41,40 : top 41,40 : left 41,25 : font_bold 41 : font_color 41,0,0,0
    caption 41, "X minimum : "
    edit 42 : parent 42,40 : top 42,30 : left 42,25 + width(41) : font_bold 42
    width 42,60 : font_color 42,0,0,0 : text 42,"-10"

    alpha 43 : parent 43,40 : top 43,70 : left 43,25 : font_bold 43 : font_color 43,0,0,0
    caption 43,"Y minimum : "
    edit 44 : parent 44,40 : top 44,70 : left 44,25 + width(43) : font_bold 44
    width 44,60 : font_color 44,0,0,0 : text 44,"-2"

    alpha 45 : parent 45,40 : top 45,40 : left 45,250 : font_bold 45 : font_color 45,0,0,0
    caption 45, "X maximum : "
    edit 46 : parent 46,40 : top 46,35 : left 46,250 + width(45) : font_bold 46
    width 46,60 : font_color 46,0,0,0 : text 46,"10"

    alpha 47 : parent 47,40 : top 47,70 : left 47,250 : font_bold 47 : font_color 47,0,0,0
    caption 47, "Y maximum : "
    edit 48 : parent 48,40 : top 48,70 : left 48,250 + width(47) : font_bold 48
    width 48,60 : font_color 48,0,0,0 : text 48,"2"

END_SUB
rem ============================================================================
SUB Container_Dim_Grafic()

    container 50 : top 50,70 + height(10)  : left 50,45 + width(20) : width 50,275 : height 50,200-50-50
    color 50, 150,150,150 : font_color 50,255,255,255 : font_bold 50
    font_size 50,16 : caption 50,"Dimensions du graphique"

    alpha 51 : parent 51,50 : top 51,30 : left 51,5 : font_bold 51 : font_color 51,0,0,0
    caption 51, "Largeur (en pixels) : "
    edit 52 : parent 52,50 : top 52,25 : left 52,5+width(51) : font_bold 52
    width 52,50 : font_color 52,0,0,0 : text 52,"600"

    alpha 53 : parent 53,50 : top 53,70: left 53,5 : font_bold 53 : font_color 53,0,0,0
    caption 53, "Hauteur (en pixels) : "
    edit 54 : parent 54,50 : top 54,65 : left 54,5+width(53) : font_bold 54
    width 54,50 : font_color 54,0,0,0 : text 54,"600"

END_SUB
rem ============================================================================
SUB Executer()

    Verification()
    if checked(21) = 1 then Axe_X()
    if checked(22) = 1 then Axe_Y()
    if checked(11) = 1 then y$ = text$(12) : 2d_pen_color 0,0,255 : Tracer(y$)
    if checked(13) = 1 then g$ = text$(14) : 2d_pen_color 255,0,0 : Tracer(g$)
    if checked(15) = 1 then h$ = text$(16) : 2d_pen_color 0,255,0 : Tracer(h$)
    if checked(17) = 1 then i$ = text$(18) : 2d_pen_color 255,255,0 : Tracer(i$)

END_SUB
rem ============================================================================
SUB Verification()

    if (numeric(text$(42)) = 0) or (numeric(text$(44)) = 0)
       message "!!! ERREUR !!!" + chr$(13) + "Vérifiez X-minimum et/ou Y-minimum"
       exit_sub
    end_if

    if val(text$(42)) >= val(text$(46))
       message "!!! ERREUR !!!" + chr$(13) + "X-minimum  doit  être inférieure à X-maximum"
       exit_sub
    end_if

    if (numeric(text$(46)) = 0) or (numeric(text$(48)) = 0)
       message "!!! ERREUR !!!" + chr$(13) + "Vérifiez X-maximum et/ou Y-maximum"
       exit_sub
    end_if

    if val(text$(44)) >= val(text$(48))
       message "!!! ERREUR !!!" + chr$(13) + "Y-minimum  doit  être inférieure à Y-maximum"
       exit_sub
    end_if

    if (numeric(text$(52)) = 0) or (numeric(text$(54)) = 0)
       message "ERREUR !!!" + chr$(13) + "Vérifiez la largeur et/ou la hauteur"
       exit_sub
    end_if

    width 100,val(text$(52))+5 : height 100,val(text$(54))+5 : show 100
'    xc = width(100)/2  : yc = height(100)/2
    xmin = val(text$(42)) : xmax = val(text$(46))
    ymin = val(text$(44)) : ymax = val(text$(48))
    largeur = val(text$(52)) : hauteur = val(text$(54))
    color 100,100,50,20

END_SUB
rem ============================================================================
SUB Quitter()

    if message_warning_yes_no("Vous voulez vraiment quitter ?") = 1 then terminate

END_SUB
rem ============================================================================
SUB Axe_X()

    dim_local p1,y0,i,pas
    pas = largeur / (xmax-xmin)
    y0 = hauteur / (ymax-ymin) : p1 = hauteur + y0 * ymin
    2d_pen_color 200,200,200 : font_color 100,255,255,255 : 2d_fill_color 100,50,20
    2d_line 0,p1,largeur,p1
    for i = 0 to largeur step pas
        2d_line i,p1-5,i,p1+5
        if (xmin+i/pas) <> 0 then print_locate i,p1+10 : print int(0.5+xmin+i/pas)
    next i

END_SUB
rem ============================================================================
SUB Axe_Y()

    dim_local q1,x0 ,i,pas
     pas = hauteur / (ymax-ymin)
    x0 = largeur / (xmax-xmin) : q1 = 0-x0*xmin
    2d_pen_color 200,200,200 : : font_color 100,255,255,255 : 2d_fill_color 100,50,20
    2d_line q1,0,q1,hauteur
    for i = 0 to hauteur step pas
        2d_line q1-5,i,q1+5,i
        if (ymax-i/pas) <> 0 then print_locate q1-15,i-5 : print int(0.5+ymax - i/pas)
    next i

END_SUB
rem ============================================================================
' Passage de coordonnées utilisateur aux coordonnées écran
SUB CU2CE(xr,yr)

    dim_local a1,b1,a2,b2
    a1 = largeur/(xmax-xmin) : b1 = (0-largeur*xmin)/(xmax-xmin)
    a2 = 0 - hauteur/(ymax-ymin) : b2 = (0-hauteur*ymin)/(ymax-ymin)
    xe = a1 * xr + b1 : ye = a2 * yr + b2

END_SUB
rem ============================================================================
SUB Fonction(y$,x)
    dim_local erreur$
    ret% = dll_call2("SetVariable",adr(var$),adr(x))
    ret% = dll_call2("Eval", adr(y$), adr(y))
    select ret%
       case 0 : ' Aucune erreur
       case 1 : erreur$ = "Signe inattendu"
       case 2 : erreur$ = "Parenthèses non équilibrées"
       case 3 : erreur$ = "Division par zéro"
       case 4 : erreur$ = "Variable non définie"
       case 5 : erreur$ = "Fonction non définie"
    end_select
    if ret% <> 0
       message "!!! ERREUR !!!" + chr$(13) + erreur$ + chr$(13) + "dans la fonction" + chr$(13) + y$
       err = 1
    end_if
END_SUB
rem ============================================================================
SUB Tracer(y$)
    err = 0
    Fonction(y$,xmin)
    if err > 0 then end
    CU2CE(xmin,y) : 2d_poly_from xe,ye
    for x = xmin to xmax step pi/180
        Fonction(y$,x) : y = y-(ymin+ymax)
        CU2CE(x,y) : 2d_poly_to xe,ye : display
    next x
END_SUB
rem ============================================================================
SUB Aide()
    dim_local t$,l$
    l$ = chr$(13)
    t$ = " Le programme utilise EVAL.DLL, bibliothèque développée par Jean Debord" + l$
    t$ = t$ + "pour évaluer une expression mathématique." + l$
    t$ = t$ + "Le programme permet de tracer sur le même graphique jusqu'à 4 courbes" + l$
    t$ = t$ + "de couleurs différentes." + l$
    t$ = t$ + "Vous pouvez saisir le texte de vos fonctions dans Fonctions" + l$
    t$ = t$ + "Pour que le programme trace la (ou les) courbe(s) vous devez cocher" + l$
    t$ = t$ + "les CHECKs correspondants." + l$
    t$ = t$ + "Si vous désirez tracer les axes, cocher leur CHECK." + l$
    t$ = t$ + "Vous pouvez modifier les dimensions du graphique ainsi que" + l$
    t$ = t$ + "l'intervalle du tracé dans les EDITs" + l$ + l$
    t$ = t$ + "Les Fonctions disponibles dans la DLL et que vous pouvez utiliser dans ce programme" +l$
    t$ = t$ + "  abs   : valeur absolue " + l$
    t$ = t$ + "  sgn   : signe " + l$
    t$ = t$ + "  int   : partie entière" + l$
    t$ = t$ + "  sqrt  : racine carrée" + l$
    t$ = t$ + "  exp   : exponentielle " + l$
    t$ = t$ + "  ln    : logarithme naturel (néperien)" + l$
    t$ = t$ + "  log10 : logarithme décimal" + l$
    t$ = t$ + "  fact  : factorielle " + l$
    t$ = t$ + "  rnd   : nombre aléatoire appartenant à [0,1)" + l$
    t$ = t$ + "  deg   : degré ---> radian " + l$
    t$ = t$ + "  rad   : radian ---> degré " + l$
    t$ = t$ + "  sin   : sinus" + l$
    t$ = t$ + "  cos   : cosinus" + l$
    t$ = t$ + "  tan   : tangente" + l$
    t$ = t$ + "  asin  : arc sinus " + l$
    t$ = t$ + "  acos  : arc cosinus" + l$
    t$ = t$ + "  atan  : arc tangente" + l$
    t$ = t$ + "  atan2 : atan2(y,x) = atan(y/x) dans les 4 quadrants" + l$
    t$ = t$ + "  sinh  : sinus hyperbolique" + l$
    t$ = t$ + "  cosh  : cosinus hyperboloique " + l$
    t$ = t$ + "  tanh  : tangente hyperboloique" + l$
    t$ = t$ + "  asinh : sinus hyperbolique inverse" + l$
    t$ = t$ + "  acosh : cosinus hyperbolique inverse" + l$
    t$ = t$ + "  atanh : tangente hyperbolique inverse " + l$
    t$ = t$ + "  gamma : fonction gamma (factorielle généralisée)" + l$
    t$ = t$ + "  erf   : error function (distrinution normale)" + l$
    message t$
END_SUB
rem ============================================================================

_________________
Invité, merci d'être passé par ici.
avatar
Admin
Admin

Messages : 68
Date d'inscription : 08/09/2015
Age : 67
Localisation : MOKNINE (Tunisie)

Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com

Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum