aide pour algo : nombre de chiffres dans un nombre

aide pour algo : nombre de chiffres dans un nombre - Algo - Programmation

Marsh Posté le 01-12-2012 à 15:22:27    

Bonjour,
 
Je suis occupé à écrire un algorithme. Dans celui-ci, je demande à l'utilisateur d'insérer un code. Une fois le code inséré, comment connaître le nombre de chiffres dont il est composé sans devoir le demander à l'utilisateur ?  
 
Merci pour votre aide !  :)


Message édité par Belgique007 le 01-12-2012 à 15:41:40
Reply

Marsh Posté le 01-12-2012 à 15:22:27   

Reply

Marsh Posté le 01-12-2012 à 15:53:13    

En faisant une division par la base, si c'est un entier.
Si c'est un alphanumérique, c'est c'est pas la même technique ou pas.

Reply

Marsh Posté le 01-12-2012 à 16:17:32    

Oui, le code est un entier. Comment on fait une division par la base ?

Reply

Marsh Posté le 01-12-2012 à 16:19:28    

Belgique007 a écrit :

Oui, le code est un entier. Comment on fait une division par la base ?


Avec beaucoup d'amour.
 
Tiens avec Ada, ça donne ceci :

Code :
  1. with Text_Io; use Text_Io;
  2. procedure Main is
  3.  
  4.  
  5.   function Length_Of(Code : in Natural) return Positive is
  6.      
  7.      Length : natural := 1;
  8.      
  9.   begin
  10.      if Code / 10 > 0 then
  11.         return length + Length_Of(Code /10);
  12.      else
  13.         return Length;
  14.      end if;
  15.   end Length_Of;
  16.  
  17.  
  18. begin    
  19.   loop
  20.      Text_Io.Put("Entrez le code : " );
  21.      declare
  22.         Line : constant String := Text_Io.Get_Line;
  23.         Code : Natural := 0;
  24.      begin
  25.         Code := Natural'Value(Line);
  26.         Text_Io.Put_Line("Length_Of" & Natural'Image(Code) & " : " & Positive'Image(Length_Of(Code)));
  27.         exit;
  28.      exception
  29.         when Constraint_Error =>
  30.            Text_Io.Put_Line("Erreur de saisie" );
  31.      end;
  32.   end loop;
  33. end Main;


Message édité par Profil supprimé le 01-12-2012 à 16:31:34
Reply

Marsh Posté le 01-12-2012 à 17:57:50    

Merci beaucoup, mais en faite j'ai jamais utilisé Ada donc j'ai un peu du mal à suivre ton développement...

Reply

Marsh Posté le 01-12-2012 à 18:12:48    

Une version 'fonctionnelle' utilisant la tail-récursion.
Je suppose la base positive non nulle (sinon cela n'a pas de sens).
 
nombre_chiffre_base(nombre, base)
  retourner nombre_chiffre_base_récursif(abs(nombre), base, 0)
 
nombre_chiffre_base_récursif(nombre, base, i)
   si nombre < base retourner i+1
   retourner nombre_chiffre_base_récursif(div(nombre, base), base, i+1)
 
ou abs est la valeur absolue et div la division entière.
 
A+,

Message cité 1 fois
Message édité par gilou le 01-12-2012 à 18:15:20

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 01-12-2012 à 18:28:39    

div c'est le quotient ?

Reply

Marsh Posté le 01-12-2012 à 18:31:07    

gilou a écrit :

Une version 'fonctionnelle' utilisant la tail-récursion.
Je suppose la base positive non nulle (sinon cela n'a pas de sens).


 
Strictement supérieure à 1, sinon cela n'a pas de sens ! [:aloy]
 
Sinon, le nombre de chiffres d'un nombre (N >= 1) en base n (> 1) est égal à 1+E(logn(N)) où E est la partie entière et logn le logarithme en base N ( par définition, logn(x) = log(x)/log(n)). Cela peut s'étendre aux nombres (>= 1) et bases réelles ( > 1) en ne considérant que la partie entière de l'écriture du nombre.
 
Par ailleurs, dans le cas qui vous intéresse, ne serait-il pas plus simple de compter le nombre de caractères saisis (si saisie sous forme de texte) ou le nombre d'appuis sur les boutons (si saisie sous forme de clavier affiché à l'écran) ?
 

Reply

Marsh Posté le 01-12-2012 à 20:54:54    

Farian a écrit :


 
Strictement supérieure à 1, sinon cela n'a pas de sens ! [:aloy]
 

euh si, la base 1 a un sens, mais on ne peut pas y exprimer le zéro et les nombres négatifs. 1 y vaut 1, 2 11, 3 111 etc. Le principe des petits bâtons alignés les uns à côté des autres. :D  
Bon, je n'avais bien sur pas ça en tête dans l'algo de ma réponse précédente.
A+,


Message édité par gilou le 01-12-2012 à 20:57:51

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 01-12-2012 à 21:21:18    

Farian a écrit :


 
 
 
Par ailleurs, dans le cas qui vous intéresse, ne serait-il pas plus simple de compter le nombre de caractères saisis (si saisie sous forme de texte) ou le nombre d'appuis sur les boutons (si saisie sous forme de clavier affiché à l'écran) ?
 


