Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1054 connectés 

  FORUM HardWare.fr
  Programmation
  Algo

  aide pour algo : nombre de chiffres dans un nombre

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

aide pour algo : nombre de chiffres dans un nombre

n°2166265
Belgique00​7
Posté le 01-12-2012 à 15:22:27  profilanswer
 

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
mood
Publicité
Posté le 01-12-2012 à 15:22:27  profilanswer
 

n°2166266
Profil sup​primé
Posté le 01-12-2012 à 15:53:13  answer
 

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.

n°2166268
Belgique00​7
Posté le 01-12-2012 à 16:17:32  profilanswer
 

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

n°2166269
Profil sup​primé
Posté le 01-12-2012 à 16:19:28  answer
 

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
n°2166273
Belgique00​7
Posté le 01-12-2012 à 17:57:50  profilanswer
 

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

n°2166274
gilou
Modérateur
Modzilla
Posté le 01-12-2012 à 18:12:48  profilanswer
 

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é!  --
n°2166277
Profil sup​primé
Posté le 01-12-2012 à 18:28:39  answer
 

div c'est le quotient ?

n°2166278
Farian
Posté le 01-12-2012 à 18:31:07  profilanswer
 

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) ?
 

n°2166281
gilou
Modérateur
Modzilla
Posté le 01-12-2012 à 20:54:54  profilanswer
 

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é!  --
n°2166283
Profil sup​primé
Posté le 01-12-2012 à 21:21:18  answer
 

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

mood
Publicité
Posté le 01-12-2012 à 21:21:18  profilanswer
 

n°2166284
Profil sup​primé
Posté le 01-12-2012 à 21:26:41  answer
 

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
n°2166307
gilou
Modérateur
Modzilla
Posté le 02-12-2012 à 12:40:56  profilanswer
 

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é!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Algo

  aide pour algo : nombre de chiffres dans un nombre

 

Sujets relatifs
AIDE A LA PROGRAMMATIONBesoin d'aide svp!
Aide formulaire d'encodage de données[Résolu] VBA XLS Aide msgbox
Projet d'application, aide base de donnéesBesoins d'aide pour un exercice
progammation premier nombreAide programmation SIEMENS LOGO
aide parse erroraide pour algo "somme des chiffres d'un nombre"
Plus de sujets relatifs à : aide pour algo : nombre de chiffres dans un nombre


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR