comp.lang.ada
 help / color / mirror / Atom feed
* Algorithm to convert bases?
@ 1997-03-28  0:00 Centaury
  1997-03-28  0:00 ` Michael F Brenner
  0 siblings, 1 reply; 2+ messages in thread
From: Centaury @ 1997-03-28  0:00 UTC (permalink / raw)



Does anybody know how the algorithm of converting a decimal to binary
number and vice versa?
What about conversion to octal and hexadecimal numbers to decimals?
Thanx!
-- 
Please mail replies to :
utopian@pl.jaring.my




^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: Algorithm to convert bases?
  1997-03-28  0:00 Algorithm to convert bases? Centaury
@ 1997-03-28  0:00 ` Michael F Brenner
  0 siblings, 0 replies; 2+ messages in thread
From: Michael F Brenner @ 1997-03-28  0:00 UTC (permalink / raw)



This question is vague, and can mean various things, so I will go ahead
and guess that you are not interested in the algorithm itself (which 
appears in Knuth, The Art of Computer Programming, published by Addison
Wesley). Instead, I will guess that you wish to know some Ada code to
convert them. Now I have to guess whether you wish these numbers to be
constants, variables, or elements of a data file. I will guess that
these numbers are elements of a data file. Now I have to guess whether
you wish these numbers to be whole numbers, fractions, or mixed with
a whole number part and a fractional part. I will guess that you wish
to do mixed numbers. Now, I will guess that you are coding in Ada-83 and
have violated the rule about always having at least one digit before and
one digit after the decimal point, therefore you wish to use a finite
state automaton to read them in the way Ada-95 would anyway. Finally,
I guess that the actual conversion will use something like what is 
in the Ada Language Reference Manual in paragraphs 3.5(52) and A.10.1(55).
I guess that you are not asking for me to copy those paragraphs here,
because you can download them yourself from many places, on the net,
such as ftp://cs.nyu.edu/pub/gnat/rm9x-v5.95/rm.doc.gz. 

