Faire une addition ou une multiplication
Fermé
jp
-
10 oct. 2013 à 13:20
Matt 666 Messages postés 38 Date d'inscription jeudi 7 mars 2013 Statut Membre Dernière intervention 28 octobre 2020 - 8 déc. 2013 à 14:37
Matt 666 Messages postés 38 Date d'inscription jeudi 7 mars 2013 Statut Membre Dernière intervention 28 octobre 2020 - 8 déc. 2013 à 14:37
A voir également:
- Faire une addition ou une multiplication
- Formule excel addition - Guide
- Application multiplication - Télécharger - Études & Formations
- Addition hectare are centiare excel - Forum Excel
- Addition et soustraction dans la même formule excel - Forum Excel
- Addition pourcentage excel ✓ - Forum Bureautique
1 réponse
Matt 666
Messages postés
38
Date d'inscription
jeudi 7 mars 2013
Statut
Membre
Dernière intervention
28 octobre 2020
8 déc. 2013 à 14:37
8 déc. 2013 à 14:37
Salut !
Houlà non ! C'est beaucoup plus compliqué que ça !
Aucun langage de prog ne peut comprendre le sens d'une chaîne de caractères (strings quoi). C'est à toi de le guider !
Par exemple si tu gardes les espaces entre les nombres et l'opération (3 x 2.5), faut lui aider à trouver que "3" est un chiffre, que l'espace ne sert qu'à délimiter ce chiffre, que le caractères d'après est un symbole d'opération et ainsi de suite..
Pas simple ton affaire. Mais ça se fait quand même !
Genre ce truc là :
(defun c:calcul (/ lst)
(Setq lst (str->lst (getstring T "\nOperation (ex 3 x 2) : ") " "))
(if (eq (length lst) 3) ;vérifie si la liste est bien composée de 3 entités.
(if (eq (cadr lst) "x") ; Si l'opération est x
(princ (rtos (* (atof (car lst))(atof (last lst)))))
(if (eq (cadr lst) "+") ; Si l'opération est +
(princ (rtos (+ (atof (car lst))(atof (last lst)))))
(if (eq (cadr lst) "-") ; Si l'opération est -
(princ (rtos (- (atof (car lst))(atof (last lst)))))
(if (eq (cadr lst) "/") ; Si l'opération est /
(princ (rtos (/ (atof (car lst))(atof (last lst)))))
)
)
)
)
(princ "\nMauvaise operation.") ; La liste n'est pas composée de 3 entités.
)
(princ)
)
;Sous Programme permettant de transformer une chaine de caractères en liste, avec un séparateur.
(defun str->lst (str sep / pos)
(if (setq pos (stg-sch sep str nil))
(cons (substr str 1 pos)
(str->lst (substr str (+ (strlen sep) pos 1)) sep)
)
(list str)
)
)
;Sous Programme permettant de chercher une chaîne de caractères au sein d'une autre.
(defun stg-sch (pat str start / rslt)
(if (not start)
(setq start 0)
)
(while (and (< start (strlen str))
(not rslt)
)
(setq start (1+ start))
(if (= (substr str start (strlen pat)) pat)
(setq rslt (1- start))
)
)
rslt
)
Attention, ce bout de programme ne fait absolument pas de calcul complexe, juste des opérations simples. Mais ça a le mérite de fonctionne ah aha
Houlà non ! C'est beaucoup plus compliqué que ça !
Aucun langage de prog ne peut comprendre le sens d'une chaîne de caractères (strings quoi). C'est à toi de le guider !
Par exemple si tu gardes les espaces entre les nombres et l'opération (3 x 2.5), faut lui aider à trouver que "3" est un chiffre, que l'espace ne sert qu'à délimiter ce chiffre, que le caractères d'après est un symbole d'opération et ainsi de suite..
Pas simple ton affaire. Mais ça se fait quand même !
Genre ce truc là :
(defun c:calcul (/ lst)
(Setq lst (str->lst (getstring T "\nOperation (ex 3 x 2) : ") " "))
(if (eq (length lst) 3) ;vérifie si la liste est bien composée de 3 entités.
(if (eq (cadr lst) "x") ; Si l'opération est x
(princ (rtos (* (atof (car lst))(atof (last lst)))))
(if (eq (cadr lst) "+") ; Si l'opération est +
(princ (rtos (+ (atof (car lst))(atof (last lst)))))
(if (eq (cadr lst) "-") ; Si l'opération est -
(princ (rtos (- (atof (car lst))(atof (last lst)))))
(if (eq (cadr lst) "/") ; Si l'opération est /
(princ (rtos (/ (atof (car lst))(atof (last lst)))))
)
)
)
)
(princ "\nMauvaise operation.") ; La liste n'est pas composée de 3 entités.
)
(princ)
)
;Sous Programme permettant de transformer une chaine de caractères en liste, avec un séparateur.
(defun str->lst (str sep / pos)
(if (setq pos (stg-sch sep str nil))
(cons (substr str 1 pos)
(str->lst (substr str (+ (strlen sep) pos 1)) sep)
)
(list str)
)
)
;Sous Programme permettant de chercher une chaîne de caractères au sein d'une autre.
(defun stg-sch (pat str start / rslt)
(if (not start)
(setq start 0)
)
(while (and (< start (strlen str))
(not rslt)
)
(setq start (1+ start))
(if (= (substr str start (strlen pat)) pat)
(setq rslt (1- start))
)
)
rslt
)
Attention, ce bout de programme ne fait absolument pas de calcul complexe, juste des opérations simples. Mais ça a le mérite de fonctionne ah aha