while loop not working

Feb 6, 2012 at 1:51pm
Can anyone tell me why this function is not working? It passes in an array, and the total number of values in the array (j), and the average of the array. The function is supposed to print out how many numbers are higher and lower than the average. Currently, it seems to do nothing. (I didn't post the next part of the function that finds the smaller numbers because it is identical to this loop.) I understand that means that my loop is faulty, but I can't understand why. Any insight is appreciated.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//Function definition 6
void printHigherLower(int ary[], int j, int avg)
{
   int k = 0; //Declare counter for array position
   int cnt = 0; //Declare counter to find how many are larger than average
   int cnt2 = 0;//Declare counter to find how many are smaller than average
   int largest = ary[0]; //Declare variable for largest and initialize to first value in array
   int smallest = ary[0];//Declare variable for smallest and initialize to first value in array

   //To find which and how many values in the array are greater than its average
   while (k < j)              //While k is less than j (100)
   {
       if (largest > avg)     //If largest is greater than the average (34)
        {
            largest = ary[k]; //Set k to largest
            cnt = cnt + 1;    //Increment larger counter
            k++;              //Increment k
        }
    }
    //Display message
        cout << cnt << " in the array are LARGER than its average of " << avg << endl;
    //Echo
        outfile << cnt << " in the array are LARGER than its average of " << avg << endl;
Feb 6, 2012 at 2:03pm
If The if-statement isn't true on the first run, you never change the 'largest' variable. i.e. infinite loop. (:
Feb 6, 2012 at 2:44pm
Okay, so what about doing it this way? Am I getting closer? (It still doesn't work...) but this at least prints out the display messages, but it's only giving me 2 for smaller than, and still 0 for greater than...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//Function definition 6
void printHigherLower(int ary[], int j, int avg)
{
   int k = 0; //Declare counter for array position
   int cnt = 0; //Declare counter to find how many are larger than average
   int cnt2 = 0;//Declare counter to find how many are smaller than average
   int largest = ary[0]; //Declare variable for largest and initialize to first value in array
   int smallest = ary[0];//Declare variable for smallest and initialize to first value in array


   for (k = 0; k <= j; k++)      //While k is less than j (100)
   {
       //To find all values smaller than the avg (34)
       if (smallest < avg)     //If smallest is less than the average (34)
        {
            smallest = ary[k]; //Set k to smallest
            cnt2 = cnt2 + 1;     //Increment smallest counter
        }
       //Now to find how many values in the array are greater than its average
       if (largest > avg)     //If largest is greater than the average (34)
        {
            largest = ary[k]; //Set k to largest
            cnt = cnt + 1;    //Increment larger counter
        }
    }
    //Display message
    cout << cnt << " in the array are LARGER than its average of " << avg << endl;
    //Echo
    outfile << cnt << " in the array are LARGER than its average of " << avg << endl;
    //Display message
    cout << cnt2 << " in the array are SMALLER than its average of " << avg << endl;
    //Echo
    outfile << cnt2 << " in the array are SMALLER than its average of " << avg << endl;
}
Last edited on Feb 6, 2012 at 2:51pm
Feb 6, 2012 at 2:55pm
Yay! I figured it out! I changed both my if statements from testing smallest and largest to testing ary[k] and it worked. :) Thanks for the hint there, Lynx876.
Feb 6, 2012 at 4:19pm
Mark as *solved*
Topic archived. No new replies allowed.