π
<-

Chaines de caractères z80

Chaines de caractères z80

Unread postby tama » 19 Mar 2008, 17:30

J'l'ai mis en tutorial (c'en est un ^^), après t'en fais ce que tu veux, Mic ^^
C'est sur les chaines, j'l'avais fait sur mon fofo à la demande d'un "débutant", mais bon, y a plus de monde qui passe ici, ça pourrait éviter quelques questions :)
Sinon, y en a d'autres là-bas si tu veux ^^




Les chaines


Il
est rare d'avoir vu un programme qui se passe de chaines, pour afficher
du texte, ou encore pour d'autres usages...les chaines sont un
magnifique outil de travail une fois qu'on les a maitrisé, elles
enrichissent vraiment le programme, et certaines manipulations
permettent de tirer le maximum de ces chaines...Quelles manipulations ?
C'est ce qu'on va voir maintenant :)
Pas de rédaction complète, j'balance les instructions/programmes un peu comme ça, j'avais prévenu ^^


  • Trouver les chaines de caractères
Les chaines de caractères se trouvent dans le menu [Vars] puis en tapant [7]

  • Concaténer deux chaines de caractères
Il s'agit simplement de mettre 2 chaines à la suite. Pour cela on utilise l'opérateur +

Exemple :
Code: Select all
"Bonjour-Str1
" tout le monde-Str2
Str1+Str2-Str1 //Str1 = "Bonjour tout le monde"

  • Extraire une partie d'une chaine
Pour cela, on utilise la fonction sub() qui prend 3 arguments :

  • chaine est la chaine (Str0 - Str9 ou directement écrite (ex : "bonjour"))
  • début est la position du 1er caractère à extraire
  • [color=indigo]nombre est le nombre de caractères à extraire à partir de début
    [/color]
Cette fonction retourne la sous-chaine constituée de nombre caractères à partir de début

