home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / l / l210 / 1.ddi / ANSWERS.ARC / ANS_263.PRO < prev    next >
Encoding:
Prolog Source  |  1988-06-21  |  1.7 KB  |  88 lines

  1. /*
  2.    Turbo Prolog 2.0, Answer to Exercise on page 263.
  3.    
  4.    Copyright (c) 1986, 88 by Borland International, Inc
  5. */
  6.  
  7. Domains
  8.     sign = neg ; pos
  9.  
  10. Predicates
  11.     check_binary ( integer, integer )
  12.     write_answer ( sign, real )
  13.     get_num ( real, real )    
  14.     get_sign ( sign )
  15.     power ( real, real, real )
  16.     read_an_int ( integer )
  17.     readbin
  18.     repeat
  19.     x_it
  20.  
  21. Clauses
  22.     readbin:-
  23.         write("Please enter a 16 bit binary number.\n\n"),
  24.         write("Example :\n\n"),
  25.         write("   BIT: 15 ------------ 0\n"),
  26.         write("         1101001010011010\n\n"),
  27.         write("BINARY : "),
  28.  
  29.         get_sign(Sign),
  30.  
  31.         get_num(Answer,15),  /* 15 is the current power of 2 */
  32.  
  33.         write_answer(Sign, Answer).
  34.  
  35.     get_sign(Sign):-
  36.         read_an_int(Bin),
  37.         Bin = 0, !,
  38.         Sign = pos;
  39.         Sign = neg.
  40.  
  41.     get_num(1,0):-!.
  42.     get_num(Answer,Power):-
  43.         read_an_int(Bin),
  44.         NewPower = Power - 1,
  45.         power(2,NewPower,Result),
  46.         get_num(NewAnswer,Newpower),
  47.         Answer = (Bin * Result) + NewAnswer.
  48.  
  49.     power(Num,Power,Ans):-
  50.         Ans = exp( Power * ln(Num) ).
  51.  
  52.     write_answer(Sign, Answer):-
  53.         Sign = neg, !,
  54.         Signed = Answer * -1 + 1,
  55.         Unsigned = Answer + 32767 ,
  56.         write("\n\nINTEGER SIGNED   : ",Signed),
  57.         write("\n\nINTEGER UNSIGNED : ",Unsigned),
  58.         nl,nl;
  59.         NewAnswer = Answer - 1,
  60.         write("\n\nDECIMAL : ",NewAnswer),nl,nl.
  61.  
  62.     read_an_int(Bin):-
  63.         readchar(Num) ,
  64.         write(Num),
  65.         check_binary(Num, Bin).
  66.         
  67.     check_binary(48,0) :- !.
  68.     check_binary(49,1) :- !.
  69.     check_binary(_,Bin) :- 
  70.         beep,
  71.         cursor(R,C) ,
  72.         C1 = C - 1 ,
  73.         cursor(R,C1),
  74.         read_an_int(Bin).
  75.         
  76.     x_it :-
  77.         write("Press X to exit...") ,
  78.         repeat ,
  79.           readchar(X) ,
  80.         upper_lower(X,'x').
  81.         
  82.     repeat :- true;repeat.        
  83.  
  84. GOAL
  85.     makewindow(1,11,11," Binary - Decimal ",0,0,25,80,1,-1,"╒╕╘╛═│"),
  86.     readbin ,
  87.     x_it
  88.