[UDF] StackStructure : Intégrer des piles dans Autoit.

Partagez des fonctions et des UDF AutoIt.
Règles du forum
.
Répondre
Avatar du membre
L4crymal
Niveau 8
Niveau 8
Messages : 513
Enregistré le : mer. 24 sept. 2008 14:53
Status : Hors ligne

[UDF] StackStructure : Intégrer des piles dans Autoit.

#1

Message par L4crymal »

Bonjour tout le monde, aujourd'hui j'avais besoin d'une librairie rapide et efficace intégrant les piles dans Autoit.

C'est chose faite, et j'en profite pour vous la partager.

Pour savoir ce qu'est une pile: http://fr.wikipedia.org/wiki/Pile_(informatique)
En gros une pile est un tableau à 1 dimension où l'on peut lire ou écrire seulement dans la dernière case.

Ça peut par exemple servir dans tous les programmes qui propose une fonction "Annuler, CTRL+Z" la pile est dépilé à ce moment là.

Cela peut être très pratique dans certains cas voir indispensable (comme le mien)

N'hésitez pas à rapporter les bugs et à proposer vos améliorations.
Fichiers joints
StackStructure.au3
(8.12 Kio) Téléchargé 288 fois
Exemple.au3
(753 Octets) Téléchargé 282 fois
Modifié en dernier par L4crymal le ven. 30 déc. 2011 18:52, modifié 1 fois.
Avatar du membre
PandiPanda
Membre émérite
Membre émérite
Messages : 656
Enregistré le : mar. 19 juil. 2011 14:03
Localisation : Bruxelles
Status : Hors ligne

Re: [UDF] StackStructure : Intégrer des piles dans Autoit.

#2

Message par PandiPanda »

Bonjour,

j'ai un peu survolé votre "UDF" et des détails sont un peu "étrange", notamment ceci;

1)

Code : Tout sélectionner

Return $val
SetError(0)
à savoir le "setError(0)" apres un return ne sert strictement à rien ^^

2)

Code : Tout sélectionner

StackCreate($size = 10)
On doit donc donné une taille prédéfinie à une pile ?
je pensais que sa principale utilisation par rapport à un tableau est que c'etais 'dynamique' ?

3)

Code : Tout sélectionner

StackPop(ByRef $avArray)
Vous avez donc 2 tailles différentre une taille "Logique" et une taille "réelle", cependant pourquoi ne pas simplement l'enlever? Car on peux facilement atteindre une valeur qui devrai normalement "ne plus exister".
Sans oublier que on utilise de l'espace pour rien, puisque si on fait un 'pop' c'est qu'on ne veux plus de cette valeur dans la pile ! (à savoir dans le tableau)

4) ce code ci;

Code : Tout sélectionner

#Include <Array.au3>

Local $array=StackCreate(3)
For $i=1 To 3
    StackPush($array,$i)
Next
_ArrayDisplay($array)
affiche ceci;
$array[0]=4 ; pourtant il n'y a que 3 element, d'ou vien ce 4 ??
$array[1]=1 ; le premier element ne devrai t'il pas etre 3 ? etant donné que c'est une pile ...
$array[2]=2
$array[3]=3
Ensuite,
j'ai vu le "StackPop(ByRef $avArray)" qui renvoi bien le 3 comme "premier element" mais ca me parait bisarre :mrgreen:
En suivant cette logique, en fait le dernier element devient le premier, mais je voit pas ou sort cette logique de "Pile" en soit.
La seule moralité qui tienne dans un monde cruel est la chance. Impartiale. Équitable. Vraie
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [UDF] StackStructure : Intégrer des piles dans Autoit.

#3

Message par Tlem »

L'intérêt de cet UDF est sans doute subtil, mais en travaillant directement en chaîne, ce serai sans doute plus simple !

Par exemple pour initialiser une pile :

Code : Tout sélectionner

Global $Pile
Pour la vider :

Code : Tout sélectionner

$Pile = ""
:mrgreen:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
L4crymal
Niveau 8
Niveau 8
Messages : 513
Enregistré le : mer. 24 sept. 2008 14:53
Status : Hors ligne

Re: [UDF] StackStructure : Intégrer des piles dans Autoit.

#4

Message par L4crymal »

@PandiPanda

1) Merci c'était juste une erreur.

2) Non c'est une taille que l'on définit comme "taille max" mais pour éviter de crasher quand on dépasse cette taille, la fonction PUSH peut créer des cases en + mais ça peut ralentir le programme c'est pour ça qu'il est intéressant de fixer une taille max si on veut un programme + rapide.

3) C'est toujours une question de rapidité, supprimé le contenu d'une case avant de déplacer le curseur ralentit le programme (mais vraiment de peu), mais j'ai ajouté un paramètre pour supprimé le contenu de la case libéré.

4) C'est juste le "curseur" de la pile, il pointe vers la "prochaine case" et non vers la dernière case. Mais ça c'est un choix perso, j'aurai pu faire autrement mais il n'y a aucune différence.

J'ai mis à jour l'UDF
Répondre