Note that there are some explanatory texts on larger screens.

plurals
  1. POHow Do I Fix This Loop? C ++
    text
    copied!<blockquote> <p><strong>Possible Duplicate:</strong><br> <a href="https://stackoverflow.com/questions/12925276/c-loop-not-looping-appropriately">C++ Loop Not Looping Appropriately</a> </p> </blockquote> <p>Warning..I am new to C++ programming...I have an array of 20 x 20 that outputs how hot a plate is. I need to reiterate through a loop until no cell in the array changes more than 0.1 degree(I refresh the values through every iteration. How would you monitor the largest change for any cell in an array in order to determine when to stop iterating? Right now I have tried, but the below doesn't output correctly. </p> <pre><code>#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;fstream&gt; #include &lt;iomanip&gt; using namespace std; const int array_size = 20; // set array size and neighbors to calculate rest of cells const int cell_neighbors = 4; void initialize(double hot_plate[][array_size]); //functions here bool writeFile(const double hot_plate[][array_size], const string file_name); double sum_cell(const double hot_plate[][array_size], const int cell_X, const int cell_Y); double value_cell(const double hot_plate[][array_size], const int cell_X, const int cell_Y); int main() { double hot_plate[array_size][array_size];//set variables initialize(hot_plate); //run function string file_name = "hot_plate.csv"; //file name for Excel //repeat until stable int repeat_until_stable = 1000; while ( repeat_until_stable &gt; 0) { for (int a = 1; a &lt; array_size - 1; a++) { for (int b = 1; b &lt; array_size - 1; b++) { { hot_plate[a][b] = sum_cell(hot_plate, b, a); } } } repeat_until_stable--; } if (writeFile(hot_plate, file_name)) //check functionality of the program { cout &lt;&lt; "Excel File created\n"; } else { cout &lt;&lt; "The Excel file did not write\n"; } system("pause"); return 0; } //function definition double sum_cell(const double hot_plate[][array_size], const int cell_X, const int cell_Y) { double cell_num = hot_plate[cell_X - 1][cell_Y]; // Top cell_num += hot_plate[cell_X][cell_Y - 1]; // Left cell_num += hot_plate[cell_X][cell_Y + 1]; // Right cell_num += hot_plate[cell_X + 1][cell_Y]; // Bottom cell_num /= cell_neighbors; // find average of the 4 values closest to cell return cell_num; } // setup the array so all values are defined void initialize(double hot_plate[][array_size]) { for (int a = 0; a &lt; array_size; a++) { for (int b = 0; b &lt; array_size; b++) { if (a == 0 || a == array_size - 1) { if (b == 0 || b == array_size - 1) { hot_plate[a][b] = 0.0; } else { hot_plate[a][b] = 100.0; } } else { hot_plate[a][b] = 0.0; } } } } double value_cell(const double hot_plate[][array_size], const int cell_X, const int cell_Y) { double cell_value = hot_plate[cell_X][cell_Y]; // cell value return cell_value; } // Write the data to the Excel CSV file bool writeFile(const double hot_plate[][array_size], const string file_name) { // open the excel file ofstream fout(file_name); if (fout.fail()) return false; for (int a = 0; a &lt; array_size; a++) { for (int b = 0; b &lt; array_size; b++) { fout &lt;&lt; hot_plate[a][b]; if ( b &lt; array_size - 1) { fout &lt;&lt; ", "; } else if (a != array_size - 1) { fout &lt;&lt; endl; } } } // close the input stream from the file. fout.close(); return true; } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload