take an N x N matrix, and create a new, (N-1) x (N- 1), matrix with each element
ID: 3551680 • Letter: T
Question
take an N x N matrix, and create a new, (N-1) x (N- 1), matrix with each element being the sum of four nearby elements. You need to figure out a way to break the matrix up into squares and iterate through the matrix, while staying within its bounds. For example:
0 1 2
3 4 5
6 7 8
Result:
8 12
20 24
You need an iterative calculate_result() function that takes the original N x N array and fills the result array with the correct sum of the four neighboring elements, and also, you need a recursive_calculate_result() function that does the same thing as calculate_result but recursively. Requirements for your program:
o Read the N value from the user
o Initialize the N x N array
o Print the initial array and the resulting array
o All functions (including main) must not be more than 15 lines of code!!!
Explanation / Answer
DropBox link:
https://dl.dropboxusercontent.com/u/41585969/matrix.cpp (total 15 lines of code)
https://dl.dropboxusercontent.com/u/41585969/matrix2.cpp (not considering the above requirement)
Code-1:
#include <iostream>
void calculate_result(int **orig,int N,int **result){
for (int i=0; i<N-1; i++) for (int j=0; j<N-1;j++) result[i][j] = (orig[i][j] + orig[i][j+1] + orig[i+1][j] + orig[i+1][j+1]);}
void recurse_calculate_result(int **orig, int N, int **result, int i, int j){
result[i][j] = (orig[i][j] + orig[i][j+1] + orig[i+1][j] + orig[i+1][j+1]);
if(i==N-2 && j==N-2) return;
(j==N-2)?recurse_calculate_result(orig, N, result, i+1, 0):recurse_calculate_result(orig, N, result, i, j+1);}
int main(){
int N; std::cin >> N; std::cout<<"N: "<<N<<std::endl<<std::endl; int **result = new int*[N-1]; int **orig = new int*[N];
for (int i=0;i<N;i++) {orig[i] = new int[N]; if(i<N-1)result[i] = new int[N-1];}
for (int i=0;i<N;i++) {for (int j=0;j<N;j++) {orig[i][j] = i*(N)+j; std::cout<<orig[i][j]<<" ";} std::cout<<std::endl;} std::cout<<std::endl;
calculate_result(orig, N, result);
for (int i=0;i<N-1;i++) {for(int j=0;j<N-1;j++) {std::cout<<result[i][j]<<" ";} std::cout <<std::endl;} std::cout<<std::endl;
recurse_calculate_result(orig, N, result,0,0);
for (int i=0;i<N-1;i++) {for(int j=0;j<N-1;j++) {std::cout<<result[i][j]<<" ";} std::cout <<std::endl;}}
OutPut-1:
_________________________________________________________________________________________
Code-2:
#include <iostream>
using namespace std;
void calculate_result(int **orig,int N,int **result){
for (int i=0; i<N-1; i++) for (int j=0; j<N-1;j++) result[i][j] = (orig[i][j] + orig[i][j+1] + orig[i+1][j] + orig[i+1][j+1]);
}
void recurse_calculate_result(int **orig, int N, int **result, int i, int j){
result[i][j] = (orig[i][j] + orig[i][j+1] + orig[i+1][j] + orig[i+1][j+1]);
if(i==N-2 && j==N-2) return;
(j==N-2)?recurse_calculate_result(orig, N, result, i+1, 0):recurse_calculate_result(orig, N, result, i, j+1);
}
int main(){
int N;
cout << "Enter the N: " << endl;
cin >> N;
cout << endl;
int **result = new int*[N-1];
int **orig = new int*[N];
for (int i=0;i<N;i++) {
orig[i] = new int[N];
if(i<N-1) result[i] = new int[N-1];
}
// initializing the array
cout << "Original Array: " << endl;
for (int i=0;i<N;i++){
for (int j=0;j<N;j++) {
orig[i][j] = i*(N)+j;
cout << orig[i][j] << " ";
}
cout << endl;
}
cout << endl;
calculate_result(orig, N, result);
cout << "Result Array After Iterative: " << endl;
for (int i=0;i<N-1;i++){
for(int j=0;j<N-1;j++) {
cout<<result[i][j]<<" ";
}
cout <<endl;
}
cout << endl;
cout << "Result Array After Recursive: " << endl;
recurse_calculate_result(orig, N, result,0,0);
for (int i=0;i<N-1;i++) {
for(int j=0;j<N-1;j++) {
cout<<result[i][j]<<" ";
}
cout <<endl;
}
return 0;
}
Output-2:
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.