Index des articles > Programmation > Tutorial Vertel3 :: Chapitre III

Tutorial Vertel3 :: Chapitre III

Article posté par Thor

Chapitre III

Chapitre III

L'utilisation de listes

  Dans le chapitre précédent nous nous sommes concentrés sur l'optimisation de notre premier programme sans trop expliquer le fonctionnement de Vertel3 envers les listes. Vertel3 peut "lire" des listes de trois façon différentes : la lecture normale, séquentielle ou ininterrompue.

A) La lecture normale

  La lecture normale est la plus utilisée : si on place une liste en argument Vertel3 répète la fonction pour chaque élément de la liste. Voici un exemple simple :

vertel("pixl",{10,20,30},20)

  La fonction "pixl" va alors tracer 3 pixels, aux coordonnées (10,20) puis (20,20) et enfin (30,20). Vous pouvez utiliser plusieurs listes, en reprenant le même exemple :

vertel("pixl",{10,20,30},{50,40,30})

  Ici 3 pixels seront dessinés également, aux coordonnées (10,50), (20,40) et (30,30). Si une des listes s'arrête avant les autres, c'est à dire qu'une des listes possède moins d'éléments qu'une autre, Vertel3 stoppe la lecture et ignore les éléments supplémentaires des listes plus longues. Cette technique peut aussi être utilisée pour répéter des fonctions à des arguments communs (astuce très peu utilisée car elle demande que les fonctions est le même nombre d'arguments) :

vertel({"line","recv"},10,10,60,40,{0,1})

  Cette routine aura pour effet de dessiner une ligne entre les coordonnées (10,10) et (60,40) puis un rectangle vide entre ces mêmes coordonnées. Reprenons l'exemple du hello3 :

vertel("text",{"Hello world","avec Vertel 3"},{47,41},{40,52},1)

  Vertel3 va commencer par lire les premiers éléments de chaque liste pour afficher "Hello world" aux coordonnées (47,40) en taille moyenne et en mode normal (sous entendu 0). La tête de lecture va ensuite se décaler sur le deuxième élément de chaque liste en reprenant l'expression qui n'est pas une liste (ici le 1 du choix de la taille de caractère). Cela affiche donc presque instantanément "avec Vertel 3" aux coordonnées (41,52) en taille moyenne et mode normal (sous entendu 0).

  Attention : Si une des listes s'arrête avant les autres, Vertel3 stoppe la lecture et ignore les éléments supplémentaires des listes plus longues. ce problème peut être contourné grâce au nouveau mode de lecture de Vertel3 : la lecture ininterrompue (cf. C) Lecture ininterrompue)

B) La lecture séquentielle

  Le mode "lecture séquentielle" est une nouveauté de la version 3 de Vertel est s'avère être très pratique pour afficher très rapidement une image sur les deux dimensions. Avec les anciennes versions de Vertel, il était obligatoire de s'aider du Ti-Basic pour afficher un arrière plan :

prgm n°1 : back1

Prgm
Local a,s

vertel("save","s",0,0,159,99) @ On enregistre l'écran entièrement dans la variable s
For a,0,160,10 @ La boucle for ira de 0 à 160 avec une marche de 10
vertel("pict","imagefon",a,seq(c,c,0,90,10),1) @ On affiche l'image sur la ligne entière (cf. Note ci dessous)
EndFor
vertel("paus","","pict","s",0,0,1) @ On attend que l'utilisateur presse une touche pour rétablir l'écran initial
EndPrgm

  Note : Dans le deuxième appel à Vertel3 on remarque la présence de la fonction seq(). Cette dernière n'est pas une fonction spécifique à Vertel3 car elle fait partie des fonctions du TIOS que vous pouvez retrouver dans le menu CATALOG. Cette fonction a pour syntaxe : seq(expression,var,déb,fin,[pas]) et retourne une liste. Elle évalue les valeurs de expression lorsque var varie de déb jusqu'à fin avec un pas de pas puis retourne la liste des résultats obtenus. var ne doit pas être une variable système. La valeur par défaut pour le pas est pas=1 (extrait du manuel officiel de Texas Instruments). Exemple ici :

seq(c,c,0,90,10)

retourne la liste :

{0,10,20,30,40,50,60,70,80,90}

  N'hésiter pas à vous servir de cette fonction du TIOS qui peut facilement optimiser votre application sans la ralentir.

  Essayons maintenant d'utiliser le mode lecture séquentielle que nous propose Vertel3. La lecture séquentielle consiste à nommer une liste comme "prioritaire" sur une autre liste (la liste séquencée). Il suffit de placer le tag "->" (STO sur votre clavier) devant la liste à séquencer et ce tag ne sera pas considéré comme un argument. Ici nous cherchons à séquencer la liste retournée par l'instruction :

seq(c,c,0,90,10)

et nous remplacerons la boucle for par une nouvelle liste (la liste prioritaire) retournée par l'instruction:

seq(a,a,0,150,10)

  Voici donc le nouveau programme optimisé :

prgm n°2 : back2

Prgm
Local s
vertel("save","s",0,0,159,99)
vertel("pict","imagefon",seq(a,a,0,150,10),"->",seq(c,c,0,90,10),1)
vertel("paus","","pict","s",0,0,1)
EndPrgm

  Note : Vous remarquerez que ce dernier exemple peut encore être optimisé en fusionnant les trois appel à Vertel3 en un seul grâce à l'utilisation du séparateur de fonction qu'est la chaîne de caractère vide (cf. Chapitre 2).

  Ce deuxième exemple nous montre, au premier coup d'?il, la liste principale c'est à dire celle qui n'est pas précédée du tag de lecture séquentielle et la liste séquencée (c'est à dire l'autre). Pour simplifier nous allons utiliser l'expression "tête de lecture". Supposons que Vertel3 dispose d'une tête de lecture pour chaque liste : Vertel3 va commencer par lire le premier élément de la première liste c'est à dire 0 de

seq(a,a,0,150,10)

puis la deuxième tête de lecture va s'attaquer au premier élément de la seconde liste c'est à dire 0. Après cette première étape Vertel3 vient d'afficher à l'écran l'image imagefon aux coordonnées (0,0). La deuxième étape va consister en l'avancement non pas des deux têtes de lecture (mode lecture normale) mais seulement de la tête de lecture de la liste séquencée donc Vertel3 va afficher l'image aux coordonnées (0,10) et ainsi de suite jusqu'aux coordonnées (0,90). C'est à cet instant que la liste séquencée se termine : Vertel3 avance alors la première tête de lecture au deuxième élément de la première liste puis réinitialise la seconde tête de lecture. Cette "réinitialisation" a pour effet d'afficher l'image aux coordonnées (10,0). Vertel3 continue cette itération jusqu'à ce que la liste principale se termine.

  Il est possible d'utiliser des listes séquentielles multiples : par exemple dans l'appel :

vertel({1,2},"->",{3,4},"->",{5,6})

(exemple sans intérêt puisqu'il n'y a aucune fonction en jeu) la 2eme liste n'avancera que quand la 3eme arrivera à la fin, et la 1ere n'avancera que quand la 2eme arrivera à la fin (en remettant les têtes de lecture des deux autres à zéro, bien sûr).

  Attention : n'importe quelle chaîne qui commence par "->" sera considérée comme un tag de lecture séquentielle. Pour éviter cela, vous pouvez précéder une chaîne par "/" : ce caractère (dit d'échappement) ne sera pas prit en compte dans la chaîne mais il l'empêchera d'être prise pour un tag de lecture séquentielle.

C) La lecture ininterrompue

  Nous avons vu au A) que Vertel3 stoppe la lecture des listes les plus longues si d'autres listes plus courtes sont passées en argument. Depuis Vertel3 il est possible de "désactiver" cette propriété de la librairie. Il faut, là aussi, utiliser un tag : "|" (sachant que). La lecture ininterrompue va donc poursuivre la lecture des éléments de la liste la plus longue en répétant autant de fois que nécessaire le dernier élément de la liste la plus courte. Ainsi :

vertel("pixl","|",{10,20},{10,20,30,40})

n'affichera pas deux point mais quatre aux coordonnées (10,10), (20,20), (20,30) et (20,40). Cela montre bien que Vertel3 utilise le dernier élément autant de fois que nécessaire pour terminer la lecture de la seconde liste. Ce tag n'affecte que la liste qui suit et non tout l'appel à Vertel3 : il faut donc mettre ce tag devant toutes les listes que vous avez besoin.

Chapitre IV


Tutorial rédigé par Cyril Mottier aka Thor (orlin61@wanadoo.fr). Les mises à jours de ce tutorial sont disponibles sur mon site

>> Vos commentaires [0]

Pas de commentaires

Poster un commentaire


Seuls les membres peuvent poster des commentaires