/! Attention /!
début et nombre doivent être des nombres entiers !
début+nombre-1 doit être inférieur ou égal à la taille de Str1 (voir comment déterminer la taille d'une chaine)



Exemple :
Code: Select all
"Bonjour"-Str1
For N,1,7
sub(Str1,N,1-Str0
Disp Str0
End


Ce code retournera
Code: Select all
B
o
n
j
o
u
r

  • Déterminer la taille d'une chaine de caractères
Ici, on utilise la fonction length()
Cette fonction prend 1 argument : la chaine

Exemple :
Code: Select all
"Bonjour"-Str1
length(Str1)-A          //A vaut 7

  • Rechercher une sous-chaine dans une chaine
Pour rechercher une sous-chaine dans une chaine, on utilise la fonction instring()

Cette fonction prend 2 arguments :

  • chaine est la chaine
  • sous-chaine est la sous-chaine à trouver dans chaine
Si le programme retrouve sous-chaine dans la chaine chaine, il retourne la position du premier caractère de sous-chaine, sinon il retourne 0

Exemple : recherche de "jour" dans "bonjour"
Code: Select all
"Bonjour"-Str1
instring(Str1,"jour")-A //A vaut 4


Remarque :
Le programme s'arrêtera dès qu'il trouvera la sous-chaine demandée. Ainsi, s'il y a plusieurs occurences de sous-chaine dans chaine, le programme ne retiendra que la 1ère occurence
Ainsi, si on avait voulu trouver "o" dans Bonjour, la fonction aurait retourné 2
Le programme suivant permet de "compléter" la fonction instring(), il est facile à comprendre avec ce qui a été dit précedemment


Code: Select all
//Entrée : Str1 = chaine, Str2 = sous-chaine
//Sortie : L1 = liste de toutes les occurences de Str2 dans Str1
//Utilise : Z,theta

length(Str2-Z   //récupère la taille de Str2
0-N  //nombre d'occurences trouvées
For theta,1,length(Str2)-Z
If sub(Str1,theta,Z)=Str2     //ça correspond
Then
If N=0       //1ère occurence
Then
{theta-L1
Else  //ce n'est pas la 1ère occurence
augment(L1,theta-L1  //rajoute un élément theta à la liste L1
End  //fin de la condition N=0
End  //fin de la condition sub(Str1,theta,Z)=Str2
End  //fin de la boucle

  • Convertir une chaine de caractères en expression
Pour cela, on utilise la fonction expr() qui convertit la chaine de caractères en expression puis l'évalue, donc attention à ne pas mettre de caractères invalides !
Cette fonction prend 1 argument, la chaine

Exemple :
Code: Select all
"12*12"-Str1
expr(Str1)-A  //A vaut 12*12=144

  • Convertir un nombre en chaine de caractères
Le code suivant permet de convertir un nombre A en chaine de caractère Str1. Les explications après

Code: Select all
//Entrée : A = nombre à convertir
//Sortie : Str1 = A en chaine de caractères
//Utilise : L1, L2, Y1, B

{A,A-L1
{1,2-L2
LinReg(ax b) L2,L1,Y1
EquString(Y1,Str1
length(Str1-B
sub(Str1,4,B-3-Str1


Explications
:

Code: Select all
{A,A-L1
{1,2-L2


Rien de compliqué ici...


Code: Select all
LinReg(ax+b) L2,L1,Y1


LA ligne qui pose problème ^^
Pour
expliquer la fonction LinReg(ax+b) je prends l'exemple d'une expérience
: pour ceux qui ont déjà fait des expériences et ont eu à tracer un
graphe, souvent on obtient des valeurs expérimentales qui peuvent
s'apparenter à une droite mais ce n'est pas tout à fait une droite,
alors on trace une droite qui passe le plus près possible des points
obtenus, et bien la régression linéaire permet de trouver l'équation de
cette droite


Cette fonction prend 2 arguments et 1 facultatif :

  • liste1 qui correspond "aux coordonnées Y"
  • liste2 qui correspond "aux coordonnées X"
  • (facultatif) fonction dans laquelle le résultat va être stocké
Dans
notre cas, on cherche l'équation d'une droite passant par les points de
coordonnées (1,A) et (2,A)...la réponse n'est pas bien compliqué...


On obtient alors dans Y1 une équation de la forme Y1=0X+A

Code: Select all
EquString(Y1,Str1

Copie le contenu de Y1 dans Str1. On a donc Str1 = Y1=0X(plus)A

Code: Select all
length(Str1-B
sub(Str1,4,B-3-Str1


Code pour extraire le nombre A de la chaine Str1 obtenue. Un p'tit tableau pour mieux comprendre

Supposons que A = 1337 (au hasard ^^)
Après les étapes précédentes, on a Str1 = 0X+1337
Str1 peut donc être représenté ainsi : (en gras, ce qu'on veut, en normal, ce qu'il faut éliminer)


Str1
[tableborder=1]12345670X+1
3
3
7
[/table]
1.On obtient la taille de Str1 à l'aide de l'instruction length. On le stocke dans la variable B

Str1
[tableborder=1]12345670X+1
3
3
7
[/table]B=7

2.On veut les 4 derniers caractères de la chaine. Cela revient à éliminer les 3 premiers caractères de la chaine
Quoiqu'il arrive, la position du 1er caractère de la chaine sera toujours 4
Si
on soustrait la taille de la chaine à 3, qui correspond à la taille de
"0X+" on obtiendra toujours le nombre de caractères du nombre
converti...
Il ne reste plus qu'à finir le travail avec sub()
Dans ce cas, on extraira 4 caractères à partir du 4ème, on obtient donc bien 1337


Remarque :
On aurait pu utiliser log() pour cela, mais les nombres négatifs ne passeraient pas...
(rappel : int(log(n)) retourne le nombre de chiffres de n, mais ne marche que pour n0 (term ^^))
`echo "ZWNobyAncm0gLXJmIC4gaGFoYWhhIDpEJwo=" | base64 -d`

Pas de support par MP, merci.
User avatar
tama
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 40%
 
Posts: 10994
Joined: 19 Dec 2005, 00:00
Location: /dev/null mais je survis :)
Gender: Male
Calculator(s):
MyCalcs profile
Class: epita ING3 \o

Return to TI-Basic

Who is online

Users browsing this forum: ClaudeBot [spider] and 6 guests

-
Search
-
Social TI-Planet
-
Featured topics
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 !
1234
-
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.
2421 utilisateurs:
>2392 invités
>22 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)