-
Notifications
You must be signed in to change notification settings - Fork 0
/
HOT PLATE CODE
203 lines (177 loc) · 6.48 KB
/
HOT PLATE CODE
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
/*
Nathaniel Neubert, Caleb Pomar, [email protected], [email protected]
This is a program that simulates a hotplate with heaters of 100 degrees on the top and
bottom. It outputs an excel file which can be used to create a graphical representaion.
The program may also accept a pre-existing hotplate temperature table and determine the
future temperature within a set number of iterations. The size of the Hotplate is set
at 10 by 10.
This program was made using proper pair programming in Visual Studios.
We successfully created such a graphical representation in excel with the output file created
by our program.
Test Case 1
We hand calculated all the values for the hotplate after one and two iterations and
stored the values in an excel spreadsheet. Below the results can be seen.
After first iteration
0.0000 100.0000 100.0000 100.0000 100.0000 100.0000 100.0000 100.0000 100.0000 0.0000
0.0000 25.0000 25.0000 25.0000 25.0000 25.0000 25.0000 25.0000 25.0000 0.0000
0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
0.0000 25.0000 25.0000 25.0000 25.0000 25.0000 25.0000 25.0000 25.0000 0.0000
0.0000 100.0000 100.0000 100.0000 100.0000 100.0000 100.0000 100.0000 100.0000 0.0000
After Second iteration
0.0000 100.0000 100.0000 100.0000 100.0000 100.0000 100.0000 100.0000 100.0000 0.0000
0.0000 31.2500 37.5000 37.5000 37.5000 37.5000 37.5000 37.5000 31.2500 0.0000
0.0000 6.2500 6.2500 6.2500 6.2500 6.2500 6.2500 6.2500 6.2500 0.0000
0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
0.0000 6.2500 6.2500 6.2500 6.2500 6.2500 6.2500 6.2500 6.2500 0.0000
0.0000 31.2500 37.5000 37.5000 37.5000 37.5000 37.5000 37.5000 31.2500 0.0000
0.0000 100.0000 100.0000 100.0000 100.0000 100.0000 100.0000 100.0000 100.0000 0.0000
Result: Passed
*/
#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
int main() {
const int SIDE_LENGTH = 10;
const int MIN_INDEX = 0;
const int MAX_INDEX = SIDE_LENGTH - 1;
const int NUM_NEIGHBORS = 4;
const int DESIRED_ITERATIONS = 3;
const double HOT_TEMP = 100.0000;
const double COLD_TEMP = 0.0000;
const double STABLE_CHANGE = 0.1;
double oldTemps[SIDE_LENGTH][SIDE_LENGTH];
double newTemps[SIDE_LENGTH][SIDE_LENGTH];
double maxTempChange = 0.0;
double currentTempChange = 0.0;
const int NEIGHBOR_ADJUST = 1;
const int HEAT_PRECISION = 4;
const int HEAT_WIDTH = 10;
ifstream inputPlate;
ofstream outputPlate;
string oFileName = "Hotplate.csv";
string iFileName = "Inputplate.txt";
cout << "Hotplate simulator" << endl << endl;
cout << "Printing initial plate..." << endl;
for (int i = 0; i < SIDE_LENGTH; ++i) {
for (int j = 0; j < SIDE_LENGTH; ++j) {
if ((i == MIN_INDEX || i == MAX_INDEX) && (j > MIN_INDEX && j < MAX_INDEX)) {
oldTemps[i][j] = HOT_TEMP;
}
else {
oldTemps[i][j] = COLD_TEMP;
}
}
}
for (int i = 0; i < SIDE_LENGTH; ++i) {
for (int j = 0; j < SIDE_LENGTH; ++j) {
cout << fixed << setprecision(HEAT_PRECISION) << setw(HEAT_WIDTH) << oldTemps[i][j];
if (j < MAX_INDEX) {
cout << ",";
}
}
cout << endl;
}
cout << endl;
cout << "Printing Plate after one iteration..." << endl;
for (int i = 1; i < MAX_INDEX; ++i) {
for (int j = 1; j < MAX_INDEX; ++j) {
newTemps[i][j] = (oldTemps[i - NEIGHBOR_ADJUST][j] + oldTemps[i + NEIGHBOR_ADJUST][j] +
oldTemps[i][j + NEIGHBOR_ADJUST] + oldTemps[i][j - NEIGHBOR_ADJUST]) / NUM_NEIGHBORS;
}
}
for (int i = 1; i < MAX_INDEX; ++i) {
for (int j = 1; j < MAX_INDEX; ++j) {
oldTemps[i][j] = newTemps[i][j];
}
}
for (int i = 0; i < SIDE_LENGTH; ++i) {
for (int j = 0; j < SIDE_LENGTH; ++j) {
cout << fixed << setprecision(HEAT_PRECISION) << setw(HEAT_WIDTH) << oldTemps[i][j];
if (j < MAX_INDEX) {
cout << ",";
}
}
cout << endl;
}
do {
maxTempChange = 0;
for (int i = 1; i < MAX_INDEX; ++i) {
for (int j = 1; j < MAX_INDEX; ++j) {
newTemps[i][j] = (oldTemps[i - NEIGHBOR_ADJUST][j] + oldTemps[i + NEIGHBOR_ADJUST][j] +
oldTemps[i][j + NEIGHBOR_ADJUST] + oldTemps[i][j - NEIGHBOR_ADJUST]) / NUM_NEIGHBORS;
currentTempChange = newTemps[i][j] - oldTemps[i][j];
if (currentTempChange > maxTempChange) {
maxTempChange = currentTempChange;
}
}
}
for (int i = 1; i < MAX_INDEX; ++i) {
for (int j = 1; j < MAX_INDEX; ++j) {
oldTemps[i][j] = newTemps[i][j];
}
}
} while (maxTempChange > STABLE_CHANGE);
cout << endl;
cout << "Printing final plate..." << endl;
outputPlate.open(oFileName);
for (int i = 0; i < SIDE_LENGTH; ++i) {
for (int j = 0; j < SIDE_LENGTH; ++j) {
cout << fixed << setprecision(HEAT_PRECISION) << setw(HEAT_WIDTH) << oldTemps[i][j];
outputPlate << fixed << setprecision(HEAT_PRECISION) << setw(HEAT_WIDTH) << oldTemps[i][j];
if (j < MAX_INDEX) {
cout << ",";
outputPlate << ",";
}
}
cout << endl;
outputPlate << endl;
}
outputPlate.close();
cout << endl;
cout << "Outputting final plate to file " << "\"" << oFileName << "\"" << endl << endl;
inputPlate.open(iFileName);
if (inputPlate.is_open()) {
for (int i = 0; i < SIDE_LENGTH; ++i) {
for (int j = 0; j < SIDE_LENGTH; ++j) {
inputPlate >> oldTemps[i][j];
}
}
}
else {
cout << "fail" << endl;
}
for (int k = 0; k < DESIRED_ITERATIONS; ++k) {
for (int i = 1; i < MAX_INDEX; ++i) {
for (int j = 1; j < MAX_INDEX; ++j) {
newTemps[i][j] = (oldTemps[i - NEIGHBOR_ADJUST][j] + oldTemps[i + NEIGHBOR_ADJUST][j] +
oldTemps[i][j + NEIGHBOR_ADJUST] + oldTemps[i][j - NEIGHBOR_ADJUST]) / NUM_NEIGHBORS;
}
}
for (int i = 1; i < MAX_INDEX; ++i) {
for (int j = 1; j < MAX_INDEX; ++j) {
oldTemps[i][j] = newTemps[i][j];
}
}
}
cout << "Printing input plate after " << DESIRED_ITERATIONS << " updates..." << endl;
for (int i = 0; i < SIDE_LENGTH; ++i) {
for (int j = 0; j < SIDE_LENGTH; ++j) {
cout << fixed << setprecision(HEAT_PRECISION) << setw(HEAT_WIDTH) << oldTemps[i][j];
if (j < MAX_INDEX) {
cout << ",";
}
}
cout << endl;
}
system("pause");
return 0;
}