home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol131 / median.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1984-04-29  |  1.0 KB  |  40 lines

  1. FUNCTION median( VAR list   : real_array;
  2.          left,right : INTEGER;
  3.          VAR midval : REAL   ) : BOOLEAN;
  4.  
  5. {$c-,m-,f-,r-  [turn off compiler options for speed : median is debugged] }
  6.  
  7. {
  8. Author  : G.M.Acland.; University of Pennsylvsania ;1982.
  9. Comment : Determines the median value of the array segment "list",returning
  10. it in the variable midval.If (right - left + 1) < 1 returns FALSE.
  11.       Uses the PROCEDURE select.
  12. }
  13. VAR
  14.     ok    : BOOLEAN;
  15.     n,k    : INTEGER;
  16.     low    : REAL;
  17. BEGIN
  18.  n := right - left + 1;
  19.  IF n < 1 THEN median := FALSE
  20.  ELSE BEGIN
  21.   IF n = 1 THEN midval := list[left]
  22.   ELSE BEGIN
  23.    IF ODD(n) THEN
  24.     BEGIN
  25.      k      := (n + 1) DIV 2;
  26.      median := select(list,left,right,k);
  27.      midval := list[k];
  28.     END 
  29.     ELSE BEGIN
  30.      k      := n DIV 2;
  31.      ok     := select(list,left,right,k);
  32.      low    := list[k];
  33.      k      := k + 1;
  34.      median := ok AND select(list,left,right,k);
  35.      midval := (low + list[k])/2.0;
  36.     END;
  37.    END; { of : if n = 1 }
  38.   END;  { of : if n < 1 }
  39. END;    { of : function median }
  40.