1

Salut à tous !!

Je me permets de poster un message ici dans le but d'optimiser un bout de code d'un programme avec votre aide. Ce code fonctionne trés bien, mais il est terriblement lent.

Le but de ce bout de code est d'afficher un calendrier. Les valeurs sont stockée dans une matrice ("matt") de 6x7 et affiché dans un tableau de 6x7 à l'écran. Et à chaque valeur le programme cherche dans une autre matrice ("bdd") si il ya une correspondance.
(J'utilise Vertel dans le programme)

Dont voici le code :
newmat(6,7)->matt 1->t try for a,1,31 a->matt[t,dayofwk(annee,mois,a)] if matt[t,7]>0 then t+1->t endif endfor else endtry 10->e 32->g for f,1,6 for d,1,7 if matt[f,d]/=0 then vertel("text",string(matt[f,g]),e,g,0) for s,1,rowdim(bdd) if matt[f,g]=expr(bdd[s,2]) then vertel("trip",e+7,g+6,e+9,g+4,e+9,g+6,0) endif endfor endif e+13->e if d=7 then 10->e g+10->g endif endfor endfor

Je vous remercie par avance.

@++
IP2X

2

3

Oui les listes je peut, suffit de découper la matrice, je gagnerai bien plus en vitesse ?

Sinon j'ais cherché du côté des lectures séquentielle de Vertel mais je n'est pas trouvé la solution.
IP2X

4

Ton problème c'est qu'à moins qu'il y ait peu d'éléments la lecture de bdd est très très lente, tu relis tout à chaque fois et en plus tu appelles expr()... Si tu peux faire en sorte que bdd soit juste une liste de booléens ça sera largement plus efficace, il suffira de faire un If bdd[matt[f,g]] smile

Accessoirement comme dit Martial ça serait pas forcément idiot de prendre une liste à la place de la matrice, parce que la subdivision en lignes et colonnes ne sert pas à grand-chose -- en fait tu peux même te passer complètement de matt, tu appelles dayofwk() une seule fois au début pour savoir par quelle colonne commencer, tu calcules le nb de jours du mois et tu parcours simplement les jours au fur et à mesure sans stocker dans une matrice.

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

5

Ok ouais déjà je vais esseiller de modifier la 1ere partie du programme qui crée la matrice matt en liste et ainsi l'afficher.

Merci à vous !!
IP2X

6

même remarque pour les matrices. J'avais remarqué des lenteurs pas possible dans l'access à une case d'une matrice si celle-ci est supérieure à du 8x8 (dans mes souvenirs). Bon, en même temps, ma matrice faisait dans les 500x500, je l'avais bien cherché aussi.

de plus, les listes et matrices sont hyper lente en Basic TI car à l'inverse des langages évolués où tu dis que tu veux une liste de boolean par exemple, en TIBas, il ne le sait pas et parcours au fur et à mesure la matrice (ou la liste) pour atteindre la bonne case, en fonction des tailles des cases précédentes.

donc dans ton cas, je ferais plutôt une chaine de caractères de 0 et de 1, avec chaque caractères correspondant à une case de la matrice, il suffit juste après d'un substring pour récupérer la case voulue.

(cette technique marche pour n'importe quelle matrice/liste tant qu'il n'y a pas plus de 255 valeurs possibles wink)
Ancien pseudo : lolo

7

dans le cas où tu ne peux pas te passer d'une liste, tu as aussi la possibilité d'utiliser la fonction "test" de vertel qui peut t'éviter de faire une boucle pour y rechercher un élément
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

8

En TI-BASIC, même avec une lib d'aide, tu vas être limité par la puissance d'expression du langage...
En C, tu pourrais:
* accéder à des fonctions plus avancées du CAS, qui peuvent être plus adaptées à l'algo que tu implémentes (replace_top2_with_sum en boucle pour implémenter un delta^2 d'Aitken plus rapide);
* utiliser des fonctions qui font la même chose que certaines fonctions d'AMS (par exemple next_expression_index), mais en plus rapide grin
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

9

ouaif répondre à un mail demandant une aide pour optimiser un programme en lui disant de changer de langage, c'est un peu HS :/

10

Salut à tous !!

Après une petite absence pour vacances me revoilà^^

J'ai utilisé la fonction "test" de Vertel et cela me rend l'exécution largement plus rapide, seulement ça ne rend pas sous le forme que je souhaité mais je pense avoir trouvé la solution !! Je vous tiens au courant wink

@++ et merci !

Ip
IP2X