aboutsummaryrefslogtreecommitdiffstats
path: root/ee1301/wk5/hw5_directory/strap012_HW5C.cpp
blob: 615683822142e9166f05193221ebff10efcd564f (plain) (blame)
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
/*
Date: April 4 2019
Name: Matthew Strapp
Student ID number: 5449340
Course number: EE 1301
Term: Spring 2019
Lab/assignment number: HW 5C
Short Program Description: Pixel Averaging
*/
#include <iostream>
#include <string>
#include <sstream>
using namespace std;

#define SIZE 100
int maxRow = -1, maxColumn = 0;
void getInput(int input[SIZE][SIZE]);
void makeNewArray(int oldArray[SIZE][SIZE], int newArray[SIZE][SIZE]);
void pixelAverage(int inArray[SIZE][SIZE], int outArray[SIZE][SIZE]);
void printArray(int array[SIZE][SIZE]);

int main() {
  int inputArray[SIZE][SIZE] = {0},
      outputArray[SIZE][SIZE] = {0};
  getInput(inputArray);
  makeNewArray(inputArray, outputArray);
  pixelAverage(inputArray, outputArray);
  printArray(outputArray);
}

// Function: getInput
//  ---------------------------
// Takes the stream of stdin, puts that into a stringsream and puts that stringsteam into an integer array
// input: an empty array of SIZE, as defined in line 15.
void getInput(int input[SIZE][SIZE]) {
  string test, temp1; int temp2=0;
  //I would mainly like to thank whatever user on StackOverflow solved my problem
  while (getline(cin,test,'\n')) {
    temp2 = -1;
    istringstream ss(test);
    while(getline(ss,temp1,' ')) {
      temp2++;
      input[maxRow][temp2] = stoi(temp1);
      }
      if (temp2>maxColumn) {
          maxColumn = temp2+1; //1 is added to make the math work.
      }
    maxRow++;
  }
  maxRow++;
}

// Function: makeNewArray
//  ---------------------------
// Takes the array made in getInput and puts that same array into a new array to manipulate
// oldArray: Array generated in getInput of SIZE
// newArray: Array of same dimensions and data
void makeNewArray(int oldArray[SIZE][SIZE], int newArray[SIZE][SIZE]) {
  for (int row = 0; row < SIZE-1; row++) {
    for (int column = 0; column < SIZE-1; column++) {
      newArray[row+3][column] = oldArray[row][column];
    }
  }
}

// Function: pixelAverage
//  ---------------------------
// The meat of the program, taking the surrounding values, adding them, and divides by the number of surrounding values
// inArray: Generated in getInput
// outArray: Generated in makeNewArray
void pixelAverage(int inArray[SIZE][SIZE], int outArray[SIZE][SIZE]) {
  int sum = 0, n = 0, average; //n is the number of surrounding pixels
  for (int row = -1; row < maxRow-1; row++) {
    for (int column = -1; column < maxColumn-1; column++) {
      sum=0; n=0; //Sum and n are reset every loop
      if ( !((row)<0) ) { //True when array is in lower bounds row-wise
        sum += inArray[row-1][column];
        n++;
      }
      if ( (row+1)<maxRow-1 ) { //True when array is in upper bounds row-wise
        sum += inArray[row+1][column];
        n++;
      }
      if ( !((column)<0) ) { //True when array is in lower bounds column-wise
        sum += inArray[row][column-1];
        n++;
      }
      if ( (column+1)<maxColumn-1 ) {//True when array is in upper bounds column-wise
        sum += inArray[row][column+1];
        n++;
      }
      //All of these if statements are combinations are previous statements for the diagonal aspects
      if ( !((row)<0) && !((column)<0) ) {
        sum += inArray[row-1][column-1];
        n++;
      }
      if ( !((row)<0) && ( (column+1)<maxColumn-1 ) ) {
        sum += inArray[row-1][column+1];
        n++;
      }
      if ( (row+1)<maxRow-1 && (column+1)<maxColumn-1 ) {
        sum += inArray[row+1][column+1];
        n++;
      }
      if ( (!((column)<0)  && (row+1)<maxRow-1) ) {
        sum+=inArray[row+1][column-1];
        n++;
      }
      sum+=inArray[row][column];
      n++;
      average = sum/n;
      outArray[row+1][column+1]=average;
    }
  }
}

// Function: printArray
//  ---------------------------
// Prints the new array after the pixel averaging
// array: Array generated in pixelAverage
void printArray (int array[SIZE][SIZE]) {
    for (int row = 0; row < maxRow; row++)
    {
      for (int column = 0; column < maxColumn; column++)
      {
        cout << array[row][column] << " ";
      }
      cout << endl;
    }
}