Please help me figure this out!!

Hey guys, I'm trying to modify my old program to now incorporate a sort function to sort the data into descending order. I think I've got the sort properly programmed My show order only shows all 12 values but 9 of them are wrong. Not sure where I am going wrong here..... Any help would be greatly appreciated!

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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;

// Function Prototypes

double getTotal(double[], int);  
double getAverage(double[],int);
double getLowest(double[], int, int&);
double getHighest(double[], int, int&);
//void sortArray(int indicies[], double rainFall[], string months[], int AMT);
void showOrder(double rainFall[], string months[], const int AMT, int index);
void dualSort(double rainFall[], string months[], const int AMT);

int main()
{
	// Variables

	const int AMT = 12;																						// Number of Months

	string months[AMT] = { "January", "Feburary", "March", "April", "May", "June", "July",					// Names of Months
									"August", "September", "October", "November", "December" };

	double rainFall[AMT];																					// rainfall in AMT
	double total, average;
	int highest, lowest;																					// Stores the highest, lowest, average, and total
	string highMonth;																						// String for High Month
	string lowMonth;																						// String for Low Month
	int index = 0;
	

	// Welcome

	cout << "Welcome to the modified rainfall statistics program" << endl;
	cout << "===================================================" << endl;


	// Get rain fall from user
	int count;
	for (count = 0; count < AMT; count++)
	{
		cout << "\nHow many inches of rain did " << months[count] << " get?" << endl;
		cin >> rainFall[count];

		while (rainFall[count] < 0)
		{
			cout << "You entered a number that is below 0, please enter a number that is above 0." << endl;
			cin >> rainFall[count];
		}
	}

	// Gets and Displays Total
	total = getTotal(rainFall, AMT);
	cout << "\nThe Total rainfall for the whole year is: " << total << endl;

	cout << fixed << showpoint << setprecision(2) << endl;

	// Gets and Displays Average
	average = getAverage(rainFall, AMT);
	cout << "The Average rainfall for the whole year is: " << average << endl;

	// Gets and Displays Lowest

	lowMonth = rainFall[0];

	for (count = 0; count > AMT; count++)
	{
		lowMonth = months[count];
	}
	
	lowest = getLowest(rainFall, AMT, count);
	cout << "\nThe Lowest rainfall for the whole year is: " << lowest << endl;
	cout << "The month with the lowest amount of rainfall is: " << months[count] << endl;

	// Gets and Displays Highest

	highMonth = rainFall[0];

	for (count = 1; count < AMT; count++)
	{
			highMonth = months[count];
	}
	

	highest = getHighest(rainFall, AMT, count);		// calls the function getHighest

	cout << "\nThe Highest rainfall for the whole year is: " << highest << endl; 
	cout << "The month with the highest amount of rainfall is: " << months[count] << endl;



	dualSort(rainFall, months, AMT);				// calls the dualSort

	showOrder(rainFall, months, AMT, index);		// shows the months and rainfall

	


/*
	int indicies[AMT];

	for (int month = 0; month < AMT; month++)
	{
		indicies[AMT] = month;
	}

	sortArray(indicies, rainFall, months, AMT);
*/

	return 0;

}

// This function calculates the total

double getTotal(double rainFall[], int AMT)
	{
		double total = 0;

		for (int count = 0; count < AMT; count++)

			total += rainFall[count];

		return total;

	}

// This Function gets the average.

double getAverage(double rainFall[], int AMT)
{
	double average = 0;
	double total;

	total = getTotal(rainFall, AMT);

	average = total / AMT;
	
	return average;

}

// This Function gets the highest

double getHighest(double rainFall[], int AMT, int &index)
{

	double highest;
	highest = rainFall[0];
	
	for (int count = 0; count < AMT; count++) //start with 0
	{
		if (rainFall[count] > highest)
		{
			highest = rainFall[count];
			index = count;
		}
	}
	return highest;

}

// This Function gets the lowest

double getLowest(double rainFall[], int AMT, int &index)
{
	double lowest;

	lowest = rainFall[0];

	for (int count = 0; count < AMT; count++) //start with 0
	{
		if (rainFall[count] < lowest)
		{
			lowest = rainFall[count];
			index = count;
		}

	}
	return lowest;
}


// Function to show the order

void showOrder(double rainFall[], string months[], const int AMT, int index)

{
	cout << "\nMonth \t\t Rainfall amount\n";
	cout << "-------------------------------";

	for (int index = 0; index < AMT; index++);
	{
		cout << "\n" << months[index]<< "\t";
		cout << setw(8) << rainFall[index] << endl;
	}
	cout << endl;
}


// Dual Sort function

void dualSort(double rainFall[], string months[], const int AMT) 
{

	int startScan, maxIndex, tempID;
	string maxValue;

	for (startScan = 0; startScan < (AMT - 1); startScan++)
	{
		maxIndex = startScan;
		maxValue = months[startScan]; 
		tempID = rainFall[startScan];

		for (int index = startScan + 1; index < AMT; index++)
		{ 
		
			if (months[index] > maxValue)
			{

				maxValue = months[index];
				tempID = rainFall[index];
				maxIndex = index;

			}
		
			months[maxIndex] = months[startScan];
			rainFall[maxIndex] = rainFall[startScan];
			months[startScan] = maxValue;
			rainFall[startScan] = tempID;
		}



	}




}



/*
// Function to sort the array

void sortArray(int indicies[], double rainFall[], string months[], int AMT)
{
	int temp;
	bool swap;

	do
	{
		for (int count = 0; count < AMT - 1; count++)
		{
			if (rainFall[indicies[count]] < rainFall[indicies[count + 1]])
				temp = rainFall[count];
			indicies[count] = indicies[count + 1];
			indicies[count] = temp;
			swap = true;
		}

		for (int index = 0; index < AMT; index++)
		{
			cout << "Rainfall for " << months[indicies[index]] << "was" << rainFall[indicies[index]] << endl;
		}
	}
	while (swap);
}
*/
Last edited on
> but for some reason the program crashes.
your program doesn't even build
undefined reference to `dualSort(double*, std::string*, int)'
I think I fixed the issue, now I'm having trouble with getting the program to display all 12 months and their values. I'm only getting 1 month and 1 value... Please any help would be greatly appreciated. Thanks in advance!
line 193 for (int index = 0; index < AMT; index++);
note the semicolon at the end.
Thanks ne555! such a little mistake, it now shows everything except that the first 9 lines are September and then it shows October, November, December.... instead of January, Feb, etc... Any insight on why that is?
`dualSort()' seems to be a selection sort.
So the loop in line 216 is supposed to find the biggest element. ¿What's the purpose of lines 228 to 231? ¿why are they inside the find the maximum loop?

Also, it seems a little weird that you are sorting by month (alphabetical) instead of rainfall.
Your loop starting line 67 doesn't do anything either. I'm not sure what you were trying to (you just assign the same var over and over again), but count will never be > AMT, so it never runs.

It's not good practice to have parameters in all caps either, that's conventionally reserved for preprocessor directives or symbolic constants. Even tho you pass in your constant defined in main() as the amount parameter to these functions (which is fine) the prototypes and bodies of these other funcs are using their own independent variable.

Also good practice to check the denominator and ensure it's not 0, if integer division is being done (with floating point division by 0, you get a special value representing infinity), because integer division by 0 is undefined. Im referring to your getAverage() func.
Topic archived. No new replies allowed.