π
<-

News 2025
January (14)

News 2024
October (12)
August (9)
July (10)
June (20)
May (14)
April (16)
March (7)
January (20)

News 2023
October (19)
August (14)
July (13)
June (21)
May (29)
April (24)
March (24)
January (24)

News 2022
October (23)
August (14)
July (15)
June (17)
May (31)
April (27)
March (28)
January (34)

News 2021
October (24)
August (37)
July (50)
June (32)
May (48)
April (61)
March (35)
January (34)

News 2020
October (17)
August (43)
July (43)
June (45)
May (60)
April (78)
March (36)
January (39)

News 2019
October (13)
August (18)
July (23)
June (28)
May (31)
April (26)
March (38)
January (37)

News 2018
October (13)
August (32)
July (23)
June (64)
May (63)
April (45)
March (43)
January (45)

News 2017
October (26)
August (39)
July (52)
June (88)
May (51)
April (43)
March (37)
January (33)

News 2016
October (25)
August (42)
July (34)
June (109)
May (55)
April (34)
March (37)
January (24)

News 2015
October (22)
August (56)
July (22)
June (94)
May (56)
April (32)
March (40)
January (21)

News 2014
October (26)
August (18)
July (23)
June (101)
May (57)
April (59)
March (54)
January (31)

News 2013
October (67)
August (50)
July (43)
June (193)
May (93)
April (102)
March (45)
January (50)

News 2012
October (64)
August (63)
July (53)
June (132)
May (88)
April (73)
March (57)
January (58)

News 2011
October (56)
August (31)
July (27)
June (71)
May (61)
April (32)
March (36)
January (24)

News 2010
October (11)
August (8)
July (14)
June (10)
May (3)
April (3)
March (1)

News 2009
August (3)
July (1)
June (2)
May (1)
April (2)
March (1)

L'épopée du fameux PP08

New postby Excale » 19 May 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: Select all
#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: Select all
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: Select all
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: Select all
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: Select all
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: Select all
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
Link to topic: L'épopée du fameux PP08 (Comments: 6)

Initiation au BASIC en dessin animé

New postby critor » 20 May 2013, 12:05

Dans une news précédente, nous te proposions un nouveau concours TI-Planet pour gagner une TI-Nspire CX mais aussi une TI-84 Plus C Silver Edition, avec une chasse au trésor Dragon Ball Z sur Internet dans le contexte de la programmation en langage BASIC! :bj:
2570 2572


Le BASIC fut un langage de programmation de référence dans les années 70-80, et il fut fourni d'origine sur la plupart des ordinateurs 8-bits et 16-bits des années 80-90.

Alors certes, nombre d'entre vous n'y êtes probablement pas familiarisés, mais nous allons y remédier de suite afin de vous donner les meilleures chances de gagner! :bj:



Peut-être plusieurs d'entre vous ont vu ou entendu parler des dessins animés de vulgarisation scientifique et historique "Il était une fois..." d'Albert Barillé, personnage qui nous a hélas quittés en 2009.
L'Homme, l'Espace, la Vie, les Amériques, les Explorateurs, les Découvreurs, notre Terre... De 1978 à 2008, pas moins de 7 séries vous ont compté les aventures de Maestro, Pierrot, Psi...



Ce qui est moins connu, c'est que dès 1983, les japonais ont répliqué avec un dessin animé du même style, "Ordy ou les grandes découvertes".

127 épisodes furent produits mais seulement 52 diffusés en France.

Ordy, petite créature rose, sort de l'ordinateur de deux frère et soeur japonais de 8-9 ans, et leur explique tout un tas de choses sur l'histoire et la science, pouvant à loisir projeter des images des événements en question et même y téléporter les enfants.

Des épisodes 9 à 12 nous avons droit à une petite séquence d'aventures sur les ordinateurs, et dans l'épisode 10 on a même le droit à un mini tutoriel de programmation utilisant le langage BASIC, et couvrant les instructions d'entrée, d'affectation et de sortie! :bj:

Les épisodes sont disponibles en français en bonne qualité sur DailyMotion, mais dans une version où les caractères japonais ont été censurés; soit tout simplement effacés, soit remplacés par de l'anglais surimprimé dans une police inappropriée faisant assez amateur.
Et dans le cas de nos programmes BASIC, c'est assez embêtant...

Et bien je vous offre l'extrait original non saccagé que je viens de numériser depuis une vieille cassette VHS:




Tu as maintenant les bases du langage BASIC, alors viens-vite participer à notre concours Dragon Ball Z! :bj:
Image




Liens:
Concours TI-Planet 2013: Chasse au Trésor Dragon Ball Z
Ordy ou les grandes découvertes - épisode 9 "les ordinateurs" - partie 1
Ordy ou les grandes découvertes - épisode 9 "les ordinateurs" - partie 2
Ordy ou les grandes découvertes - épisode 10 "les ordinateurs" - partie 1
Ordy ou les grandes découvertes - épisode 10 "les ordinateurs" - partie 2
Ordy ou les grandes découvertes - épisode 11 "les ordinateurs" - partie 1
Ordy ou les grandes découvertes - épisode 11 "les ordinateurs" - partie 2
Ordy ou les grandes découvertes - épisode 12 "les ordinateurs" - partie 1
Ordy ou les grandes découvertes - épisode 12 "les ordinateurs" - partie 2
Link to topic: Initiation au BASIC en dessin animé (Comments: 17)

Le nouveau fx-CP 400 aura les modes portrait et paysage !

New postby critor » 20 May 2013, 17:43

Dans une news précédente, nous te proposions de survoler les fonctionnalités logicielles et mathématiques du nouveau ClassPad II fx-CP400 que Casio prévoit pour la rentrée 2013.

Matériellement, il sera doté d'un écran 4,8 pouces en 320x528 pixels, contre 3,6 pouces en 160x240 pixels pour ses prédécesseurs les Casio ClassPad 300/330.

Il conserve l'écran tactile de ses prédécesseurs, rendant nombre de manipulations intuitives et enfantines via de simples toucher/glisser. :bj:
Image


Une nouveauté déjà annoncée par rapport à ses prédécesseurs est son écran couleur! :bj:

Image




Ce format d'écran portrait est assez inhabituel pour une calculatrice, et peut-être est-ce une des raisons qui a limité le succès de ses prédécesseurs.

Et bien Casio a cette fois-ci tout prévu avec un nouveau bouton 'Rotate' (rotation):
Image


Une toute petite pression et tu bascules instantanément du mode portrait vers un mode paysage 528x320 explosant littéralement tous les écrans de calculatrices actuels! :bj:
Image




Source:
https://edu.casio.com/products/classpad/cp2/index.html
In a previous news, we were showing you the mathematical and software features of the new ClassPad II fx-CP400 which Casio plans for back to school 2013.

Physically, it will have a 4.8 inch 320x528 pixels screen, against a 3.6 inch pixels 160x240 for its predecessors the Casio ClassPad 300/330.

It keeps the touch screen of its predecessors, making many manipulations intuitive and childish via simple touch/slide. :bj:
Image


An already announced novelty compared to its predecessors was its color screen! :bj:

Image




This portrait screen mode is quite unusual for a calculator, and perhaps this is one of the reasons which limited its predecessors success.

This time Caso lets you choose with a new 'Rotate' button:
Image


A small pressure and you instantly flip from portrait to a 528x320 landscape mode, literally exploding all current calculators displays! :bj:
Image




Source:
https://edu.casio.com/products/classpad/cp2/index.html

Mise à jour du tableau périodique Physium chez Casio

New postby critor » 20 May 2013, 18:34

Casio fournit officiellement sous forme d'un add-in (application chez TI) un tableau périodique dénommé Physium pour ses calculatrices Casio Prizm fx-CG10/20, mais aussi Graph 75/85/95 et compatibles.

Ce tableau était ressorti en couleurs lors de la sortie de la Casio Prizm:
Image



Peut-être dans l'optique des examens qui approchent, Casio vient de mettre à jour les deux add-in en question.

  • l'add-in pour Graph 75/85/95 et compatibles passe en version 1.11
  • l'add-in pour Prizm fx-CG10/20 passe en version 1.01

Ce n'est pas une mise à jour de fonctionnalités mais une mise à jour des données utilisées par l'application, puisque plusieurs choses ont été découvertes depuis sur les derniers éléments du tableau de numéro atomique 112 et suivants.


Liens:
Physium (pour Casio Prizm fx-CG10/20)
Physium (pour Casio Graph 75/85/95 et compatibles)


( Rappelons que pour TI-Nspire, le meilleur tableau périodique est probablement MultiPeriodic, disponible ici ;) )

TI-Concours : résultats de la catégorie TI-Basic z80 !

New postby noelnadal » 21 May 2013, 07:48

Il y a quelques mois de cela, je vous annonçais dans une news précédente le lancement du TI-Concours . :bj:
Pour cette troisième édition du concours, le succès a été encore une fois au rendez-vous, avec pas moins de participations ! :D

Et à présent, il est temps d'annoncer les résultats, tout d'abord dans la catégorie TI-Basic z80 ! Cette catégorie étant de loin la plus importante, elle fait l'objet d'une news séparée, les autres catégories seront débriefées ultérieurement.


Le premier tour consistait donc à réaliser un Mastermind : 18 participants ont rendu une production. Bien que Deep Thought, avec 97 points, était largement en tête, ayant rendu son programme en retard il laisse la première place à Lola, 94 points, juste devant Samos, 93 points, et tictactoc, 91 points.

[screenshots bientôt]


Quelques semaines plus tard, les candidats avaient une semaine pour plancher sur le deuxième sujet imposé, qui portait sur les nombres "digisibles". Nous avons reçu cette fois 15 participations, et, preuve que c'était serré, nous avons eu deux premiers ex aequos ! :D Ainsi, linkakro et Samos se sont partagés la première place à 89 points, juste devant persalteas et ses 88 points.

Ainsi, à l'issue des sujets imposés Samos était en tête avec 182 points, devant persalteas, 178 points, et tictactoc, 177 points. Les huit premiers ont été sélectionnés pour la finale ! :bj:

Ces huit participants ont donc eu droit en premier lieu à un oral de 20 minutes sans préparation : cette fois, c'est Zeda qui s'est largement imposée avec 225 points, loin devant Deep Thought qui lui avait récolté 210 points, et linkakro, qui obtenait le troisième meilleur score avec 200 points. Ces écarts de points importants ont beaucoup chamboulé le classmeent, Zeda premant ainsi la première place avec 5 points d'avance sur Deep Thought et 19 points d'avance sur linkakro.

Mais rien n'était joué... ceux qui pensaient que tout était fini ont eu tort ! :D
Moins d'une semaine plus tard (c'est à dire le week-end dernier), nos huit finalistes affrontaient cette fois l'épreuve machine, d'une durée de trois heures.
Et là, à la surprise générale, c'est tictactoc qui remporte l'épreuve, avec 280 points, loin devant Deep Thought et ses 263 points, et très très loin devant Samos, troisième avec 225 points. :o

Mais qui a donc remporté le TI-Concours 2013 ? Qui inscrira son nom au prestigieux palmarès des vainqueurs du TI-Concours ? :D
(oui, je suis en train de troller persalteas, là :troll: )

Et le vainqueur eeeeeeeeeeeeeest...



* boum boum *



* boum boum *



* boum boum *



Deep Thought !


Félicitations à lui ! Un an après sa victoire en Axe l'an passé, il récidive cette fois dans la catégorie TI-Basic z80 : à croire que le changement de formule ne l'a pas dérangé :D

Notons qu'il remporte la victoire la plus serrée du TI-Concours jusqu'à aujourd'hui : en effet, il obtient 648 points, soit seulement un point de plus que le deuxième, qui lui en obtient 647 ! :o

C'est pour cela que je félicite très chaleureusement tictactoc, qui a lui aussi réalisé un excellent TI-Concours. :bj:
Preuve encore une fois que les concours ne se jouent pas à grand-chose...

Comme l'année dernière, les places 3 à 6 se jouent dans un mouchoir de poche (14 points, pour être plus précis) :

- avec 572 points, persalteas est 3ème
- avec 567 points, Samos est 4ème
- avec 564 points, Zeda est 5ème
- avec 559 points, linkakro est 6ème

Enfin, bravo aussi à Lola, 7ème avec 544 points, et mathieu41, 8ème avec 518 points, pour leur participation très honorable. :bj:

La liste des lots sera communiquée très prochainement aujourd'hui je l'espère ! Et les gagnants seront contactés très prochainement aussi. ;)

Et aussi, j'allais oublier, un grand merci à tous les participants, même ceux qui ne se sont pas qualifiés, pour leur participation : car c'est grâce à vous que le concours a eu autant de succès jusqu'à aujourd'hui ! :bj:

-
Search
-
Social TI-Planet
-
Featured topics
Grand Concours 2024-2025 - Programmation Python
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
12345
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1018 utilisateurs:
>981 invités
>30 membres
>7 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)