Aller au contenu

Messages recommandés

Posté(e)

Bonjour !

Le titre résume très bien l'affaire, je ne sais pas si c'est très utile, mais sait-on jamais, peut-être dans un skript complexe... ?

Tout est expliqué dans le code, le voici en spoiler avec un exemple pour ceux ayant la flemme de télécharger ^^:

 

# Fonction Skript pour résoudre des équations à une inconnue du premier degré
# par blueblasterz

# nécéssite les addons :
# - SkQuery, pour le fait que ce soit une fonction
# -

options:
  msgResultat : x = # le message avant le résultat de l'équation

function solv(e: text) :: text:
  broadcast ""
  if {_e} does not contain "=" and "x": # on vérifie que la forme est là (ne capte pas toutes les incohérences : par ex "4x-2=" est accepté, mais renvoie une erreur)
    return "&4ERREUR : l'équation doit être de la forme ax+b=c" # modifiable

  set {_eq::*} to {_e} split by "="
  # broadcast "%{_eq::1}% = %{_eq::2}%"
  if {_eq::1} contains "+": # Si il y a au moins un "+" dans le premier membre de l'équation,
    set {_verif} to first index of "+" in {_eq::1} # on regarde la place du premier "+"
    if {_verif} is smaller than 2: # c'est à dire si c'est le premier charactère (on vérifie au cas où)
      # broadcast "+ en première place !" # débug
      set {_temp::*} to {_eq::1} split by "" # on split completement le message
      set {_temp2} to "" # éviter un <none> 4 lignes plus bas
      set {_temp3} to 1 # compteur
      loop size of {_temp::*}-1 times: # on loop une fois de moins que le nombre de charactère du premier message
        set {_temp3} to {_temp3}+1 # compteur
        set {_temp2} to "%{_temp2}%%{_temp::%{_temp3}%}%" # ainsi le premier charactère est éliminé (c'était un "+" inutile qui ferai bugger plus tard)
      set {_eq::1} to {_temp2}
      if {_eq::1} contains "+": # vérif obligatoire, savoir si b est positif ou négatif
        set {_Ma::*} to {_eq::1} split by "+" # pour séparer ax et b
        if size of {_Ma::*} is greater than 2: # si le premier charactère est "+" ou "-", on aurai 3 "cases". Cette vérification est faites pour chaques cas, meme si dans certains elle est inutile
          set {_Ma::1} to "%{_Ma::1}%%{_Ma::2}%" # la première "case" est égales aux anciennes 2 premières
          set {_Ma::2} to {_Ma::3} #et la 2eme est égale à la troisieme
        set {_Ma::2} to "+%{_Ma::2}%" #sinon risque de bug au moment du calcul (pas de différence entre positif et négatif)
        # broadcast "ax = %{_Ma::1}% ; b = %{_Ma::2}%"
      else: # eq::1 contains "-"
        set {_Ma::*} to {_eq::1} split by "-" # exactement le même principe que plus haut, aucune différence sinon le signe utilisé
        if size of {_Ma::*} is greater than 2:
          set {_Ma::1} to "%{_Ma::1}%%{_Ma::2}%"
          set {_Ma::2} to {_Ma::3}
        set {_Ma::2} to "-%{_Ma::2}%"
    else:

      set {_Ma::*} to {_eq::1} split by "+"
      if size of {_Ma::*} is greater than 2:
        set {_Ma::1} to "%{_Ma::1}%%{_Ma::2}%"
        set {_Ma::2} to {_Ma::3}
      set {_Ma::2} to "+%{_Ma::2}%"
      # broadcast "ax = %{_Ma::1}% ; b = %{_Ma::2}%"
  else: #eq::1 contains "-"
    set {_verif} to first index of "-" in {_eq::1}
    if {_verif} is smaller than 2:
      # broadcast "- en première place !"
      set {_temp::*} to {_eq::1} split by ""
      set {_temp2} to ""
      set {_temp3} to 0
      loop size of {_temp::*}-1 times:
        set {_temp3} to {_temp3}+1
        set {_temp2} to "%{_temp2}%%{_temp::%{_temp3}%}%"
      set {_eq::1} to {_temp2}
      set {_Ma::*} to {_eq::1} split by "-"
      if size of {_Ma::*} is greater than 2:
        set {_Ma::1} to "%{_Ma::1}%%{_Ma::2}%"
        set {_Ma::2} to {_Ma::3}
      set {_Ma::1} to "-%{_Ma::1}%"
      set {_Ma::2} to "-%{_Ma::2}%"
      # broadcast "ax = %{_Ma::1}% ; b = %{_Ma::2}%"
    else:
      set {_Ma::*} to {_eq::1} split by "-"
      if size of {_Ma::*} is greater than 2:
        set {_Ma::1} to "%{_Ma::1}%%{_Ma::2}%"
        set {_Ma::2} to {_Ma::3}
      set {_Ma::2} to "-%{_Ma::2}%"
      # broadcast "ax = %{_Ma::1}% ; b = %{_Ma::2}%"

  set {_temp::*} to {_Ma::1} split by "x" # pour obtenir a tout seul
  set {_a} to {_temp::1}
  if {_a} is "" or "-": # dans le cas où a n'est pas écrit ("x" ou "-x")
    set {_a} to "%{_a}%1" # on conserve l'éventuel "-" et on ajoute 1, pour que a soit bien un nombre
  set {_b} to {_Ma::2} # plus de lisibilité
  set {_c} to {_eq::2} # pareil
  set {_x} to ({_c} parsed as number - {_b} parsed as number)/{_a} parsed as number # résolution de l'équation, maintenant qu'on a séparé tout les chiffres
