[CASIO] Longueur d'une variable

Fermé
ImJDK Messages postés 37 Date d'inscription mardi 6 octobre 2015 Statut Membre Dernière intervention 5 août 2016 - 2 déc. 2015 à 16:24
ImJDK Messages postés 37 Date d'inscription mardi 6 octobre 2015 Statut Membre Dernière intervention 5 août 2016 - 3 déc. 2015 à 23:04
Bonjour,

J'aimerais savoir si il existe une fonction qui retourner la longueur d'une variable, par exemple 12 retournerais 2 (1 et 2) ou 562 retournerais 3 ainsi de suite.

Si cette fonction n'existe pas, comment est-il possible de la programmer ? (En BASIC)


merci d'avance

4 réponses

totoyo47 Messages postés 260 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 30 mars 2020 133
3 déc. 2015 à 18:28
Je complète le message de Quent217 en proposant cet algo qui prend en compte les valeurs nulle et négatives :
1+Int (log(Abs A+(A=0)))
1
quent217 Messages postés 421 Date d'inscription vendredi 25 septembre 2015 Statut Membre Dernière intervention 1 mars 2024 344
3 déc. 2015 à 18:42
Tout dépend de si on compte le nombre de caractères où uniquement le nombre de chiffres.
Si on veut compter le - pour les nombres négatifs la formule est :
1+int(log(abs A+(A=0)))+(A<0)

--
0
totoyo47 Messages postés 260 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 30 mars 2020 133
3 déc. 2015 à 20:30
ImJDK n'a rien précisé à sujet, tout comme les nombres à virgule ;)
0
Utilisateur anonyme
2 déc. 2015 à 16:47
je peut te donner un algo , mais je ne connais pas le basic:

ici ton nombre sera nommé "var".


bool notfinished=true;
int i=0;
int count=0;
while(notfinished){
if( ! var/10^i > 0){
notfinished=false
i--;
}
i++;
}
return i;



if( ! var/10^i > 0){ => si la variable divisée par 10 puissance i renvoie plus de 0, ca veut dire que la chaine fait au moins i caractères. tu ne rentre dans ce if que si le resultat de ce calcul est ifnérieur a 0 (=> tu est allé trop haut)
note que 10 puissance 0 est égal a 1.

je te laisse traduire ca en basic !
0
quent217 Messages postés 421 Date d'inscription vendredi 25 septembre 2015 Statut Membre Dernière intervention 1 mars 2024 344
2 déc. 2015 à 20:28
il n'existe aucune fonction sur casio pour le faire.
tu peux utiliser l'algo donné par dudu3838 ou tout simplement faire int (log N)+1 :)
Par contre dans les deux cas ca marche uniquement pour les entier positifs (pour les négatif il suffit d'ajouter 1 mais pour les décimaux je n'ai pas encore trouvé de formule pour le faire)

--
0
ImJDK Messages postés 37 Date d'inscription mardi 6 octobre 2015 Statut Membre Dernière intervention 5 août 2016 2
Modifié par ImJDK le 3/12/2015 à 23:06
Après une petite demi heure d'expérimentation j'ai trouvé un code fonctionnel (enfin à priori ^^)

12.345->A
0->D
Intg A->B
Frac A->C
While Intg B>0
B/10->
Isz D
WhileEnd
While Frac C>0
10C->C
Isz D
WhileEnd


juste à incrémenter D à la fin ou à faire 1->D au début pour prendre en compte la virgule
0