1

Yop tout le monde, et merci de lire ce post happy


J'bosse un programme qui vise à détecter les variables créées par un programme et qui les donne à l'utilisateur, qui peut choisir lesquelles supprimer

En gros, j'en suis qu'à l'idée générale, mais dans ma tête ça donne ça:
- Listage des variables déjà présentes à coups de Vertel (L1)
- Exécution du programme, qui est passé en argument : #p() ^^
- ReListing des variables présentes avec Vertel (L2)
- Comparaison de taille de L1 et L2 après avoir éjecté les noms de ces variables de la liste et avoir supprimé le doublon du nom du programme dans L2
-- Si dim(L2) > dim(L1)
---- On cherche les variables crées et on les stocke dans une liste
---- On PopUp tout ça
---- L'utilisateur s'amuse
-- Fin de la condition-- Fin du programme


Mais ce sur quoi j'ai le plus de problèmes, c'est la détection des nouvelles variables. Faire deux boucles imbriquées est trop lent (j'ai 107 fichiers sur ma TI). Donc je sèche un peu :s

Que me conseillez-vous ? :s

Merci pour vos conseils précieux ^^

2

Déjà, se baser sur la taille des listes n'est pas fiable : si le programme crée une variable et en supprime une autre, la taille de la liste va rester constante et ton truc va considérer qu'il ne s'est rien passé.

Ensuite pour accélérer la recherche, tu peux trier tes deux listes avant de travailler dessus. De cette façon tu peux utiliser deux curseurs, le 1er (mettons i1) qui parcourt la 1ere liste (L1) et l'autre (i2) qui parcourt la seconde (L2). Il te suffit de faire une boucle tant que tu n'es pas arrivé à la fin des deux listes, en comparant à chaque fois L1[i1] à L2[i2] :

- Si L1[i1] = L2[i2], la variable existait avant et après, rien à signaler, tu incrémentes i1 et i2
- Si L1[i1] < L2[i2], alors un élément a été supprimé dans L2 (puisque les listes sont triées, donc si l'élément été présent il aurait du être au même indice que dans la liste L1), autrement dit le programme a supprimé une variable. Seul i1 doit être incrémenté, pour que la variable L2[i2] soit traitée au prochain tour.
- Si L1[i1] > L2[i2], on est sur le cas inverse : le programme a créé une variable. Seul i2 doit être incrémenté.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

3

Merci pour la remarque sur la création / suppression de variables, c'est pas faux ^^

Merci pour l'idée, c'est vrai qu'un while résouds le problème de dépassement de taille d'une des listes avec un for sur la plus longue des boucles ^^

Vais regarder tout ça, et j'vous tient au courant smile

4

En DUT mon prof d'algo disait qu'il fallait toujours faire un ptit dessin, style schéma/organigramme.
Et pour ce genre de problème, c'est typiquement vrai happy

5

Merci Zephyr, ça fonctionne du tonnerre. Reste plus qu'à proposer à l'utilisateur de récupérer les variables supprimées par le soft.

"On ne peut pas tout faire, TTD!" trigni

Remarque, ça reste relativement lent ... Go C++ ^^