Therefore, the complete answer to your question is given by the floating 
point portion of my finite state machine (which is Free code subject to 
the Free Software Foundations General Public Library License):

 type states  is (error_state,
                   start_state,
                   prime_state,
                   prime_any_state,
                   prime_prime_state,
                   minus_state,
                   minus_minus_state,
                   quote_state,
                   quote_quote_state,
                   alphabetic_state,
                   alphabetic_underline_state,
                   digit_state,
                   digit_base_state,
                   digit_underline_state,
                   digit_period_state,
                   digit_period_digit_state,
                   digit_period_underline_state,
                   digit_exponent_state,
                   digit_exponent_digit_state,
                   digit_exponent_underline_state,
                   period_state,
                   asterisk_state,
                   slash_state,
                   colon_state,
                   lt_state,
                   gt_state,
                   eq_state,
                   done_state,
                   done_backup_state,
                   done_backup_two_state);

  err: constant states := error_state;
  str: constant states := start_state;
  p  : constant states := prime_state;
  pa : constant states := prime_any_state;
  pp : constant states := prime_prime_state;
  m  : constant states := minus_state;
  mm : constant states := minus_minus_state;
  q  : constant states := quote_state;
  qq : constant states := quote_quote_state;
  a  : constant states := alphabetic_state;
  au : constant states := alphabetic_underline_state;
  d  : constant states := digit_state;
  db : constant states := digit_base_state;
  du : constant states := digit_underline_state ;
  dp : constant states := digit_period_state;
  dpd: constant states := digit_period_digit_state;
  dpu: constant states := digit_period_underline_state;
  e  : constant states := digit_exponent_state;
  ed : constant states := digit_exponent_digit_state;
  edu: constant states := digit_exponent_underline_state;
  per: constant states := period_state;
  ast: constant states := asterisk_state;
  sla: constant states := slash_state;
  col: constant states := colon_state;
  lt:  constant states := lt_state;
  gt:  constant states := gt_state;
  eq:  constant states := eq_state;
  z  : constant states := done_state;
  zb : constant states := done_backup_state;
  zb2: constant states := done_backup_two_state;

  type classes is (
     period_class,
     blank_or_tab_class,
     number_class,
     alphabetic_class,
     the_letter_e_class,
     underline_class,
     comments_class,
     prime_class,
     quote_class,
     pound_sign_class,
     minus_sign_class,
     operator_class,
     colon_class,
     semi_colon_class,
     asterisk_class,
     slash_class,
     lt_class,
     gt_class,
     eq_class,
     end_of_line_class,
     end_of_file_class);

  type transition_matrices is array (states, classes) of states;

  transition_matrix: constant transition_matrices := (
   err => (err,err,err,err,err,err,err,err,err,err,err,err,err,err,
           err,err,err,err,err,err,err),
   str => (per,str,d,  a,  a,  err,err,p,  q,  err,m,  z,  col,z,
           ast,sla,lt, gt, eq, str,z  ),
   p   => (pa, pa, pa, pa, pa, pa, pa, pp, pa, pa, pa, pa, pa, pa,
           pa, pa, pa, pa, pa, zb, err),
   pa  => (zb2,zb2,zb2,zb2,zb2,zb2,zb2,z,  zb2,zb2,zb2,zb2,zb2,zb2,
           zb2,zb2,zb2,zb2,zb2,zb2,err),
   pp  => (err,err,err,err,err,err,err,z,  err,err,err,err,err,err,
           err,err,err,err,err,err,err),
   m   => (err,zb, zb, zb, zb, err,err,zb, zb, err,mm, err,err,err,
           zb, err,err,err,err,zb, err),
   mm  => (mm, mm, mm, mm, mm, mm, mm, mm, mm, mm, mm, mm, mm, mm,
           mm, mm, mm, mm, mm, str,z  ),
   q   => (q,  q,  q,  q,  q,  q,  q,  q,  qq, q,  q,  q,  q,  q,
           q,  q,  q,  q,  q,  err,err),
   qq  => (zb, z,  q,  zb, zb, zb, zb, zb, q,  zb, zb, zb, zb, zb,
           zb, zb, zb, zb, zb, zb, err),
   a   => (zb, zb, a,  a,  a,  au, err,zb, zb, zb, zb, zb, zb, zb,
           zb, zb, zb, zb, zb, zb, err),
   au  => (err,err,a,  a,  a,  err,err,err,err,err,err,err,err,err,
           err,err,err,err,err,err,err),
   d   => (dp, zb, d,  err,e,  du, err,err,err,db, zb, zb, zb, zb,
           zb, zb, zb, zb, zb, zb, err),
   db  => (err,err,db, db, db, db, err,err,err,d,  err,err,err,err,
           err,err,err,err,err,err,err),
   du  => (err,err,d,  d,  err,err,err,err,err,err,err,err,err,err,
           err,err,err,err,err,err,err),
   dp  => (zb2,err,dpd,err,err,err,err,err,err,err,err,err,err,err,
           err,err,err,err,err,err,err),
   dpd => (zb, zb, dpd,err,e,  dpu,err,err,err,err,zb, zb, zb, zb,
           zb, zb, zb, zb, zb, zb, err),
   dpu => (err,err,dpd,err,err,err,err,err,err,err,err,err,err,err,
           err,err,err,err,err,err,err),
   e   => (err,e,  ed, err,err,err,err,err,err,err,ed, err,err,err,
           err,err,err,err,err,err,err),
   ed  => (err,zb, ed, err,err,edu,err,err,err,err,zb, zb, zb, zb,
           zb, zb, zb, zb, zb, zb, err),
   edu => (err,err,ed, err,err,err,err,err,err,err,err,err,err,err,
           err,err,err,err,err,err,err),
   per => (z,  zb, zb, zb, zb, err,err,zb, zb, zb, err,err,err,err,
           err,err,err,err,err,zb, err),
   ast => (zb, zb, zb, zb, zb, zb, zb, zb, zb, zb, zb, zb, zb, zb,
           z,  zb, zb, zb, zb, zb, err),
   sla => (zb, zb, zb, zb, zb, zb, zb, zb, zb, zb, zb, zb, zb, zb,
           zb, zb, zb, zb, z,  err,err),
   col => (zb, zb, zb, zb, zb, zb, zb, zb, zb, zb, zb, zb, zb, zb,
           zb, zb, zb, zb, z,  err,err),
   lt  => (zb, zb, zb, zb, zb, zb, zb, zb, zb, zb, zb, zb, zb, zb,
           zb, zb, z,  z,  z,  err,err),
   gt  => (zb, zb, zb, zb, zb, zb, zb, zb, zb, zb, zb, zb, zb, zb,
           zb, zb, zb, z,  z,  err,err),
   eq  => (zb, zb, zb, zb, zb, zb, zb, zb, zb, zb, zb, zb, zb, zb,
           zb, zb, zb, z,  zb, err,err),
   z   => (err,err,err,err,err,err,err,err,err,err,err,err,err,err,
           err,err,err,err,err,err,err),
   zb  => (err,err,err,err,err,err,err,err,err,err,err,err,err,err,
           err,err,err,err,err,err,err),
   zb2 => (err,err,err,err,err,err,err,err,err,err,err,err,err,err,
           err,err,err,err,err,err,err));





^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~1997-03-28  0:00 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1997-03-28  0:00 Algorithm to convert bases? Centaury
1997-03-28  0:00 ` Michael F Brenner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox