Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

take an N x N matrix, and create a new, (N-1) x (N- 1), matrix with each element

ID: 3551758 • 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: