π
<-
Chat plein-écran
[^]

News 2024
Mai (1)

News 2023
Juin (2)
Avril (1)
Mars (2)

News 2022
Juin (4)
Mai (4)
Avril (4)
Mars (3)

News 2021
Août (5)
Juin (1)
Mai (3)
Avril (12)
Mars (4)

News 2020
Août (1)
Juin (2)
Mai (2)
Avril (7)
Mars (4)

News 2019
Août (1)
Juin (1)
Mai (3)
Avril (7)
Mars (10)

News 2018
Août (3)
Juin (3)
Mai (8)
Avril (13)
Mars (5)

News 2017
Août (1)
Mai (10)
Avril (3)
Mars (4)

News 2016
Août (12)
Juin (8)
Mai (12)
Avril (7)
Mars (9)

News 2015
Août (11)
Juin (6)
Mai (10)
Avril (2)
Mars (6)

News 2014
Octobre (12)
Août (4)
Juin (13)
Mai (14)
Avril (12)
Mars (15)

News 2013
Octobre (30)
Août (14)
Juin (27)
Mai (12)
Avril (29)
Mars (19)
Janvier (27)

News 2012
Octobre (37)
Août (40)
Juillet (27)
Juin (19)
Mai (35)
Avril (34)
Mars (42)
Janvier (46)

News 2011
Octobre (22)
Août (23)
Juillet (14)
Juin (29)
Mai (44)
Avril (24)
Mars (27)

News 2010
Août (6)
Juillet (10)
Juin (4)
Mai (1)
Avril (2)
Mars (1)

News 2009
Juin (1)

L'épopée du fameux PP08

Nouveau messagede Excale » 19 Mai 2013, 23:18

Bonjour à tous,

Suite à ma participation au concours Palprem qui allait étrangement trop vite par rapport à ce qu'il est possible de faire en Basic, beaucoup de personnes m'ont demandé d'expliquer comment j’avais fait pour calculer si rapidement le 5000è palindrome premier.

La réponse est pourtant simple, j'ai utilisé ndless.
Le classeur est en fait un programme ndless qui va lui-même ouvrir un "vrai" classeur Nspire.

En pratique voilà ce qu'il se passe:
  • L'utilisateur ouvre le faux classeur, qui est en fait un programme ndless
  • Le programme copie le vrai classeur dans un fichier bidon
  • Le programme demande à l'OS d'ouvrir le classeur bidon en question
  • Le programme va créer un hook dans la fonction qui évalue une expression mathématique (c'est à dire qu'il prend la main dans cette fonction, fait quelque chose, et laisse la fonction continuer à s’exécuter normalement).
  • L'utilisateur voit un classeur Nspire ouvert
  • Il tape palprem(42)
  • L'OS arrive dans la fonction qui évalue l'expression mathématique, ce qui donne la main à mon programme
  • Le programme regarde si l'expression rentrée est de la forme palprem(nombre) (si il ne trouve pas ça, il ne fait rien et redonne la main à l'OS qui va évaluer le calcul)
  • Si il trouve le motif, il récupère le nombre et calcule le nombrième palindrome premier, et ce bien plus rapidement qu'en Basic
  • Le programme place ensuite le nombrième palindrome à la place de "palprem(nombre)", et redonne la main à l'OS
  • L'OS se retrouve alors avec un nombre à évaluer, et renvoie tout simplement ce nombre
  • L'utilisateur voit ce nombre et va alors pouvoir l'utiliser pour.... (zut, ça sert à quoi les palindromes premiers?)

Le code pour ceux que ça intéresse:
Show/Hide spoilerAfficher/Masquer le spoiler
Quelques définitions dont l'adresse du hook
Code: Tout sélectionner
#include <os.h>
#include <libndls.h>
#include <stdint.h>
#include <inttypes.h>

static const unsigned int addr_exdoc_openclass[] = {0x10009B48, 0x10009B20, 0x10009AE8, 0x10009AE8};
#define EXDOC_OPENCLASS ((int(*)(char*, char*, int))nl_osvalue((int*)addr_exdoc_openclass, sizeof(addr_exdoc_openclass)/sizeof(addr_exdoc_openclass[0])))
static const unsigned int hook_addr_newclass[] =   {0x10027558, 0x100274C4, 0x10026C54, 0x10026BEC};
#define HOOK_NEWCLASS nl_osvalue((int*)hook_addr_newclass, sizeof(hook_addr_newclass)/sizeof(hook_addr_newclass[0]))
static const unsigned int hook_addr_calc[] =       {0x1006CBBC, 0x1006CAEC, 0x1006C2B8, 0x1006C210};
#define HOOK_ADDR_CALC nl_osvalue((int*)hook_addr_calc, sizeof(hook_addr_calc)/sizeof(hook_addr_calc[0]))

Le "vrai" classeur, qu'on inclut directement dans le binaire
Code: Tout sélectionner
extern void* __file_start__;
extern void* __file_end__;
asm(".globl __file_start__          \n"
    ".globl __file_end__            \n"
    "__file_start__:                \n"
    ".incbin \"palprem_class.tns\"  \n"
    "__file_end__:                  \n");

Code pour trouver le n-ième palindrome premier. Adapté de : http://www.programmingsimplified.com/c/source-code/c-program-find-next-prime-palindrome
Code: Tout sélectionner
uint32_t palprime(uint32_t m)
{
    uint32_t n, t, r = 0, c, z = 0;

    if(m<=5)
    {
        const int y[] = {0,2,3,5,7,11};
        return y[m];
    }
    else
    {
        n = 101-2;
        z = 5;
    }

    while(z<m)
    {
        printf("%" PRId32 " %" PRId32 "\n",z,n);
        while (TRUE)
        {
            n+=2;
            t = n;

            /* Calculating reverse of number */

            while(t)
            {
                r *= 10;  /* Compound assignment operator r*=10 => r=r*10 */
                r += t%10;
                t /= 10;
            }

            /* if reverse equals original then it is palindrome */

            if (r == n)
            {
                /* Checking prime */

                if ((n%2 == 0) || (n%3 == 0) || (n%5 == 0))
                goto suite;
                c = 7;
                while( c*c<=n)
                {
                    if ((n%c == 0) || (n%(c+4) == 0))
                    break;
                    c+=6;
                }
                if (c*c>n)
                break;
            }
            suite:
            r = 0;
        }
        z++;
    }

    return n;
}

Ce bout permet d'enlever le hook quand on quitte le classeur
Code: Tout sélectionner
HOOK_DEFINE(newclass) {

    HOOK_UNINSTALL(HOOK_ADDR_CALC, calc_change);
    HOOK_UNINSTALL(HOOK_NEWCLASS , newclass);
    HOOK_RESTORE_RETURN(newclass);
}

Vérifie si l'utilisateur a tapé palstring(nombre), et appelle si besoin palprime()
Code: Tout sélectionner
char resultstring[0x100];
const unsigned char palstring[] = {0x70, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x70, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6D, 0x00, 0x28, 0x00};

HOOK_DEFINE(calc_change) {

    char* calcul = (char *) HOOK_SAVED_REGS(calc_change)[2];
    if( !memcmp( calcul, &palstring, sizeof(palstring) ) )
    {
        uint32_t input = 0;
        int offset = 0;
        unsigned char currentn = calcul[sizeof(palstring)];
        while( currentn>=0x30 && currentn<=0x39 )
        {
            input = input*10 + (currentn-0x30);
            offset+=2;
            currentn = calcul[sizeof(palstring)+offset]; 
        }
        if( offset!=0 && calcul[sizeof(palstring)+offset]==')' && calcul[sizeof(palstring)+offset+2]==0)
        {
            uint32_t result = palprime(input);
            char resultstringbuf[0x80];
            memset(resultstring   , 0x0, 0x100);
            memset(resultstringbuf, 0x0, 0x80);
            sprintf(resultstringbuf, "%" PRId32 "", result);
            int i;
            for( i=0; i<0x80; i++ )
            {
                resultstring[2*i] = resultstringbuf[i];
            }
            HOOK_SAVED_REGS(calc_change)[2] = (int) resultstring;
        } else
        {
            HOOK_SAVED_REGS(calc_change)[2] = (int) palstring;
        }
    } else
    {
        int i;
        for( i=0; i<0x100; i++ )
        {
            if( calcul[2*i]=='p' && !memcmp( calcul+2*i, &palstring, sizeof(palstring)-2 ))
            {
                HOOK_SAVED_REGS(calc_change)[2] = (int) palstring;
                break;
            }
        }
    }
    HOOK_RESTORE_RETURN(calc_change);
}

Ouvre le classeur et définit les hooks.
Code: Tout sélectionner
int main()
{
   nl_set_resident();
    FILE *tns_file;
    tns_file = fopen("/logs/palprem.tns","wb");
    fwrite (&__file_start__ , sizeof(char) , 4*(&__file_end__-&__file_start__), tns_file );
    fclose(tns_file);
    EXDOC_OPENCLASS("/logs","palprem.tns",1);
    HOOK_INSTALL(HOOK_ADDR_CALC, calc_change);
    HOOK_INSTALL(HOOK_NEWCLASS, newclass);
    return 0;
}

Je suis ouvert à toutes questions si besoin :).

...et si vous voulez télécharger le programme, c'est par ici: http://tiplanet.org/forum/archives_voir.php?id=14699
Lien vers le sujet sur le forum: L'épopée du fameux PP08 (Commentaires: 6)

Attention aux batteries TI-Nspire CX noires qui gonflent...

Nouveau messagede critor » 23 Mai 2013, 10:04

Depuis 2 ans, je suis très satisfait de la qualité des batteries TI-Nspire CX.

Je n'ai quasiment jamais de batterie à plat puisqu'elle se recharge dès que la calculatrice est connectée à l'ordinateur en USB! :bj:
Le temps que je passe donc à faire des transferts de fichiers leur suffit ;)

En fait, j'oublie quasiment l'existence de la batterie! :D

Et je n'ai constaté aucune diminution de capacité avec le temps non plus. :=):



La TI-Nspire est munie au dos de patins anti-dérapants, qui bloquent tout glissement une fois qu'elle est posée sur une surface plane.

Mais aujourd'hui, qu'arrive-t-il à ma TI-Nspire CX CAS qui une fois posée, avec une simple pichenette sur le côté se retrouve de l'autre côté de la table?... :o

2584


Apparemment je n'ai perdu aucun patin anti-dérapant...
Mais en zoomant sur cette image, vous observez avec effroi que le compartiment batterie est bombé... les patins anti-dérapants ne sont donc plus en contact avec la table et c'est sur ce compartiment que la Nspire me fait des acrobaties...

Aille aille aille... Possesseur de téléphones ou ordinateurs portables, vous commencez sans doute à deviner ce qui m'attend... avec souvent la première chose qui tombe en panne sur ces appareils...

Retirons une vis... le coin du couvercle se dresse littéralement, et je rappelle que ce couvercle n'est pas muni de ressort:
2583


Retirons la 2ème vis... le couvercle saute littéralement tout seul:
2582
(photo réalisée sans trucage)




Allez, prenons notre courage à deux mains et jetons un coup d'oeil au désastre:
2580 2581


Oui, ma batterie TI-Nspire a gonflé... :(
Il s'agit ici d'une batterie TI-Nspire noire 1060mAh, la batterie fournie d'origine avec les TI-Nspire CX.
La batterie a pour datestamp G-0411, ce qui indique une fabrication en avril 2011 dans l'usine 'G'. J'en ai apparemment une 2ème souffrant du même problème avec un datestamp G-0211 pour février 2011 donc.

La TI-Nspire CX ayant été lancée pour la rentrée de septembre 2011, on est parmi les premières batteries produites.

Notons toutefois que c'est, à ce jour, le seul symptôme. La TI-Nspire CX continue de s'allumer et la batterie continue de tenir la charge sans anomalie visible dans le contexte de mon utilisation.



Comparons avec des batteries identiques en bonne santé - on voit clairement la différence:
2577 2578 2575


Faisons 3 piles de 5 batteries, la pile avec la batterie gonflée semble être plus haute d'1 batterie par rapport aux autres:
2579


Ma batterie aurait donc doublé d'épaisseur...



Rien d'effrayant à posteriori, je pense que l'on est dans les taux de défaillance/vieillissement normaux des batteries, tous appareils confondus. J'ai déjà eu des batteries qui ont gonflé et/ou coulé sur des téléphones ou ordinateurs portables, parfois même dans leur première année...

Toutefois si vous avez des concours ou examens bientôt et que votre calculatrice est au moins dans sa 2ème année de vie, je vous conseille de la vérifier avant.

Il ne faudrait pas en effet que vous tombiez en panne le jour J! ;)

Deux méthodes de diagnostique sont possibles:
  • Calculatrice posée sur une surface plane, appuyez dessus et tentez de forcer un déplacement latéral: la calculatrice doit opposer une forte résistance grâce à ses patins anti-dérapants. Si ce n'est pas le cas, c'est qu'elle glisse sur son couvercle de batterie bombé...
  • Retirez la batterie, posez-la sur une surface plane et tentez de voir si vous arrivez à la balancer en exerçant un couple de forces sur les coins opposés ou pas.



Si vous avez de tels symptômes, le service client TI-Cares saura évaluer si il y a défaillance de votre batterie ou pas, et si vous êtes couverts par la garantie pour cette panne ou non.
Lien vers le sujet sur le forum: Attention aux batteries TI-Nspire CX noires qui gonflent... (Commentaires: 19)

Primitives et Intégrales étape par étape sur ta Nspire CAS

Nouveau messagede critor » 25 Mai 2013, 22:49

Je vous avais déjà réalisé des classeurs TI-Nspire d'un genre nouveau, destinés non pas à produire des résultats mais des raisonnements prêts à être recopiés.

On peut citer:
  • SD2 qui vous calcule les dérivées étape par étape
  • SIPP pour les intégrations par partie (qui ne sont plus au programme du lycée depuis la rentrée 2012)
Image




Vous avez été très nombreux à demander un programme similaire pour les primitives et intégrales, et il vous a souvent été répondu sur notre chat ou notre forum, soit que cela n'existait pas, soit que c'était impossible... :(

Mais je déteste le mot 'impossible', et ce soir je fais donc mentir certains de mes collaborateurs en sortant mon nouveau programme SINT avec un algorithme de ma composition! :bj:



Avec la suppression de l'intégration par parties, hors fonctions de références tous les cas de primitives/intégrales demandés au lycée peuvent se ramener désormais soit à une somme, soit à une composée de fonctions.

J'ai donc développé un algorithme en conséquence qui devrait gérer tous les cas vus au lycée! :bj:
Et comme de plus les composées de fonctions ont été un peu 'allégées' dans le nouveau programme, il pourra même continuer de vous servir dans l'enseignement supérieur! ;)



Le voici en pleine action! :D
Image


Pour l'utiliser, vous devrez être munis d'une TI-Nspire CAS au minimum en version 3.2.



Bonne réussite avec SINT! ;)




Lien:
SINT: Super Intégrales étape par étape (pour TI-Nspire CAS avec OS 3.2)
Lien vers le sujet sur le forum: Primitives et Intégrales étape par étape sur ta Nspire CAS (Commentaires: 4)

Nouvel mViewer 4 utilisable direct dans tes classeurs Nspire

Nouveau messagede critor » 26 Mai 2013, 21:11

Vous êtes nombreux à avoir adopté mViewer en tant que lecteur d'images sur votre TI-Nspire.
Image


Contrairement au lecteur intégré de TI, mViewer a l'avantage de vous permettre de zoomer et scroller les images en question! :bj:
Le support direct des images BMP / PNG / JPEG de ton ordinateur nous a amenés à une autre utilisation, la lecture de documents:
Image


Tout document PDF / Word / OpenOffice peut être ainsi exporté en tant qu'images et lu sur ta TI-Nspire! :bj:
Tout est donc envisageable à partir de là: cours, formulaires, exercices-type résolus, annales corrigées... ;)



Vous avez souvent formulé des souhaits sur des évolutions futures de mViewer.

Notamment vous trouviez, et avec raison, qu'il était pénible de consulter un document mViewer et de dérouler des calculs en parallèle...

En effet, à chaque fois que vous vouliez utiliser mViewer vous deviez:
  • enregistrer le document courant (ce qui prenait du temps...)
  • fermer le document courant
  • aller chercher et ouvrir le fichier mViewer et/ou l'image à ouvrir

Et inversement, à chaque fois que vous vouliez reprendre vos calculs vous deviez:
  • fermer mViewer
  • aller chercher le bon document enregistré et l'ouvrir



L'idéal serait d'utiliser deux calculatrices TI-Nspire en parallèle...
2586


... ce qui est interdit aux examens et concours, le nombre de calculatrices utilisables simultanément étant limité à 1 depuis 1999.




Continuant sur la même lancée que la révolution de la news précédente, Excale et moi-même avons l'honneur de vous présenter ce soir le tout premier programme Ndless utilisable directement dans vos classeurs TI-Nspire, mViewer 4.0! :bj:

mViewer 4.0 est en effet muni d'un module résident optionnel (en anglais TSR pour "Terminate and Stay Resident").
Son installation nécessite l'enregistrement du programme dans le dossier de démarrage de Ndless "/ndless/startup" et le redémarrage de la calculatrice. Sans cela, mViewer 4.0 fonctionnera exactement comme les versions précédentes et vous n'êtes donc nullement obligés d'utiliser ce module. ;)

Le module résident intercepte les expressions passées à l'évaluateur et permet de réagir en conséquence, selon la technique récemment utilisée et décrite par Excale.

Il vous suffira par exemple de taper l'expression mv() dans n'importe quelle zone pouvant recevoir une expression à évaluer afin de lancer mViewer! :)
Oui, plus besoin d'interrompre vos calculs et d'enregistrer/fermer le document courant avant de consulter une image avec mViewer! ;)
Vous pouvez invoquer mViewer de partout!
  • depuis le brouillon/scratchpad
  • depuis l'application calculs
  • depuis l'application tableur et listes
  • ...

En prime, mViewer démarre désormais par défaut dans le dossier de la dernière image que vous avez ouverte! :)
Cela vous permettra d'accéder ainsi plus rapidement à votre banque d'images ou de naviguer plus rapidement entre les différentes pages d'un même document! ;)

Et pour couronner le tout, si au lieu de taper mv() vous tapez mvl(), mViewer ouvrira directement et automatiquement la dernière image consultée! :)
Voilà enfin de quoi vous permettre un bien meilleur confort lorsque en parallèle vous consultez un document et menez des calculs! ;)



Bascule désormais en seulement quelques touches entre ton document Nspire et le programme Ndless mViewer:




mViewer 4.0, la nouvelle génération de programmes Ndless qui s'intègrent aux documents TI-Nspire démarre ce soir sur TI-Planet! :bj:




Lien:
mViewer CX 4.0
Lien vers le sujet sur le forum: Nouvel mViewer 4 utilisable direct dans tes classeurs Nspire (Commentaires: 44)

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1044 utilisateurs:
>986 invités
>53 membres
>5 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)