Avec le code de Gilou ça donne ceci, avec le miens également certainement.

~$ ./main  
Entrez le code : 0123456789
Length_Of 123456789 base :  10 := 9

Reply

Marsh Posté le 01-12-2012 à 21:21:18   

Reply

Marsh Posté le 01-12-2012 à 21:26:41    

D'ailleur, je voulais dire que j'ai modifier ton code Gilou.
 

Code :
  1. with Text_Io; use Text_Io;
  2. procedure Main is
  3.  
  4.   function Nombre_Chiffres_Base_Recursif(Chiffres : in Natural; Base : in Positive; Nombre : in Natural) return Positive is
  5.   begin
  6.  
  7.      if Chiffres < Base then return Nombre+1; end if;
  8.  
  9.      return Nombre_Chiffres_Base_Recursif("/"(Chiffres, Base), Base, Nombre + 1);
  10.   end Nombre_Chiffres_Base_Recursif;
  11.  
  12.   function Nombre_Chiffres_Base(Chiffres : in Natural; Base : in  Positive) return Positive is
  13.   begin
  14.  
  15.      return Nombre_Chiffres_Base_Recursif(abs chiffres, Base, 0);
  16.   end Nombre_Chiffres_Base;
  17.  
  18.  
  19. begin
  20.   loop
  21.      Text_Io.Put("Entrez le code : " );
  22.      declare
  23.         Line : constant String := Text_Io.Get_Line;
  24.         Code : Natural := 0;
  25.         Base : constant Positive := 10;
  26.      begin
  27.         Code := Natural'Value(Line);
  28.         Text_Io.Put_Line("Length_Of" & Natural'Image(Code) & " base : " & positive'image(base) & " :=" & Positive'Image(Nombre_Chiffres_Base(Code, base)));                                  
  29.         exit;
  30.      exception
  31.         when Constraint_Error =>
  32.            Text_Io.Put_Line("Erreur de saisie" );
  33.      end;
  34.   end loop;
  35. end Main;


 
Comme tu peux le voir, on attend pas Nombre en paramètre de Nombre_Chiffres_Base, mais Chiffres. [:dawa]


Message édité par Profil supprimé le 01-12-2012 à 21:31:02
Reply

Marsh Posté le 02-12-2012 à 12:40:56    

Si les zéros devant sont significatifs, cela signifie donc qu'on se tape complètement de la base, et qu'en fait, on fait juste un comptage du nombre de caractères entrés. Et ça, ça se trouve avec les fonctions des librairies, la longueur d'une chaine exprimée en nombre de caractères, avec strlen en C par exemple.
A+,


Message édité par gilou le 02-12-2012 à 12:44:50

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed