Desperately need array help

Hey everyone I'm struggling with arrays and need some help with this program. I really don't understand why this is giving me -nan for a output. Seems like whatever I try the input values are not being passed or stored so it can compute the average. And also, to find the highest and lowest would a bubble sort be better than a selection array as the test inputs are only 4 numbers? Thanks so much!

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131

// This program will read in a group of test scores( positive integers from 1 to 100)
// from the keyboard and then calculates and outputs  the average score
// as well as the highest and lowest score. There will be a maximum of 100 scores.


#include <iostream>
using namespace std;

typedef int GradeType[100];  // declares a new data type:
                             // an integer array of 100 elements


float findAverage (const GradeType, int);  // finds average of all grades
int   findHighest (const GradeType, int);  // finds highest of all grades
int   findLowest  (const GradeType, int);  // finds lowest of all grades

int main()

{
    GradeType  grades;					   // the array holding the grades.
    int  numberOfGrades;				   // the number of grades read.
    int pos;							   // index to the array.

	float avgOfGrades;					   // contains the average of the grades.
	int highestGrade;					   // contains the highest grade.
	int lowestGrade;					   // contains the lowest grade.

	// Read in the values into the array

	pos = 0;
	cout << "Please input a grade from 1 to 100, (or -99 to stop)" << endl;
	cin  >> grades[pos];

	while (grades[pos] != -99)
	{

        // Fill in the code to read the grades
       cout << "Please input a grade from 1 to 100, (or -99 to stop)" << endl;
       cin >> grades[pos];
	}

	numberOfGrades = pos; // Fill blank with appropriate identifier

	// call to the function to find average

	avgOfGrades = findAverage(grades, numberOfGrades);

	cout << endl << "The average of all the grades is " << avgOfGrades << endl;


	//  Fill in the call to the function that calculates highest grade
    highestGrade = findHighest(grades, numberOfGrades);

	cout << endl << "The highest grade is " << highestGrade << endl;


	// Fill in the call to the function that calculates lowest grade
    lowestGrade = findLowest(grades,numberOfGrades);
    // Fill in code to write the lowest to the screen
    cout << "The lowest grade is " << lowestGrade << endl;
	return 0;
}

//****************************************************************************
//                                 findAverage
//
// task:          This function receives an array of integers and its size.
//                It finds and returns the average of the numbers in the array
// data in:       array of floating point numbers
// data returned: avarage of the numbers in the array
//
//****************************************************************************

float findAverage (const GradeType  array, int size)

{

	float sum = 0;   // holds the sum of all the numbers

    for (int pos = 0; pos < size; pos++)


	   sum = sum + array[pos];

    return (sum / size);  //returns the average

}

//****************************************************************************
//                                 findHighest
//
// task:          This function receives an array of integers and its size.
//                It finds and returns the highest value of the numbers in
//                the array
// data in:       array of floating point numbers
// data returned: highest value of the numbers in the array
//
//****************************************************************************

int   findHighest (const GradeType array, int size)

{

   // Fill in the code for this function




}


//****************************************************************************
//                                 findLowest
//
// task:          This function receives an array of integers and its size.
//                It finds and returns the lowest value of the numbers in
//                the array
// data in:       array of floating point numbers
// data returned: lowest value of the numbers in the array
//
//****************************************************************************

int   findLowest  (const GradeType array, int size)

{
   // Fill in the code for this function



}
Last edited on
You're not increment pos in the while loop, so you're constantly reading input into grades[0].
Last edited on
Thanks so much but I cant seem to find out how to increment it... ):

I tried to increment it to this but the loop just keeps running even when -99 is the input.
1
2
3
4
5
6
7
8
 while (grades[pos] != -99)
	{

        // Fill in the code to read the grades
       cout << "Please input a grade from 1 to 100, (or -99 to stop)" << endl;
       cin >> grades[pos++];
	}

The reason being is because you increment it and you're checking the next value if its not equal to 99.

What you're going to want to do is put an if statement before you increment.

Something like this

if( grades[pos] != -99 ) ++pos;
Then when you input remove the increment.

Also technically speaking inputting like that works and is correct but it can lead to many errors. So it's not suggested.
solved thank you so much for your help you're a life saver.

code turned out to be
1
2
3
4
5
6
7
8
	while (grades[pos] != -99)
	{
        pos ++;
        // Fill in the code to read the grades
       cout << "Please input a grade from 1 to 100, (or -99 to stop)" << endl;
       cin >> grades[pos];
	}
Last edited on
You may also consider putting in a second while loop to catch any grades below zero, excluding -99, and anything above 100 should be excluded as well I assume.
Last edited on
Topic archived. No new replies allowed.