Glorious Calc

La calculatrice des génies pressés

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonsoir à tous,

je me présente, Lalla 20 ans, étudiant en licence d'informatique à l'Université de Bretagne Occidentale. Je programme depuis que je suis au collège et suis tombé amoureux des UNIX-like en fin de 3e. Depuis que j'ai installé mon premier GNU/Linux à l'époque, je n'ai eu de cesse de chercher à optimiser mon espace de travail. Dans cette quête incessante de l'environnement de travail parfait, j'ai fait face, comme tout le monde, à la question du fond d'écran. Comme chacun sait, notre écran peut afficher un fond d'écran correctement tant que le ratio largeur/hauteur lui correspond (sans entrer dans le détail). C'est pourquoi, lorsqu'un fond d'écran me plait, j'ai besoin d'une calculatrice pour avoir ce précieux ratio. Malheur ! Désespoir ! Soit je dois lancer une calculatrice en GUI soit je dois lancer Python/Ruby/Perl/Awk ! Mais que c'est long pour si peu !

Ainsi est né une idée. De ce besoin est né une calculatrice prête, rapide, accessible en un tour de main pour une personne comme moi qui a toujours un terminal ouvert : Glorious Calc. Son nom ne veut absolument pas dire qu'elle casse des briques avec la tête, mais simplement qu'elle a répondu au besoin exprimé sans concession.


Cette calculatrice s'utilise à même le shell. Les options envoyées au programme sont concaténées et forment, ensemble, la formule à calculer. La syntaxe employée est très proche des mathématiques. On y retrouve les opérateurs usuels : + - * /, l'opérateur puissance : ^ et le modulo : mod. Certaines fonctions sont implémentées en dur dans la calculatrice (voir le README). Ces mêmes fonctions ne nécessitent pas de parenthèses pour être appelées et peuvent, pour certaines, prendre plusieurs paramètres alors séparés par une virgule. Les fonctions ont la plus petite priorité opératoire ! Ce choix a été fait pour réduire au maximum le nombre de parenthèses dans l'expression de la formule à calculer.

Calculons sqrt(5 - 1)

1
2
$ calc sqrt 5 - 1
2

Il est possible, pour les formules les plus conséquentes et les plus répétitives, de créer ses propres fonctions. La syntaxe exige que celles-ci soient créées avant de spécifier la formule à calculer :

f(x) = x + 6
f(7) = 7 + 6 = 13

g(x, y) = x + y
g(1, 2) = 1 + 2 = 3

1
2
3
4
5
$ calc let f x = x + 6 : f 7
13

$ calc let g x y = x + y : g 1, 2
3

Si plusieurs fonctions sont déclarées, chaque déclaration doit être séparée de la prochaine par une virgule. Les fonctions peuvent prendre 0 (une variable en fait) à un nombre potentiellement infini d'arguments.


Cette calculatrice est et restera une calculatrice. J'ai fait en sorte qu'elle soit très puissante, pour ne pas avoir à tout repenser si un jour j'ai besoin de plus. Cependant, elle n'a absolument pas pour vocation d'évoluer et de devenir l'interprète d'un langage de programmation, Python/Ruby/Perl font très bien l'affaire pour des scripts un poil plus complexe que les possibilités de Glorious Calc.

Comme vous vous en doutez ce projet n'est pas terminé, il va falloir entre autres que je rende le code plus propre et plus solide, que je refasse mon parseur et surtout que je complète ma liste de fonctions built-in.

J'espère cependant que ce programme ne sera pas utile qu'à moi. N'hésitez pas à critiquer et proposer des choses.

Bisous

+1 -0
Staff

A titre perso j'ai ça de définit dans mon bashrc:

1
2
3
calc(){
    python3 -c "from math import *; print($*)"
}

ça me permet de faire des calculs simple :

1
2
$ calc "sqrt(5-1)"
2.0

Pour les trucs plus avancé j'ai toujours une instance python qui traine.

Sinon bonne chance, c'est le genre de projet marrant avec des contraintes pas toujours évidentes !

Au passage, comment gère tu les priorité des opérateurs ? comment faire pour calculer sqrt(5) -1 ?

+0 -0
Auteur du sujet

Pour les priorités, y a des parenthèses, tout simplement. Ainsi pour calculer sqrt(5) - 1 tu peux écrire (sqrt 5) - 1. Sinon, pour les opérateurs usuels, c'est comme en maths : ^ prioritaire sur * / et mod prioritaires sur + -.

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte