Une calculatrice

Soyez le premier à donner votre avis sur cette source.

Vue 6 849 fois - Téléchargée 506 fois

Description

Une caculatrice: Il en existe plus d'une dizaine sur ce site, celle-ci n'est donc qu'une variante. son intérêt réside dans sa fonction unique et très compacte d'intégration des fonctions de calcul fournies par javascript. (Tester avec IE et Opéra)

Source / Exemple :


function operer(signe, rang) {
    if (signe == 'CE' || signe == 'C') {
        memoire1 = "";
        memoire2 = "";
        form12.text2.value = "";
        form12.text1.value = form12.text1.value + '\r';
        vide = true;
        decimale = false;
    }
    else {
        var fonction = new Array(Math.round(form12.text2.value), Math.exp(form12.text2.value), Math.log(form12.text2.value), Math.sqrt(form12.text2.value), Math.tan(form12.text2.value), Math.cos(form12.text2.value), Math.sin(form12.text2.value), eval(form12.text2.value / 100), eval(1 / form12.text2.value), eval(0.017453292519 * form12.text2.value), eval(-1 * form12.text2.value), eval(form12.text2.value * form12.text2.value), Math.ceil(form12.text2.value));
        var texte = new Array(' Arrondi=', ' Exponentielle=', ' Logatithme=', ' Racine carré=', ' Tangente=', ' Cosinus=', ' Sinus=', '%=', ' Inverse=', ' En radian=', ' Opposé=', '²=', ' < ');
        if (form12.text2.value == '') { form12.text2.value = "0"; form12.text1.value += "0"; }
        if (rang < fonction.length) {
            form12.text2.value = fonction[rang];
            form12.text1.value += texte[rang];
            if (form12.text2.value == 'NaN' || form12.text2.value.indexOf('Infinity') != '-1') { decimale = false; vide = true; form12.text1.value += "Opération impossible "; form12.text2.value = ""; memoire2 = ""; memoire3 = ""; }
            if (form12.text2.value != '') form12.text1.value += Math.round(eval(form12.text2.value * 1000000000)) / 1000000000;
        }
        if (form12.text2.value.indexOf('.') != '-1') decimale = true;
        if (memoire2 != '') {
            form12.text2.value = Math.round(Math.pow(eval(memoire2), form12.text2.value) * 1000000000) / 1000000000;
            memoire2 = "";
            if (signe != '=') form12.text1.value += "=" + form12.text2.value;
        }
        if (signe != '' && signe != '=') {
             vide = true;
             decimale = false;
             if (signe == 'xy') {
                 memoire2 = form12.text2.value;
                 form12.text1.value += " Puissance"
                 form12.text2.value = "";
             }
             else {
                 memoire1 += form12.text2.value + signe;
                 form12.text1.value += signe;
                 form12.text2.value = "";
             }
         }
         if (signe == '=') {
             memoire1 += form12.text2.value;
             form12.text2.value = eval(memoire1);
             memoire1 = "";
             if (form12.text2.value == 'NaN' || form12.text2.value == 'Infinity') { form12.text1.innerText += "=Opération impossible"; form12.text2.value = ""; }
             else form12.text1.value += "=" + (Math.round(form12.text2.value * 1000000000)) / 1000000000;
         }
    }
    if (signe == 'C') form12.reset();
}

Conclusion :


Un exemple dans le zip.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_Phoenix35
Messages postés
12
Date d'inscription
lundi 7 mai 2007
Statut
Membre
Dernière intervention
27 mars 2009
-
Bonjour,

Firefox détecte une erreur :
"Erreur : form12 is not defined
Fichier Source : calculatrice.js
Ligne : 17"

Sinon, if(demicale == false) ; if(!demicale) est plus rapide et plus court :)

Comme ça ne marche pas (cf : erreur ci-dessus), je n'ai pas regardé d'autres choses ;)

Je te suggère de créer avec les name et title des input, étant donné qu'ils se répètent ;)
cs_Phoenix35
Messages postés
12
Date d'inscription
lundi 7 mai 2007
Statut
Membre
Dernière intervention
27 mars 2009
-
Je te suggère de créer avec JS* les name
Désolé ^^
cs_lgh
Messages postés
41
Date d'inscription
vendredi 23 mai 2003
Statut
Membre
Dernière intervention
8 avril 2009
-
Merci de la remarque. Ceci étant, il suffit de supprimer le formulaire, modifier les <input name= en <input id= puis remplacer les form12.txt[x].value par document.getElementById('text[x]').innerText. Ne reste plus alors qu'à vider l'aire de texte en dernière ligne de script.
Cela devrait marcher comme ça!
J'attends ta confirmation.
Salut.
cs_Phoenix35
Messages postés
12
Date d'inscription
lundi 7 mai 2007
Statut
Membre
Dernière intervention
27 mars 2009
-
Au vu du nombre énorme d'utilisations de "document.getElementById('text2').innerHTML" (pareil pour text1), je te conseille de mettre en variable.

De plus, ton code foire tout le temps.
9² me retourne NaN (comme toutes les opérations)
le bouton = ne marche pas (eval mal utilisé)

À revoir tout ça ;)
cs_lgh
Messages postés
41
Date d'inscription
vendredi 23 mai 2003
Statut
Membre
Dernière intervention
8 avril 2009
-
Autant pour moi, ce n'est pas innerText mais value qui convient.
Cela devrait marcher!
Sinon je ne vois pas.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.