# démonstration de la résolution :
# ax + b = c
# ax = c - b
# x = (c - b)/a
# si vous n'avez rien compris à ces lignes, c'est que n'avez pas encore finis le collège, dans ce cas là n'y faites pas attention ^^

  # broadcast "" # débug
  # broadcast "%{_a}%x %{_b}% = %{_c}%" # débug

  return "{@msgResultat} %{_x}%" # on retourne le résultat sous la forme définie dans les options



# exemple d'appel de la fonction
command /eq <text>:
  trigger:
    set {_msg} to solv("%arg%")
    message "%{_msg}%"
    stop

 

 

EDIT : voici quelques exemples de forme que l'équation peut prendre :

2x + 1 = 5

-5x +6 = -2

-x -4 = 2

x + 1 = 0

Vous envoyez ceci en paramètre de la fonction en faisant :

set {variableTexte} to solv("2x+1=5")

Et le tour est joué, la {variableTexte} contient la valeur de x selon cette fonction.

Par défaut de la forme "x = ...", modifiable dans les options.

 

Il n'y a besoin que de SkQuery, pour le fait que ce soit une fonction.

Vous pouvez l'adapter comme vous voulez :)

 

Voilà voilà :D

 

Blueblasterz

  • J'aime 2
Posté(e)
Merci pour ce Skript :)

 

Par contre, le bleu de ton écriture fait mal aux yeux

Tu trouves ?? Pire que le orange de Snowach ?? ;) Mais c'est un peu ma marque de fabrique, dans les topics dont je suis le créateur j'écris en bleu comme ça on repère bien ^^ Et merci de... tes remerciements :)

 

Il ne faut pas d'ADD-ONS. Il faut Skript 2.2.

Il me semble qu'il faut SkQuery pour faire des fonctions du type de ce que j'ai fais, non ?

Posté(e)
Tu trouves ?? Pire que le orange de Snowach ?? ;) Mais c'est un peu ma marque de fabrique, dans les topics dont je suis le créateur j'écris en bleu comme ça on repère bien ^^ Et merci de... tes remerciements :)

 

 

Il me semble qu'il faut SkQuery pour faire des fonctions du type de ce que j'ai fais, non ?

Non pas besoin de SkQuery. Beaucoup de personnes pensent que c'est SkQuery qui gère les fonctions mais non. C'est Skript 2.2

  • J'aime 1

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.