472,374 Members | 1,133 Online

# Finding lowest/highest values in 2D array help 5
Hey guys, any idea as to how to find the lowest value and the highest value in this 2D array? I made the functions to find the lowest and highest, but all im getting on execution is a 1 on both, no matter what number i input.

Here's my code
Expand|Select|Wrap|Line Numbers
1. #include <cstdlib>
2. #include <iostream>
3.
4. using namespace std;
5.
6. const int MONKEYS = 3;
7. const int DAYS = 7;
8. double average = 0;
9.
10. int getSum (int [][DAYS]);
11. void getChart (int [][DAYS]);
12. void dayAvg (int table [][DAYS]);
13. int findLowest (int table [][DAYS]);
14. int findHighest (int table [][DAYS]);
15.
16. int main(int argc, char *argv[])
17. {
18.     int table [MONKEYS][DAYS];
19.
20.     cout << "The diet of 3 monkeys over 7 days, please input your info: \n\n";
21.
22.     getChart(table);
23.
24.     cout << "The total amount of food consumed by the monkeys: "
25.          << getSum(table) << " Pounds\n\n";
26.
27.     dayAvg(table);
28.
29.     cout << "The lowest amount of food eaten was: " << findLowest(table) << " Pounds\n";
30.     cout << "The highest amount of food eaten was: " << findHighest(table) << " Pounds\n";
31.
32.     //ofstream outData;
33.     //outData.open("results.txt");
34.
35.     system("PAUSE");
36.     return EXIT_SUCCESS;
37. }
38.
39. int getSum (int table [][DAYS])
40. {
41.     int sum = 0;
42.     for ( int monkey = 0;  monkey < MONKEYS; monkey++)
43.     {
44.         for (int day = 0; day < DAYS; day++)
45.             sum += table [monkey][day];
46.     }
47.     return sum;
48. }
49.
50. void getChart (int table[][DAYS])
51. {
52.     for (int monkey = 0; monkey < MONKEYS; monkey++)
53.     {
54.         for (int day = 0; day < DAYS; day++)
55.         {
56.             cout << "Monkey " << (monkey+1) << ", ";
57.             cout << "Day " << (day+1) << ": ";
58.             cin >> table [monkey][day];
59.         }
60.         cout << endl;
61.     }
62. }
63.
64. void dayAvg (int table [][DAYS])
65. {
66.     for ( int day = 0;  day < DAYS; day++)
67.     {
68.         int total = 0;
69.         for (int monkey = 0; monkey < MONKEYS; monkey++)
70.         {
71.             total += table [monkey][day];
72.         }
73.         average = total/MONKEYS;
74.         cout << "Average food consumed on day " << (day+1)
75.              << " by all 3 monkeys is: " << average << " Pounds" << endl;
76.     }
77. }
78.
79. int findLowest (int table [][DAYS])
80. {
81.     int lowest = table [MONKEYS][DAYS];
82.     for (int monkey = 0; monkey < MONKEYS; monkey++)
83.     {
84.         for (int day = 0; day < DAYS; day++)
85.         {
86.             if (table [monkey][day] < lowest)
87.                 lowest = table[MONKEYS][DAYS];
88.         }
89.
90.         cout << endl;
91.     }
92.     return lowest;
93. }
94.
95. int findHighest (int table [][DAYS])
96. {
97.     int highest = table [MONKEYS][DAYS];
98.     for (int monkey = 0; monkey < MONKEYS; monkey++)
99.     {
100.         for (int day = 0; day < DAYS; day++)
101.         {
102.             if (table [monkey][day] > highest)
103.                 highest = table[MONKEYS][DAYS];
104.         }
105.
106.         cout << endl;
107.     }
108.     return highest;
109. }
Nov 11 '10 #1

Line 87 and 103 have the array indexes in the wrong case.

7 7228 Banfa
9,065 Expert Mod 8TB
Line 87 and 103 have the array indexes in the wrong case.
Nov 11 '10 #2
Alberto Fortuny
5 Hmm ok well changing the case in line 103 for the findHighest function to [monkey][day] worked, but it did not work for the findLowest function. Any ideas why?

Here's my code again just in case:
Expand|Select|Wrap|Line Numbers
1. #include <cstdlib>
2. #include <iostream>
3.
4. using namespace std;
5.
6. const int MONKEYS = 3;
7. const int DAYS = 7;
8. double average = 0;
9.
10. int getSum (int [][DAYS]);
11. void getChart (int [][DAYS]);
12. void dayAvg (int table [][DAYS]);
13. int findLowest (int table [][DAYS]);
14. int findHighest (int table [][DAYS]);
15.
16. int main(int argc, char *argv[])
17. {
18.     int table [MONKEYS][DAYS];
19.
20.     cout << "The diet of 3 monkeys over 7 days, please input your info: \n\n";
21.
22.     getChart(table);
23.
24.     cout << "The total amount of food consumed by the monkeys: "
25.          << getSum(table) << " Pounds\n\n";
26.
27.     dayAvg(table);
28.
29.     cout << "The lowest amount of food eaten : " << findLowest(table) << " Pounds\n";
30.     cout << "The highest amount of food eaten : " << findHighest(table) << " Pounds\n";
31.
32.     //ofstream outData;
33.     //outData.open("results.txt");
34.
35.     system("PAUSE");
36.     return EXIT_SUCCESS;
37. }
38.
39. int getSum (int table [][DAYS])
40. {
41.     int sum = 0;
42.     for ( int monkey = 0;  monkey < MONKEYS; monkey++)
43.     {
44.         for (int day = 0; day < DAYS; day++)
45.             sum += table [monkey][day];
46.     }
47.     return sum;
48. }
49.
50. void getChart (int table[][DAYS])
51. {
52.     for (int monkey = 0; monkey < MONKEYS; monkey++)
53.     {
54.         for (int day = 0; day < DAYS; day++)
55.         {
56.             cout << "Monkey " << (monkey+1) << ", ";
57.             cout << "Day " << (day+1) << ": ";
58.             cin >> table [monkey][day];
59.         }
60.         cout << endl;
61.     }
62. }
63.
64. void dayAvg (int table [][DAYS])
65. {
66.     for ( int day = 0;  day < DAYS; day++)
67.     {
68.         int total = 0;
69.         for (int monkey = 0; monkey < MONKEYS; monkey++)
70.         {
71.             total += table [monkey][day];
72.         }
73.         average = total/MONKEYS;
74.         cout << "Average food consumed on day " << (day+1)
75.              << " by all 3 monkeys is: " << average << " Pounds" << endl;
76.     }
77. }
78.
79. int findLowest (int table [][DAYS])
80. {
81.     int lowest = table [MONKEYS][DAYS];
82.     for (int monkey = 0; monkey < MONKEYS; monkey++)
83.     {
84.         for (int day = 0; day < DAYS; day++)
85.         {
86.             if (table [monkey][day] < lowest)
87.                 lowest = table[monkey][day];
88.         }
89.
90.         cout << endl;
91.     }
92.     return lowest;
93. }
94.
95. int findHighest (int table [][DAYS])
96. {
97.     int highest = table [MONKEYS][DAYS];
98.     for (int monkey = 0; monkey < MONKEYS; monkey++)
99.     {
100.         for (int day = 0; day < DAYS; day++)
101.         {
102.             if (table [monkey][day] > highest)
103.                 highest = table[monkey][day];
104.         }
105.
106.         cout << endl;
107.     }
108.     return highest;
109. }
110.
Nov 11 '10 #3
Alberto Fortuny
5 Ok well i go this working, any idea where to start to write all this data that the program outputs to the screen, to a file?
Nov 11 '10 #4
Alberto Fortuny
5 Here is what i have so far as to writing the data to a file, the problem im getting is writing the void functions to a file.
Expand|Select|Wrap|Line Numbers
1. #include <cstdlib>
2. #include <iostream>
3. #include <fstream>
4.
5. using namespace std;
6.
7. const int MONKEYS = 3;
8. const int DAYS = 7;
9. double average = 0;
10.
11. int getSum (int [][DAYS]);
12. void getChart (int [][DAYS]);
13. void dayAvg (int table [][DAYS]);
14. int findLowest (int table [][DAYS]);
15. int findHighest (int table [][DAYS]);
16.
17. int main(int argc, char *argv[])
18. {
19.     int table [MONKEYS][DAYS];
20.     ofstream outfile;
21.
22.     cout << "The diet of 3 monkeys over 7 days, please input your info: \n\n";
23.
24.     outfile.open("MonkeyBuisnessFile.txt");
25.
26.     getChart(table);
27.
28.     cout << "The total amount of food consumed by the monkeys: "
29.          << getSum(table) << " Pounds\n\n";
30.     outfile << "The total amount of food consumed by the monkeys: "
31.          << getSum(table) << " Pounds\n\n";
32.
33.     dayAvg(table);
34.
35.     cout << "The lowest amount of food eaten : " << findLowest(table) << " Pounds\n";
36.     outfile << "The lowest amount of food eaten : " << findLowest(table) << " Pounds\n";
37.     cout << "The highest amount of food eaten : " << findHighest(table) << " Pounds\n";
38.     outfile << "The highest amount of food eaten : " << findHighest(table) << " Pounds\n";
39.
40.     outfile.close();
41.
42.     system("PAUSE");
43.     return EXIT_SUCCESS;
44. }
45.
46. int getSum (int table [][DAYS])
47. {
48.     int sum = 0;
49.     for ( int monkey = 0;  monkey < MONKEYS; monkey++)
50.     {
51.         for (int day = 0; day < DAYS; day++)
52.             sum += table [monkey][day];
53.     }
54.     return sum;
55. }
56.
57. void getChart (int table[][DAYS])
58. {
59.     for (int monkey = 0; monkey < MONKEYS; monkey++)
60.     {
61.         for (int day = 0; day < DAYS; day++)
62.         {
63.             cout << "Monkey " << (monkey+1) << ", ";
64.             cout << "Day " << (day+1) << ": ";
65.             cin >> table [monkey][day];
66.         }
67.         cout << endl;
68.     }
69. }
70.
71. void dayAvg (int table [][DAYS])
72. {
73.     for ( int day = 0;  day < DAYS; day++)
74.     {
75.         int total = 0;
76.         for (int monkey = 0; monkey < MONKEYS; monkey++)
77.         {
78.             total += table [monkey][day];
79.         }
80.         average = total/MONKEYS;
81.         cout << "Average food consumed on day " << (day+1)
82.              << " by all 3 monkeys is: " << average << " Pounds" << endl;
83.     }
84. }
85.
86. int findLowest (int table [][DAYS])
87. {
88.     int lowest = table ;
89.     for (int monkey = 0; monkey < MONKEYS; monkey++)
90.     {
91.         for (int day = 0; day < DAYS; day++)
92.         {
93.             if (table [monkey][day] < lowest)
94.                 lowest = table[monkey][day];
95.         }
96.
97.         cout << endl;
98.     }
99.     return lowest;
100. }
101.
102. int findHighest (int table [][DAYS])
103. {
104.     int highest = table ;
105.     for (int monkey = 0; monkey < MONKEYS; monkey++)
106.     {
107.         for (int day = 0; day < DAYS; day++)
108.         {
109.             if (table [monkey][day] > highest)
110.                 highest = table[monkey][day];
111.         }
112.
113.         cout << endl;
114.     }
115.     return highest;
116. }
117.
Nov 11 '10 #5
Alberto Fortuny
5 Also how do i use input validation n the getChart function so the program advertises the user that negative numbers aren't allowed?
Nov 11 '10 #6
Banfa
9,065 Expert Mod 8TB
You need to split functionality and interface.

That is the code that performs the logic of the program should not perform IO operations. It should return a result that can be passed to a section of IO code that outputs the data.

For example `void dayAvg (int table [][DAYS])`. It should not contain cout statements but rather should return its result, say as a `std::vector`.

Additionally you can write your output code in a function that takes an `std::ostream&` as input (as well as the table). Since both `std::cout` and `std::ofstream` inherit from `std::ostream` they can both be passed to the function and you only have to write your output code once and just call it twice.

For example

Expand|Select|Wrap|Line Numbers
1. #include <string>
2. #include <iostream>
3. #include <fstream>
4.
5. void outputResults(std::ostream& out, const int& value);
6.
7. int main()
8. {
9.     int value = 5;
10.     std::ofstream file("outfile.txt");
11.
12.     outputResults(std::cout, value);
13.     outputResults(file, value);
14.
15.     return 0;
16. }
17.
18. void outputResults(std::ostream& out, const int& value)
19. {
20.     out << "The value is: " << value << std::endl;
21. }
22.
23.
Nov 11 '10 #7
Banfa
9,065 Expert Mod 8TB
Either check the values for negative numbers and report the error to the user if they are input or make the base type of table unsigned and check cin for errors (which you should be doing anyway what if a the user enters text?).
Nov 11 '10 #8