begin process at 2010 02 10 00:31:56
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > $DERIVE(EXPRESSION) : FONCTION DÉRIVÉE

$DERIVE(EXPRESSION) : FONCTION DÉRIVÉE


 Information sur la source

Note :
Aucune note
Catégorie :Divers Classé sous :maths, dérivée, derive, mathématique, mathématiques Niveau :Débutant Date de création :07/01/2006 Date de mise à jour :07/01/2006 20:39:13 Vu :19 971

Auteur : HeXoR

Ecrire un message privé
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 Description

Dérive une expression de type ax^m+bx^n+cx^o+... avec a, b, c, etc. et m, n, o, etc. appartenant à IR

exemple : $derive(2x+4) retourne 2
          $derive(7x^4-0.5x^-6) retourne 28x^3+3x^-7

Ne supporte pas encore les multiplications et divisions (et les parenthèses)
Pas d'espace dans l'expression

Source

  • derive {
  • if * !isin $$1 && / !isin $$1 && $chr(40) !isin $$1 && $chr(41) !isin $$1 {
  • tokenize 32 $replace($replace($$1, -, +-, ¹, ^1, ², ^2, ³, ^3), ^+-, ^-)
  • if ($left($$1, 1) == +) tokenize 32 $right($$1, $calc($len($$1) -1))
  • if ($$1 isnum) return 0
  • var %¥ = $numtok($$1, 43)
  • var %? = 0
  • while %? < %¥ {
  • inc %?
  • var %¤ = $gettok($$1, %?, 43)
  • %¤ = $iif($left(%¤, 1) == x, 1) $+ %¤ $+ $iif($right(%¤, 1) == x, ^1)
  • if %¤ !isnum {
  • var %¢ = $remove($gettok(%¤, $numtok(%¤, 120), 120), ^)
  • var %£ = $+(%£, +, $remove($calc(%¢ * $iif($gettok(%¤, 1, 120) != x, $v1, 1)) $+ x^ $+ $calc(%¢ -1), x^0, ^1))
  • }
  • }
  • return $replace($right(%£, $calc($len(%£) -1)), +-, -, 1x, x)
  • }
  • }
derive {
  if * !isin $$1 && / !isin $$1 && $chr(40) !isin $$1 && $chr(41) !isin $$1 {
    tokenize 32 $replace($replace($$1, -, +-, ¹, ^1, ², ^2, ³, ^3), ^+-, ^-)
    if ($left($$1, 1) == +) tokenize 32 $right($$1, $calc($len($$1) -1))
    if ($$1 isnum) return 0
    var %¥ = $numtok($$1, 43)
    var %? = 0
    while %? < %¥ {
      inc %?
      var %¤ = $gettok($$1, %?, 43)
      %¤ = $iif($left(%¤, 1) == x, 1) $+ %¤ $+ $iif($right(%¤, 1) == x, ^1)
      if %¤ !isnum {
        var %¢ = $remove($gettok(%¤, $numtok(%¤, 120), 120), ^)
        var %£ = $+(%£, +, $remove($calc(%¢ * $iif($gettok(%¤, 1, 120) != x, $v1, 1)) $+ x^ $+ $calc(%¢ -1), x^0, ^1))
      }    
    }
    return $replace($right(%£, $calc($len(%£) -1)), +-, -, 1x, x)
  }
}

 Conclusion

Ça fait longtemps que j'ai pas codé sur mIRC, donc je suis sûr que mon code doit être optimisable (peut-être y-a-t-il même des erreurs ?). J'essaierai d'améliorer le code pour pouvoir dériver n'importe quelle expression.

PS : évidemment celui qui n'aime pas les maths n'a rien à faire ici :P


 Historique

07 janvier 2006 20:39:13 :
-

 Sources du même auteur

BOTSPAM SYSTEM DETECTOR / ANTI SPAM
$LONGIF : SIMPLIFIE/CLARIFIE LES IF LONGS ET ENCOMBRANTS
$FACTOR : DÉCOMPOSITEUR DE NOMBRE PREMIER
$GROUPE : FAIRE DES GROUPES
Source avec Zip HEXFS.DLL

 Sources de la même categorie

COMMANDES FANTAISIES ( OP DEOP , VOICE DEVOICE ) ORIGINALES par Orona
Source avec Zip Source avec une capture CORRECTEUR par Orona
Source avec Zip Source avec une capture [DLL] DESSINER COMME LES PICWINS SUR UNE DIALOGBOX (BONUS: J... par uaip
Source avec Zip Source avec une capture [DLL] AJOUT D'UN CONTRÔLE RICHEDIT SCINTILLA SUR LES DIALOG... par uaip
Source avec Zip Source avec une capture WORLDDMT - GESTION DE CAISSE V 1.0 par WorldDMT

Commentaires et avis

Commentaire de dj328i le 07/01/2006 22:47:51

Je vais peut-être paraitre ignorant , mais a quoi sert cette expression ?

Commentaire de HeXoR le 07/01/2006 23:57:35

lol c'est des maths : pour avoir le sens de variation d'une fonction f on calcule sa dérivée f'

Commentaire de PaDa le 08/01/2006 12:11:27

J'ai cru que t'avais fait un énorme truc de dérivation en lisant le titre lol :p

Bon en gros ca marche, mais attention à ton $remove(...,^1) ca renvoie certains résultats faux :
$derive(x^150) > 150x49 au lieu de 150x^149

(le mm pb a planté un quart des scripteurs lors d'un défi y'a deux ans sur sdb héhé...)

Bonne continuation, ca va ptet me remotiver a faire un parser d'expressions littérales en mIRC qui sait ;)

Commentaire de HeXoR le 13/01/2006 19:53:06

ben disons que c'est chaud de faire une fonction qui puisse tout dériver, faut qu'elle prenne en compte parentheses etc. et comme ca fait longtemps qujai pas codé... :/

Commentaire de PaDa le 13/01/2006 21:05:01

c'est du parsing ouaip :)
mais c'est complètement algorithmique la dérivation, c'est pas difficile, c'est surtout très fastidieux.
A l'occase, matte ma source (moche) sur le calcul complexe, ici ou sur sdb, ou mieux la génération d'arbre de sax sur sdb.org.
En combinant ca avec un peu de truc comme tu as fait, on peut dériver bcp de choses je pense.. Juste que y'a du boulot ^^

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

maths [ par KiNdErMaXi ] alias maths.quizz { set %signe $rand($chr(42),$chr(47))maths}alias maths { if ($chr(44) == %signe) || ($chr(46) == %signe) maths.quizz }</tabl Snippet MATHS [ par Zova ] Bon je me suis peut &#234;tre pas foul&#233;, mais je voulai vous montrer un petit tour de maths :] ALT + A (partie aliases) vous mettez le tout et ta


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,515 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales