home *** CD-ROM | disk | FTP | other *** search
/ Power Programming / powerprogramming1994.iso / progtool / microcrn / issue_38.arc / TIDBIT38.FIG < prev   
Text File  |  1987-09-21  |  3KB  |  161 lines

  1.  
  2.  
  3. /* Figure 1 -- Statistics in PROLOG */
  4.  
  5. DOMAINS
  6.     real_list=real*
  7.  
  8. DATABASE
  9.     answer(real)
  10.     answer2(real)
  11.     data(integer,real_list)
  12. PREDICATES
  13.     main
  14.     process(real_list)
  15.     process2(real_list)
  16.     mean(real_list,real,integer)
  17.     sd(real_list,real,real,integer)
  18. CLAUSES
  19.  
  20. main:-
  21.     write("Enter file that contains data."),
  22.     readln(Filename),
  23.     consult(Filename),    
  24.     data(1,List),
  25.     process(List),            /* Pass the list to a function */
  26.     process2(List).           /* for processing.             */
  27.  
  28. process(List):-            /* This function sets up for the mean.*/
  29.     write("Start"),           /* Start timing. */
  30.     N=0,
  31.     S=0,
  32.     mean(List,S,N),           /* Pass the list & variables to mean.*/
  33.     answer(Mean),             /* Get the answer from storage. */
  34.     write(Mean),nl.
  35.  
  36. process2(List):-           /* Set up to calculate variance & */
  37.     answer(Mean),             /* sd.                            */
  38.     sd(List,Mean,0,0),        /* Pass list and mean (which we   */
  39.     answer2(Var),             /* use to calculate the vari & sd.*/
  40.     write(Var),nl,            /* Get variance from storage.     */
  41.     Sdev = sqrt(Var),         /* Find sd (sqrt of variance).    */
  42.     write(Sdev).
  43.  
  44. mean([H|T],S,N):-          /* Find the mean recursively.     */
  45.     Y=H+S,
  46.     N2=N+1,
  47.     mean(T,Y,N2).
  48. mean([],S,N):-
  49.     Z=S/N,
  50.     assert(answer(Z)).        /* Store the result in a db.      */
  51.  
  52. sd([H|T],Mean,Squares,N):-    /* Find vari/sd recursively.      */
  53.     Dev = Mean - H,
  54.     Square = Dev * Dev,
  55.     NewSquares = Squares + Square,
  56.     N2 = N + 1,
  57.     sd(T,Mean,NewSquares,N2).
  58. sd([],Mean,Squares,N2):-
  59.     Var = Squares/(N2-1),
  60.     assert(answer2(Var)).
  61.  
  62. GOAL
  63.     main.
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71. /* Figure 2  -- Statistics in C  */
  72.  
  73. #include <stdio.h>
  74. void stat(double *list);
  75.  
  76. main()
  77. {    
  78.     double list[7000];
  79.     double i;
  80.  
  81.     for(i = 0; i < 7000; i++) /* Create a list to process.      */
  82.     list[i]=i + 1;
  83.     stat(list);               /* Pass the list to stat function.*/
  84. }
  85. void stat(double *list)
  86. {       int i,c;
  87.         double x,z,dev,square,squares,var,sd;
  88.     double sqrt(double sd);
  89.     x = squares = 0;
  90.     
  91.     puts("Start");            /* Start timing.                 */
  92.                               /* Read array elements.          */
  93.     for(i = 0; i < 7000; i++){
  94.       x = list[i] + x;
  95.     }
  96.     z = x/i;                  /* Mean = sum of list/count.     */
  97.     printf("%f\n",z);
  98.                               /* Calculate variance.           */
  99.     for(i = 0; i < 7000; i++){
  100.       dev = z - list[i];
  101.       square = dev * dev;
  102.       squares = squares + square;
  103.     }
  104.     var = squares/(i-1);
  105.     printf("%f\n",var);
  106.     sd = sqrt(var);           /* Find sd.                      */
  107.     printf("%f\n",sd);    
  108. }
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115. /* Figure 3  -- Statistics in Pascal  */
  116.  
  117. program stat;
  118.  
  119. type
  120.  
  121. L = array[1..7000] of real;
  122.  
  123. var
  124.  
  125. I : integer;
  126. List : L;
  127. X,Z,Dev,Square,Squares,Vari,Sd : real;
  128.  
  129. begin
  130.  
  131. For I := 1 to 7000 do     { Create a list to process. }
  132.   List[I] := I;
  133.  
  134. X := 0;
  135. Squares := 0;
  136. Dev := 0;
  137.  
  138. Writeln('start');         { Start timing.             }
  139.  
  140. For I := 1 to 7000 do     { Read array elements.      }
  141.   X := X + List[I];
  142.  
  143. Z := X/I;                 { Find mean.                }
  144. writeln(Z);
  145.  
  146. For I := 1 to 7000 do     { Calculate variance.       }
  147. begin
  148.   Dev := Z - List[I];
  149.   Square := Dev * Dev;
  150.   Squares := Squares + Square;
  151. end;
  152.  
  153. Vari := Squares/(I - 1);
  154. writeln(Vari);
  155. Sd := sqrt(Vari);         { Find sd.                  }
  156. writeln(Sd);
  157.  
  158. end.
  159.  
  160.  
  161.