Poster un nouveau sujet Poster une réponse
Tout cela est un problème de String !
Auteur Message
areizen



Autorisation : Membre
Nb de messages : 5
Inscrit le : Mar 22 Avr 2014, 16:15
Posté le : Mar 22 Avr 2014, 16:19   Citer 

Bonjour,
Je suis en train de programmer (nan sans blague) et j'ai un petit soucis ....
Je voudrais faire une condition disant que qu'aucun caractere de ma chaine ne doit être supérieur a une Variable C ..
Est-ce possible ? Si, oui comment ?
Merci d'avance kiss.gif kiss.gif kiss.gif

 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mar 22 Avr 2014, 18:06   Citer 

Ton modèle ? Cela aiderait en évitant de tout traduire en deux langues.

D'abord essaie de distinguer les tokens qui sont les mot-clés des noms de fonctions et les caractères que la calculatrice utilise pour écrire les tokens. Même si tu utilises des tokens composés d'un seul caractère, comme les lettres, je risque de m'embrouiller.

Je te proposes simplement d'associer une valeur à chaque token possible et de comparer un par un chaque token et sa valeur à la valeur entrée dans la variable C.
Pour cela il te faut une boucle et des fonctions de recherche ou de découpe de la chaîne.
Je stockes l'ensemble des tokens possibles attendus dans une chaîne puis je recherches un token dedans.

Cependant tu n'as pas indiqué quelles valeurs tu comptes associer aux tokens. En TI-Basic il n'existe aucune table de valeur associée aux tokens. C'est à toi de leur associer les tiennes.

J'isole un token avec sub=sous-Chaîne
Je stockes l'ensemble des tokens possibles attendus dans une chaîne puis je recherches un token dedans avec carChaîne=inString pour associer une valeur à chaque token ou zéro aux imprévus.

Plusieurs solutions sont possibles pour la boucle qui parcourt chaque token. Je suis tenté d'interrompre la boucle aussitôt qu'un token supérieur est trouvé pour gagner du temps la plupart des cas.


Code
"1234ABCD->Str1
Input Str2
Prompt C
0->A
length(Str2->L
Repeat A=L or Ans
A+1->A
C<inString(Str1,sub(Str2,A,1
End
not(Ans  // 1 pour vrai, 0 pour faux

Ce programme ne vérifie pas que la chaîne n'est pas vide, mais heureusement la fonction Input ne peut pas donner de chaîne vide donc je n'encombre pas avec un test de longueur=length.

On peut chercher à optimiser autrement mais je pense que ceci est la méthode la moins ambiguë.

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
areizen



Autorisation : Membre
Nb de messages : 5
Inscrit le : Mar 22 Avr 2014, 16:15
Posté le : Mar 22 Avr 2014, 19:26   Citer 

En faite c'est plus précisément pour insérer un blocage dans le système gérant les bases sur le programme de mdr1 sur Ti-83 +,
Je veut que si un token est supérieur à C-1 cela display un message d'erreur godgrace.gif

 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mar 22 Avr 2014, 19:47   Citer 

Les programmes de mdr1 et les miens dans ce domaine sont conçus pour ti83 et sont donc compatible ti82stat et ti83plus. Par contre une ti83plus peut se traduire en TI-français. (je plaisante pour le français car beaucoup d'anglais demeure dans les versions qualifiées de françaises)

On peut mettre une condition de supériorité ou égalité au lieu d'une supériorité stricte si tu veux. C au lieu de C-1 par exemple.

Savoir à quel programme tu veux ajouter cette condition me renseigne suffisamment sur les valeurs. Utilise la chaîne de table de tokens du programme de mdr1 à la place de la ma Str1 et la chaîne de nombre de mdr1 à la place de ma Str2.

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
areizen



Autorisation : Membre
Nb de messages : 5
Inscrit le : Mar 22 Avr 2014, 16:15
Posté le : Mar 22 Avr 2014, 19:54   Citer 

J'ai fait les commandes que tu m'as envoyé mais cela ne marche pas >< ça affiche error dans n'importe quelle cas minied.gif minied.gif

 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mar 22 Avr 2014, 20:15   Citer 

J'avais supprimé la ligne de stockage de la longueur dans L. Maintenant j'ai testé et c'est prêt.

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
areizen



Autorisation : Membre
Nb de messages : 5
Inscrit le : Mar 22 Avr 2014, 16:15
Posté le : Mar 22 Avr 2014, 21:09   Citer 

Tu as essayé de l'insérer dans le programme sur les Bases car pour moi ça ne marche toujours pas ^^' godgrace.gif

 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mar 22 Avr 2014, 21:40   Citer 

je devine que tu l'as recopié sans adapter toutes les variables. Il faut utiliser la longueur A, la donnée Str1, la table Str2, un compteur innutilisé tel que B. Et la valeur en résultat doit être correctement utilisée pour interpréter la réussite ou l'échec.

Code
// programme de tp du tutoriel de Mdr1 sur openclassrooms com
// Str1 est la donnée, Str2 est la table, C la base init, A la longueur
/////////////////////////////////////

:Input "NB ",Str1 //demande le nombre à convertir
:Input "BA ",C //demande la base de ce nombre
:Input ">B ",D //demande la base désirée

:"123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ->Str2
:length(Str1->A

///////////////////////////////////// début de l'ajoût
// condition de validité sur le maximum que j'ai (Linkakro) réalisé

0->B
Repeat B=A or Ans
B+1->B
C<=inString(Str1,sub(Str2,B,1
End
If Ans
Then
Disp "EXCES
Stop
End

//////////////////////////////////// fin de l'ajoût

:0 //on place zéro dans Ans

:For(B,1,A //On fait parcourir à Théta (juste après le Z) tous les numéros du premier au dernier caractère de Str1

   :Ans+C^(A-B)inString(Str2,sub(Str1,B,1 //On ajoute à Ans la valeur du caractère en cours.
   // si "inSring(" ne trouve pas le caractère correspondant dans Str2, il renvoie zéro (c'est pour ça que je ne l'ai pas mis dans Str2).

:End //fin de la boucle

:Ans->B //on stocke dans B le décimal obtenu

:"0"+Str2->Str2 //On ajoute le zéro dans Str2

:While B //tant que le dividende est positif (le dividende parce-que c'est l'ancien quotient
// et que la boucle "While(" commence par tester la condition avant d'exécuter les instructions.)

   :int(B/D->C //on met le quotient obtenu par B/D dans C
   :sub(Str2,B-DC+1,1)+Str1->Str1
   //on a B-DC qui est égal au reste de la division
   //on recherche le caractère qui correspond à la valeur du reste ; on ajoute 1 au reste car le caractère n°1 de Str2 est "0".
   //on ajoute donc ce caractère au résultat qui sera affiché
   :C&#8594;B //l'ancien quotient devient le dividende

:End

sub(Str1,1,length(Str1)-A //on affiche le résultat en prenant soin d'enlever le "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" de la fin.



----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
Google_AdSense



Publicité    



 
areizen



Autorisation : Membre
Nb de messages : 5
Inscrit le : Mar 22 Avr 2014, 16:15
Posté le : Mar 22 Avr 2014, 22:49   Citer 

Merci beaucoup bigmouth.gif j'avait changé les varibles mais je me suis planté dans le positionnement ^^'

 Adresse email Haut de page Bas de page 
 
Poster un nouveau sujet Poster une réponse





  Page générée en 6 requêtes