home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / CLIPPER / MISC / DUTCH_FN.ZIP / ARRAY.C next >
Encoding:
C/C++ Source or Header  |  1988-06-24  |  3.3 KB  |  178 lines

  1. /* Author : Jean-Pierre van Melis, Helmond, The Netherlands
  2. */
  3.  
  4. #include "jplib.h"
  5. /* Syntax : ATOT( <expA> [ , <expN>] )
  6.    Return : Total of all (or <expN> first ) numerical elements of
  7.             Array <expA>
  8.  
  9. */
  10.  
  11. CLIPPER atot()
  12. {
  13.    if (ISARRAY(1))
  14.    {
  15.       quant i;
  16.       quant alength;
  17.       double answer = 0.00;
  18.  
  19.       if (ISNUM(2) && _parnd(2) > 0)
  20.          alength = (quant) min(ALENGTH(1), _parnd(2));
  21.       else
  22.          alength = ALENGTH(1);
  23.  
  24.       for (i=1; i <= alength; i++)
  25.       {
  26.          if (_parinfa(1, i) == NUMERIC)
  27.             answer += _parnd(1, i);
  28.       }
  29.       _retnd(answer);
  30.    }
  31.    else
  32.       _ret();
  33.  
  34.    return;
  35. }
  36.  
  37. /**********************************************************************
  38. Syntax : AAVG( <expA> [ , <expN>] )
  39.    Return : Average of all (or <expN> first ) numerical elements of
  40.             Array <expA>
  41.  
  42. */
  43. CLIPPER aavg()
  44. {
  45.    if (PCOUNT == 1 && ISARRAY(1))
  46.    {
  47.       quant alength;
  48.       quant i;
  49.       quant j = 0;
  50.       double answer = 0.00;
  51.  
  52.       if (ISNUM(2) && _parnd(2) > 0)
  53.          alength = (quant) min(ALENGTH(1), _parnd(2));
  54.       else
  55.          alength = ALENGTH(1);
  56.  
  57.       for (i=1; i <= alength; i++)
  58.       {
  59.          if (_parinfa(1, i) == NUMERIC)
  60.          {
  61.             answer += _parnd(1, i);
  62.             j++;
  63.          }
  64.       }
  65.       if(j)
  66.          _retnd(answer/j);
  67.       else
  68.          _retnd(0);
  69.  
  70.    }
  71.    else
  72.       _ret();
  73.  
  74.    return;
  75. }
  76.  
  77. /* Syntax : AMAX( <expA> [ , <expN>] )
  78.    Return : Maximum of all (or <expN> first ) numerical elements of
  79.             Array <expA>
  80.  
  81. */
  82.  
  83. CLIPPER amax()
  84. {
  85.    if (ISARRAY(1))
  86.    {
  87.       quant i;
  88.       quant alength;
  89.       double answer = 0.00;
  90.       Boolean first = TRUE;
  91.  
  92.       if (ISNUM(2) && _parnd(2) > 0)
  93.          alength = (quant) min(ALENGTH(1), _parnd(2));
  94.       else
  95.          alength = ALENGTH(1);
  96.  
  97.       for (i=1; i <= alength; i++)
  98.       {
  99.          if (_parinfa(1, i) == NUMERIC)
  100.             if (first)
  101.             {
  102.                answer = _parnd(1,i);
  103.                first  = FALSE;
  104.             }
  105.             else
  106.                answer = max(answer,_parnd(1, i));
  107.       }
  108.       _retnd(answer);
  109.    }
  110.    else
  111.       _ret();
  112.  
  113.    return;
  114. }
  115.  
  116. /* Syntax : AMIN( <expA> [ , <expN>] )
  117.    Return : Minimum of all (or <expN> first ) numerical elements of
  118.             Array <expA>
  119.  
  120. */
  121.  
  122. CLIPPER amin()
  123. {
  124.    if (ISARRAY(1))
  125.    {
  126.       quant   i;
  127.       quant   alength;
  128.       double  answer = 0.00;
  129.       Boolean first  = TRUE;
  130.  
  131.       if (ISNUM(2) && _parnd(2) > 0)
  132.          alength = (quant) min(ALENGTH(1), _parnd(2));
  133.       else
  134.          alength = ALENGTH(1);
  135.  
  136.       for (i=1; i <= alength; i++)
  137.       {
  138.          if (_parinfa(1, i) == NUMERIC)
  139.             if (first)
  140.             {
  141.                answer = _parnd(1,i);
  142.                first  = FALSE;
  143.             }
  144.             else
  145.                answer = min(answer,_parnd(1, i));
  146.       }
  147.       _retnd(answer);
  148.    }
  149.    else
  150.       _ret();
  151.  
  152.    return;
  153. }
  154.  
  155.  
  156. /* Syntax : ALENG( <expA> )
  157.    Return : Returns actual length of an Array (without trailing undefined
  158.             elements)
  159.  
  160. */
  161.  
  162. CLIPPER aleng()
  163. {
  164.    if (ISARRAY(1))
  165.    {
  166.       int i;
  167.  
  168.       for (i=ALENGTH(1); _parinfa(1, i) == UNDEF; i--)
  169.          ;
  170.  
  171.       _retni(i);
  172.    }
  173.    else
  174.       _ret();
  175.  
  176.    return;
  177. }
  178.